From 6bb08c2297be1b6415c8bc02e6917eba6ee355e5 Mon Sep 17 00:00:00 2001
From: shimai <shimai@example.com>
Date: Fri, 03 Apr 2026 10:42:08 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/test/tony.cheng/260312' into test/shimai.huang/260309

---
 openspec/changes/add-call-record-viewer/design.md |  198 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 198 insertions(+), 0 deletions(-)

diff --git a/openspec/changes/add-call-record-viewer/design.md b/openspec/changes/add-call-record-viewer/design.md
new file mode 100644
index 0000000..9b39062
--- /dev/null
+++ b/openspec/changes/add-call-record-viewer/design.md
@@ -0,0 +1,198 @@
+# Design Document: AI调解通话记录查看功能
+
+## 上下文
+
+### 背景
+云小调系统通过AI调解员自动拨打当事人电话进行初步沟通,调解员需要在实时看板中了解通话详情以便进行后续人工调解。当前系统缺少通话记录的详细展示功能。
+
+### 约束条件
+- 前端项目使用React + Ant Design 4.24.12
+- 数据来源为 `OutboundBotAPIService.getConversationLog` API
+- 需要兼容多种外呼状态(已接通、未接通等)
+- 录音文件为.wav格式
+
+### 相关利益相关者
+- 调解员:需要快速查看通话记录了解沟通情况
+- 产品经理:关注用户体验和功能完整性
+
+## 目标与非目标
+
+### 目标
+- 提供直观的通话记录查看入口
+- 展示清晰的双方对话内容
+- 支持录音文件播放
+- 正确处理各种外呼状态
+
+### 非目标
+- 不实现通话记录的编辑功能
+- 不实现通话记录的导出功能
+- 不实现录音文件的下载功能(本期暂不实现)
+
+## 技术决策
+
+### 1. UI组件结构
+
+**决策**:使用Ant Design Modal作为弹窗容器,自定义内部组件
+
+**理由**:
+- Modal组件与系统其他弹窗风格一致
+- 内部需要高度自定义的聊天界面样式
+- 便于后续扩展其他功能
+
+**组件层级**:
+```
+MediationBoard
+└── BoardItem (调解记录卡片)
+    └── CallRecordButton (通话记录按钮)
+        └── CallRecordModal (通话记录弹窗)
+            ├── AudioPlayer (录音播放器)
+            └── ConversationList (对话记录列表)
+                └── ConversationItem (单条对话)
+```
+
+### 2. 数据获取策略
+
+**决策**:按需加载,点击按钮时调用API
+
+**理由**:
+- 避免列表加载时请求数量过多
+- 减少不必要的API调用
+- 提升页面初始加载速度
+
+**API调用流程**:
+```
+用户点击按钮 
+  → 获取caseId(URL参数 > localStorage)
+  → 获取person_id和job_id(调解记录数据)
+  → 调用getConversationLog API
+  → 处理返回数据(取最后一条)
+  → 渲染弹窗内容
+```
+
+### 3. 外呼状态处理
+
+**决策**:根据callStatus字段区分展示内容
+
+**状态分类**:
+| 状态类型 | callStatus值 | 展示内容 |
+|---------|-------------|---------|
+| 已接通 | 1, 20-31 | 录音播放器 + 对话记录 |
+| 未接通 | 0, 2-19, 32 | 提示"未接通,无通话记录" |
+
+### 4. 对话记录展示设计
+
+**决策**:采用类似微信聊天的左右布局
+
+**设计规范**:
+- **AI调解员消息**:
+  - 位置:左侧
+  - 头像:机器人图标
+  - 背景:浅蓝色(#e3f2fd)
+  - 名称显示:"AI调解员"
+
+- **当事人消息**:
+  - 位置:右侧
+  - 头像:显示名字首字
+  - 背景:浅绿色(#e8f5e9)
+  - 名称显示:调解记录中的creator字段值
+
+**时间戳格式**:`YYYY-MM-DD HH:mm`
+
+### 5. 录音播放器设计
+
+**决策**:使用HTML5原生audio标签
+
+**理由**:
+- 原生支持.wav格式
+- 无需额外依赖
+- 浏览器兼容性好
+
+**样式设计**:
+- 位置:弹窗顶部固定
+- 背景:浅灰色(#f5f5f5)
+- 高度:50px
+- 宽度:100%
+
+## 替代方案
+
+### 方案1:使用第三方聊天UI库
+- **优点**:开箱即用,功能完善
+- **缺点**:引入额外依赖,样式可能不一致
+- **决策**:不采用,保持项目简洁
+
+### 方案2:在卡片内直接展示对话
+- **优点**:无需弹窗,操作更直接
+- **缺点**:占用空间大,影响列表展示
+- **决策**:不采用,使用弹窗更合理
+
+## 风险与权衡
+
+### 风险1:录音文件URL无效
+- **概率**:中
+- **影响**:用户无法播放录音
+- **缓解措施**:
+  - 提供明确的错误提示
+  - 支持用户手动重试
+  - 记录错误日志便于排查
+
+### 风险2:API响应缓慢
+- **概率**:低
+- **影响**:用户体验下降
+- **缓解措施**:
+  - 显示加载状态
+  - 设置合理的超时时间(30秒)
+  - 提供取消操作选项
+
+### 风险3:对话内容过长
+- **概率**:高
+- **影响**:弹窗内容溢出
+- **缓解措施**:
+  - 弹窗设置最大高度
+  - 内部区域支持滚动
+  - 对话列表虚拟化(如内容过多)
+
+## 迁移计划
+
+### 实施步骤
+1. 创建通话记录弹窗组件
+2. 在MediationBoard组件中添加按钮和弹窗触发逻辑
+3. 实现API调用和数据转换
+4. 添加样式和交互效果
+5. 处理各种边界情况
+
+### 回滚方案
+- 功能通过feature flag控制,出问题可直接禁用
+- 按钮点击事件独立封装,不影响现有调解记录展示
+
+## 开放问题
+
+1. **录音文件存储周期**:需要确认录音文件的保存时长,避免播放失败
+2. **并发限制**:是否需要限制同时打开的弹窗数量
+3. **权限控制**:是否所有调解员都能查看通话记录
+
+## 参考设计
+
+### 对话记录UI设计稿
+```
+┌─────────────────────────────────────────────────────────────┐
+│  AI调解员与申请人(刘树杰)的通话              任务ID: xxx  │
+├─────────────────────────────────────────────────────────────┤
+│  ┌─────────────────────────────────────────────────────┐    │
+│  │  🔊 录音播放器  [▶播放] ━━━━━━━●─────── 03:45/10:20 │    │
+│  └─────────────────────────────────────────────────────┘    │
+├─────────────────────────────────────────────────────────────┤
+│                                                              │
+│  ┌──────┐  你好,刘树杰先生吗?我是白云区...               │
+│  │  AI  │  2026-03-12 16:30                                │
+│  └──────┘                                                   │
+│                                                              │
+│        呃,你刚才前面说你是谁?                    ┌──────┐ │
+│        2026-03-12 16:33                          │  刘  │ │
+│                                                   └──────┘ │
+│                                                              │
+│  ┌──────┐  哦,不好意思,我是白云区人和镇...                │
+│  │  AI  │  2026-03-12 16:33                                │
+│  └──────┘                                                   │
+│                                                              │
+└─────────────────────────────────────────────────────────────┘
+```

--
Gitblit v1.8.0