Files
TurboHR/20260815-优化.md
T
selfrelease e1b5ae9aab feat: 20260815 系统优化 - 全部31项问题修复(P0×6+P1×14+P2×9+P3×2)
P0紧急修复(6项):
- 草稿保存完整恢复所有字段(含socialAvgWage)
- 补偿金批次从compensationBreakdown读取
- 违法解除风险确认UI
- 合同结束日期前后校验(前后端双保险)

P1高优先级(14项):
- 离职日期联动社保/公积金截止月(15号规则)
- 合规检查+工作交接改为软阻断(生成待办)
- 补偿月数(N/N+1/2N/自定义)+计算基数(近12月/合同/自定义)
- 解聘并入花名册操作栏(类型选择跳转向导)
- 合同续签开始日期自动推导(原合同结束日+1天)
- 年龄合规筛查(童工阻断/未成年工/退休警告)
- 编辑入职日期后状态联动(待入职↔在职)
- 转正移植到花名册操作栏+薪资回写
- 男职工无法选择三期

P2体验优化(9项):
- "劳动合同"调整为"用工关系"
- 费用结算新增剩余年假折算(300%日工资)
- 身份证号全域改为"证件号码"(前后端18个文件)
- 手机号查重
- 开具证明+合同续签移植到花名册操作栏
- 批量转正+批量开具证明
- 去掉用工办理模块

P3规划(2项):
- 组织架构+审批流(Department/Position/ApprovalFlow/ApprovalInstance)
- 客服工作台(Ticket/ChatSession+SUPPORT角色)

新增模型: Department/Position/ApprovalFlow/ApprovalInstance/Ticket/TicketMessage/ChatSession/ChatMessage
新增字段: Employee.departmentId/supervisorId
新增角色: SUPPORT

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-08-15 12:37:27 +08:00

27 KiB
Raw Blame History

20260815 优化清单

来源:20260815-优化.csv(共 31 条) 结合 TurboHR 当期功能梳理,按模块归类,标注根因 / 修复方向 / 优先级 / 涉及文件。 优先级:P0 紧急(影响业务正确性/数据丢失)|P1 高(流程阻塞或合规风险)|P2 中(体验/增强)|P3 规划(新模块)


一、离职管理(问题 2-11

问题 2:离职日期调整后未联动社保/公积金截止年月

  • 现状Termination.tsx:1334-1338 社保截止、公积金截止为 <Input type="month"> 手动填写,默认值取 terminationDate.slice(0,7),但修改离职日期后不会重算,也无"15 日前/后"规则。
  • 修复方向
    1. 增加"离职日期 → 社保/公积金截止月"自动推导规则:每月 15 日(含)前离职不缴当月、15 日后离职缴纳当月,截止月 = 离职月 - 0 或 -1。
    2. 阈值日期(15 日)做成系统设置可配置项(org_settings.socialInsCutoffDay,默认 15)。
    3. 离职日期变更时自动回填两个截止月,同时保留手动覆盖入口。
  • 优先级P1 高
  • 涉及文件frontend/src/pages/Termination.tsxbackend/src/services/termination.service.tsbackend/prisma/schema.prismaorg_settings 增字段)

问题 3:合规检查"是否已支付经济补偿金"硬阻断

  • 现状:合规检查为必勾才能进入下一步,未勾选时无法继续,且未保存的检查项不进入待办/风险提醒。
  • 修复方向
    1. 将"必勾才能下一步"改为"未勾选可下一步,但自动写入待办事项 + 风险提醒"。
    2. 待办项关联 termination_draft,在 Dashboard/风险中心展示"XX 员工解聘未支付经济补偿金"。
    3. 提交审批时若仍存在未闭环必检项,给出强提示但不阻断(除非法定禁止情形,如孕期/工伤)。
  • 优先级P1 高
  • 涉及文件Termination.tsxstep 2 校验逻辑)、backend/src/services/notification.service.tsfrontend/src/pages/Dashboard.tsx

