0df8aa77d9
- 员工花名册管理(加密存储、导入导出) - 薪酬管理(发薪批次、薪酬模版、加班费计算、工资条) - 社保公积金(多城市配置、版本管理、基数调整) - 解聘管理(6步流程、证据链、工作交接) - AI 助手(合同审查、风险预测、RAG 知识库) - Dashboard 仪表盘 - 设置与通知
219 lines
9.7 KiB
Markdown
219 lines
9.7 KiB
Markdown
# 劳动用工合规 SaaS — 功能层面优化清单(续二)
|
||
|
||
> **文档编号**: 20260723-优化-5.md
|
||
> **日期**: 2026-07-23
|
||
> **来源**: 对 Settings.tsx、export.routes.ts、import.routes.ts 及相关 Portal 页面深入研究后得出
|
||
|
||
---
|
||
|
||
## 一、高优先级(核心业务缺陷)
|
||
|
||
### 1. Settings — 企业信息表单无初始化数据回填
|
||
|
||
**现状**: `OrgSettings` 组件的 `form` state 用 `useState` 初始化,但初始化值依赖 `orgData?.data?.name`,而 `useState` 的初始值只在组件首次挂载时读取一次。当 `orgData` 异步加载完成后,state 不会自动更新,导致表单始终为空。
|
||
|
||
**建议**:
|
||
- 使用 `useEffect` 监听 `orgData` 变化,异步回填表单数据
|
||
- 或将 `form` 改为受控组件:`value={orgData?.data?.name || ''}`
|
||
|
||
**涉及文件**: `frontend/src/pages/Settings.tsx`
|
||
|
||
---
|
||
|
||
### 2. Settings — 用户管理无编辑和禁用能力
|
||
|
||
**现状**: `UserSettings` 只展示用户列表和添加用户功能,没有编辑已有用户、禁用用户、修改角色的能力。当员工离职时,管理员无法停用其账号,存在安全风险。
|
||
|
||
**建议**:
|
||
- 用户列表增加「编辑」「禁用」操作按钮
|
||
- 编辑 Modal 支持修改用户姓名、手机号、角色
|
||
- 禁用后用户无法登录,但保留历史操作记录
|
||
- 增加「最近登录」列,显示用户活跃状态
|
||
|
||
**涉及文件**: `frontend/src/pages/Settings.tsx`、`backend/src/routes/settings.routes.ts`
|
||
|
||
---
|
||
|
||
### 3. Import — 导入预览缺失,无法逐条确认
|
||
|
||
**现状**: Excel 导入直接上传后端解析,用户无法在提交前预览数据。错误只能在导入完成后看到,且只能看到前 10 条。用户可能上传了错误的 Excel 模板,导致大量数据导入失败后才知晓。
|
||
|
||
**建议**:
|
||
- 改为两阶段导入:上传文件 → 后端解析但不写入 → 前端展示预览列表 → 用户确认后才写入
|
||
- 预览阶段支持逐行修改(如修正姓名、部门、工资等)
|
||
- 增加「模板校验」接口,上传前先检查 Sheet 结构是否符合预期,不符合给出明确提示
|
||
- 预览界面区分「正常数据」「警告数据」「错误数据」,用户可选择只导入正常数据
|
||
|
||
**涉及文件**: `frontend/src/pages/Settings.tsx`、`backend/src/routes/import.routes.ts`
|
||
|
||
---
|
||
|
||
### 4. Export — 导出格式单一,无选择性导出
|
||
|
||
**现状**: `export/all` 导出全部数据的 JSON 文件,既没有 Excel 格式选择,也没有按模块选择性导出(只导出员工、只导出社保等)。对于企业财务或法务,只需要部分数据时,导出一个大 JSON 不够实用。
|
||
|
||
**建议**:
|
||
- 增加导出格式选择(JSON / Excel)
|
||
- 增加按模块选择性导出(员工信息、合同信息、薪税记录、社保记录、离职记录)
|
||
- Excel 格式应包含表头和格式化,便于直接查看
|
||
- 增加导出时间范围过滤(本月/本季度/本年/自定义)
|
||
|
||
**涉及文件**: `frontend/src/pages/Settings.tsx`、`backend/src/routes/export.routes.ts`
|
||
|
||
---
|
||
|
||
## 二、中优先级(高频操作体验)
|
||
|
||
### 5. Import — 身份证号哈希校验缺失
|
||
|
||
**现状**: `import.routes.ts` 中多处使用 `sha256(idCard)` 匹配员工,但身份证号可能存在格式错误(如 15 位、假号、校验位错误)。脏数据进入数据库后无法关联,且没有前置校验。
|
||
|
||
**建议**:
|
||
- 增加身份证号格式校验函数(18 位正则 + 校验位算法)
|
||
- 校验不通过的行在预览阶段标红并给出提示,不写入数据库
|
||
- 15 位身份证号自动升级为 18 位(基于出生日期补全)
|
||
- 导入完成后给出数据质量报告(格式错误数、重名数等)
|
||
|
||
**涉及文件**: `backend/src/routes/import.routes.ts`
|
||
|
||
---
|
||
|
||
### 6. Settings — 通知设置无测试功能
|
||
|
||
**现状**: 用户配置了企业微信 Webhook 或邮件通知后,没有「发送测试消息」按钮验证配置是否正确。通知发不出去时用户无法定位问题。
|
||
|
||
**建议**:
|
||
- Webhook 配置行增加「测试」按钮,点击后发送测试消息到配置的地址
|
||
- 测试结果(成功/失败/错误信息)实时显示在界面上
|
||
- 邮件通知增加同样的测试功能
|
||
- 配置页面增加连接状态指示器(已连接/未配置/配置错误)
|
||
|
||
**涉及文件**: `frontend/src/pages/Settings.tsx`、`backend/src/routes/notification.routes.ts`
|
||
|
||
---
|
||
|
||
### 7. Import — 月度导入覆盖逻辑不清晰
|
||
|
||
**现状**: 月度导入中「考勤记录」用 `upsert` 覆盖同日记录,「加班记录」用 `increment` 累加。这些行为没有在界面上说明,用户可能误以为所有数据都是覆盖,导致数据异常。
|
||
|
||
**建议**:
|
||
- 导入界面的 Sheet 说明中明确标注每种记录的处理策略(覆盖 / 累加 / 跳过)
|
||
- 月度导入前增加「本次导入模式」选择:覆盖 / 累加 / 仅新增
|
||
- 导入完成后显示各类型记录的处理方式摘要
|
||
|
||
**涉及文件**: `frontend/src/pages/Settings.tsx`、`backend/src/routes/import.routes.ts`
|
||
|
||
---
|
||
|
||
### 8. Settings — 套餐升级无实际功能
|
||
|
||
**现状**: `PlanSettings` 展示三个套餐,但「升级」按钮只有 UI 没有实际逻辑。免费版和专业版的功能差异(如 AI 问答次数限制、合同审查)也未在系统中实际执行。
|
||
|
||
**建议**:
|
||
- 实现套餐切换逻辑(可对接 Stripe/微信支付等)
|
||
- 在系统各模块中实际执行用量限制(如 AI 问答次数扣减)
|
||
- 免费版用户在试用受限功能时提示升级
|
||
- 增加用量统计面板,显示本月已用 AI 次数 / 已用存储空间等
|
||
|
||
**涉及文件**: `frontend/src/pages/Settings.tsx`、`backend/src/routes/settings.routes.ts`、`backend/src/middleware/rateLimit.ts`
|
||
|
||
---
|
||
|
||
### 9. Import — 错误日志无导出
|
||
|
||
**现状**: 导入完成后如果有很多错误,只能看到前 10 条提示。用户需要截取或手动记录错误信息来修正 Excel 后重新导入。
|
||
|
||
**建议**:
|
||
- 导入完成后增加「导出错误日志」按钮,生成 CSV/Excel 文件,列出所有错误行及原因
|
||
- 错误日志包含:行号、员工姓名/身份证、错误类型、具体原因
|
||
- 错误日志文件名包含导入时间戳,便于管理
|
||
|
||
**涉及文件**: `frontend/src/pages/Settings.tsx`、`backend/src/routes/import.routes.ts`
|
||
|
||
---
|
||
|
||
## 三、低优先级(功能补全)
|
||
|
||
### 10. Settings — 数据导出缺少敏感字段脱敏
|
||
|
||
**现状**: `export.routes.ts` 对工资和身份证号做了解密导出,但没有脱敏处理。导出的 JSON 包含完整的身份证号、银行账号、工资数据,存在数据泄露风险。
|
||
|
||
**建议**:
|
||
- 增加「脱敏导出」模式:身份证号显示前 3 后 4 位(如 `110***********1234`),银行账号显示后 4 位
|
||
- 敏感字段脱敏后用 `(hidden)` 占位,便于识别
|
||
- 仅管理员可导出完整数据,普通 HR 角色只能导出脱敏版本
|
||
- 导出日志记录每次导出的操作人、时间、范围
|
||
|
||
**涉及文件**: `backend/src/routes/export.routes.ts`
|
||
|
||
---
|
||
|
||
### 11. Import — 加班类型字段未使用
|
||
|
||
**现状**: Excel 模板中加班类型是文本字段("工作日加班/休息日加班/法定节假日加班"),但解析时用 `includes()` 字符串匹配判断类型,这种方式无法准确区分多类型混合的加班记录。
|
||
|
||
**建议**:
|
||
- 改为三列独立填写:工作日加班时长、休息日加班时长、法定节假日加班时长
|
||
- 每列只填数值,减少歧义
|
||
- 或在解析时按分隔符拆分为数组,逐个判断类型
|
||
|
||
**涉及文件**: `backend/src/routes/import.routes.ts`
|
||
|
||
---
|
||
|
||
### 12. Settings — 通知设置 useMemo 错误使用
|
||
|
||
**现状**: `NotificationSettings` 中 `useMemo` 用于副作用(设置 form state),这违反了 React Hooks 的规则。`useMemo` 不应该在副作用中调用,应该用 `useEffect` 替代。
|
||
|
||
**建议**:
|
||
- 将 `useMemo` 替换为 `useEffect`,正确处理数据加载后的表单回填
|
||
|
||
**涉及文件**: `frontend/src/pages/Settings.tsx`
|
||
|
||
---
|
||
|
||
### 13. Import — 社保/公积金增减员未校验基数范围
|
||
|
||
**现状**: 社保和公积金变动导入时,只记录用户填写的基数,没有校验基数是否在政策允许的上下限范围内(北京 2024 年社保基数下限 6326、上限 33891)。
|
||
|
||
**建议**:
|
||
- 增加基数上下限校验逻辑(可配置城市参数)
|
||
- 超出范围的记录在预览阶段标红提示
|
||
- 提供默认值建议(低于下限用下限,高于上限用上限)
|
||
|
||
**涉及文件**: `backend/src/routes/import.routes.ts`、`backend/src/routes/social.routes.ts`
|
||
|
||
---
|
||
|
||
### 14. Export — 导出无压缩,大数据集超时
|
||
|
||
**现状**: 全量导出 JSON 时,如果员工数量很多(如 1000+ 人),文件可能很大,导出接口响应时间过长甚至超时。没有分页或流式导出机制。
|
||
|
||
**建议**:
|
||
- 增加分页导出:按员工分批导出,每次最多 500 条
|
||
- 大数据集使用 Stream API 流式响应,避免内存溢出
|
||
- JSON 导出支持压缩(gzip)
|
||
- 增加导出进度条,前端可实时看到导出进度
|
||
|
||
**涉及文件**: `backend/src/routes/export.routes.ts`
|
||
|
||
---
|
||
|
||
## 四、优先级总览
|
||
|
||
| 优先级 | 编号 | 功能 | 工作量 |
|
||
|--------|------|------|--------|
|
||
| P0 | 1 | 企业信息表单数据回填 | 小 |
|
||
| P0 | 2 | 用户管理编辑/禁用 | 中 |
|
||
| P0 | 3 | 导入预览+逐行编辑 | 大 |
|
||
| P0 | 4 | 选择性导出+格式选择 | 中 |
|
||
| P1 | 5 | 身份证号格式校验 | 小 |
|
||
| P1 | 6 | 通知渠道测试功能 | 中 |
|
||
| P1 | 7 | 导入覆盖逻辑说明 | 小 |
|
||
| P1 | 8 | 套餐升级+用量限制 | 大 |
|
||
| P1 | 9 | 错误日志导出 | 小 |
|
||
| P2 | 10 | 导出敏感字段脱敏 | 小 |
|
||
| P2 | 11 | 加班类型字段改进 | 小 |
|
||
| P2 | 12 | useMemo 替换为 useEffect | 小 |
|
||
| P2 | 13 | 社保基数范围校验 | 小 |
|
||
| P2 | 14 | 大数据集分页/流式导出 | 中 | |