Files
TurboHR/docs/20260804-优化.md
selfrelease 338af5eee9 fix: 花名册身份证搜索bug修复 + Header企业名称 + 优化文档更新
- 修复Roster.tsx前端二次过滤清空身份证搜索结果的问题
- TopNav增加企业名称显示(复用settingsApi.org())
- 新增docs/20260804-优化.md(23项反馈全面审查)
- 更新20260803-优化.md状态(问题5已完成)
2026-08-04 18:56:07 +08:00

376 lines
17 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 不兼容,导致跳转失败。
**优化方案**
- 改用 `useNavigate` hook 进行路由跳转:`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`,需确认导航入口 |