问题 4:费用结算新增"剩余年假天数"

  • 现状:费用结算步骤仅展示补偿金/代通知金/赔偿金,未涉及年假折算。
  • 修复方向
    1. 费用结算区新增"剩余年假天数"字段,支持手动录入或调用考勤模块年假余额(若有)。
    2. 按规则计算未休年假折算工资:日工资 × 剩余年假天数 × 300%(未休部分)。
    3. 折算金额计入"合计应付"。
  • 优先级P2 中
  • 涉及文件Termination.tsxstep 3)、backend/src/services/termination.service.tscost 计算扩展)

问题 5:补偿月数支持 N / N+1 / 2N / 其他

  • 现状Termination.tsx:1442 补偿月数取 costResult.cappedMonths(系统按工龄自动算 N),不允许选择其他模式。
  • 修复方向
    1. 补偿月数改为下拉:N、N+1、2N、其他(自定义输入)。
    2. 选择"协商解除"时允许修改月数并实时重算补偿金。
    3. 选择"其他"时需填写说明,留痕到 compensationBreakdown.adjustments
  • 优先级P1 高
  • 涉及文件Termination.tsxstep 3 补偿金区)、backend/src/services/termination.service.ts

问题 6:计算基数支持多种来源

  • 现状Termination.tsx:1443 计算基数固定取 costResult.cappedWage(近 12 月平均工资,且有三倍社平工资封顶)。
  • 修复方向
    1. 计算基数改为下拉:近 12 月平均工资(默认)、合同工资、其他(手动填写)。
    2. 切换来源后实时重算补偿金,并记录选用算法到草稿。
    3. "其他"需填写说明,受三倍社平封顶提示但不强制。
  • 优先级P1 高
  • 涉及文件Termination.tsxtermination.service.ts

问题 7:手动调整补偿金分项后合计未同步

  • 现状Termination.tsx:530 注释提到"系统预估 + 手动调整差额",但 handleSave578 行附近)仍使用 costResult.grandTotal,未叠加 compAdjustments。20260803 问题 13 已识别但未闭环。
  • 修复方向
    1. 实际合计 = costResult.grandTotal + Σ(adjustments.to - adjustments.from),保存与确认页统一使用此值。
    2. 调整任一分项后实时刷新"合计应付"显示。
    3. 后端 compensationBreakdown.adjustments 已支持,前端需正确传递并回显。
  • 优先级P0 紧急
  • 涉及文件Termination.tsxhandleSave、确认步骤、step 3 合计显示)

问题 8:工作交接未完成无法下一步

  • 现状Termination.tsx:552-554 step 4 校验 work_handover/equipment_return/access_revoke 三项必须完成才能下一步。
  • 修复方向
    1. 改为可下一步,未完成事项自动写入待办(关联离职草稿)。
    2. 交接清单前三项标注"离职必办",未完成时在确认页和风险中心强提示。
    3. 待办在到达离职日期前持续提醒,超期升级为风险。
  • 优先级P1 高
  • 涉及文件Termination.tsxstep 4 校验)、notification.service.tsDashboard.tsx

问题 9:离职管理"新建解聘"并入花名册操作栏

  • 现状:花名册操作栏已有"离职"按钮(Roster.tsx:734-746,触发 ResignModal 创建 RESIGNATION 草稿),但"新建解聘"仍在离职管理列表页独立入口,且仅支持 RESIGNATION 类型。
  • 修复方向
    1. 花名册操作栏"离职"按钮扩展为支持所有解聘类型(协商/过错/非过错/裁员/到期/违法),弹出类型选择后跳转 Termination 向导并预填员工。
    2. 离职管理列表页移除"新建解聘"按钮,仅保留草稿列表与审批。
  • 优先级P1 高
  • 涉及文件Roster.tsxroster/modals.tsxResignModal)、Termination.tsx(支持 URL 参数预填)

问题 10:解聘驳回后修改内容未更新

  • 现状:驳回后重新修改解聘类型、金额等,系统未按新内容更新(疑似使用旧草稿快照或前端未刷新)。
  • 修复方向
    1. 排查 updateDraft 是否正确覆盖 reason/compensationBreakdown/terminationDate
    2. 驳回后再编辑走 updateDraft(而非新建),版本号 +1,旧版本留快照。
    3. 前端进入驳回草稿时强制重新拉取最新数据。
  • 优先级P0 紧急
  • 涉及文件Termination.tsx(编辑驳回草稿逻辑)、backend/src/services/termination.service.tsbackend/src/routes/termination.routes.ts

