Files
TurboHR/docs/20260730-优化-1.md
T
selfrelease 55286819ae fix: HR系统优化批次1 - P0/P1问题修复
P0-3: 修复合同状态判断逻辑,有合同记录但signDate为null时不再误判未签
P0-5: 修复参保城市默认北京问题,导入和预览均改为null
P0-11: 添加全局ErrorBoundary防止白屏,三处布局均包裹
P1-2: 合同附件改为可选,允许先保存再补充上传
P1-7.2: 排班弹窗增加员工搜索(姓名/部门)
P1-8.2: 加班费导入支持Excel(xlsx/xls)格式,兼容中英文列名
P1-9: 社保/公积金基数月度办理支持逐人修改,后端返回recordId
2026-07-30 18:34:36 +08:00

9.8 KiB
Raw Blame History

20260730 优化需求清单 - 1

来源:用户测试反馈 日期:2026-07-30 代码验证:已完成逐条核查


1. 批量导入:员工信息分步导入后无法补充导入合同

问题:员工导入模板支持多 Sheet,如果第一次只导入了员工基本信息(未填写合同 Sheet),后续无法再通过批量导入补充合同信息,只能逐条手录。

代码验证⚠️ 部分确认

  • 后端 import.routes.ts 合同 Sheet 导入依赖 empByHash/empByName 匹配已有员工,合同 Sheet 可以单独导入(只要员工已存在)
  • 但员工 Sheet 导入时 prisma.employee.create 没有去重逻辑,第二次导入员工会报唯一约束错误
  • 实际问题:用户不知道可以只上传含合同 Sheet 的 Excel 来补充合同,需要 UI 引导或分开的导入入口

期望:支持对已有员工进行合同信息的批量补充导入(后端已支持,前端需增加独立入口或引导)。


2. 手动录入劳动合同:未上传附件前无法保存

问题:手动录入劳动合同时,在上传附件之前没有保存按钮,退出后再进入需要重新录入所有合同基本信息。

代码验证 确认真实问题

  • ContractInfo.tsx:211-214:保存按钮 disabled 条件包含 form.signMethod === 'PAPER' && form.attachments.length === 0
  • 纸质签署必须先上传附件才能保存,没有草稿/暂存机制

期望:允许先保存合同基本信息(草稿状态),附件后续再上传。


3. 合同录入后状态异常 + 附件无法预览/下载

问题

  • 合同手工录入保存成功后,员工仍显示"未签订劳动合同"
  • 批量导入合同成功后,已签订合同的附件不能预览也不能下载

代码验证 确认真实问题(状态异常)+ 附件功能正常

  • contract.service.ts:38if (!contract.signDate || contract.contractType === 'UNSIGNED') — 如果 signDate 为 null,直接判定为"未签合同"
  • 手工录入合同时签订日期非必填,未填则 signDate 为 null → 状态显示"未签订"
  • 根因getContractStatus 判断逻辑应以合同记录是否存在为准,而非 signDate
  • 附件预览/下载:ContractInfo.tsx:296-347 已实现完整的预览弹窗(支持 PDF/图片预览 + 下载),功能正常

期望

  • 修复 getContractStatus:有合同记录且非 UNSIGNED 类型时,即使 signDate 为 null 也应显示"已签订"
  • 附件功能已正常,无需修改

4. 绩效考核:签字流程不明确

问题

  • 被考核人签字入口不明确,不知道在哪里签字
  • 考核结果通过什么形式发给员工并签字未定义
  • 员工对考核结果有异议时,是通过系统提出还是直接跟考核人沟通?

代码验证 确认真实问题(功能缺失)

  • 当前绩效模块只有 HR 端录入功能,没有员工端签字/确认流程
  • 员工 Portal 中无绩效考核相关页面

期望

  • 明确签字入口和流程(如员工端 Portal 推送 + 签字确认)
  • 提供异议申诉通道(系统内提交异议 → 考核人/HR 复核)

5. 批量导入:参保地区导入后统一变成北京

问题:批量导入员工信息时,参保地区不管填写哪个城市,导入后都变成"北京",需要二次修改。

代码验证 确认真实问题

  • import.routes.ts:288city: val(getField(r, '参保城市')) || '北京'
  • 如果 Excel 中参保城市列名为空或列名不匹配,getField 返回空 → 默认"北京"
  • 根因getField 匹配列名可能不精确,或用户填写了列但列名与代码中的 '参保城市' 不完全一致

期望:导入时正确识别参保城市列,空值时不用默认"北京",改为 null 或提示用户。


6. 员工离职:离职原因细分的目的和输出不明确

问题:离职原因细分为"个人原因/职业发展/薪资原因"等,不确定细分目的。是否能导出不同离职原因占比?

代码验证 确认真实问题(缺少分析报表)

  • 离职原因分类已存在,但没有统计分析报表功能
  • 无离职原因占比导出功能

期望

  • 明确离职原因分类体系
  • 提供离职原因统计分析报表(占比、趋势、部门对比)

7. 考勤确认:多个子问题

7.1 批量导入不显示上传状态 + 服务器内部错误

