- 员工花名册管理(加密存储、导入导出) - 薪酬管理(发薪批次、薪酬模版、加班费计算、工资条) - 社保公积金(多城市配置、版本管理、基数调整) - 解聘管理(6步流程、证据链、工作交接) - AI 助手(合同审查、风险预测、RAG 知识库) - Dashboard 仪表盘 - 设置与通知
9.0 KiB
劳动用工合规 SaaS — 功能层面优化清单
文档编号: 20260723-优化-3.md 日期: 2026-07-23 来源: 对 Money.tsx、Termination.tsx、SocialInsurance.tsx、Roster.tsx 四个核心业务页面深入研究后得出
一、高优先级(核心业务缺陷)
1. Money — 发薪批次创建后无法重命名
现状: 批次列表只显示自动生成的名称(如"2026-01 第1批 发薪"),创建后名称固定不可修改。当企业有多个批次(按部门/按职级分批发薪)时,列表难以区分。
建议:
- 后端:PUT
/payroll2/batches/:id支持更新name字段 - 前端:在
BatchDetail右上角增加「重命名」按钮,弹出编辑框修改批次名称
涉及文件: backend/src/routes/payroll2.routes.ts、frontend/src/pages/Money.tsx
2. Termination — 费用计算与表单完全割裂
现状: costResult 是纯前端 useMemo 计算,但编辑表单字段(解聘日期、解聘原因)时不会实时触发重算。用户必须切到 Step 4 才能看到费用变化,导致操作反馈链路过长。
建议:
- 将
costResult的依赖项(terminationDate、socialAvgWage、reason)用useEffect驱动,每次表单变更实时展示费用预览 - 在 Step 1(选择员工)和 Step 2(解聘方式)之间增加一个「实时费用预览区」,显示经济补偿金、赔偿金、代通知金的大致金额,降低误操作风险
涉及文件: frontend/src/pages/Termination.tsx
3. Termination — 模拟计算结果被静默覆盖
现状: handleSimulate 只将数据存入本地 state savedItems,costResult 依赖的是表单实时值。当用户修改参数后,之前的模拟结果会被静默覆盖,无法对比不同参数下的补偿金额。
建议:
savedItems每条记录增加version字段和isSimulated: boolean标记- 每次模拟生成新版本而非覆盖,用户可在右侧列表查看多个版本的对比
- 模拟结果与实际保存结果分开展示,避免混淆
涉及文件: frontend/src/pages/Termination.tsx
4. Roster — 批量续签无合规预检
现状: 批量续签直接提交 contractIds,无任何预览或合规检查。用户可能对已连续签订两次固定期限合同的员工续签固定期(法律上应签无固定期限)。
建议:
- 选择员工后,先调用后端接口
GET /employees/contracts/preview-renew返回每个员工的合规提示 - 展示预览列表:每个员工一行,显示「可续签固定期」或「应签无固定期限(已连续签订X次)」等提示
- 用户确认后再提交,避免法律风险
涉及文件: frontend/src/pages/Roster.tsx、backend/src/routes/employee.routes.ts
5. SocialInsurance — 社保基数调整只能一次性操作
现状: adjustmentDone 标志为 true 后无法再次调整基数。但实践中基数可能需要多次修正(员工投诉、基数算错、重新申报)。
建议:
- 增加「重置调整」接口
POST /social/config/:id/reset-adjustment,允许管理员撤销本次调整重新来过 - 或改为记录每次调整的版本历史,支持查看历史调整记录
涉及文件: backend/src/routes/social.routes.ts、frontend/src/pages/SocialInsurance.tsx
二、中优先级(高频操作体验)
6. Roster — 员工搜索无分页、无法多选过滤
现状: 花名册仅支持姓名/部门 substring 搜索,无分页和高级过滤。添加人员到批次时取 pageSize: 100,超过 100 人就覆盖不全。
建议:
- 花名册搜索增加状态过滤(在职/预入职/离职)、合同状态过滤(正常/即将到期/已过期/未签合同)、合同到期时间范围过滤
- 添加人员到批次改为服务端搜索,支持分页 + 关键词搜索 + 多选,超 100 人场景也能覆盖
涉及文件: frontend/src/pages/Roster.tsx、backend/src/routes/roster.routes.ts、backend/src/routes/payroll2.routes.ts
7. Money — 批次列表无月份范围筛选
现状: 只有单月筛选,企业要查看历史所有批次只能逐月切换,且无状态(草稿/归档)过滤。
建议:
- 批次列表增加月份范围选择器(开始月份 ~ 结束月份)
- 增加状态过滤(全部/草稿/已归档)
- 增加批次类型过滤(全部/常规发薪/离职结算/年终奖/补偿金)
涉及文件: frontend/src/pages/Money.tsx、backend/src/routes/payroll2.routes.ts
8. Termination — 无批量解聘能力
现状: 只能逐个处理。当企业裁员时(如一次性解除 20 人),需重复操作 20 次,体验极差。
建议:
- 在「解聘补偿」页面增加「批量解聘」入口
- 选择员工后批量填写共性参数(解聘日期、解聘原因、社保截止月份),差异项(补偿金金额)可逐个补充或批量默认
- 批量提交后统一生成解聘记录和调薪批次
涉及文件: frontend/src/pages/Termination.tsx、backend/src/services/termination.service.ts
9. Roster — 合同到期预警机制缺失
现状: 花名册表头显示合同状态标签(expiring、expired),但系统无主动预警。用户需主动逐个查看。
建议:
- Dashboard 增加合同到期预警卡片,显示 30 天内到期、60 天内到期、90 天内到期的员工数量
- 点击卡片跳转花名册,预设筛选条件为「合同到期时间 ≤ N 天」
- Roster 列表页增加「合同到期时间」列,支持按到期时间排序
涉及文件: frontend/src/pages/Dashboard.tsx、frontend/src/pages/Roster.tsx、backend/src/routes/roster.routes.ts
10. Money — 无工资条税率试算预览
现状: PayslipManager 只能从批次汇总生成工资条,无法单独查看某员工的个税明细和实发金额分解。
建议:
- 在批次详情页或员工 profile 的 payslip tab 中,增加「税率试算」功能
- 展示个税计算过程:应发金额 → 社保公积金扣除 → 个税起征点扣除 → 应纳税所得额 → 税率/速算扣除数 → 个税 → 实发金额
- 支持单员工试算,不依赖批次
涉及文件: frontend/src/pages/Money.tsx、frontend/src/pages/Roster.tsx、backend/src/services/payroll.service.ts
三、低优先级(功能补全)
11. SocialInsurance — 仅支持北京配置,无多城市扩展
现状: newVersion 硬编码北京配置,版本历史中城市字段存在但无人使用。
建议:
- 后续扩展多城市时,社保配置表增加
cityCode字段 - 版本历史按城市分组展示
- 城市列表可配置(新增城市配置时自动出现在下拉)
涉及文件: backend/prisma/schema.prisma、frontend/src/pages/SocialInsurance.tsx
12. Termination — 离职与解聘入口分离不清晰
现状: ResignModal(员工主动离职)和解聘向导(公司主导)是两套流程,但在同一个「解聘补偿」模块中容易让用户困惑。
建议:
- 在 Step 1 员工选择后,优先展示「员工主动离职」vs「公司解聘」两个入口
- 选择「主动离职」则弹出简化版离职表单(仅需离职日期和原因)
- 选择「公司解聘」则进入完整解聘向导
涉及文件: frontend/src/pages/Termination.tsx、frontend/src/pages/Roster.tsx
13. Roster — 员工附件上传无预览
现状: 合同扫描件以 DataURL 形式存储,无文件大小校验,无 PDF/Word 在线预览。
建议:
- 附件上传增加文件类型限制(仅 PDF/图片)和大小限制(最大 10MB)
- 员工 profile 附件 tab 增加文件预览功能(图片直接显示,PDF 用 iframe 或第三方预览组件)
- 上传前显示文件大小提示
涉及文件: frontend/src/pages/Roster.tsx
14. Money — 加班费 CSV 导入无批量编辑
现状: CSV 导入后只能整体确认,无法逐条修改导入数据中的工时数值。
建议:
- 导入预览阶段支持逐行编辑工时数据(工作日/休息日/节假日小时数)
- 增加「校验」按钮,对齐员工姓名未匹配的记录高亮提示
- 支持从预览中删除不需要的记录
涉及文件: frontend/src/pages/Money.tsx(OvertimeCalculator 组件)
四、优先级总览
| 优先级 | 编号 | 功能 | 工作量 |
|---|---|---|---|
| P0 | 1 | 发薪批次重命名 | 小 |
| P0 | 2 | 费用计算实时预览 | 中 |
| P0 | 4 | 批量续签合规预检 | 中 |
| P0 | 5 | 社保基数调整可重复操作 | 小 |
| P1 | 3 | 模拟计算版本管理 | 小 |
| P1 | 6 | 员工搜索分页+多选过滤 | 中 |
| P1 | 7 | 批次列表范围筛选 | 小 |
| P1 | 8 | 批量解聘 | 大 |
| P1 | 9 | 合同到期预警 | 中 |
| P1 | 10 | 工资条税率试算 | 中 |
| P2 | 12 | 离职/解聘入口分离 | 小 |
| P2 | 13 | 附件上传预览 | 中 |
| P2 | 14 | 加班费导入批量编辑 | 中 |
| P3 | 11 | 多城市社保配置 | 大 |