- 修复Roster.tsx前端二次过滤清空身份证搜索结果的问题 - TopNav增加企业名称显示(复用settingsApi.org()) - 新增docs/20260804-优化.md(23项反馈全面审查) - 更新20260803-优化.md状态(问题5已完成)
17 KiB
TurboHR 系统优化清单(20260804)
基于用户反馈的 23 项问题,逐条对照系统代码进行检查,记录现状、问题及优化方案。
一、花名册模块
1.1 搜索功能(反馈 #7:无身份证号搜索)
现状:后端 roster.routes.ts:58 已支持身份证后N位搜索(isIdCardSearch 逻辑:输入 ≥2 位数字时按身份证尾号匹配),前端搜索框 placeholder 已提示"搜索姓名、部门或身份证后4位"。
结论:✅ 已实现,无需修改。
1.2 身份证号显示(反馈 #5:身份证号隐藏,不便于复制)
现状:Roster.tsx:466 显示 e.idCardMasked(脱敏格式 110****1234),完整身份证号需点进员工详情才能查看。
问题:用户需要复制完整身份证号到其他模块(如开具离职证明),操作不便。
优化方案:
- 花名册列表中身份证号列增加「点击复制」功能:点击脱敏号码自动复制完整身份证号到剪贴板,toast 提示"已复制"
- 员工详情页 BasicInfo 中身份证号也增加复制按钮
涉及文件:frontend/src/pages/Roster.tsx:466、frontend/src/pages/roster/BasicInfo.tsx
1.3 显示字段不足(反馈 #6、#20:显示信息太少,缺少合同起止时间、社保状态)
现状:Roster.tsx:431-559 表格列包含姓名、身份证号(脱敏)、部门、状态、月薪、合同类型、合同状态,但合同到期日期列(th 和 td)使用了 hidden CSS 类未显示。入职日期、离职日期同样隐藏。社保缴纳状态未展示。
问题:用户需点进员工详情才能看到合同起止时间和社保信息。
优化方案:
- 取消隐藏「合同到期」列,直接在花名册表格中展示合同到期日期(已有渲染逻辑,只需移除
hidden类) - 新增「社保状态」列:显示"已缴纳/未缴纳/待办理"(需后端 roster API 返回社保缴纳状态摘要)
- 取消隐藏「入职日期」列
涉及文件:frontend/src/pages/Roster.tsx:441-446(表头)、540-558(合同到期单元格)、486(入职日期)
1.4 附件上传(反馈 #15:多条上传附件)
现状:AttachmentInfo.tsx 和 BasicInfo.tsx 已支持多附件上传,类型包括身份证、银行卡、学历证书、其他,支持 PDF/JPG/PNG 等格式,最大 10MB。
问题:附件类型选项较少,缺少"职业资格证书"、"毕业证"等常见类型。
优化方案:
- 扩展附件类型:增加
CERTIFICATE(职业资格证书)、CONTRACT(合同扫描件)、PHOTO(员工照片)等选项
涉及文件:frontend/src/pages/roster/AttachmentInfo.tsx:13,52、frontend/src/pages/roster/BasicInfo.tsx:16,49
1.5 发薪按钮无效(反馈 #11:发薪功能点击无反应)
现状:Roster.tsx:590-593 发薪按钮使用 window.location.hash = '#/money' 进行跳转,这种 hash 路由方式可能与 React Router 的 BrowserRouter 不兼容,导致跳转失败。
优化方案:
- 改用
useNavigatehook 进行路由跳转:navigate('/money') - 或直接使用
<Link to="/money">组件
涉及文件:frontend/src/pages/Roster.tsx:592
二、用工办理模块
2.1 姓名检索替代 ID 检索(反馈 #1:用员工ID和合同ID检索不便)
现状:WorkProcess.tsx:53-141 的 FORM_FIELDS 中,ONBOARD/CONFIRM/CHANGE/RENEW/SUSPEND/TERMINATE/RESCIND 等流程类型使用 employeeId(文本输入)和 contractId(文本输入)作为字段,用户需要手动输入 UUID。
问题:操作人员不知道员工ID和合同ID,使用不便。
优化方案:
- 将
employeeId字段类型改为employee-select(自定义组件):输入姓名时模糊搜索员工列表,选择后自动填入 ID - 将
contractId字段类型改为contract-select:根据选中员工自动列出其合同供选择 - 利用已有的
/api/v1/employees/list接口(返回 id/name/department)实现搜索下拉
涉及文件:frontend/src/pages/WorkProcess.tsx:53-141(FORM_FIELDS 配置)、新增 EmployeeSelect 组件
2.2 填写界面增加提交按钮(反馈 #12:只能存草稿后再提交)
现状:WorkProcess.tsx:400-404 创建弹窗底部只有"存草稿"按钮,用户必须先存草稿,再在详情中点击"提交办理"。
优化方案:
- 在填写信息界面增加"直接提交"按钮,调用
createMutation创建后立即调用submitMutation提交 - 保持"存草稿"按钮供用户选择
涉及文件:frontend/src/pages/WorkProcess.tsx:400-408
2.3 查看已生成文书(反馈 #12:已提交的证明类业务无法查看生成文书)
现状:WorkProcess.tsx:489-501 详情弹窗中显示已生成文书列表(data.documents),但仅展示文件名,无下载/预览链接。previewContent 仅在 DRAFT 状态下可预览。
问题:已提交/已完成的业务无法查看和下载生成的文书。
优化方案:
- 在文书列表中每项增加"查看"和"下载"按钮
- 调用后端
workProcessApi.preview(id)获取文书内容展示 - 增加文书下载功能(PDF/Word 格式)
涉及文件:frontend/src/pages/WorkProcess.tsx:488-501
2.4 收入证明后续处理指引(反馈 #2:提交后找不到后续需要处理的事情)
现状:收入证明提交后在"办理记录"列表中显示,但用户不清楚下一步去哪里查看文书或跟进。
优化方案:
- 提交成功后 toast 提示中增加跳转链接:"已提交,点击查看办理详情"
- 在办理记录列表中,已完成的业务增加"查看文书"快捷按钮
- 在首页工作台待办列表中自动汇总"待查看文书的办理项"
涉及文件:frontend/src/pages/WorkProcess.tsx:176-183(createMutation onSuccess)
2.5 整体逻辑与模块关联性(反馈 #3:不知道下一步做什么)
现状:各模块相对独立,缺少流程引导。
优化方案:
- 在关键操作完成后增加"下一步"引导提示(如:入职登记完成 → 提示"前往签订劳动合同")
- 首页工作台待办列表已有跨模块汇总,可强化提示
- 各模块顶部
PageGuide中增加关联模块说明
涉及文件:各模块页面
三、离职管理模块
3.1 离职证明下载(反馈 #4:离职员工无法下载离职证明、交接清单)
现状:Termination.tsx 解聘补偿模块有 5 步向导(选择员工→解聘方式→合规检查→费用结算→工作交接→确认提交),工作交接步骤有交接清单勾选项(DEFAULT_HANDOVER_ITEMS),但无文书生成和下载功能。WorkProcess.tsx 中有 LEAVING_CERT 流程类型,但与解聘补偿模块未打通。
问题:离职流程完成后,无法生成和下载《解除劳动合同证明书》和《工作交接清单》。
优化方案:
- 在 Termination.tsx 第 5 步(确认提交)完成后,自动跳转到 WorkProcess 的
LEAVING_CERT流程,预填员工信息 - 或在 Termination 详情页增加"生成离职证明"和"生成交接清单"按钮
- 交接清单支持导出 PDF(已有 jsPDF 依赖)
涉及文件:frontend/src/pages/Termination.tsx:135-142(交接项)、提交成功后的跳转逻辑
3.2 员工端辞职申请(反馈 #23:员工端提交辞职申请并附件辞职信照片)
现状:员工门户 portal/MyLeave.tsx 有休假申请功能,但无辞职申请入口。辞职目前只能由 HR 在花名册中发起。
优化方案:
- 在员工门户增加"辞职申请"入口
- 表单包含:辞职原因、预计离职日期、辞职信照片上传(多张)
- 提交后 HR 端花名册自动收到通知,创建离职草稿
- HR 确认纸质辞职信后进入正式离职流程
涉及文件:新增 frontend/src/pages/portal/MyResignation.tsx,修改员工门户路由
四、风险中心模块
4.1 跳转后不自动筛选(反馈 #13:点击风险提示跳转后需手动搜索)
现状:RiskCenter.tsx:27 风险类型配置中 CONTRACT 类型 link 为 /roster,无查询参数。点击后跳转到花名册首页,不携带任何筛选条件。Roster.tsx:74-85 支持从 URL 参数 employee 自动选中员工,但风险中心未使用此机制。
问题:用户点击风险提示后需手动搜索员工,体验不如首页工作台。
优化方案:
- 风险列表项的 Link 增加查询参数:
/roster?employee=员工名&contractStatus=expired - 或增加
riskType参数,Roster 页面读取后自动设置对应筛选条件 - 对标 Dashboard.tsx 中工作台的风险处理逻辑(直接选择人员处理)
涉及文件:frontend/src/pages/compliance/RiskCenter.tsx:26-33,183-206
4.2 与工作台对比(反馈 #13:风险中心不如工作台便捷)
现状:Dashboard.tsx 工作台的风险待办列表可直接勾选员工并处理(批量续签/解聘),而 RiskCenter.tsx 只能查看和跳转。
优化方案:
- 风险中心列表项增加快捷操作按钮(如:合同到期→"续签"/"办理离职")
- 增加批量选择和处理功能,与工作台体验对齐
- 风险中心作为独立模块应比工作台更强大,而非更弱
涉及文件:frontend/src/pages/compliance/RiskCenter.tsx:177-206
五、日历模块
5.1 合同到期点击进入员工(反馈 #14:点击进入员工)
现状:Calendar.tsx:238-246 日历事件仅显示标题,点击日期格子触发 handleDayClick 创建新事件,无点击事件跳转到对应员工的功能。
优化方案:
- 事件项增加点击事件:
onClick阻止冒泡,跳转到/roster?employee=员工名 - 合同到期事件点击后跳转到花名册并自动筛选该员工
涉及文件:frontend/src/pages/Calendar.tsx:238-246
5.2 按紧急程度分类(反馈 #14:7天紧急/15天预警/35天提醒)
现状:Calendar.tsx 事件列表按日期排列,无紧急程度分类。PRIORITY_DOT 有 high/medium/low 颜色点但未按时间窗口分组。
优化方案:
- 事件列表增加分组:🔴 7天内紧急、🟡 15天预警、🔵 35天提醒、⚫ 已逾期
- 日历格子中事件按优先级排序展示
涉及文件:frontend/src/pages/Calendar.tsx:260-279(事件列表区域)
5.3 逾期天数统计(反馈 #14:新增逾期天数统计)
现状:无逾期统计展示。
优化方案:
- 日历顶部增加统计卡片:本月到期 X 项、已逾期 Y 项、逾期总天数 Z 天
- 逾期事件在列表中红色高亮并显示"逾期 N 天"
涉及文件:frontend/src/pages/Calendar.tsx:161-189(顶部工具栏区域)
六、社保模块
6.1 各项保险比例显示(反馈 #8:未显示各项保险比例)
现状:SocialInsurance.tsx:500-526 社保配置 Tab 已显示各项比例(养老企业/个人、医疗企业/个人、失业企业/个人、工伤企业、生育企业)。但月度办理 Tab 中仅显示变更明细,未显示各项保险的具体比例和金额分解。
问题:用户在月度办理时看不到每项保险的缴费比例和金额明细。
优化方案:
- 月度办理结果中每条记录增加"明细展开"功能,显示养老/医疗/失业/工伤/生育各项的企业和个人缴费金额及比例
- 利用已有的
socialInsuranceApi.calculate(base, city)接口获取明细
涉及文件:frontend/src/pages/SocialInsurance.tsx 月度办理 Tab 区域、frontend/src/pages/social-insurance/MonthlyRows.tsx
七、休假审批流程
7.1 审批流程可发现性(反馈 #9:没有找到休假的审批流程)
现状:系统已有完整的休假审批流程:
- HR 端:
LeaveApproval.tsx休假审批页面,支持批准/驳回/撤回 - 员工端:
portal/MyLeave.tsx员工提交休假申请
问题:用户找不到休假审批入口,可能是因为导航菜单中未明显展示。
优化方案:
- 确认侧边栏菜单中是否包含"休假审批"入口
- 在考勤管理页面的"休假记录"Tab 中增加"前往审批"链接
- 在首页工作台待办中自动汇总"待审批休假申请"
涉及文件:导航配置、frontend/src/pages/Attendance.tsx(休假记录 Tab)
八、考勤管理
8.1 在职人员直接编辑(反馈 #10:无法直接编辑在职人员考勤)
现状:Attendance.tsx ConfirmTab 有批量导入和批量确认功能,但无单条记录编辑功能。singleConfirmMutation 仅支持确认操作。
优化方案:
- 考勤列表增加"编辑"按钮,支持修改单条考勤记录(出勤天数、加班时长、请假天数等)
- 保留批量导入功能,同时支持导入后逐条修改
涉及文件:frontend/src/pages/Attendance.tsx ConfirmTab
8.2 按月按人导出考勤(反馈 #22)
现状:无考勤导出功能。
优化方案:
- 考勤确认 Tab 增加"导出"按钮,支持按月份导出全部员工考勤表(Excel)
- 支持按单个员工导出月度考勤明细
- 利用已有的
exceljs依赖生成 Excel 文件
涉及文件:frontend/src/pages/Attendance.tsx ConfirmTab、后端增加导出接口
九、工资条模块
9.1 状态标记与签收跟踪(反馈 #18:增加已发送/未查看/已查看状态)
现状:PayslipTab.tsx:64-65,142-149 仅有"已确认/未确认"两种状态,无发送和查看状态跟踪。
优化方案:
- 工资条状态扩展为:
未发送→已发送→已查看→已确认 - 列表增加状态列,用不同颜色标签区分
- 后端 Payslip 模型增加
sentAt、viewedAt字段 - 员工端查看工资条时自动更新
viewedAt
涉及文件:frontend/src/pages/money/PayslipTab.tsx、后端 payslip 模型和路由
9.2 导出工资流水和工资表(反馈 #21)
现状:PayslipTab.tsx 无导出功能。
优化方案:
- 增加"导出工资表"按钮:按月份导出全部工资条为 Excel
- 增加"导出工资流水"按钮:按员工导出多月工资明细(用于银行流水证明)
- 利用
exceljs生成 Excel 文件
涉及文件:frontend/src/pages/money/PayslipTab.tsx、后端增加导出接口
十、其他建议
10.1 通讯录(反馈 #16)
现状:系统无通讯录页面。
优化方案:
- 新增通讯录页面,按部门分组展示所有在职员工姓名、职务、手机号、地址
- 支持搜索和按部门筛选
- 支持导出通讯录 Excel
涉及文件:新增 frontend/src/pages/Directory.tsx
10.2 批量开具证明(反馈 #17)
现状:WorkProcess.tsx 仅支持单个办理,无批量开具证明功能。
优化方案:
- 在用工办理页面增加"批量开具证明"入口
- 选择多人和证明类型(收入证明/离职证明等)
- 批量生成文书,支持批量下载(ZIP 打包)
涉及文件:frontend/src/pages/WorkProcess.tsx
10.3 人效成本分部门(反馈 #19)
现状:Dashboard.tsx 有"人效成本"Tab(activeTab === 'cost'),但具体实现需进一步检查是否支持分部门展示。
优化方案:
- 人效成本 Tab 增加部门维度筛选和对比
- 按部门展示人数、总薪资成本、人均成本、同比变化
涉及文件:frontend/src/pages/Dashboard.tsx cost Tab
优先级排序
| 优先级 | 编号 | 问题 | 影响范围 |
|---|---|---|---|
| P0 | 1.5 | 发薪按钮无效 | 功能不可用 |
| P0 | 2.1 | 用工办理需姓名检索 | 严重影响操作效率 |
| P0 | 2.2 | 填写界面增加提交按钮 | 操作流程繁琐 |
| P0 | 4.1 | 风险中心跳转不筛选 | 用户体验差 |
| P1 | 1.2 | 身份证号复制 | 操作不便 |
| P1 | 1.3 | 花名册显示字段不足 | 信息不充分 |
| P1 | 2.3 | 查看已生成文书 | 功能缺失 |
| P1 | 3.1 | 离职证明下载 | 功能缺失 |
| P1 | 9.1 | 工资条状态标记 | 跟踪不足 |
| P1 | 9.2 | 导出工资表 | 功能缺失 |
| P2 | 1.4 | 附件类型扩展 | 体验优化 |
| P2 | 2.4 | 收入证明后续指引 | 引导不足 |
| P2 | 2.5 | 模块关联性引导 | 体验优化 |
| P2 | 3.2 | 员工端辞职申请 | 新功能 |
| P2 | 4.2 | 风险中心快捷操作 | 体验优化 |
| P2 | 5.1-5.3 | 日历优化 | 体验优化 |
| P2 | 6.1 | 社保比例明细 | 信息不充分 |
| P2 | 7.1 | 休假审批可发现性 | 导航问题 |
| P2 | 8.1 | 考勤直接编辑 | 操作不便 |
| P2 | 8.2 | 考勤导出 | 功能缺失 |
| P3 | 10.1 | 通讯录 | 新功能 |
| P3 | 10.2 | 批量开具证明 | 新功能 |
| P3 | 10.3 | 人效成本分部门 | 体验优化 |
已确认无需修改
| 编号 | 问题 | 原因 |
|---|---|---|
| #7 | 花名册无身份证号搜索 | 后端已实现 isIdCardSearch 逻辑,前端 placeholder 已提示 |
| #15 | 花名册多条上传附件 | AttachmentInfo.tsx 已支持多附件上传 |
| #9 | 休假审批流程 | 系统已有 LeaveApproval.tsx 和 MyLeave.tsx,需确认导航入口 |