问题 11:违法解除降低补偿金后无合规风险提醒

  • 现状:选择 ILLEGAL(2N)后手动降低补偿金金额,acknowledgeRisk 仅在初始选择违法解除时提示,金额变动后不再校验。
  • 修复方向
    1. 实际补偿金 < 法定 2N 时,强制弹出合规风险提醒,需勾选"已知风险并继续"才能下一步。
    2. 风险提醒记录到 compensationBreakdown.riskAcknowledged,留痕可审计。
    3. 同步推送风险中心。
  • 优先级P0 紧急
  • 涉及文件Termination.tsxstep 3 风险校验)、risk-center

二、用工办理 / 合同(问题 12-13、18、20-23、26

问题 12:合同续签新增合同开始日期应为上一份结束日期 +1

  • 现状WorkProcess.tsx:93-99 RENEW 表单 newStartDate 为手动填写,无自动推导。
  • 修复方向
    1. 选择员工后自动拉取最新已签合同,newStartDate 默认 = 上一份合同 endDate + 1 天
    2. 允许手动覆盖,但偏离时提示。
  • 优先级P1 高
  • 涉及文件WorkProcess.tsxRENEW 字段)、backend/src/services/work-process.service.ts

问题 13:合同结束日期早于开始日期未校验

  • 现状WorkProcess.tsx 表单提交前无日期前后关系校验,已产生时间倒置数据。
  • 修复方向
    1. 前端表单提交前校验 endDate >= startDate,否则阻断并提示。
    2. 后端 work-process.service.ts 增加同样校验,双保险。
    3. 历史倒置数据提供修复脚本/列表提示。
  • 优先级P0 紧急
  • 涉及文件WorkProcess.tsxwork-process.service.ts

问题 18:员工转正移植到花名册操作栏,替换发薪

  • 现状:花名册操作栏(Roster.tsx:694-747)有调薪/发薪/调部门/离职,无转正入口;转正仍在用工办理 CONFIRM 流程。
  • 修复方向
    1. 操作栏"发薪"按钮(Wallet711-720 行)替换为"转正"按钮(CheckCircle),点击弹出转正 Modal(转正日期 + 转正薪资)。
    2. 仅试用期员工(probationInfo.isProbation)显示转正按钮。
    3. 发薪入口保留在薪税管理模块。
  • 优先级P1 高
  • 涉及文件Roster.tsxroster/modals.tsx(新增 ConfirmModal

问题 19:转正薪资未回写花名册,未与用工协议匹配校验

  • 现状CONFIRM 流程填写 regularSalary 后未同步到员工 monthlySalary,也未校验与已签合同薪资是否一致。
  • 修复方向
    1. 转正完成后同步更新员工 monthlySalary,并在花名册明细展示"试用期薪资 → 转正薪资"变更记录。
    2. 校验转正薪资与最新合同 monthlySalary 是否一致,不一致时提示并支持发起合同变更流程(CHANGE)。
  • 优先级P1 高
  • 涉及文件work-process.service.tsCONFIRM 完成回调)、Roster.tsxroster/SalaryInfo.tsx

问题 20:开具证明移植到花名册操作栏

  • 现状:操作栏无开具证明入口,需进用工办理 INCOME_CERT/LEAVING_CERT 流程。
  • 修复方向:操作栏新增"证明"按钮(FileText),点击弹出证明类型选择(收入证明/离职证明/在职证明),复用 WorkProcess 的 INCOME_CERT/LEAVING_CERT 表单。
  • 优先级P2 中
  • 涉及文件Roster.tsxroster/modals.tsx

问题 21:合同续签移植到花名册操作栏

  • 现状:操作栏无续签入口,批量续签在列表顶部(Roster.tsx:444),单人续签需进用工办理。
  • 修复方向:操作栏新增"续签"按钮(Repeat),仅合同即将到期(≤30 天)或已到期员工显示,点击跳转 WorkProcess RENEW 并预填员工。
  • 优先级P2 中
  • 涉及文件Roster.tsxWorkProcess.tsx(支持 URL 参数预填)

