1. 系统架构设计思路
这个考勤薪酬绩效管理系统采用前后端分离架构,前端使用Vue 3+TypeScript技术栈,后端采用Python FastAPI框架。系统设计时重点考虑了企业实际业务场景中的四个核心角色需求,通过模块化设计实现功能解耦。
1.1 技术选型考量
选择Vue 3作为前端框架主要基于其组合式API带来的更好代码组织能力,特别是对于复杂业务逻辑的考勤计算模块。Element Plus组件库提供了丰富的企业级UI组件,可以快速构建管理后台界面。Pinia状态管理方案相比Vuex更适合中型应用,其模块化设计正好对应我们系统的角色权限体系。
后端选择FastAPI而非Django/Rails这类全栈框架,是因为:
- 考勤系统需要处理大量实时请求,FastAPI的异步特性更优
- 薪酬计算涉及复杂业务逻辑,需要更灵活的架构
- 与现有企业微信/钉钉系统的API对接更方便
数据库选用MySQL 8.0,主要利用其:
- 窗口函数便于生成各类排名报表
- JSON字段支持存储动态考勤规则
- 事务特性确保薪酬数据的强一致性
1.2 核心模块划分
系统主要分为四大模块:
- 身份认证模块:采用JWT+RBAC模型,支持多终端登录
- 考勤管理模块:处理打卡记录、异常考勤、请假审批等
- 薪酬计算模块:基于考勤数据和绩效结果的自动化计算
- 绩效评估模块:支持KPI考核和360度评估流程
各模块通过事件总线解耦,例如考勤异常触发通知事件,绩效提交触发薪酬重算事件等。这种设计使得后期新增考勤方式(如人脸识别)或薪酬规则调整时,只需修改对应模块即可。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据库设计关键点
2.1 核心表结构设计
**员工表(employees)**设计要点:
sql复制CREATE TABLE employees (
id BIGINT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
department_id INT NOT NULL,
position_id INT NOT NULL,
base_salary DECIMAL(10,2) NOT NULL,
hire_date DATE NOT NULL,
leave_date DATE NULL,
status TINYINT NOT NULL COMMENT '0-在职 1-离职',
face_data TEXT COMMENT '人脸特征数据',
CONSTRAINT fk_dept FOREIGN KEY (department_id) REFERENCES departments(id),
CONSTRAINT fk_position FOREIGN KEY (position_id) REFERENCES positions(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
**考勤记录表(attendance_records)**的特殊处理:
- 使用复合索引(employee_id, record_date)加速查询
- 地理坐标使用MySQL的POINT类型存储
- 添加check_in_type字段区分正常打卡/补卡/人工录入
sql复制CREATE TABLE attendance_records (
id BIGINT PRIMARY KEY,
employee_id BIGINT NOT NULL,
record_date DATE NOT NULL,
check_in_time DATETIME NULL,
check_out_time DATETIME NULL,
location POINT SRID 4326,
check_in_type TINYINT NOT NULL COMMENT '0-正常 1-补卡 2-人工',
status TINYINT NOT NULL COMMENT '0-正常 1-迟到 2-早退 3-缺勤',
SPATIAL INDEX(location),
UNIQUE KEY uk_emp_date (employee_id, record_date),
CONSTRAINT fk_employee FOREIGN KEY (employee_id) REFERENCES employees(id)
) E
