e1b5ae9aab
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>
27 KiB
27 KiB
20260815 优化清单
来源:
20260815-优化.csv(共 31 条) 结合 TurboHR 当期功能梳理,按模块归类,标注根因 / 修复方向 / 优先级 / 涉及文件。 优先级:P0 紧急(影响业务正确性/数据丢失)|P1 高(流程阻塞或合规风险)|P2 中(体验/增强)|P3 规划(新模块)
一、离职管理(问题 2-11)
问题 2:离职日期调整后未联动社保/公积金截止年月
- 现状:
Termination.tsx:1334-1338社保截止、公积金截止为<Input type="month">手动填写,默认值取terminationDate.slice(0,7),但修改离职日期后不会重算,也无"15 日前/后"规则。 - 修复方向:
- 增加"离职日期 → 社保/公积金截止月"自动推导规则:每月 15 日(含)前离职不缴当月、15 日后离职缴纳当月,截止月 = 离职月 - 0 或 -1。
- 阈值日期(15 日)做成系统设置可配置项(
org_settings.socialInsCutoffDay,默认 15)。 - 离职日期变更时自动回填两个截止月,同时保留手动覆盖入口。
- 优先级:P1 高
- 涉及文件:
frontend/src/pages/Termination.tsx、backend/src/services/termination.service.ts、backend/prisma/schema.prisma(org_settings 增字段)
问题 3:合规检查"是否已支付经济补偿金"硬阻断
- 现状:合规检查为必勾才能进入下一步,未勾选时无法继续,且未保存的检查项不进入待办/风险提醒。
- 修复方向:
- 将"必勾才能下一步"改为"未勾选可下一步,但自动写入待办事项 + 风险提醒"。
- 待办项关联
termination_draft,在 Dashboard/风险中心展示"XX 员工解聘未支付经济补偿金"。 - 提交审批时若仍存在未闭环必检项,给出强提示但不阻断(除非法定禁止情形,如孕期/工伤)。
- 优先级:P1 高
- 涉及文件:
Termination.tsx(step 2 校验逻辑)、backend/src/services/notification.service.ts、frontend/src/pages/Dashboard.tsx
问题 4:费用结算新增"剩余年假天数"
- 现状:费用结算步骤仅展示补偿金/代通知金/赔偿金,未涉及年假折算。
- 修复方向:
- 费用结算区新增"剩余年假天数"字段,支持手动录入或调用考勤模块年假余额(若有)。
- 按规则计算未休年假折算工资:
日工资 × 剩余年假天数 × 300%(未休部分)。 - 折算金额计入"合计应付"。
- 优先级:P2 中
- 涉及文件:
Termination.tsx(step 3)、backend/src/services/termination.service.ts(cost 计算扩展)
问题 5:补偿月数支持 N / N+1 / 2N / 其他
- 现状:
Termination.tsx:1442补偿月数取costResult.cappedMonths(系统按工龄自动算 N),不允许选择其他模式。 - 修复方向:
- 补偿月数改为下拉:N、N+1、2N、其他(自定义输入)。
- 选择"协商解除"时允许修改月数并实时重算补偿金。
- 选择"其他"时需填写说明,留痕到
compensationBreakdown.adjustments。
- 优先级:P1 高
- 涉及文件:
Termination.tsx(step 3 补偿金区)、backend/src/services/termination.service.ts
问题 6:计算基数支持多种来源
- 现状:
Termination.tsx:1443计算基数固定取costResult.cappedWage(近 12 月平均工资,且有三倍社平工资封顶)。 - 修复方向:
- 计算基数改为下拉:近 12 月平均工资(默认)、合同工资、其他(手动填写)。
- 切换来源后实时重算补偿金,并记录选用算法到草稿。
- "其他"需填写说明,受三倍社平封顶提示但不强制。
- 优先级:P1 高
- 涉及文件:
Termination.tsx、termination.service.ts
问题 7:手动调整补偿金分项后合计未同步
- 现状:
Termination.tsx:530注释提到"系统预估 + 手动调整差额",但handleSave(578 行附近)仍使用costResult.grandTotal,未叠加compAdjustments。20260803 问题 13 已识别但未闭环。 - 修复方向:
- 实际合计 =
costResult.grandTotal + Σ(adjustments.to - adjustments.from),保存与确认页统一使用此值。 - 调整任一分项后实时刷新"合计应付"显示。
- 后端
compensationBreakdown.adjustments已支持,前端需正确传递并回显。
- 实际合计 =
- 优先级:P0 紧急
- 涉及文件:
Termination.tsx(handleSave、确认步骤、step 3 合计显示)
问题 8:工作交接未完成无法下一步
- 现状:
Termination.tsx:552-554step 4 校验work_handover/equipment_return/access_revoke三项必须完成才能下一步。 - 修复方向:
- 改为可下一步,未完成事项自动写入待办(关联离职草稿)。
- 交接清单前三项标注"离职必办",未完成时在确认页和风险中心强提示。
- 待办在到达离职日期前持续提醒,超期升级为风险。
- 优先级:P1 高
- 涉及文件:
Termination.tsx(step 4 校验)、notification.service.ts、Dashboard.tsx
问题 9:离职管理"新建解聘"并入花名册操作栏
- 现状:花名册操作栏已有"离职"按钮(
Roster.tsx:734-746,触发ResignModal创建 RESIGNATION 草稿),但"新建解聘"仍在离职管理列表页独立入口,且仅支持 RESIGNATION 类型。 - 修复方向:
- 花名册操作栏"离职"按钮扩展为支持所有解聘类型(协商/过错/非过错/裁员/到期/违法),弹出类型选择后跳转 Termination 向导并预填员工。
- 离职管理列表页移除"新建解聘"按钮,仅保留草稿列表与审批。
- 优先级:P1 高
- 涉及文件:
Roster.tsx、roster/modals.tsx(ResignModal)、Termination.tsx(支持 URL 参数预填)
问题 10:解聘驳回后修改内容未更新
- 现状:驳回后重新修改解聘类型、金额等,系统未按新内容更新(疑似使用旧草稿快照或前端未刷新)。
- 修复方向:
- 排查
updateDraft是否正确覆盖reason/compensationBreakdown/terminationDate。 - 驳回后再编辑走
updateDraft(而非新建),版本号 +1,旧版本留快照。 - 前端进入驳回草稿时强制重新拉取最新数据。
- 排查
- 优先级:P0 紧急
- 涉及文件:
Termination.tsx(编辑驳回草稿逻辑)、backend/src/services/termination.service.ts、backend/src/routes/termination.routes.ts
问题 11:违法解除降低补偿金后无合规风险提醒
- 现状:选择 ILLEGAL(2N)后手动降低补偿金金额,
acknowledgeRisk仅在初始选择违法解除时提示,金额变动后不再校验。 - 修复方向:
- 实际补偿金 < 法定 2N 时,强制弹出合规风险提醒,需勾选"已知风险并继续"才能下一步。
- 风险提醒记录到
compensationBreakdown.riskAcknowledged,留痕可审计。 - 同步推送风险中心。
- 优先级:P0 紧急
- 涉及文件:
Termination.tsx(step 3 风险校验)、risk-center
二、用工办理 / 合同(问题 12-13、18、20-23、26)
问题 12:合同续签新增合同开始日期应为上一份结束日期 +1
- 现状:
WorkProcess.tsx:93-99RENEW 表单newStartDate为手动填写,无自动推导。 - 修复方向:
- 选择员工后自动拉取最新已签合同,
newStartDate默认 = 上一份合同endDate + 1 天。 - 允许手动覆盖,但偏离时提示。
- 选择员工后自动拉取最新已签合同,
- 优先级:P1 高
- 涉及文件:
WorkProcess.tsx(RENEW 字段)、backend/src/services/work-process.service.ts
问题 13:合同结束日期早于开始日期未校验
- 现状:
WorkProcess.tsx表单提交前无日期前后关系校验,已产生时间倒置数据。 - 修复方向:
- 前端表单提交前校验
endDate >= startDate,否则阻断并提示。 - 后端
work-process.service.ts增加同样校验,双保险。 - 历史倒置数据提供修复脚本/列表提示。
- 前端表单提交前校验
- 优先级:P0 紧急
- 涉及文件:
WorkProcess.tsx、work-process.service.ts
问题 18:员工转正移植到花名册操作栏,替换发薪
- 现状:花名册操作栏(
Roster.tsx:694-747)有调薪/发薪/调部门/离职,无转正入口;转正仍在用工办理 CONFIRM 流程。 - 修复方向:
- 操作栏"发薪"按钮(
Wallet,711-720 行)替换为"转正"按钮(CheckCircle),点击弹出转正 Modal(转正日期 + 转正薪资)。 - 仅试用期员工(
probationInfo.isProbation)显示转正按钮。 - 发薪入口保留在薪税管理模块。
- 操作栏"发薪"按钮(
- 优先级:P1 高
- 涉及文件:
Roster.tsx、roster/modals.tsx(新增ConfirmModal)
问题 19:转正薪资未回写花名册,未与用工协议匹配校验
- 现状:CONFIRM 流程填写
regularSalary后未同步到员工monthlySalary,也未校验与已签合同薪资是否一致。 - 修复方向:
- 转正完成后同步更新员工
monthlySalary,并在花名册明细展示"试用期薪资 → 转正薪资"变更记录。 - 校验转正薪资与最新合同
monthlySalary是否一致,不一致时提示并支持发起合同变更流程(CHANGE)。
- 转正完成后同步更新员工
- 优先级:P1 高
- 涉及文件:
work-process.service.ts(CONFIRM 完成回调)、Roster.tsx、roster/SalaryInfo.tsx
问题 20:开具证明移植到花名册操作栏
- 现状:操作栏无开具证明入口,需进用工办理 INCOME_CERT/LEAVING_CERT 流程。
- 修复方向:操作栏新增"证明"按钮(
FileText),点击弹出证明类型选择(收入证明/离职证明/在职证明),复用 WorkProcess 的 INCOME_CERT/LEAVING_CERT 表单。 - 优先级:P2 中
- 涉及文件:
Roster.tsx、roster/modals.tsx
问题 21:合同续签移植到花名册操作栏
- 现状:操作栏无续签入口,批量续签在列表顶部(
Roster.tsx:444),单人续签需进用工办理。 - 修复方向:操作栏新增"续签"按钮(
Repeat),仅合同即将到期(≤30 天)或已到期员工显示,点击跳转 WorkProcess RENEW 并预填员工。 - 优先级:P2 中
- 涉及文件:
Roster.tsx、WorkProcess.tsx(支持 URL 参数预填)
问题 22:合同变更选择员工无法查询到对应合同
- 现状:
WorkProcess.tsx:88-92CHANGE 表单contractId为contract-select类型,但选择员工后未按员工过滤合同列表,导致查不到。 - 修复方向:
contract-select组件接收employeeId参数,仅返回该员工的有效合同。- 后端合同查询接口支持
employeeId过滤。
- 优先级:P1 高
- 涉及文件:
WorkProcess.tsx(contract-select 组件)、backend/src/routes/contract.routes.ts
问题 23:合同续签原合同 ID 无法查询,改为选择已存在合同
- 现状:
WorkProcess.tsx:95RENEW 表单oldContractId为text类型,需手动输入 UUID,无法查询。 - 修复方向:将
oldContractId改为contract-select(同问题 22),选择员工后下拉展示该员工已存在合同。 - 优先级:P1 高
- 涉及文件:
WorkProcess.tsx(RENEW 字段类型)
问题 26:去掉用工办理模块
- 现状:侧边栏"团队"分组有"用工办理"入口(
SidebarNav.tsx:47),承载 HIRE/ONBOARD/CONFIRM/CHANGE/RENEW/SUSPEND/INCOME_CERT/LEAVING_CERT/FLEXIBLE 等流程。 - 修复方向:
- 将各流程入口下沉到花名册操作栏(转正/续签/变更/开具证明/入职)和独立页面(合同管理/电子签署)。
- 侧边栏移除"用工办理"菜单项,保留 WorkProcess 页面作为批量流程入口(或迁移到"更多"分组)。
- 需先完成问题 18/20/21/22/23 的入口下沉,再移除菜单。
- 优先级:P2 中(依赖前置问题完成)
- 涉及文件:
SidebarNav.tsx、Roster.tsx、WorkProcess.tsx、App.tsx(路由)
三、花名册(问题 14-17、24-25)
问题 14:身份证号全域改为"证件号码"
- 现状:
roster/modals.tsx:687、WorkProcess.tsx:60/109/132/140等多处 label 为"身份证号"。 - 修复方向:全域搜索替换 label "身份证号" → "证件号码",字段名
idCardNumber保持不变(兼容历史数据),同时支持证件类型下拉(身份证/护照/港澳台通行证)。 - 优先级:P2 中
- 涉及文件:
roster/modals.tsx、WorkProcess.tsx、Roster.tsx(搜索 placeholder)、SpecialStatus.tsx等
问题 15:添加员工根据证件号码进行年龄合规筛查
- 现状:
roster/modals.tsx:557已根据身份证号自动计算性别,未做年龄校验。 - 修复方向:
- 解析证件号码出生日期,计算年龄。
- 年龄 < 16 岁禁止录入(童工红线),强提示并阻断。
- 年龄 ≥ 60(男)/55(女干部)/50(女工人)提示已达法定退休年龄,确认后允许录入但标记"退休返聘"。
- 优先级:P1 高
- 涉及文件:
roster/modals.tsx(handleIdCardChange)
问题 16:编辑入职日期后状态未变更
- 现状:花名册明细编辑入职日期后,员工状态未联动(如改为下月 1 日入职,状态应从"在职"变为"待入职")。
- 修复方向:
- 编辑入职日期时,若新入职日期 > 今天,状态自动设为
PENDING_ONBOARD(待入职);若 ≤ 今天,设为ACTIVE。 - 状态变更需二次确认,避免误操作。
- 变更记录留痕到员工档案。
- 编辑入职日期时,若新入职日期 > 今天,状态自动设为
- 优先级:P1 高
- 涉及文件:
roster/BasicInfo.tsx、backend/src/services/employee.service.ts
问题 17:录入手机号查重
- 现状:
roster/modals.tsx:702手机号为选填,无查重;身份证号已有查重(691 行)。 - 修复方向:
- 手机号录入时调用查重接口,已存在则提示"该手机号已用于 XX 人员"。
- 允许继续保存(一人多号/家庭号场景),但强提示确认。
- 优先级:P2 中
- 涉及文件:
roster/modals.tsx、backend/src/routes/employee.routes.ts(新增手机号查重接口)
问题 24:花名册多选增加批量转正
- 现状:
Roster.tsx:444-447批量操作仅有"批量续签""批量解聘",无批量转正。 - 修复方向:
- 多选后新增"批量转正"按钮,仅对试用期员工生效。
- 弹窗统一填写转正日期(默认今天)和转正薪资(可按原薪资倍数/手动逐人填写)。
- 调用后端批量转正接口,复用问题 18 的转正逻辑。
- 优先级:P2 中
- 涉及文件:
Roster.tsx、roster/modals.tsx、backend/src/services/employee.service.ts
问题 25:花名册多选增加批量开具证明
- 现状:无批量开具证明入口。
- 修复方向:
- 多选后新增"批量开具证明"按钮,选择证明类型(在职/收入)后批量生成。
- 支持批量下载(ZIP)或逐个下载。
- 优先级:P2 中
- 涉及文件:
Roster.tsx、backend/src/services/work-process.service.ts(批量生成接口)
四、薪税管理(问题 28)
问题 28:补偿金批次经济补偿金发放数据读取错误
- 现状:
money/BatchTab.tsx:110批次类型支持SEVERANCE(补偿金),但创建补偿金批次时经济补偿金发放数据读取逻辑有误(疑似读取了工资数据或未关联离职草稿的compensationBreakdown)。 - 修复方向:
- 排查
createBatch当type=SEVERANCE时的数据源,应从已审批通过的termination_draft读取compensationBreakdown.grandTotal。 - 校验员工范围:仅包含有未发放补偿金的离职员工。
- 增加预览页展示每位员工的补偿金明细,确认后再创建批次。
- 排查
- 优先级:P0 紧急
- 涉及文件:
money/BatchTab.tsx、backend/src/services/payroll.service.ts(SEVERANCE 分支)
五、特殊员工(问题 29)
问题 29:男职工应无法选择三期
- 现状:
SpecialStatus.tsx:123默认type: 'PREGNANCY',新增/编辑表单未根据员工性别过滤类型,男职工也可选"三期"。 - 修复方向:
- 选择员工后,若
gender === '男',类型下拉移除"三期"选项或置灰并提示"三期仅适用于女性员工"。 - 后端保存时增加校验,男职工 + 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:686、roster/BasicInfo.tsx:153/328),已合并为一个字段。 - 建议方案 A(推荐,保留一个字段):维持
position单字段,label 保持"职务/岗位"。组织架构中"岗位"作为独立实体管理(岗位字典,含岗位名称、职级、编制人数),员工position关联到岗位字典。优点:改动小,兼容历史数据,符合当前使用习惯。 - 方案 B(拆分两个字段):新增
jobTitle(职位,如"经理/主管/专员")+position(岗位,如"前端工程师")。优点:职级体系更清晰;缺点:需改 schema + 全域表单 + 历史 position 数据需清洗归类,工作量大。 - 结论:建议采用方案 A,组织架构模块中"岗位"独立建表(
Position字典),员工position字段值关联岗位字典 ID 或保持文本(兼容旧数据),审批流按"直属上级 → 部门负责人"两级流转,无需引入职级。
- 现状:数据库只有一个
- 修复方向:
- 系统设置新增"组织架构"子页:树形部门(
Department自引用 parent)+ 岗位字典(Position,含名称/所属部门/编制)+ 上下级关系(Employee.supervisorId)。 - 新建简单审批流配置:最多 3 步(发起人 → 直属上级 → 部门负责人),支持按流程类型(休假/离职/调薪)配置是否启用某步。
- 现有
LeaveApproval接入审批流引擎,离职/调薪等流程可选启用。 - 数据模型:
Department(树形,parent 自引用)、Position(岗位字典)、Employee.supervisorId、ApprovalFlow(type + steps)。
- 系统设置新增"组织架构"子页:树形部门(
- 优先级:P3 规划(新模块,建议单独排期)
- 涉及文件:
Settings.tsx、新增pages/OrgChart.tsx、backend/prisma/schema.prisma、backend/src/services/approval.service.ts
七、全域问题(问题 1、30、31)
问题 1:"劳动合同"调整为更宽泛的"用工关系"
- 现状:系统多处文案使用"劳动合同"(合同管理、离职管理、WorkProcess 等)。
- 修复方向:
- 全域文案审计:将面向用户的"劳动合同"在合适场景改为"用工关系"或"用工协议"(涵盖劳动合同/劳务协议/实习协议/灵活用工协议)。
- 数据层
Contract模型保持不变,新增contractCategory字段区分劳动关系类型。 - 注意法律文书模板中的"劳动合同"为法定术语,不可改。
- 优先级:P2 中
- 涉及文件:
SidebarNav.tsx、Contracts.tsx、WorkProcess.tsx、Termination.tsx等文案
问题 30:全域保存草稿后部分录入数据未保存(BUG)
- 现状:多个流程页面支持"保存草稿",但部分字段(如
compAdjustments、handoverItems备注、checklistOverrides)未持久化。 - 修复方向:
- 排查各流程
saveDraft的 payload,确保覆盖所有前端 state。 - 后端
draft表 schema 检查是否有字段缺失(compensationBreakdown.adjustments、handoverItems.remark等)。 - 增加"草稿完整性校验":保存后立即回读对比,缺失字段告警。
- 重点排查:Termination(补偿金调整/交接备注)、WorkProcess(自定义字段)。
- 排查各流程
- 优先级:P0 紧急
- 涉及文件:
Termination.tsx(handleSaveDraft)、WorkProcess.tsx、backend/src/services/termination.service.ts、backend/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-965—platformApi完整定义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.ts—platformAdminMiddleware权限校验
数据模型:
Organization模型支持多租户(plan/maxEmployees/city/contactName/contactPhone)User.role含SUPER_ADMIN角色,orgId为 null(平台管理员不归属任何租户)backend/prisma/seed-multi-org.ts— 多租户种子数据
结论:单立户服务(开户+租户管理+用户管理+数据总览)已完整实现,CSV 标注为"调整"类型也印证了该功能已存在。
可增强部分(客服工作台,尚未实现)
当前平台管理端是"运营管理后台",定位为超级管理员/运营使用。如需扩展为客服人员日常服务客户的工作台,以下功能尚未实现:
| 增强项 | 现状 | 说明 |
|---|---|---|
| 工单管理 | 缺失 | 无 Ticket 模型、无工单页面,客服无法接收/分派/跟进客户问题 |
| 客户会话 | 缺失 | 无会话模块,客服无法与客户企业管理员实时沟通或留言 |
| 租户数据穿透 | 缺失 | SUPER_ADMIN 仅能看租户列表和统计,无法穿透查看指定租户的花名册/合同/薪税/风险等业务数据 |
| 协助操作 | 部分已有 | 管理员重置密码已有,代客户发起流程/调整套餐等未实现 |
| AI 辅助 | 缺失 | 当前 AI 仅在企业端,客服侧无 AI 问答辅助 |
| 操作日志 | 缺失 | 当前 AuditLog 仅在企业端,客服操作无留痕 |
增强修复方向(如需):
- 新增角色
SUPPORT(客服),独立路由/support/*,独立登录页/support/login。 - 客服端侧边栏含:工单中心、客户会话、租户数据查看、协助操作、AI 辅助、操作日志。
- 数据模型新增:
Ticket(工单:标题/内容/状态/优先级/归属租户/处理人)、TicketMessage(工单回复)、ChatSession(客户会话)。 - 租户数据穿透:客服选择租户后,以"只读+代操作"模式访问该租户的业务数据(复用现有 API,请求头带
X-Support-Tenant-Id,后端中间件切换租户上下文)。 - AI 辅助复用现有 AI 接口,独立会话隔离。
- MVP 建议:先做工单 + 租户数据查看 + AI 辅助三项。
- 优先级:核心功能已完成;增强部分 P3 规划(新模块,建议单独排期)
- 涉及文件(增强部分):新增
frontend/src/pages/support/*、frontend/src/components/layout/SupportSidebar.tsx、backend/prisma/schema.prisma(Ticket/ChatSession 模型)、backend/src/routes/support.routes.ts、backend/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核心 | 单立户服务(平台管理端)已完整实现,前后端代码可运行 |
建议执行顺序
- 第一批(P0,立即):问题 30(草稿丢失)→ 问题 7(补偿金合计)→ 问题 10(驳回未更新)→ 问题 11(违法解除风险)→ 问题 13(合同日期校验)→ 问题 28(补偿金批次数据)
- 第二批(P1,本迭代):离职管理联动(2/3/5/6/8/9)→ 花名册校验(15/16)→ 用工办理入口下沉(18/19/22/23)→ 特殊员工性别校验(29)
- 第三批(P2,排期):花名册批量操作(24/25)→ 文案统一(1/14)→ 入口下沉收尾(20/21/26)→ 年假折算(4)→ 手机号查重(17)
- 第四批(P3,规划):组织架构与审批流(27)→ 客服工作台增强(31增强,MVP = 工单 + 租户数据查看 + AI 辅助)
- 问题 31 核心功能(单立户服务/平台管理端)已完整实现,无需开发
备注
- 本清单基于当期代码梳理,部分"根因"为基于代码静态分析的推断,实际修复前需运行复现确认。
- 涉及数据库 schema 变更的(问题 2/27/31),需走 migration + 回滚方案,符合数据 8 铁律。
- 涉及文案全域替换的(问题 1/14),需同步更新 HelpModal、OnboardingGuide 等帮助文案。
- 问题 26(去掉用工办理模块)依赖问题 18/20/21/22/23 完成,不可先行移除。