[split-upload 2/6] f2fd4fa backup via proxy
This commit is contained in:
@@ -1,12 +1,12 @@
|
||||
# PRD — 坐席端统一工作队列重构
|
||||
|
||||
> **REQ编号**: REQ-坐席-011
|
||||
> **版本**: v0.1(方案草案 / 沟通确认阶段)
|
||||
> **版本**: v0.1(方案草案 / 沟通确认阶段;C-8 决策见 §6.4)
|
||||
> **状态**: 🟡 待评审 — 含未决项,不得据此排期开发
|
||||
> **优先级**: P1(其中 Phase 0 为 P0)
|
||||
> **日期**: 2026-08-08
|
||||
> **作者**: 宋献
|
||||
> **关联**: REQ-坐席-004(任务详情视图切换)、REQ-坐席-009(会话状态Tab筛选)、任务说明书 #132
|
||||
> **关联**: REQ-坐席-004(任务详情视图切换)、REQ-坐席-009(会话状态Tab筛选)、任务说明书 #132、原型 `原型-REQ-坐席-000-坐席工作台-v1.8.html`(v1.8 演进)
|
||||
|
||||
---
|
||||
|
||||
@@ -66,22 +66,61 @@ D-3 不是筛选条件的调整,而是新增一条状态机路径。当前 `to
|
||||
|
||||
---
|
||||
|
||||
## 3. 阻塞项(P0)
|
||||
## 3. 阻塞项(原 P0,2026-08-09 修订为 P1)
|
||||
|
||||
### 3.1 任务详情操作按钮全部为 Mock
|
||||
### 3.1 任务详情操作按钮无服务端闭环(原「全部为 Mock」,已部分修复)
|
||||
|
||||
```js
|
||||
// src/frontend-agent/src/components/chat/TaskDetailView.vue:117
|
||||
> **📝 2026-08-09 修订**:本节原记录 `TaskDetailView.vue:117` 为无条件 `ElMessage.success` 的 Mock 实现。
|
||||
> 经架构师代码核查(`技术核查-坐席会话条目操作菜单-v1.0.md` §1.1),**该无条件成功提示已被修复**,行号亦已变更。
|
||||
> 原描述已过期,现更新如下,避免后续评审基于过期事实。
|
||||
|
||||
#### 3.1.1 当前实际代码
|
||||
|
||||
```ts
|
||||
// src/frontend-agent/src/components/chat/TaskDetailView.vue:129-135(2026-08-09 时点)
|
||||
function handleAction(action: string): void {
|
||||
ElMessage.success(`操作成功:${action}`) // 仅 toast,不调用任何接口
|
||||
if (props.todoItem.type === 'approval') {
|
||||
// 企微不支持服务端代审批,跳转由 ApprovalDetail 的 <a target="_blank"> 原生完成
|
||||
console.info('[TaskDetailView] 审批动作已跳转企微审批原系统:', action)
|
||||
return
|
||||
}
|
||||
ElMessage.info('该操作需在原系统中完成')
|
||||
}
|
||||
```
|
||||
|
||||
REQ-坐席-004 §2.4 定义的全部操作 —— 工单(接单 / 开始处理 / 结单 / 转派)、审批(通过 / 拒绝 / 转交)—— **均不生效**。
|
||||
**修复内容**:无条件 `ElMessage.success` 已移除,改为按 `type` 分支——
|
||||
- `type === 'approval'` → 静默返回(跳转由 `ApprovalDetail` 的 `<a target="_blank">` 原生完成),不再弹成功提示;
|
||||
- 其他类型(工单等) → `ElMessage.info('该操作需在原系统中完成')`,中性提示,不谎报成功。
|
||||
|
||||
**风险定级:P0,阻塞布局合并。**
|
||||
#### 3.1.2 修订后的结论
|
||||
|
||||
理由:当前待办面板位于右栏底部 260px 区域,坐席误操作的暴露面有限。一旦将待办提升至左栏主队列首屏,等同于把不可用功能放置于最高可见度位置。坐席点击「审批通过」后收到绿色成功提示,而企业微信侧该单仍处于挂起状态 —— 属于会造成真实业务后果的错误反馈。
|
||||
| 项 | 原结论(v0.1 初稿) | 现结论(2026-08-09 核查后) |
|
||||
|---|---|---|
|
||||
| 是否谎报成功 | 是(无条件绿色成功 toast) | ❌ **否,已修复**。审批静默跳转,其他类型为中性 info |
|
||||
| 是否服务端闭环 | 否 | ❌ **仍否**。审批为降级跳转 + 回调回写(U-1 已定),工单受 U-1.1 / U-1.2 外部阻塞 |
|
||||
| 风险定级 | 🔴 P0,阻塞布局合并 | 🟡 **降级为 P1**,不再是"错误反馈"型 P0,但**服务端闭环缺失依然阻塞 Phase 2 的工单/审批混排**(Phase 0 的降级跳转 + 回写仍须先落地) |
|
||||
|
||||
**剩余阻塞点**(未因本次修复而消解):
|
||||
- 审批:`approval.py:902` 的 `sys_approval_change` 回调状态回写尚未补全 → 跳转后前端无法感知外部状态变更(Phase 0 待办项);
|
||||
- 工单:`ITSMService.get_todo_list()` 无条件 `return []`(U-1.2),读链路即断,写接口更无从谈起(U-1.1 / T05)。
|
||||
|
||||
#### 3.1.3 🔴 与会话侧操作的性质差异(Phase 2 组件抽象的核心依据)
|
||||
|
||||
| 维度 | 会话侧 4 操作(接单/置顶/代办/转接) | 任务侧操作(审批/工单) |
|
||||
|---|---|---|
|
||||
| 闭环性质 | **服务端真闭环**。`UserInfoBar.vue:116-164` → `ChatArea.vue` handler → `stores/conversation.ts:498-571` → `api/conversation.ts:176-244` → 后端 `conversations.py` 六端点,**全链路实证可用** | **降级跳转**(审批)/ **当前无对象**(工单) |
|
||||
| 执行路径 | store → API → 后端 → `fetchConversations()` 刷新 | `<a target="_blank">` 跳外部系统 → 回调回写 → WS 推送 |
|
||||
| 反馈模型 | **同步**成功/失败 | **异步最终一致** |
|
||||
| 后端权限 | `assign`/`transfer`/`grab` = `update:all`;`resolve`/`pin`/`todo` = `update:own` | 不适用 |
|
||||
|
||||
> **这一差异是 Phase 2 组件抽象不可回避的约束**:左栏统一容器上的操作菜单**必须按 `kind` 分派反馈策略**,菜单项定义需携带 `execMode: 'direct' | 'redirect' | 'disabled'` 字段。
|
||||
> **若三类工作项共用一套「点击 → toast 成功」的反馈模型,就会以另一种形式重演本节原先定性为 P0 的那个错误。**
|
||||
> 具体设计见 `PRD-REQ-坐席-012-会话条目操作菜单-v1.0.md` §7.2。
|
||||
|
||||
**风险定级:🟡 P1(由 P0 降级)。**
|
||||
|
||||
降级理由:谎报成功的错误反馈已消除,坐席不再会因绿色提示误判外部系统已变更。
|
||||
**但仍阻塞 Phase 2**:待办提升至左栏主队列首屏后,若操作仍只是"提示到原系统操作",等同于把无实际能力的入口放在最高可见度位置——Phase 0 的降级跳转 + 状态回写仍是 Phase 2 的硬前置(§6 D-2 顺序不变)。
|
||||
|
||||
---
|
||||
|
||||
@@ -123,7 +162,7 @@ REQ-坐席-004 §2.4 定义的全部操作 —— 工单(接单 / 开始处理
|
||||
|---|---|---|
|
||||
| 审批操作 → 降级跳转 + 回写 | 通过 / 拒绝 / 转交 → 点击「在企微审批中打开」跳转原系统,由 `approval_webhook.py` 接收 `sys_approval_change` 回调 → 补全 `approval.py:902` 状态回写 → WS 推送 | Level 0 立即可做;Level 1 需补回调回写 |
|
||||
| 工单操作 → 降级跳转(暂) | 接单 / 开始处理 / 结单 / 转派 → 点击「在 ITSM 中打开」跳转原系统;ITSM 写接口到位前不承诺服务端闭环(受 T05 外部阻塞)。**⚠️ 注意:该跳转依赖工单可见,而当前 ITSM 读列表亦未实现(见 U-1.2),故本行在读链路打通前无实际可操作对象** | Level 0(暂,受 U-1.2 前置) |
|
||||
| 失败态处理 | 移除无条件 `ElMessage.success`,改为「跳转成功提示 + 状态回写后刷新」按三态分派;仍禁止以 toast 作为验收依据 | — |
|
||||
| 失败态处理 | ~~移除无条件 `ElMessage.success`~~ ✅ **已完成**(2026-08-09 核查确认,见 §3.1.1)。**剩余部分**:改为「跳转成功提示 + 状态回写后刷新」按三态分派(当前仅做到中性 info,尚无回写后刷新);仍禁止以 toast 作为验收依据 | — |
|
||||
|
||||
**验收标准**:操作后外部系统(ITSM / 企微审批)**状态真实变更**,且前端反馈与外部状态**最终一致**(通过回调 / webhook 回写达成)。禁止以 toast 成功作为验收依据。审批 / 工单在降级跳转模式下,以「跳转成功 + 原系统状态通过回调回写并刷新」作为验收闭环,不要求前端内嵌直接操作。
|
||||
|
||||
@@ -158,6 +197,36 @@ REQ-坐席-004 §2.4 定义的全部操作 —— 工单(接单 / 开始处理
|
||||
|
||||
**观测指标**:会话首响时长(是否因混排而劣化)、待办平均处理时长、坐席 Tab 切换频次、认领冲突率。
|
||||
|
||||
### Phase 0.5 — TaskDetailView 操作区精简(C-8 决策,2026-08-10)
|
||||
|
||||
**背景**:原 `TaskDetailView` 操作区固定渲染 4 按钮(接单 / 开始处理 / 结单 / 转派),垂直占 body 区 50%+ 空间,导致「处理进度 / SLA」等关键状态信息需滚动才看完。
|
||||
|
||||
**设计变更**:状态机驱动 + 二级收纳
|
||||
|
||||
| Task Type | 主操作按钮(按状态) | ⋯ 次要动作 |
|
||||
|---|---|---|
|
||||
| 工单 queued | 📥 接单 | 转派 / 挂起 |
|
||||
| 工单 serving | ✅ 结单 | 转派 / 挂起 |
|
||||
| 审批 pending | ✅ 审批通过 | 拒绝审批 / 转交审批 / 加签 |
|
||||
| 设备异常 | ✅ 标记恢复 | 一键开单 / 派工 / 加入巡检计划 |
|
||||
|
||||
**收益**:
|
||||
- 操作区按钮数 4 → 1~2(-50%)
|
||||
- body 区可用垂直高度 +50%↑
|
||||
- 状态信息一眼可见,无需滚动
|
||||
|
||||
**状态机原则**:开始处理被吸收到状态推进逻辑(点「接单」后接单 + 开始处理隐式完成,不显式拆分)。
|
||||
|
||||
**实现细节**:
|
||||
- 前端:组件 `useConversationMenuItems.ts` 状态机新增 `claim / recover / approve` reducer
|
||||
- 后端:**不变**(仅前端状态机调整 + ⋯ 菜单 UI)
|
||||
- 视觉密度补偿:主按钮 padding 从 `8×18` → `8×22`
|
||||
|
||||
**影响范围**:
|
||||
- ✅ 不影响:左栏三点菜单(v1.7 §4.4 矩阵)、中栏顶栏 UserInfoBar(v1.7 D-2 已删 3 留 1)
|
||||
- ⚠️ 涉及文件:`TaskDetailView.vue:128-135`、`useConversationMenuItems.ts`
|
||||
- 📐 原型版本:v1.7 → v1.8(已落,决策依据详见原型变更说明段)
|
||||
|
||||
---
|
||||
|
||||
## 7. 未决项
|
||||
@@ -203,3 +272,7 @@ REQ-坐席-004 §2.4 定义的全部操作 —— 工单(接单 / 开始处理
|
||||
| 2026-08-08 | v0.1 | 创建方案草案;固化 D-1/D-2/D-3 三项决策;完成原始论据核查与现状事实核实 | 宋献 |
|
||||
| 2026-08-08 | v0.1 | 据 U-1 技术验证结论(架构师高见远)修订 §6 Phase 0 与 §7 U-1:审批明确为降级跳转 + 回写(U-1 已验证);新增 U-1.1 ITSM 写接口外部阻塞项;同步下调 R-5 风险表述 | 宋献 |
|
||||
| 2026-08-08 | v0.1 | 主理人复核补录 **U-1.2**:代码实证 `ITSMService.get_todo_list()` 无条件返回空列表,ITSM 工单在坐席端读链路即断、当前待办全为企微审批单。该项前置于 U-1.1,一并标注于 §6 Phase 0 工单行 | 齐活林(交付总监) |
|
||||
| 2026-08-09 | v0.1 | **修正 §3.1(原描述已过期)**:`TaskDetailView.vue` 的无条件 `ElMessage.success` 已被修复,行号由 `:117` 更新为 `:129-135`,现为按 `type` 分支(approval 静默跳企微 / 其他 `ElMessage.info('该操作需在原系统中完成')`)。风险由 🔴 P0 降级为 🟡 P1(谎报成功已消除,服务端闭环缺失仍阻塞 Phase 2)。新增 §3.1.3 明确「**会话侧 4 操作是真闭环,任务侧审批/工单是降级跳转,二者性质根本不同**」,并将其确立为 Phase 2 按 `kind` 分派反馈策略(`execMode` 字段)的核心依据,指向 PRD-REQ-坐席-012 §7.2。依据:`技术核查-坐席会话条目操作菜单-v1.0.md` §1.1 | 许清楚(产品经理) |
|
||||
| 2026-08-09 | v0.1 | **Phase 0 审批线落地**:T01(前端降级跳转)+ T02(后端 `/approval/callback` + `approval_webhook` 回调回写)已实现并通过 QA 独立回归(51 例全绿,前端 type-check 改动文件干净,无源码缺陷)。代码已 commit `9292f41` 于分支 `feat/agent-approval-degrade-jump`,并已推送 Gitea(远端 SHA 与本地一致,`main` 未被改写)。PR 入口:<http://192.168.3.200:8418/simon/wecom_it_smart_desk/pulls/new/feat/agent-approval-degrade-jump>。**工单线(T03+)仍未启动**,受 U-1.2(ITSM 读链路断裂)+ U-1.1(写接口缺失)外部阻塞 | 寇豆码(工程师)→ 严过关(QA)→ 齐活林(主理人编排) |
|
||||
| 2026-08-10 | v0.1 | **C-8 决策**:TaskDetailView 操作区由原版固定 4 按钮(接单/开始处理/结单/转派)重构为「状态驱动主操作按钮 + ⋯ 次要动作收纳」。依据:操作区占 body 区底部 50%+ 垂直空间,导致「处理进度 / SLA」等状态信息需滚动才看完。详见新增 §6.4。原型 v1.7 → v1.8,代码待 `useConversationMenuItems.ts` 状态机 reducer 改造。**不影响**:左栏三点菜单(v1.7 §4.4 矩阵)、中栏顶栏 UserInfoBar、后端 API | 宋献 |
|
||||
| 2026-08-10 | v0.1 | **PR #5 已合并**:commit `af87f1de` redis_client 修复(approval.py + byod.py)经 Gitea UI 合并为双亲 merge `d8e7dbe`,main 现位于 `5db3079d`。本地 main 已同步。审批回调 `POST /approval/callback` 生产实测 HTTP 200 `{errcode:0}` | 齐活林 → 宋献(合并)|
|
||||
|
||||
Reference in New Issue
Block a user