Files
TurboHR/20260723-优化-5.md
selfrelease 0df8aa77d9 feat: AIHR 智能人力资源管理系统初始提交
- 员工花名册管理(加密存储、导入导出)
- 薪酬管理(发薪批次、薪酬模版、加班费计算、工资条)
- 社保公积金(多城市配置、版本管理、基数调整)
- 解聘管理(6步流程、证据链、工作交接)
- AI 助手(合同审查、风险预测、RAG 知识库)
- Dashboard 仪表盘
- 设置与通知
2026-07-24 13:53:11 +08:00

9.7 KiB
Raw Permalink Blame History

劳动用工合规 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.tsxbackend/src/routes/settings.routes.ts


3. Import — 导入预览缺失,无法逐条确认

现状: Excel 导入直接上传后端解析,用户无法在提交前预览数据。错误只能在导入完成后看到,且只能看到前 10 条。用户可能上传了错误的 Excel 模板,导致大量数据导入失败后才知晓。

建议:

  • 改为两阶段导入:上传文件 → 后端解析但不写入 → 前端展示预览列表 → 用户确认后才写入
  • 预览阶段支持逐行修改(如修正姓名、部门、工资等)
  • 增加「模板校验」接口,上传前先检查 Sheet 结构是否符合预期,不符合给出明确提示
  • 预览界面区分「正常数据」「警告数据」「错误数据」,用户可选择只导入正常数据

涉及文件: frontend/src/pages/Settings.tsxbackend/src/routes/import.routes.ts


4. Export — 导出格式单一,无选择性导出

现状: export/all 导出全部数据的 JSON 文件,既没有 Excel 格式选择,也没有按模块选择性导出(只导出员工、只导出社保等)。对于企业财务或法务,只需要部分数据时,导出一个大 JSON 不够实用。

建议:

  • 增加导出格式选择(JSON / Excel
  • 增加按模块选择性导出(员工信息、合同信息、薪税记录、社保记录、离职记录)
  • Excel 格式应包含表头和格式化,便于直接查看
  • 增加导出时间范围过滤(本月/本季度/本年/自定义)

涉及文件: frontend/src/pages/Settings.tsxbackend/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.tsxbackend/src/routes/notification.routes.ts


7. Import — 月度导入覆盖逻辑不清晰

现状: 月度导入中「考勤记录」用 upsert 覆盖同日记录,「加班记录」用 increment 累加。这些行为没有在界面上说明,用户可能误以为所有数据都是覆盖,导致数据异常。

建议:

  • 导入界面的 Sheet 说明中明确标注每种记录的处理策略(覆盖 / 累加 / 跳过)
  • 月度导入前增加「本次导入模式」选择:覆盖 / 累加 / 仅新增
  • 导入完成后显示各类型记录的处理方式摘要

涉及文件: frontend/src/pages/Settings.tsxbackend/src/routes/import.routes.ts


8. Settings — 套餐升级无实际功能

现状: PlanSettings 展示三个套餐,但「升级」按钮只有 UI 没有实际逻辑。免费版和专业版的功能差异(如 AI 问答次数限制、合同审查)也未在系统中实际执行。

建议:

  • 实现套餐切换逻辑(可对接 Stripe/微信支付等)
  • 在系统各模块中实际执行用量限制(如 AI 问答次数扣减)
  • 免费版用户在试用受限功能时提示升级
  • 增加用量统计面板,显示本月已用 AI 次数 / 已用存储空间等

涉及文件: frontend/src/pages/Settings.tsxbackend/src/routes/settings.routes.tsbackend/src/middleware/rateLimit.ts


9. Import — 错误日志无导出

现状: 导入完成后如果有很多错误,只能看到前 10 条提示。用户需要截取或手动记录错误信息来修正 Excel 后重新导入。

建议:

  • 导入完成后增加「导出错误日志」按钮,生成 CSV/Excel 文件,列出所有错误行及原因
  • 错误日志包含:行号、员工姓名/身份证、错误类型、具体原因
  • 错误日志文件名包含导入时间戳,便于管理

涉及文件: frontend/src/pages/Settings.tsxbackend/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 错误使用

现状: NotificationSettingsuseMemo 用于副作用(设置 form state),这违反了 React Hooks 的规则。useMemo 不应该在副作用中调用,应该用 useEffect 替代。

建议:

  • useMemo 替换为 useEffect,正确处理数据加载后的表单回填

涉及文件: frontend/src/pages/Settings.tsx


13. Import — 社保/公积金增减员未校验基数范围

现状: 社保和公积金变动导入时,只记录用户填写的基数,没有校验基数是否在政策允许的上下限范围内(北京 2024 年社保基数下限 6326、上限 33891)。

建议:

  • 增加基数上下限校验逻辑(可配置城市参数)
  • 超出范围的记录在预览阶段标红提示
  • 提供默认值建议(低于下限用下限,高于上限用上限)

涉及文件: backend/src/routes/import.routes.tsbackend/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 大数据集分页/流式导出