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/specs/call-record-viewer/spec.md |  123 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 123 insertions(+), 0 deletions(-)

diff --git a/openspec/changes/add-call-record-viewer/specs/call-record-viewer/spec.md b/openspec/changes/add-call-record-viewer/specs/call-record-viewer/spec.md
new file mode 100644
index 0000000..cdbbd29
--- /dev/null
+++ b/openspec/changes/add-call-record-viewer/specs/call-record-viewer/spec.md
@@ -0,0 +1,123 @@
+# Call Record Viewer Specification
+
+## ADDED Requirements
+
+### Requirement: 通话记录查看按钮
+系统 SHALL 在AI调解实时看板的每条调解记录角色名称后显示通话记录查看按钮。
+
+#### Scenario: 显示通话记录按钮
+- **WHEN** 调解记录加载完成
+- **THEN** 在每条记录的角色名称后显示胶囊形状的"通话记录"按钮
+- **AND** 按钮包含电话图标和"通话记录"文字
+
+#### Scenario: 点击通话记录按钮
+- **WHEN** 用户点击通话记录按钮
+- **THEN** 系统应打开通话记录详情弹窗
+- **AND** 弹窗标题格式为"AI调解员与[角色名]的通话"
+- **AND** 标题后显示任务ID(jobId)
+
+### Requirement: 通话记录弹窗数据加载
+系统 SHALL 在打开通话记录弹窗时调用API获取通话记录数据。
+
+#### Scenario: 获取通话记录数据
+- **WHEN** 用户点击通话记录按钮
+- **THEN** 系统应调用OutboundBotAPIService.getConversationLog API
+- **AND** API参数应包含:
+  - caseId:从URL参数获取,若为空则从localStorage的case_data_timeline中获取case_id
+  - personId:从调解记录的person_id字段获取
+  - jobId:从调解记录的job_id字段获取
+
+#### Scenario: API返回多条数据
+- **WHEN** API返回的data数组包含多条记录
+- **THEN** 系统应只使用最后一条记录进行展示
+
+#### Scenario: API调用失败
+- **WHEN** API调用失败或返回错误
+- **THEN** 弹窗应显示错误提示信息
+- **AND** 提供重试按钮
+
+### Requirement: 外呼状态展示
+系统 SHALL 根据外呼状态(callStatus)展示不同的内容。
+
+#### Scenario: 已接通状态展示
+- **WHEN** callStatus为已接通状态(值为1, 20-31之一)
+- **THEN** 弹窗顶部应显示录音播放器
+- **AND** 弹窗中间区域应显示双方对话记录
+
+#### Scenario: 未接通状态展示
+- **WHEN** callStatus为未接通状态(值为0, 2-19, 32之一)
+- **THEN** 弹窗应显示提示信息"未接通,无通话记录"
+- **AND** 不显示录音播放器和对话记录
+
+### Requirement: 录音播放器
+系统 SHALL 在已接通状态的通话记录弹窗中提供录音播放功能。
+
+#### Scenario: 录音播放器展示
+- **WHEN** 通话记录处于已接通状态且有recordUrl
+- **THEN** 弹窗顶部应显示HTML5音频播放器
+- **AND** 播放器应支持播放/暂停操作
+- **AND** 播放器应显示当前播放进度和总时长
+
+#### Scenario: 录音文件播放
+- **WHEN** 用户点击播放按钮
+- **THEN** 系统应播放recordUrl指定的.wav格式录音文件
+- **AND** 录音文件URL可直接使用,无需拼接
+
+#### Scenario: 录音加载失败
+- **WHEN** 录音文件加载失败
+- **THEN** 播放器应显示"录音文件加载失败"提示
+- **AND** 提供重试按钮
+
+### Requirement: 对话记录展示
+系统 SHALL 以类似微信聊天的样式展示双方对话记录。
+
+#### Scenario: 解析对话记录
+- **WHEN** 获取到通话记录数据
+- **THEN** 系统应将conversations JSON字符串解析为对象数组
+- **AND** 每个对话项包含timestamp、speaker、script、action字段
+
+#### Scenario: AI调解员消息展示
+- **WHEN** 对话记录的speaker为"Robot"
+- **THEN** 消息气泡应显示在左侧
+- **AND** 头像应显示机器人图标
+- **AND** 头像下方应显示"AI调解员"
+- **AND** 消息背景色应为浅蓝色(#e3f2fd)
+
+#### Scenario: 当事人消息展示
+- **WHEN** 对话记录的speaker为"Contact"
+- **THEN** 消息气泡应显示在右侧
+- **AND** 头像应显示当事人名字的首字
+- **AND** 头像下方应显示调解记录中的creator字段值
+- **AND** 消息背景色应为浅绿色(#e8f5e9)
+
+#### Scenario: 时间戳展示
+- **WHEN** 对话记录包含有效timestamp
+- **THEN** 应在消息气泡下方显示格式化时间
+- **AND** 时间格式应为"YYYY-MM-DD HH:mm"
+
+#### Scenario: 过滤无效对话
+- **WHEN** 对话记录的script字段为null或空字符串
+- **THEN** 系统不应展示该条对话记录
+
+### Requirement: 对话记录弹窗样式
+系统 SHALL 为通话记录弹窗提供清晰美观的样式设计。
+
+#### Scenario: 弹窗尺寸
+- **WHEN** 通话记录弹窗打开
+- **THEN** 弹窗宽度应为600px
+- **AND** 弹窗最大高度应为视口高度的80%
+- **AND** 对话记录区域应支持垂直滚动
+
+#### Scenario: 对话区域滚动
+- **WHEN** 对话记录内容超过可视区域高度
+- **THEN** 对话区域应显示垂直滚动条
+- **AND** 滚动条样式应与系统整体风格一致
+
+#### Scenario: 响应式适配
+- **WHEN** 屏幕宽度小于600px
+- **THEN** 弹窗宽度应自适应屏幕宽度
+- **AND** 保持适当的左右边距
+
+## Related Capabilities
+- 外呼通话API接口规范 (outbound-call-api)
+- AI调解实时看板 (mediation-dashboard)

--
Gitblit v1.8.0