learning-rust/练手项目/考勤打卡系统-产品需求文档.md

20 KiB
Raw Permalink Blame History

考勤打卡系统 — 产品需求文档PRD

产品定位面向中小团队5100人的桌面端考勤打卡工具基于 Tauri 构建,轻量、离线可用、数据本地化。 版本V1.0 MVP → V1.5 增强 → V2.0 联网协作 作者:产品经理 · Yuhang Wu 日期2026-07-02


目录

  1. 用户画像与场景
  2. 产品架构总览
  3. 功能模块详述
  4. 数据模型概览
  5. 版本迭代路线图
  6. UI/UX 设计要点
  7. 技术选型建议

1. 用户画像与场景

角色 核心诉求 使用频率
员工 一键打卡、查看自己出勤记录、请假/补卡申请 每天 24 次
团队组长 查看组员出勤、审批请假/补卡、关注异常考勤 每天 12 次
HR/管理员 排班配置、月考勤汇总、导出报表、全局设置 每周 23 次,月末高频

典型场景

  • 🏢 固定办公:早 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)                           │
└─────────────────────────────────────────────────┘

设计原则

  1. 离线优先 — 所有核心功能无网络时也能使用,数据存在本地 SQLite
  2. 隐私安全 — 数据归用户所有不上传任何云端服务器V1.0
  3. 简单直接 — 打卡不超过 2 步操作,核心路径最短
  4. 渐进增强 — V1.0 单机版 → V2.0 局域网同步 → V3.0 云端协作

3. 功能模块详述

3.1 打卡模块

3.1.1 快速打卡(核心功能)

描述:应用首页最核心区域,提供一键打卡能力。

特性 说明
上班打卡 点击「上班打卡」按钮,记录打卡时间;按钮在打卡后变为禁用灰态并显示已打卡时间
下班打卡 同上,区分上班/下班两个按钮
打卡时间显示 实时显示当前时间(精确到秒),让用户确认打卡时刻
打卡确认动画 打卡成功后播放 0.5s 动画反馈( + 时间戳)
今日状态条 顶部显示"今日已打卡:上班 09:02
连续打卡天数 显示"已连续打卡 X 天"的激励提示

打卡规则(可配置):

  • 上班打卡有效时间窗口:如 "06:0012:00"
  • 下班打卡有效时间窗口:如 "16:0023: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 开始,跑通最小闭环,再逐步叠加功能,学习的正反馈会很足。