工记 WorkLog

面向班组、包工头与个体用工的记工记账应用:按天、按时、计件记工,工资自动计算,借支与结算管理,考勤日历,一键生成工资条

v0.1.0

功能特性

🗓️

三种记薪方式

点工(按天,支持半天)/ 点时(按小时)/ 计件(数量 × 单价),一个应用覆盖工地与工厂的常见算法

🧮

工资自动计算

单价自动带出工人默认日薪、时薪或计件项目默认单价,单条记录可临时覆盖;金额以整数「分」存储,避免浮点误差

日历式快速记工

移动端优先的日历记工页,30 秒完成一笔录入;支持休息标记、多天连记与「确认并再记一笔」

👷

角色与班组

老板 / 组长 / 员工三种角色:老板建班组,工人凭邀请码加入;组长可帮工人记工、记借支,员工只能给自己记工

考勤日历

月历展示每个工人的出勤状态(1 个工 / 0.5 个工 / 小时 / 件 / 休),并汇总当月工钱,出勤与工资一目了然

💵

结算与工资条

未结算汇总按工人实时列出应发、借支与净应付;支持单人结算与一键月结,结算后记录锁定且可撤销重结;工资条含明细、借支抵扣、实发与签字栏,一键导出 PNG 或复制文字

🏗️

工地 / 项目维度

可选填工地或项目,统计可按工地筛选,未结工资支持按人结算或按项目(工地)结算

📤

借支管理

记录工人的预支款项(现金 / 微信 / 支付宝),结算时自动抵扣,净应付不会算错

📈

统计与导出

月度统计每人的出勤天数、工时、计件数量、应发工资、借支与净额;也可按人员 + 时间段自定义查询,明细与汇总均可导出 CSV

🔒

数据安全与隔离

数据全部保存在本地 SQLite(WAL 模式),不上传云端;数据按用户隔离,多用户互不可见;支持 CSV / JSON 导出与数据库快照备份

🐂

飞牛一键登录

支持飞牛 fnOS NAS 账号一键登录,自动绑定或注册应用账号,手机与电脑共用同一份数据

🌗

明暗双主题

深浅色主题自适应,工地现场光线再差也能看清记工明细

技术架构

后端技术栈

  • Go - 高性能编译型语言
  • Gin - 轻量级 HTTP 框架
  • GORM - ORM 框架
  • SQLite (WAL) - 单文件数据库

前端技术栈

  • Vue 3 - 现代前端框架
  • TypeScript - 类型安全
  • Vite - 构建工具
  • Pinia - 状态管理
  • Tailwind CSS - 原子化样式

部署方式

  • 飞牛 NAS(fnOS)FPK 包(x86 / ARM)
  • Docker 多平台镜像
  • 二进制解压即用

工记基于 smallgo 应用框架实例化,模块化注册(server/worklog/),前后端产物可打包为单个可执行文件分发。

快速开始

飞牛 NAS 安装

  1. 下载对应架构的 techfunway-worklog 安装包(.fpk,支持 amd64 / arm64)
  2. 打开飞牛 NAS 桌面 → 应用中心
  3. 点击右上角 手动安装,选择下载的 .fpk 文件
  4. 在安装向导中设置应用端口(默认 8909),点击完成
  5. 安装完成后打开应用,首个注册用户自动成为管理员(老板);也可以直接使用飞牛 NAS 账号一键登录

Docker 运行

docker run -d \
  --name techfunway-worklog \
  -p 8909:8909 \
  -v worklog-data:/app/data \
  -e TZ=Asia/Shanghai \
  --restart unless-stopped \
  techfunways/worklog:latest

docker-compose.yaml

services:
  worklog:
    image: techfunways/worklog:latest
    container_name: techfunway-worklog
    restart: unless-stopped
    ports:
      - "8909:8909"
    volumes:
      - worklog-data:/app/data
    environment:
      - TZ=Asia/Shanghai

volumes:
  worklog-data:

数据库、上传文件与运行日志都存放在数据卷 worklog-data(容器内 /app/data),重建或升级容器不会丢失记工数据。

二进制直接运行

解压对应平台的发布压缩包后,按下面的命令启动:

# Linux / macOS
./worklog -data-dir ./data -port 8909

# 开发模式(构建前后端并模拟生产目录结构运行)
make dev

启动后浏览器访问 http://localhost:8909,首个注册用户自动成为管理员。记账数据存储于 data/db/worklog.db(SQLite,WAL 模式)。

💡 提示:员工角色的账号只能给自己记工,可查看自己的考勤、工资与结算单;组长可以帮本组工人记工和记借支。结算后的记录会锁定,如需修改要先撤销结算,避免工资条与账目对不上。

端口与仓库信息

默认端口 8909(HTTP,安装向导、-port 参数或 PORT 环境变量均可修改)
容器名 techfunway-worklog
数据卷 worklog-data → 容器内 /app/data(数据库、上传文件、日志)
Docker 镜像 techfunways/worklog(多平台,端口 8909)
fnOS 包名 techfunway-worklog(桌面显示名「工记」)
源码仓库 TechFunWay/worklog(Go + Gin + GORM + SQLite / Vue 3 + TypeScript)
运行数据 data/db/worklog.db(SQLite WAL),管理员可下载数据库快照备份
上游框架 smallgo,后端模块名为 smallgo/server

常见问题

如何修改端口?

飞牛 NAS 安装时可在向导中设置端口(默认 8909)。Docker 方式通过 -p 参数映射端口。二进制方式通过 -port 参数指定端口。

工资是怎么算出来的?

点工按天(支持 0.5 天)、点时按小时、计件按「数量 × 单价」计算,单价自动带出工人的默认日薪 / 时薪或计件项目的默认单价,单条记录可以覆盖。金额在服务端以整数「分」存储,前端展示时再转成元,不会出现浮点误差。

员工能帮别人记工吗?

不能。员工角色的账号只能给自己记工,可以查看自己的考勤、工资与结算单;组长可以帮本组工人记工、记借支;老板负责建班组、管理与月结。工人凭邀请码加入班组。

工资条怎么发给工人?

结算页面一键生成工资条,含记工明细、借支抵扣、实发金额与签字栏,可导出为 PNG 图片(直接微信发给工人)或复制为文字,方便工人确认留档。

数据存在哪里,会上传吗?

所有数据都保存在本地 SQLite 数据库(data/db/worklog.db),不上传云端;数据按用户隔离,多用户互不可见。备份数据目录即可,管理员也可以在应用内下载数据库快照或导出 CSV / JSON。应用内置的匿名使用统计只上报版本与部署形态等设备信息,可在系统配置中关闭。