考勤打卡系统 — 产品需求文档(PRD)
产品定位:面向中小团队(5~100人)的桌面端考勤打卡工具,基于 Tauri 构建,轻量、离线可用、数据本地化。
版本:V1.0 MVP → V1.5 增强 → V2.0 联网协作
作者:产品经理 · Yuhang Wu
日期:2026-07-02
目录
- 用户画像与场景
- 产品架构总览
- 功能模块详述
- 数据模型概览
- 版本迭代路线图
- UI/UX 设计要点
- 技术选型建议
1. 用户画像与场景
| 角色 |
核心诉求 |
使用频率 |
| 员工 |
一键打卡、查看自己出勤记录、请假/补卡申请 |
每天 2~4 次 |
| 团队组长 |
查看组员出勤、审批请假/补卡、关注异常考勤 |
每天 1~2 次 |
| HR/管理员 |
排班配置、月考勤汇总、导出报表、全局设置 |
每周 2~3 次,月末高频 |
典型场景:
- 🏢 固定办公:早 9 点到公司 → 打开 App → 点击「上班打卡」→ 晚 6 点点击「下班打卡」
- 🏠 远程办公:在家打开电脑 → 点击「远程打卡」→ 系统自动记录 IP/位置备注
- 🚗 外勤拜访:到达客户公司 → 点击「外勤打卡」→ 拍照上传 / 填写备注
- 📅 月末结算:HR 打开 App → 进入「考勤统计」→ 查看部门月度汇总 → 导出 Excel → 发给财务算工资
- 😷 早上起晚了:员工 10 点到公司 → 发现已迟到 → 在 App 内发起「补卡申请」→ 组长审批
2. 产品架构总览
┌─────────────────────────────────────────────────┐
│ 考勤打卡系统 │
├─────────────────────────────────────────────────┤
│ 前端 (React / Vue / Svelte + TailwindCSS) │
│ ├─ 首页看板 (Dashboard) │
│ ├─ 打卡页 (Punch) │
│ ├─ 考勤统计 (Statistics) │
│ ├─ 排班管理 (Schedule) │
│ ├─ 请假管理 (Leave) │
│ ├─ 审批中心 (Approval) │
│ ├─ 报表导出 (Report) │
│ └─ 系统设置 (Settings) │
├─────────────────────────────────────────────────┤
│ Tauri Bridge (IPC) │
├─────────────────────────────────────────────────┤
│ Rust 后端 │
│ ├─ 打卡业务逻辑 │
│ ├─ 考勤计算引擎 │
│ ├─ 数据持久化 (SQLite) │
│ ├─ 定时任务 (自动打卡提醒) │
│ └─ 导出引擎 (xlsx/csv) │
└─────────────────────────────────────────────────┘
设计原则:
- 离线优先 — 所有核心功能无网络时也能使用,数据存在本地 SQLite
- 隐私安全 — 数据归用户所有,不上传任何云端服务器(V1.0)
- 简单直接 — 打卡不超过 2 步操作,核心路径最短
- 渐进增强 — V1.0 单机版 → V2.0 局域网同步 → V3.0 云端协作
3. 功能模块详述
3.1 打卡模块
3.1.1 快速打卡(核心功能)
描述:应用首页最核心区域,提供一键打卡能力。
| 特性 |
说明 |
| 上班打卡 |
点击「上班打卡」按钮,记录打卡时间;按钮在打卡后变为禁用灰态并显示已打卡时间 |
| 下班打卡 |
同上,区分上班/下班两个按钮 |
| 打卡时间显示 |
实时显示当前时间(精确到秒),让用户确认打卡时刻 |
| 打卡确认动画 |
打卡成功后播放 0.5s 动画反馈(✅ + 时间戳) |
| 今日状态条 |
顶部显示"今日已打卡:上班 09:02 |
| 连续打卡天数 |
显示"已连续打卡 X 天"的激励提示 |
打卡规则(可配置):
- 上班打卡有效时间窗口:如 "06:00~12:00"
- 下班打卡有效时间窗口:如 "16:00~23:59"
- 最早/最晚打卡限制
- 重复打卡提示:"你今天已经在 09:02 打卡上班,确定重新打卡?"
3.1.2 打卡方式
| 方式 |
描述 |
优先级 |
| 手动点击打卡 |
打开应用 → 点击按钮 |
MVP |
| 快捷键打卡 |
系统全局快捷键 Ctrl+Shift+I/O 快速打卡 |
V1.0 |
| 系统托盘打卡 |
右键托盘图标 → 选择打卡类型 |
V1.0 |
| 开机自启自动提醒 |
开机后弹窗提醒打卡 |
V1.5 |
3.1.3 打卡类型
| 类型 |
图标 |
说明 |
| 🏢 正常打卡 |
办公 |
默认类型 |
| 🏠 远程打卡 |
居家 |
标记为远程办公,可选填备注 |
| 🚗 外勤打卡 |
出行 |
标记外勤,支持拍照附件(V1.5) |
| ⏰ 加班打卡 |
时钟 |
超出正常工作时间后的打卡,自动算加班 |
3.1.4 打卡记录列表
- 列表页展示历史打卡记录,按日期倒序
- 每条记录显示:日期、上班时间、下班时间、类型标签、工时
- 异常标记:红色标记迟到/早退/缺卡
- 支持按日期范围筛选
- 点击某天可查看详情
3.2 考勤统计与看板
3.2.1 个人考勤看板
┌────────────────────────────────────────┐
│ 📊 我的考勤 — 2026年7月 │
├────────────────────────────────────────┤
│ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │ 应出勤 │ │ 实际出勤│ │ 迟到 │ │ 早退 │ │
│ │ 22天 │ │ 20天 │ │ 2次 │ │ 0次 │ │
│ └──────┘ └──────┘ └──────┘ └──────┘ │
│ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │ 缺卡 │ │ 加班 │ │ 请假 │ │ 外勤 │ │
│ │ 0次 │ │ 8.5h │ │ 2天 │ │ 3次 │ │
│ └──────┘ └──────┘ └──────┘ └──────┘ │
├────────────────────────────────────────┤
│ 本月趋势图 (折线图: 每日工时走势) │
│ ▓▂▃▅▇▆▄▂▁▃▅▇█▆▄▃▂▁▂▄▆▇█▆▄▃▂ │
├────────────────────────────────────────┤
│ 日历视图 (绿色=正常, 黄=迟到, 红=缺卡) │
│ 一 二 三 四 五 六 日 │
│ 🟢 🟢 🟡 🟢 🟢 — — │
│ 🟢 🟢 🟢 🟢 🟢 — — │
│ ... │
└────────────────────────────────────────┘
3.2.2 管理端考勤总览
- 管理员/组长可查看团队所有成员的考勤汇总
- 异常考勤高亮:迟到、早退、缺卡、未打卡人员
- 支持按部门/人员筛选
- 实时统计:今日已打卡人数/总人数
3.2.3 工时计算规则
| 规则项 |
说明 |
| 标准工时 |
可配置,默认 8h/天 |
| 迟到扣减 |
迟到 N 分钟,扣减 N 分钟工时(可配置宽限时间) |
| 早退扣减 |
早退 N 分钟,扣减 N 分钟工时 |
| 加班计算 |
超出标准工时的部分自动计为加班 |
| 午休扣除 |
可配置是否自动扣除午休时间 |
3.3 排班管理
3.3.1 排班模板
| 模板 |
描述 |
| 固定班制 |
周一至周五 09:00-18:00,周末双休 |
| 大小周 |
单周 6 天、双周 5 天 |
| 弹性工作制 |
核心在岗时间(如 10:00-16:00),其余时间弹性 |
| 轮班制 |
早/中/晚三班倒,支持自定义轮换规则 |
| 自定义 |
完全自定义每天的工作时段 |
3.3.2 排班功能
- 为每位员工分配排班模板
- 支持临时调班:拖拽日历调整某天的班次
- 批量排班:为部门/团队统一设置排班
- 排班日历视图:可预览任意月份的排班情况
3.3.3 节假日管理
- 内置中国法定节假日(2026年起)
- 支持手动添加/修改节假日
- 调休日自动标注(如周六上班补五一假期)
- 节假日不计入缺勤
3.4 请假管理
3.4.1 请假类型
| 类型 |
带薪 |
说明 |
| 年假 |
✅ |
按工龄阶梯增加,可配置年假天数 |
| 事假 |
❌ |
扣薪,无额度限制 |
| 病假 |
✅/❌ |
可配置带薪天数上限 |
| 婚假 |
✅ |
默认 3 天,可配置 |
| 产假/陪产假 |
✅ |
默认 98/15 天,可配置 |
| 丧假 |
✅ |
默认 3 天,可配置 |
| 调休 |
✅ |
用加班时长兑换 |
| 其他 |
自定义 |
HR 可自定义假期类型 |
3.4.2 请假流程
发起请假 ──→ 选择请假类型 ──→ 选择日期范围 ──→ 填写原因
│
▼
提交申请 ──→ 推送审批通知 ──→ 审批人(组长/HR)
│ │
├── 通过 ──→ 回写考勤记录,标记"已请假"
│
└── 驳回 ──→ 通知申请人 + 驳回原因
3.4.3 假期余额
- 每位员工的各类假期余额管理
- 年假自动按规则发放(如入职满 1 年发放 5 天)
- 假期余额不足时提示
- 调休余额 = 已加班小时数 ÷ 8(转换为天数)
3.5 补卡与申诉
3.5.1 补卡
- 忘记打卡的次日可发起补卡申请
- 补卡次数限制(如每月最多 3 次)
- 需填写补卡原因 + 实际到岗/离岗时间
- 审批通过后修正考勤记录
3.5.2 考勤异常申诉
- 迟到/早退/缺卡 → 员工可在异常发生后发起申诉
- 申诉类型:
- "系统/设备故障导致无法打卡"
- "临时外出公干"
- "身体不适延迟但未请病假"
- "其他原因(需详细说明)"
- 管理员审核后修正考勤状态
3.6 报表导出
3.6.1 支持的报表类型
| 报表 |
内容 |
格式 |
| 月度考勤汇总表 |
每人:应出勤、实际出勤、迟到、早退、缺卡、请假、加班 |
Excel |
| 日打卡明细表 |
每人每天:上班时间、下班时间、工时、异常标记 |
Excel/CSV |
| 请假统计表 |
每人:各类假期已用/剩余 |
Excel |
| 加班统计表 |
每人:加班日期、时长、原因 |
Excel |
| 月度工资考勤底表 |
汇总所有与薪资相关考勤数据 |
Excel |
3.6.2 导出功能
- 选择日期范围(月/自定义)
- 选择人员范围(个人/部门/全员)
- 选择导出字段
- 预览后导出
- 导出历史记录
3.7 系统设置
3.7.1 考勤规则配置
| 配置项 |
默认值 |
说明 |
| 上班时间 |
09:00 |
— |
| 下班时间 |
18:00 |
— |
| 迟到宽限 |
5 分钟 |
9:05 之前不算迟到 |
| 早退宽限 |
5 分钟 |
17:55 之后不算早退 |
| 午休时间 |
12:00-13:00 |
自动扣除 |
| 半天请假判定 |
4 小时 |
当天工时 < 4h 算半天缺勤 |
| 加班起算 |
超出标准工时 30 分钟 |
避免误计加班 |
| 每月补卡上限 |
3 次 |
— |
| 工作日设置 |
周一至周五 |
— |
3.7.2 通用设置
- 公司名称/Logo 设置
- 数据存储路径
- 数据备份与恢复
- 手动备份(导出 .db 文件)
- 自动备份(每周/每月定时备份)
- 从备份恢复
- 主题切换(亮色/暗色)
- 语言(中文/英文)
- 开机自启动
- 最小化到系统托盘
- 打卡提醒时间(如 08:55 弹窗提醒)
3.7.3 用户与权限
| 角色 |
权限范围 |
| 超级管理员 |
所有权限:系统配置、用户管理、全部数据查看 |
| HR |
排班配置、请假审批、报表导出、查看全员考勤 |
| 组长 |
查看组员考勤、审批组员请假/补卡、组员异常提醒 |
| 员工 |
个人打卡、个人考勤查看、请假/补卡申请、个人设置 |
4. 数据模型概览
核心实体关系
User (用户)
├─ 1:N → PunchRecord (打卡记录)
├─ 1:N → LeaveRequest (请假申请)
├─ 1:N → PatchRequest (补卡申请)
├─ 1:N → Appeal (考勤申诉)
├─ 1:1 → UserSchedule (用户排班)
└─ 1:1 → LeaveBalance (假期余额)
Schedule (排班模板)
└─ 1:N → UserSchedule (用户排班)
Holiday (节假日)
└─ 全局
SystemConfig (系统配置)
└─ 单例
核心表结构(伪代码)
-- 用户表
User {
id, name, department, role, email, phone,
hire_date, created_at, updated_at
}
-- 打卡记录表
PunchRecord {
id, user_id, date, punch_in_time, punch_out_time,
punch_in_type, punch_out_type, -- normal/remote/field/overtime
work_hours, status, -- normal/late/early/missing/leave
remark, created_at
}
-- 排班模板表
ScheduleTemplate {
id, name, type, -- fixed/flexible/shift/custom
work_days, -- JSON: [1,2,3,4,5] 表示周一到周五
start_time, end_time,
core_start, core_end, -- 弹性工作制核心时段
is_active
}
-- 用户排班表
UserSchedule {
id, user_id, template_id,
effective_from, effective_to, -- 排班有效期
overrides -- JSON: 特殊日期调整
}
-- 请假申请表
LeaveRequest {
id, user_id, leave_type, -- annual/sick/personal/marriage/...
start_date, end_date, duration_days,
reason, status, -- pending/approved/rejected
approver_id, approved_at, remark
}
-- 假期余额表
LeaveBalance {
id, user_id, leave_type, total_days, used_days, remaining_days, year
}
-- 节假日表
Holiday {
id, name, date, is_workday, -- true=调休上班日
description
}
-- 补卡申请表
PatchRequest {
id, user_id, target_date,
actual_in_time, actual_out_time,
reason, status, approver_id, created_at
}
-- 考勤申诉表
Appeal {
id, user_id, punch_record_id,
appeal_type, reason, evidence, -- evidence: 附件路径
status, handler_id, handled_at, result_remark
}
5. 版本迭代路线图
V1.0 — MVP 最小可用版本(单人单机)
目标:一个人能用,覆盖最基本的打卡+查看+导出。
| 功能 |
说明 |
| ✅ 上班/下班打卡 |
手动点击打卡,区分上下班 |
| ✅ 打卡历史列表 |
按日期查看自己的打卡记录 |
| ✅ 个人月考勤统计 |
出勤天数、迟到、早退、缺卡计数 |
| ✅ 固定排班规则 |
硬编码:周一至周五 9:00-18:00 |
| ✅ 基本设置 |
公司名、上班时间、下班时间 |
| ✅ SQLite 本地存储 |
所有数据存在本地 |
| ✅ 系统托盘 |
最小化到托盘 + 右键菜单打卡 |
| ✅ 暗色/亮色主题 |
基础主题切换 |
| ✅ 月度 Excel 导出 |
导出个人月度考勤汇总 |
V1.5 — 功能增强(单机多用户)
目标:支持多个用户在同一个应用内管理,模拟真实团队场景。
| 功能 |
说明 |
| ✅ 多用户管理 |
添加/编辑/删除用户,角色区分 |
| ✅ 排班模板 |
固定/弹性/大小周 至少 3 种模板 |
| ✅ 请假申请与审批 |
完整流程:申请→审批→回写考勤 |
| ✅ 补卡申请与审批 |
— |
| ✅ 假期余额管理 |
— |
| ✅ 节假日管理 |
内置中国法定节假日 |
| ✅ 管理端考勤总览 |
团队考勤看板 |
| ✅ 考勤异常申诉 |
— |
| ✅ 数据备份恢复 |
手动备份 + 自动备份 |
| ✅ 多格式导出 |
Excel 多报表类型 |
| ✅ 打卡提醒 |
定时弹窗提醒 |
V2.0 — 联网协作
目标:局域网/服务器部署后端,多设备协同。
| 功能 |
说明 |
| ✅ C/S 架构 |
Tauri 客户端 + Rust 后端服务(Axum/Actix) |
| ✅ 用户登录系统 |
JWT 认证 |
| ✅ 数据实时同步 |
WebSocket 推送打卡状态 |
| ✅ 审批通知 |
实时推送审批提醒 |
| ✅ 多设备登录 |
同一账号可在多设备打卡 |
| ✅ 管理后台 Web 端 |
独立 Web 管理后台 |
V3.0 — 企业级增强(远期规划)
- 对接企业微信/钉钉/飞书
- 人脸/指纹打卡(调用系统生物识别)
- GPS 围栏打卡(外勤地理校验)
- 考勤数据大屏
- 薪资计算联动
6. UI/UX 设计要点
6.1 信息架构
侧边栏导航
├── 🏠 首页看板 ← 默认页,今日状态 + 快速打卡
├── 📋 打卡记录 ← 历史打卡列表
├── 📊 考勤统计 ← 个人/团队统计
├── 📅 排班管理 ← 排班模板 + 人员排班(管理员)
├── 🏖️ 请假管理 ← 请假申请 + 我的假期
├── ✍️ 审批中心 ← 待审批列表(管理员/组长)
└── ⚙️ 设置 ← 系统配置
6.2 关键交互规范
- 打卡按钮:大尺寸、醒目颜色(上班绿色/下班橙色)、点击即完成
- 状态反馈:打卡成功 → 动画 + 振动(可选)+ 声音(可选)
- 异常提示:迟到/缺卡 → 红色标记 + 悬浮提示原因
- 表格交互:考勤记录支持排序/筛选/列显隐
- 日历组件:考勤日历支持月份切换、点击日期查看详情
- 响应式:窗口最小尺寸 900×600,适配不同分辨率
6.3 视觉风格
- 现代简洁风格,专业但不冰冷
- 主色调:蓝色系(#2563EB 为主色),传达专业可信赖感
- 功能色:绿色=正常打卡,橙色=迟到,红色=缺卡/异常
- 圆角卡片布局,适度的阴影层次
7. 技术选型建议
| 层 |
技术 |
理由 |
| 桌面框架 |
Tauri 2.x |
轻量(相比 Electron)、Rust 后端、Web 前端 |
| 前端框架 |
React + TypeScript |
生态丰富、适合中大型应用 |
| UI 组件库 |
Ant Design / shadcn/ui |
前者功能全、后者定制性好 |
| CSS |
TailwindCSS |
快速开发、与 shadcn/ui 配合良好 |
| 状态管理 |
Zustand / Jotai |
轻量,适合 Tauri 单窗口场景 |
| 图表 |
Recharts / ECharts |
考勤趋势图、统计饼图 |
| 数据库 |
SQLite (via rusqlite) |
轻量、无需安装、Tauri 原生支持 |
| 导出 |
rust_xlsxwriter |
Rust 原生 Excel 写入 |
| 后端 (V2.0+) |
Axum + SQLx |
Rust 异步 HTTP 框架 + 类型安全 SQL |
| 打包 |
Tauri Bundle (msi/dmg/deb) |
跨平台分发 |
附录:MVP 第一周开发计划(参考)
| 天 |
任务 |
| Day 1 |
初始化 Tauri + React 项目,配置 SQLite,实现用户表 CRUD |
| Day 2 |
打卡核心功能:上下班按钮 + 时间记录 + 今日状态 |
| Day 3 |
打卡记录列表页 + 基本筛选 |
| Day 4 |
考勤统计页:统计卡片 + 日历视图 |
| Day 5 |
系统设置页 + Excel 导出 |
| Day 6 |
系统托盘 + 快捷键打卡 + 打包测试 |
| Day 7 |
Bug 修复 + UI 打磨 + 文档 |
小结:这个考勤打卡系统作为 Rust + Tauri 的练手项目非常合适——它功能层次分明、数据模型清晰、从简单到复杂可逐步迭代,能覆盖 Tauri 开发的核心知识点:Rust 后端逻辑、SQLite 操作、IPC 通信、系统托盘、文件导出、前端组件化等。从 MVP 开始,跑通最小闭环,再逐步叠加功能,学习的正反馈会很足。