## ADDED Requirements ### Requirement: Canvas Integration 系统 SHALL 在 `BaseFrameElement.vue` 中,当 `toolType === 77` 时直接渲染 `TopicDiscussionPreview` Vue 组件,替代 iframe 渲染方式。 #### Scenario: Render preview component on canvas - **WHEN** 画布中存在 toolType 为 77 的 PPTFrameElement,且非缩略图模式、元素可见 - **THEN** 渲染 TopicDiscussionPreview Vue 组件,填满元素容器 #### Scenario: Show placeholder when not visible - **WHEN** toolType 为 77 的元素不可见(如被滚出视口) - **THEN** 显示占位符(🌐 + "英语口语"类型标签),与其他工具类型行为一致 #### Scenario: Show thumbnail mode - **WHEN** toolType 为 77 的元素处于缩略图模式 - **THEN** 显示简化占位符,与其他工具类型的缩略图行为一致 --- ### Requirement: Student Preview Container 系统 SHALL 提供一个 `StudentPreview.vue` 容器组件,模拟 16:9 PPT 页面布局,包含标题区(slot)、内容区(default slot)、操作区(slot)。 #### Scenario: Render with title and action area - **WHEN** 组件传入 title、subtitle、titleIcon 和 actionArea slot - **THEN** 显示带标题区和操作区的 16:9 白色卡片容器,内容区居中显示 default slot #### Scenario: Render without title - **WHEN** 组件未传入 title 相关 props - **THEN** 不渲染标题区,内容区占满容器 --- ### Requirement: Dialogue State Management 系统 SHALL 管理话题讨论预览的三个阶段:ready(准备)、chatting(对话中)、completed(完成)。 #### Scenario: Initial state is ready - **WHEN** TopicDiscussionPreview 组件挂载 - **THEN** 显示准备页,包含话题图标、话题名称和"开始对话"按钮 #### Scenario: Transition from ready to chatting - **WHEN** 用户点击"开始对话"按钮 - **THEN** 切换到 DialogueChatView 对话界面,显示 AI 第一条消息 #### Scenario: Transition from chatting to completed - **WHEN** 对话轮次完成(达到 totalRounds 或脚本结束) - **THEN** 切换到报告界面,显示 OverallReport 和 DetailedReport #### Scenario: Reset preview - **WHEN** 用户在 chatting 或 completed 阶段点击"重置预览"按钮 - **THEN** 回到 ready 阶段 --- ### Requirement: Dialogue Chat View 系统 SHALL 提供 DialogueChatView.vue 组件,实现模拟对话交互界面。 #### Scenario: Display chat messages with voice bars - **WHEN** 对话消息存在 - **THEN** AI 消息显示白色语音条(左对齐),学生消息显示橙色语音条(右对齐),每条消息下方显示英文文本 #### Scenario: Recording toggle - **WHEN** 用户点击录音按钮 - **THEN** 按钮变为红色录音状态,显示录音时长计数;再次点击停止录音,自动生成模拟学生回复和评估数据 #### Scenario: Instant feedback display (L1) - **WHEN** 学生消息生成后 - **THEN** 在消息下方显示四维度评估(准确/流畅/完整/节奏)和一句话建议,可展开查看详情 #### Scenario: Feedback detail expansion (L2) - **WHEN** 用户点击 L1 反馈的"详情"按钮 - **THEN** 展开显示 better expression 和 suggested words #### Scenario: Smart hint dialog - **WHEN** 用户点击"提示"按钮 - **THEN** 弹出提示弹窗,包含任务提示、句子提示(含关键词高亮)和词汇提示(含音标和释义) #### Scenario: Badge achievement animation - **WHEN** 学生连续 3 句流畅度优秀 / 连续 5 句发音准确 / 单轮四维度全优 - **THEN** 右上角显示对应徽章动画(流畅达人/发音专家/完美一轮),2.5 秒后消失 --- ### Requirement: Overall Report 系统 SHALL 提供 OverallReport.vue 组件,展示对话完成后的整体评价报告。 #### Scenario: Display score and level - **WHEN** 报告渲染时 - **THEN** 显示综合评分(数字/字母/仅评语,取决于 scoreDisplayMode)、评分等级标签、超过同学百分比 #### Scenario: Display ability analysis - **WHEN** 报告渲染时 - **THEN** 显示四维能力(流利度/互动性/词汇量/语法)的横向柱状图 #### Scenario: Display AI comment and highlights - **WHEN** 报告渲染时 - **THEN** 显示 AI 角色头像和点评文本、亮点列表和建议列表 #### Scenario: Action buttons - **WHEN** 报告渲染时 - **THEN** 底部显示"再来一次"和"完成"按钮 --- ### Requirement: Detailed Report 系统 SHALL 提供 DetailedReport.vue 组件,展示按轮次分组的单句评价。 #### Scenario: Display sentence cards by round - **WHEN** 报告渲染时 - **THEN** 按轮次分组显示对话卡片,每张卡片包含语音条、文本内容,学生卡片可展开查看发音评分和反馈 #### Scenario: Expand/collapse individual cards - **WHEN** 用户点击有评价数据的学生消息卡片 - **THEN** 展开/收起该卡片的发音评估和反馈详情 #### Scenario: Toggle all cards - **WHEN** 用户点击"展开全部/收起全部"按钮 - **THEN** 所有学生消息卡片同时展开或收起