问题 22:合同变更选择员工无法查询到对应合同

  • 现状WorkProcess.tsx:88-92 CHANGE 表单 contractIdcontract-select 类型,但选择员工后未按员工过滤合同列表,导致查不到。
  • 修复方向
    1. contract-select 组件接收 employeeId 参数,仅返回该员工的有效合同。
    2. 后端合同查询接口支持 employeeId 过滤。
  • 优先级P1 高
  • 涉及文件WorkProcess.tsxcontract-select 组件)、backend/src/routes/contract.routes.ts

问题 23:合同续签原合同 ID 无法查询,改为选择已存在合同

  • 现状WorkProcess.tsx:95 RENEW 表单 oldContractIdtext 类型,需手动输入 UUID,无法查询。
  • 修复方向:将 oldContractId 改为 contract-select(同问题 22),选择员工后下拉展示该员工已存在合同。
  • 优先级P1 高
  • 涉及文件WorkProcess.tsxRENEW 字段类型)

问题 26:去掉用工办理模块

  • 现状:侧边栏"团队"分组有"用工办理"入口(SidebarNav.tsx:47),承载 HIRE/ONBOARD/CONFIRM/CHANGE/RENEW/SUSPEND/INCOME_CERT/LEAVING_CERT/FLEXIBLE 等流程。
  • 修复方向
    1. 将各流程入口下沉到花名册操作栏(转正/续签/变更/开具证明/入职)和独立页面(合同管理/电子签署)。
    2. 侧边栏移除"用工办理"菜单项,保留 WorkProcess 页面作为批量流程入口(或迁移到"更多"分组)。
    3. 需先完成问题 18/20/21/22/23 的入口下沉,再移除菜单。
  • 优先级P2 中(依赖前置问题完成)
  • 涉及文件SidebarNav.tsxRoster.tsxWorkProcess.tsxApp.tsx(路由)

三、花名册(问题 14-17、24-25)

问题 14:身份证号全域改为"证件号码"

  • 现状roster/modals.tsx:687WorkProcess.tsx:60/109/132/140 等多处 label 为"身份证号"。
  • 修复方向:全域搜索替换 label "身份证号" → "证件号码",字段名 idCardNumber 保持不变(兼容历史数据),同时支持证件类型下拉(身份证/护照/港澳台通行证)。
  • 优先级P2 中
  • 涉及文件roster/modals.tsxWorkProcess.tsxRoster.tsx(搜索 placeholder)、SpecialStatus.tsx

问题 15:添加员工根据证件号码进行年龄合规筛查

  • 现状roster/modals.tsx:557 已根据身份证号自动计算性别,未做年龄校验。
  • 修复方向
    1. 解析证件号码出生日期,计算年龄。
    2. 年龄 < 16 岁禁止录入(童工红线),强提示并阻断。
    3. 年龄 ≥ 60(男)/55(女干部)/50(女工人)提示已达法定退休年龄,确认后允许录入但标记"退休返聘"。
  • 优先级P1 高
  • 涉及文件roster/modals.tsxhandleIdCardChange

问题 16:编辑入职日期后状态未变更

  • 现状:花名册明细编辑入职日期后,员工状态未联动(如改为下月 1 日入职,状态应从"在职"变为"待入职")。
  • 修复方向
    1. 编辑入职日期时,若新入职日期 > 今天,状态自动设为 PENDING_ONBOARD(待入职);若 ≤ 今天,设为 ACTIVE
    2. 状态变更需二次确认,避免误操作。
    3. 变更记录留痕到员工档案。
  • 优先级P1 高
  • 涉及文件roster/BasicInfo.tsxbackend/src/services/employee.service.ts

问题 17:录入手机号查重

  • 现状roster/modals.tsx:702 手机号为选填,无查重;身份证号已有查重(691 行)。
  • 修复方向
    1. 手机号录入时调用查重接口,已存在则提示"该手机号已用于 XX 人员"。
    2. 允许继续保存(一人多号/家庭号场景),但强提示确认。
  • 优先级P2 中
  • 涉及文件roster/modals.tsxbackend/src/routes/employee.routes.ts(新增手机号查重接口)