代码验证⚠️ 部分确认

  • 前端 Attendance.tsx:315-338:有导入弹窗和文件选择,但上传后只显示 toast.successtoast.error,不显示详细导入结果
  • 后端 import.routes.ts:439-468:考勤记录导入逻辑正常,但可能因 Sheet 名不匹配(需为"考勤记录")导致无数据导入
  • "服务器内部错误"可能是其他 Sheet 数据导入失败导致整体 500

7.2 排班:不能搜索,只能下拉勾选

代码验证 确认真实问题

  • Attendance.tsx:592-620:排班弹窗中员工列表无搜索框,只有滚动勾选

7.3 每日出勤:无导入按钮

代码验证 确认真实问题

  • Attendance.tsx:626-695:DailyTab 只有日期选择和表格展示,无导入按钮
  • 但考勤确认 Tab 有导入功能,每日出勤数据来源于考勤记录导入

7.4 休假记录:能否接入企业微信请假记录

代码验证 确认只能手动录入

  • Attendance.tsx:793+:休假记录只有手动新增,无导入功能,无企业微信对接

8. 薪酬管理:多个子问题

8.1 薪酬模板:可编辑项手工录入不能保存

代码验证 无法确认

  • 模板管理 TemplateManager 有完整 CRUD(新增/编辑/删除),isEditable 字段可设置
  • 发薪批次详情 BatchDetaileditableFields 包含 baseSalary/overtimePay/allowance/deduction/bonus 等,支持点击单元格编辑
  • 可能原因:用户指的是发薪批次中某些自定义模板项无法编辑,或编辑后保存接口报错(需实际测试确认)

8.2 加班费计算:导入考勤数据不能导入

代码验证 确认真实问题

  • Money.tsx:1527-1555:加班费导入只支持 CSV 格式(逗号分隔),不支持 Excel
  • 按姓名匹配员工,如果姓名不匹配则跳过
  • 用户可能上传了 Excel 文件导致解析失败

8.3 工资条税率试算:加班费计算方式不明确

代码验证 确认真实问题

  • 加班费按统一规则计算(工作日 1.5 倍 / 休息日 2 倍 / 法定节假日 3 倍),不支持按员工个人配置工资构成

9. 社保公积金:无法按个人修改基数

代码验证⚠️ 部分确认

  • 后端 social.routes.ts:1185PUT /records/social/:id/correct 接口支持修正单条社保记录
  • 后端 social.routes.ts:244POST /config/:id/adjust-apply 支持批量调基
  • 但前端 SocialInsurance.tsx 中未找到调用 correct 接口的 UI 入口,只有批量调基预览/应用
  • 前端缺少逐人修改基数的操作入口

期望:前端增加逐人修改社保/公积金基数的 UI 入口。


10. 考勤机数据导入后自动计算加班工资

代码验证 确认功能缺失

  • 当前考勤导入只创建 AttendanceRecord,不自动计算加班费
  • 加班费需要单独在薪酬模块录入或 CSV 导入

11. 系统不稳定:新模块常出现"系统出错了"闪退

代码验证 确认真实问题

  • 前端无 ErrorBoundary 组件,模块加载失败时直接白屏
  • 无全局错误处理和降级 UI

期望:添加全局 ErrorBoundary,模块加载失败时显示降级页面而非白屏。


12. 社保城市:可选城市较少,不能录入新城市

代码验证 确认真实问题

  • import.routes.ts:54-60:社保基数校验只支持 5 个城市(北京/上海/广州/深圳/杭州)
  • 社保配置 social.routes.ts 支持按城市配置,但城市列表来源于已配置数据,无预设全量城市
  • 前端无自定义录入新城市的入口

13. 发薪时考勤数据自动生成奖惩类数据

代码验证 确认功能缺失

  • 考勤导入和薪酬模块之间无自动联动
  • 迟到/早退/缺勤等考勤异常不会自动生成薪酬扣款明细

14. 新增人工成本模板

代码验证 确认功能缺失

  • 系统中无人工成本模板功能

优先级建议(已根据验证结果调整)

优先级 编号 问题 验证结果
P0-紧急 3 合同状态异常(signDate 判断逻辑) 确认,根因已定位
P0-紧急 11 系统无 ErrorBoundary 闪退 确认
P0-紧急 5 参保地区默认"北京" 确认,代码行已定位
P1-高 2 合同录入必须先传附件 确认
P1-高 9 社保基数前端无逐人修改入口 ⚠️ 后端已有接口,前端缺 UI
P1-高 7.2 排班不支持搜索 确认
P1-高 8.2 加班费只支持 CSV 不支持 Excel 确认
P2-中 1 分步导入(后端已支持,前端缺引导) ⚠️ 需前端优化
P2-中 7.1 考勤导入错误提示不清晰 ⚠️ 需改善错误反馈
P2-中 4 绩效签字流程缺失 确认
P2-中 6 离职原因分析报表缺失 确认
P2-中 12 社保城市列表少 确认
P2-中 13 考勤自动生成奖惩数据 功能缺失
P3-低 7.3 每日出勤无导入(考勤Tab已有) 确认
P3-低 7.4 休假无导入/企业微信对接 确认
P3-低 8.1 薪酬模板可编辑项 需实际测试确认
P3-低 8.3 加班费按统一规则计算 确认
P3-低 10 考勤自动计算加班工资 功能缺失
P3-低 14 人工成本模板 功能缺失