# 坐席端会话状态 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 加入交叉引用 | 宋献 | | | | |