问题 24:花名册多选增加批量转正

  • 现状Roster.tsx:444-447 批量操作仅有"批量续签""批量解聘",无批量转正。
  • 修复方向
    1. 多选后新增"批量转正"按钮,仅对试用期员工生效。
    2. 弹窗统一填写转正日期(默认今天)和转正薪资(可按原薪资倍数/手动逐人填写)。
    3. 调用后端批量转正接口,复用问题 18 的转正逻辑。
  • 优先级P2 中
  • 涉及文件Roster.tsxroster/modals.tsxbackend/src/services/employee.service.ts

问题 25:花名册多选增加批量开具证明

  • 现状:无批量开具证明入口。
  • 修复方向
    1. 多选后新增"批量开具证明"按钮,选择证明类型(在职/收入)后批量生成。
    2. 支持批量下载(ZIP)或逐个下载。
  • 优先级P2 中
  • 涉及文件Roster.tsxbackend/src/services/work-process.service.ts(批量生成接口)

四、薪税管理(问题 28

问题 28:补偿金批次经济补偿金发放数据读取错误

  • 现状money/BatchTab.tsx:110 批次类型支持 SEVERANCE(补偿金),但创建补偿金批次时经济补偿金发放数据读取逻辑有误(疑似读取了工资数据或未关联离职草稿的 compensationBreakdown)。
  • 修复方向
    1. 排查 createBatchtype=SEVERANCE 时的数据源,应从已审批通过的 termination_draft 读取 compensationBreakdown.grandTotal
    2. 校验员工范围:仅包含有未发放补偿金的离职员工。
    3. 增加预览页展示每位员工的补偿金明细,确认后再创建批次。
  • 优先级P0 紧急
  • 涉及文件money/BatchTab.tsxbackend/src/services/payroll.service.tsSEVERANCE 分支)

