**新增**
- `docs/01-产品文档/04-坐席工作台/PRD-REQ-坐席-009-会话状态Tab筛选-v1.0.md`
- 7 段结构:背景与目标 / 需求说明(5 个 FR + 状态映射规则 + 跨段渲染)/ 用户故事 & 10 项 AC / 交互示意 / 不在本 PRD 范围 / 关联文档 / 变更记录
- 明确边界:未实现"Tab 数量徽章 + 空状态文案",后续 #135 候选
**修改**
- `docs/02-技术文档/技术架构/技术方案-REQ-坐席-002-AI辅助消息框-v1.0.md`
- §3.1 组件架构图:ConversationList.vue 增加 2 行注释(说明筛选 Tab + 数据源)
- 文末追加"📌 增量变更记录(不破坏 v1.0 原结构)"段:交叉引用 PRD #009 / 任务 #134 / 原型 v1.2 / commit 566bb46
**未改**
- 不动架构图层级 / 不动其他组件的描述 / 不破坏 v1.0 原 §1-§12 结构
- 不在 #002 中重写需求细节(这些都在 PRD #009 集中管理,避免文档冗余)
- `docs/04-运维文档/部署运维/01-项目总览与部署手册-20260704.md` / `开发交付概览.md` grep 通过无相关描述,无需更新
**关联**
- #134 落地代码:commit `566bb46`
- 已同步文档:PRD #009(新建)+ 技术方案 #002(增量段)
**操作失误修复**
- 起草时通过 Write 工具误将 PRD #009 写到了 `D:\资料\03-产品文档\` 而非项目内的 `D:\资料\03-项目开发\wecom_it_smart_desk\docs\01-产品文档\`(少了一个目录层级 + 中文章段编号错位)
- 修复:用 PowerShell `Move-Item` 把文件移到正确路径,递归清理空目录 `D:\资料\03-产品文档\`(只含我自己刚建的 1 个文件 + 2 个空目录,无误删任何个人文件)
This commit is contained in:
@@ -0,0 +1,199 @@
|
|||||||
|
# 坐席端会话状态 Tab 筛选 — 产品需求文档 (PRD)
|
||||||
|
|
||||||
|
> **版本**: v1.0
|
||||||
|
> **日期**: 2026-08-03
|
||||||
|
> **作者**: 宋献
|
||||||
|
> **状态**: ✅ 已落地(生产版本 `index-BK_U7e10.js`)
|
||||||
|
> **子系统**: 04-坐席工作台
|
||||||
|
> **模块**: 会话列表筛选
|
||||||
|
> **关联任务**: #134(坐席端左栏会话状态 Tab 顺序调整 + 默认显示待处理)
|
||||||
|
> **关联原型**: `原型-REQ-坐席-000-坐席工作台-v1.2.html`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. 背景与目标
|
||||||
|
|
||||||
|
### 1.1 现状分析
|
||||||
|
|
||||||
|
坐席工作台左栏会话窗口已具备 Tab 筛选能力(v1.0 起即存在),但 v1.1 存在两个影响日常效率的问题:
|
||||||
|
|
||||||
|
| 问题 | 表现 | 影响 |
|
||||||
|
|------|------|------|
|
||||||
|
| **Tab 顺序不合理** | 「全部」Tab 排在第一位(按字母 + 全集概念) | 高频 Tab(待处理)被埋在其他标签后面 |
|
||||||
|
| **默认激活错位** | 默认进入页面激活「全部」 | 坐席每天首次进入要先点 1 下切到「待处理」才看到工作队列 |
|
||||||
|
| **筛选粒度不足** | 「全部」Tab 混排 待处理 + 进行中 + 已完成 + 同事会话 + 历史会话 | 视觉噪音多,重点不突出 |
|
||||||
|
|
||||||
|
### 1.2 用户痛点
|
||||||
|
|
||||||
|
**核心痛点**:坐席每日首次进入坐席工作台 → 应立即看到「我现在该处理的待办队列」。
|
||||||
|
|
||||||
|
但当前版本默认显示「全部」,坐席需要:
|
||||||
|
1. 看完整列表 → 识别哪些是新分派的
|
||||||
|
2. 或点击「待处理」Tab → 才看到工作队列
|
||||||
|
|
||||||
|
**多点击 + 视觉噪音**:每天 8 小时 × 多次重入 = 累计损失明显。
|
||||||
|
|
||||||
|
### 1.3 目标
|
||||||
|
|
||||||
|
通过最小改动(**仅 Tab 顺序调整 + 默认激活态变更**),实现:
|
||||||
|
|
||||||
|
1. **默认即工作队列** — 打开坐席工作台,第一眼就是待处理
|
||||||
|
2. **顺序符合使用频次** — 高频 Tab 在前、低频 Tab 在后
|
||||||
|
3. **「全部」沉底** — 仅作"全部查看"用,不作为默认入口
|
||||||
|
|
||||||
|
### 1.4 设计原则
|
||||||
|
|
||||||
|
| 原则 | 体现 |
|
||||||
|
|------|------|
|
||||||
|
| **最小改动** | 仅顺序 + 初值,不动 store / 不动样式 / 不动 key 名 |
|
||||||
|
| **后向兼容** | 保留 `activeFilter` 的 4 个 key(`'pending' \| 'active' \| 'done' \| 'all'`),switch 逻辑、API 调用、URL 参数都不变 |
|
||||||
|
| **数据准确** | status 映射规则保留:`pending→queued`、`active→serving/ai_handling`、`done→resolved` |
|
||||||
|
| **协同不干扰** | 同事会话(`colleagueConversations`)和历史会话(`historyConversations`)**仅在「全部」Tab 下可见**,其他 Tab 按 `applyFilters` 自然归零 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. 需求说明
|
||||||
|
|
||||||
|
### 2.1 核心功能(FR)
|
||||||
|
|
||||||
|
| FR ID | 功能描述 | 优先级 |
|
||||||
|
|-------|----------|--------|
|
||||||
|
| **FR-01** | 左栏会话窗口顶部展示 4 个 Tab,**顺序为「待处理 → 进行中 → 已完成 → 全部」** | P0 |
|
||||||
|
| **FR-02** | **默认进入页面激活「待处理」Tab**(无需点击) | P0 |
|
||||||
|
| **FR-03** | 切换 Tab 时列表实时过滤,按 `applyFilters` 规则(见 §2.3) | P0 |
|
||||||
|
| **FR-04** | 搜索框 + Tab 为 AND 关系(关键词 ∧ 状态) | P1 |
|
||||||
|
| **FR-05** | 「全部」Tab 下展示所有会话(含同事 + 历史) | P1 |
|
||||||
|
|
||||||
|
### 2.2 详细说明
|
||||||
|
|
||||||
|
**4 个 Tab 排序逻辑**(高频在前,低频在后):
|
||||||
|
1. **待处理** — 每日最高频(队列分派 / 求助举手 / 新分派会话)
|
||||||
|
2. **进行中** — 高频(已回复待用户反馈的会话)
|
||||||
|
3. **已完成** — 中频(结单归档的会话)
|
||||||
|
4. **全部** — 低频(异常排查 / 数据回顾)
|
||||||
|
|
||||||
|
**激活态与默认行为**:
|
||||||
|
- 默认 `activeFilter = 'pending'`
|
||||||
|
- 用户切换后,组件不持久化 Tab 选择(刷新即回到「待处理」)— 这是设计选择,避免历史 Tab 状态导致坐席看不到最新队列
|
||||||
|
|
||||||
|
### 2.3 状态映射规则(与 Store API 保持一致)
|
||||||
|
|
||||||
|
| Tab 显示文案 | `activeFilter` 值 | 对应 `conv.status` | Store 归属 |
|
||||||
|
|---|---|---|---|
|
||||||
|
| **待处理** | `'pending'` | `queued`(待接单) | `myConversations` |
|
||||||
|
| **进行中** | `'active'` | `serving`(服务中)或 `ai_handling`(AI 处理中) | `myConversations` / `colleagueConversations` |
|
||||||
|
| **已完成** | `'done'` | `resolved`(90 天内) | `historyConversations` |
|
||||||
|
| **全部** | `'all'` | 不限定 | 三段全部 |
|
||||||
|
|
||||||
|
> 注:`activeFilter` key 名 `'active'`(不是 `'in-progress'`)保持后向兼容;store status 命名(如 `serving` / `ai_handling`)不变。
|
||||||
|
|
||||||
|
### 2.4 跨段渲染规则
|
||||||
|
|
||||||
|
| Tab | 我的会话(mine) | 同事会话(colleague) | 历史会话(history) |
|
||||||
|
|---|---|---|---|
|
||||||
|
| **待处理** | ✅ 显示 pending | ❌ 自然为空(store 隔离) | ❌ 自然为空 |
|
||||||
|
| **进行中** | ✅ 显示 active | ❌ 自然为空 | ❌ 自然为空 |
|
||||||
|
| **已完成** | ✅ 显示 done(跨段渲染 from history) | ❌ 自然为空 | ✅ 显示 resolved |
|
||||||
|
| **全部** | ✅ 显示 all | ✅ 显示 all | ✅ 显示 all |
|
||||||
|
|
||||||
|
> 「同事会话」在所有筛选 Tab 下都不出现(store 中 colleagueConversations 仅含 `serving+!is_mine+!is_collaborator` 和 `ai_handling`,不满足 pending/active/done 的任意状态)— 用户确认接受该行为。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. 用户故事 & 验收标准
|
||||||
|
|
||||||
|
### 3.1 用户故事
|
||||||
|
|
||||||
|
| US ID | 角色 | 故事 | 优先级 |
|
||||||
|
|-------|------|------|--------|
|
||||||
|
| **US-01** | 坐席 | 作为坐席,我希望打开坐席工作台立即看到待处理会话列表,这样能马上开始工作 | P0 |
|
||||||
|
| **US-02** | 坐席 | 作为坐席,我希望 Tab 按使用频次排序(待处理在最左),这样切换更顺手 | P1 |
|
||||||
|
| **US-03** | 坐席 | 作为坐席,我希望「全部」沉到底部(不是默认入口),避免误点 | P1 |
|
||||||
|
| **US-04** | 资深坐席 | 作为坐席,我希望切换到「全部」Tab 还能看到同事会话和历史会话,便于排查 | P1 |
|
||||||
|
|
||||||
|
### 3.2 验收标准(AC)
|
||||||
|
|
||||||
|
| AC ID | 验证项 | 验收方法 | 预期结果 |
|
||||||
|
|-------|--------|---------|---------|
|
||||||
|
| **AC-01** | Tab 顺序 | 视觉确认 | 从左到右:`待处理 → 进行中 → 已完成 → 全部` |
|
||||||
|
| **AC-02** | 默认激活 | 刷新页面 | 「待处理」Tab 蓝色高亮 |
|
||||||
|
| **AC-03** | 默认列表 | 刷新页面 | 左侧仅展示 `status=queued` 的会话(来自 `myConversations` 自然过滤) |
|
||||||
|
| **AC-04** | Tab 切换「进行中」 | 点击 | 列表展示 `status in {serving, ai_handling}` |
|
||||||
|
| **AC-05** | Tab 切换「已完成」 | 点击 | 列表展示 `status=resolved`(来自 `historyConversations`) |
|
||||||
|
| **AC-06** | Tab 切换「全部」 | 点击 | 三段(my + colleague + history)全部展示 |
|
||||||
|
| **AC-07** | 搜索 + Tab 联动 | 输入关键词后切换 Tab | 关键词 ∧ 状态过滤均生效 |
|
||||||
|
| **AC-08** | 同事会话隐藏(非全 Tab) | 切到「待处理」 | 赵敏/周芳/吴明(同事区)不显示 |
|
||||||
|
| **AC-09** | 接手会话流转 | 同事会话点击「接手」 | 接手后会话归入 `myConversations`,「全部」Tab 下可见 |
|
||||||
|
| **AC-10** | 无数据容错 | DB 清空全部会话 | 「待处理」激活,左侧显示 `el-empty description="暂无会话"` 占位 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. 交互示意
|
||||||
|
|
||||||
|
### 4.1 默认进入页面
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────┐
|
||||||
|
│ [🔍 搜索用户、关键词...] │
|
||||||
|
│ │
|
||||||
|
│ [● 待处理 5] [进行中 1] ... [全部 10] │ ← Tab 行:默认 ● 待处理
|
||||||
|
│ │
|
||||||
|
│ 头像 张伟 10:25 待回复 张 │ ← 左侧会话语义化分区
|
||||||
|
│ VPN 连接失败 │
|
||||||
|
│ 头像 陈芳 09:42 待回复 陈 │
|
||||||
|
│ 系统卡顿 │
|
||||||
|
│ ... │
|
||||||
|
└─────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.2 切到「全部」Tab
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────┐
|
||||||
|
│ [● 全部 10] ... [● 待处理 5] │ ← 切到全部 Tab
|
||||||
|
│ │
|
||||||
|
│ --- 我的会话 --- │
|
||||||
|
│ 头像 张伟 10:25 待回复 张 │
|
||||||
|
│ ... │
|
||||||
|
│ --- 同事会话(刘明/王强/李静)--- │
|
||||||
|
│ 头像 赵敏 OA 审批流程报错 [接手]│
|
||||||
|
│ ... │
|
||||||
|
│ --- 历史会话 --- │
|
||||||
|
│ 头像 周杰 昨日 VPN 证书过期—已解决 │
|
||||||
|
└─────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. 不在本 PRD 范围(明确边界)
|
||||||
|
|
||||||
|
为避免范围蔓延,以下问题由后续独立 PRD 处理:
|
||||||
|
|
||||||
|
| 项 | 说明 | 后续 PRD 候选 |
|
||||||
|
|---|---|---|
|
||||||
|
| Tab 数量徽章(待处理 5 等) | v1.2 原型里有该设计,但需要 store 新增 4 个 computed 计算实时数量 | **#135 候选** |
|
||||||
|
| 空状态文案("暂无待处理会话") | 当前复用 `el-empty description="暂无会话"`,已能覆盖空场景 | 视真实使用反馈决定是否独立 PRD |
|
||||||
|
| 持久化 Tab 选择(localStorage) | 当前切换刷新即回默认;若坐席希望保留,可加 1 行 localStorage | 视需求反馈 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. 关联文档
|
||||||
|
|
||||||
|
| 文档 | 路径 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| 原型 v1.2(最新版) | `docs/01-产品文档/04-坐席工作台/原型-REQ-坐席-000-坐席工作台-v1.2.html` | UI 设计基准 |
|
||||||
|
| 技术方案(会话列表) | `docs/02-技术文档/技术架构/技术方案-REQ-坐席-002-AI辅助消息框-v1.0.md` | 新增 §X.Y 段(commit 时同步) |
|
||||||
|
| 任务说明书 #134 | `docs/07-项目管理/任务说明书/任务说明书-134-坐席端左栏会话状态Tab顺序调整+默认显示待处理.md` | 落地过程记录 |
|
||||||
|
| 前端源码 | `src/frontend-agent/src/components/conversation/ConversationList.vue` | `filterTags` + `activeFilter` 2 处改动 |
|
||||||
|
| Pinia Store | `src/frontend-agent/src/stores/conversation.ts` | `myConversations` / `colleagueConversations` / `historyConversations` 数据分区(未改) |
|
||||||
|
| Git commit | `566bb46 feat(agent): 坐席端左栏会话状态 Tab 顺序调整 + 默认显示待处理 (#134)` | 单一原子提交 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. 变更记录
|
||||||
|
|
||||||
|
| 日期 | 变更内容 | 变更人 |
|
||||||
|
|------|----------|--------|
|
||||||
|
| 2026-08-03 | 创建 PRD #009,承接 #134 落地需求 | 宋献 |
|
||||||
|
| 2026-08-03 | 同步技术方案 #002 加入交叉引用 | 宋献 |
|
||||||
|
| | | |
|
||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user