走查:分配完登录客服账号点「退回」,没有任何弹窗 —— 一点就退掉了。 查下来这条教条**此前是零实现**:枚举齐了(8 个 ReleaseReason + needNote)、 API 收得了、releaseReasons 分布报表也写了,但前端唯一的退回入口是 `plansApi.recycle(planId)` —— **一个参数都没传**。于是那张分布表永远拿到 null: 主管只知道"退了 12 条",不知道该改什么,而"派多了 / 时效太紧 / 压根不该派给他" 这三种的下一步动作完全不同(T7 说这张表是主管调整分配策略的输入)。 · 新增 ReleaseReasonDialog:8 个原因,每个**带一句 desc** ——「不是我的客户」和 「该由其他角色跟」光看标题分不出,分不出就会随手点第一个,**假数据比没数据更难发现**。 other 展开必填说明框,不填不给提交。 · 服务端:**分配来的单**(assignment_id 非空)强制要 releaseReason。⚠ ️ 只卡分配来的 —— 自助认领的单没有派单方,原因对谁都没用; **系统自动到期回收不走这条路**(scheduler 直接改库,记 assignment_expired),不会被卡死。⚠ ️ 必填必须服务端拦:只做前端的话,换个客户端(助手/脚本/企微)就绕过去了 (与 other 必填说明、execution 的 inaccurate 必填同一条纪律)。 本地实测(客服「位其蕾」12 条在手):点退回 → 弹窗 → 选「其他原因」出必填框且确认禁用 → 改选「时效太紧」→ 确认 → toast「已退回」、我的 12→10、 followup_plans.release_reason=deadline_too_tight、 plan_event_logs 落 release/deadline_too_tight 且带 held_seconds=2839。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
| Name |
Last commit
|
Last update |
|---|---|---|
| .claude | Loading commit data... | |
| .design-sync | Loading commit data... | |
| apps | Loading commit data... | |
| clickhouse/config.d | Loading commit data... | |
| deploy | Loading commit data... | |
| docs | Loading commit data... | |
| packages | Loading commit data... | |
| scripts | Loading commit data... | |
| .gitignore | Loading commit data... | |
| .gitlab-ci.yml | Loading commit data... | |
| .npmrc | Loading commit data... | |
| .prettierrc | Loading commit data... | |
| README.md | Loading commit data... | |
| docker-compose.expose.yml | Loading commit data... | |
| docker-compose.managed.yml | Loading commit data... | |
| docker-compose.prod.yml | Loading commit data... | |
| docker-compose.yml | Loading commit data... | |
| eslint.config.mjs | Loading commit data... | |
| liu.cjs | Loading commit data... | |
| package.json | Loading commit data... | |
| pnpm-lock.yaml | Loading commit data... | |
| pnpm-workspace.yaml | Loading commit data... | |
| tsconfig.base.json | Loading commit data... | |
| turbo.json | Loading commit data... |