五、特殊员工(问题 29

问题 29:男职工应无法选择三期

  • 现状SpecialStatus.tsx:123 默认 type: 'PREGNANCY',新增/编辑表单未根据员工性别过滤类型,男职工也可选"三期"。
  • 修复方向
    1. 选择员工后,若 gender === '男',类型下拉移除"三期"选项或置灰并提示"三期仅适用于女性员工"。
    2. 后端保存时增加校验,男职工 + PREGNANCY 组合拒绝并返回 400。
  • 优先级P1 高
  • 涉及文件SpecialStatus.tsx(表单 type 下拉)、backend/src/services/special-status.service.ts

六、系统设置 / 组织架构(问题 27)

问题 27:增加简单组织架构,支持三步以内审批流转

  • 现状:系统无组织架构模块,LeaveApproval.tsx:90 仅有简单审批,无层级流转;settingsApi.org() 仅返回企业基本信息。当前员工仅有 department(字符串)和 position(字符串,前端 label "职务/岗位")两个字段,无上下级关系。
  • 职位/岗位设计决策
    • 现状:数据库只有一个 position 字段(schema.prisma:225,注释"岗位"),前端 label 统一为"职务/岗位"roster/modals.tsx:686roster/BasicInfo.tsx:153/328),已合并为一个字段。
    • 建议方案 A(推荐,保留一个字段):维持 position 单字段,label 保持"职务/岗位"。组织架构中"岗位"作为独立实体管理(岗位字典,含岗位名称、职级、编制人数),员工 position 关联到岗位字典。优点:改动小,兼容历史数据,符合当前使用习惯。
    • 方案 B(拆分两个字段):新增 jobTitle(职位,如"经理/主管/专员"+ position(岗位,如"前端工程师")。优点:职级体系更清晰;缺点:需改 schema + 全域表单 + 历史 position 数据需清洗归类,工作量大。
    • 结论:建议采用方案 A,组织架构模块中"岗位"独立建表(Position 字典),员工 position 字段值关联岗位字典 ID 或保持文本(兼容旧数据),审批流按"直属上级 → 部门负责人"两级流转,无需引入职级。
  • 修复方向
    1. 系统设置新增"组织架构"子页:树形部门(Department 自引用 parent+ 岗位字典(Position,含名称/所属部门/编制)+ 上下级关系(Employee.supervisorId)。
    2. 新建简单审批流配置:最多 3 步(发起人 → 直属上级 → 部门负责人),支持按流程类型(休假/离职/调薪)配置是否启用某步。
    3. 现有 LeaveApproval 接入审批流引擎,离职/调薪等流程可选启用。
    4. 数据模型:Department(树形,parent 自引用)、Position(岗位字典)、Employee.supervisorIdApprovalFlowtype + steps)。
  • 优先级P3 规划(新模块,建议单独排期)
  • 涉及文件Settings.tsx、新增 pages/OrgChart.tsxbackend/prisma/schema.prismabackend/src/services/approval.service.ts

七、全域问题(问题 1、30、31

问题 1:"劳动合同"调整为更宽泛的"用工关系"

  • 现状:系统多处文案使用"劳动合同"(合同管理、离职管理、WorkProcess 等)。
  • 修复方向
    1. 全域文案审计:将面向用户的"劳动合同"在合适场景改为"用工关系"或"用工协议"(涵盖劳动合同/劳务协议/实习协议/灵活用工协议)。
    2. 数据层 Contract 模型保持不变,新增 contractCategory 字段区分劳动关系类型。
    3. 注意法律文书模板中的"劳动合同"为法定术语,不可改。
  • 优先级P2 中
  • 涉及文件SidebarNav.tsxContracts.tsxWorkProcess.tsxTermination.tsx 等文案

问题 30:全域保存草稿后部分录入数据未保存(BUG)

  • 现状:多个流程页面支持"保存草稿",但部分字段(如 compAdjustmentshandoverItems 备注、checklistOverrides)未持久化。
  • 修复方向
    1. 排查各流程 saveDraft 的 payload,确保覆盖所有前端 state。
    2. 后端 draft 表 schema 检查是否有字段缺失(compensationBreakdown.adjustmentshandoverItems.remark 等)。
    3. 增加"草稿完整性校验":保存后立即回读对比,缺失字段告警。
    4. 重点排查:Termination(补偿金调整/交接备注)、WorkProcess(自定义字段)。
  • 优先级P0 紧急
  • 涉及文件Termination.tsxhandleSaveDraft)、WorkProcess.tsxbackend/src/services/termination.service.tsbackend/src/services/work-process.service.ts

问题 31:单立户客服端

已实现部分(平台管理端,代码完整可运行)

系统已有完整的"平台管理端"(Platform),前后端代码均已实现:

前端(4 页面 + 1 侧边栏)

  • frontend/src/pages/platform/PlatformLogin.tsx — 独立登录页
  • frontend/src/pages/platform/PlatformDashboard.tsx — 数据总览(企业数/用户数/员工数/合同数/工资条数 + 套餐分布 + 最近注册企业)
  • frontend/src/pages/platform/PlatformOrgs.tsx — 企业租户管理(创建/搜索/编辑套餐/删除/管理员账号管理)
  • frontend/src/pages/platform/PlatformUsers.tsx — 用户管理(启用/禁用)
  • frontend/src/components/layout/PlatformSidebar.tsx — 独立侧边栏(带 ADMIN 徽章)
  • frontend/src/lib/api-services.ts:938-965platformApi 完整定义
  • frontend/src/App.tsx:217-220 — 四条路由注册 + PlatformRoute 角色校验(SUPER_ADMIN

后端(1 路由文件 437 行 + 1 schema

  • backend/src/routes/platform.routes.ts — 完整实现 11 个接口:
    • GET /platform/dashboard — 平台总览数据
    • GET /platform/orgs — 企业列表(分页+搜索+套餐筛选)
    • POST /platform/orgs — 创建企业(含管理员账号自动创建)
    • GET /platform/orgs/:id — 企业详情(含用户列表)
    • PUT /platform/orgs/:id — 编辑企业(套餐/上限/联系人)
    • PUT /platform/orgs/:id/admin — 编辑企业管理员(姓名/手机号/重置密码)
    • DELETE /platform/orgs/:id — 删除企业(级联)
    • GET /platform/users — 全平台用户列表
    • PUT /platform/users/:id/toggle — 启用/禁用用户
    • GET /platform/admins — 平台管理员列表
    • POST /platform/admins — 创建平台管理员
  • backend/src/schemas/platform.schema.ts — 入参校验
  • backend/src/middleware/auth.tsplatformAdminMiddleware 权限校验

数据模型

  • Organization 模型支持多租户(plan/maxEmployees/city/contactName/contactPhone
  • User.roleSUPER_ADMIN 角色,orgId 为 null(平台管理员不归属任何租户)
  • backend/prisma/seed-multi-org.ts — 多租户种子数据

结论:单立户服务(开户+租户管理+用户管理+数据总览)已完整实现CSV 标注为"调整"类型也印证了该功能已存在。

可增强部分(客服工作台,尚未实现)

当前平台管理端是"运营管理后台",定位为超级管理员/运营使用。如需扩展为客服人员日常服务客户的工作台,以下功能尚未实现:

增强项 现状 说明
工单管理 缺失 Ticket 模型、无工单页面,客服无法接收/分派/跟进客户问题
客户会话 缺失 无会话模块,客服无法与客户企业管理员实时沟通或留言
租户数据穿透 缺失 SUPER_ADMIN 仅能看租户列表和统计,无法穿透查看指定租户的花名册/合同/薪税/风险等业务数据
协助操作 部分已有 管理员重置密码已有,代客户发起流程/调整套餐等未实现
AI 辅助 缺失 当前 AI 仅在企业端,客服侧无 AI 问答辅助
操作日志 缺失 当前 AuditLog 仅在企业端,客服操作无留痕

增强修复方向(如需)

  1. 新增角色 SUPPORT(客服),独立路由 /support/*,独立登录页 /support/login
  2. 客服端侧边栏含:工单中心、客户会话、租户数据查看、协助操作、AI 辅助、操作日志。
  3. 数据模型新增:Ticket(工单:标题/内容/状态/优先级/归属租户/处理人)、TicketMessage(工单回复)、ChatSession(客户会话)。
  4. 租户数据穿透:客服选择租户后,以"只读+代操作"模式访问该租户的业务数据(复用现有 API,请求头带 X-Support-Tenant-Id,后端中间件切换租户上下文)。
  5. AI 辅助复用现有 AI 接口,独立会话隔离。
  6. MVP 建议:先做工单 + 租户数据查看 + AI 辅助三项。
  • 优先级:核心功能已完成;增强部分 P3 规划(新模块,建议单独排期)
  • 涉及文件(增强部分):新增 frontend/src/pages/support/*frontend/src/components/layout/SupportSidebar.tsxbackend/prisma/schema.prismaTicket/ChatSession 模型)、backend/src/routes/support.routes.tsbackend/src/middleware/support-tenant.ts

优先级汇总

优先级 问题 说明
P0 紧急 7、10、11、13、28、30 数据丢失/业务正确性/合规风险
P1 高 2、3、5、6、8、9、12、15、16、18、19、22、23、29 流程阻塞或合规校验缺失
P2 中 1、4、14、17、20、21、24、25、26 体验优化/功能增强
P3 规划 27、31增强 新模块(组织架构+审批流 / 客服工作台增强),需单独排期
已完成 31核心 单立户服务(平台管理端)已完整实现,前后端代码可运行

建议执行顺序

  1. 第一批(P0,立即):问题 30(草稿丢失)→ 问题 7(补偿金合计)→ 问题 10(驳回未更新)→ 问题 11(违法解除风险)→ 问题 13(合同日期校验)→ 问题 28(补偿金批次数据)
  2. 第二批(P1,本迭代):离职管理联动(2/3/5/6/8/9)→ 花名册校验(15/16)→ 用工办理入口下沉(18/19/22/23)→ 特殊员工性别校验(29)
  3. 第三批(P2,排期):花名册批量操作(24/25)→ 文案统一(1/14)→ 入口下沉收尾(20/21/26)→ 年假折算(4)→ 手机号查重(17)
  4. 第四批(P3,规划):组织架构与审批流(27)→ 客服工作台增强(31增强,MVP = 工单 + 租户数据查看 + AI 辅助)
    • 问题 31 核心功能(单立户服务/平台管理端)已完整实现,无需开发

备注

  • 本清单基于当期代码梳理,部分"根因"为基于代码静态分析的推断,实际修复前需运行复现确认。
  • 涉及数据库 schema 变更的(问题 2/27/31),需走 migration + 回滚方案,符合数据 8 铁律。
  • 涉及文案全域替换的(问题 1/14),需同步更新 HelpModal、OnboardingGuide 等帮助文案。
  • 问题 26(去掉用工办理模块)依赖问题 18/20/21/22/23 完成,不可先行移除。