--- author: claude created_at: 2026-06-27 purpose: AI 消息卡片功能按钮统一实现计划 --- # AI 消息卡片功能按钮统一实现计划 > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. **Goal:** 统一小程序实现心愿页面中所有 AI 消息卡片的功能按钮,并修复 story-card 展开失效 bug **Architecture:** 在现有单文件组件 `ScriptView.vue` 内修复 + 扩展,不提取独立组件,保持现有文件结构 **Tech Stack:** Vue 3, UniApp, 微信小程序 --- ## 文件结构 **修改:** - `mini-program/src/pages/main/ScriptView.vue` - 主页面组件(模板 + 脚本 + 样式) --- ### Task 1: 修复 story-card 展开失效 bug **Files:** - Modify: `mini-program/src/pages/main/ScriptView.vue:192-210` - [ ] **Step 1: 移除 resultHasScriptReplies 条件包裹** 打开 `mini-program/src/pages/main/ScriptView.vue`,找到第 192 行的 `` 闭合标签(第 210 行)。 修改前: ```vue ``` 修改后: ```vue {{ displayedResultContent }} {{ displayedResultContent }} {{ storyCollapsed ? '展开全文' : '收起全文' }} ``` - [ ] **Step 2: 验证修复** 在微信开发者工具中编译运行,进入「实现心愿」页面: 1. 输入心愿并生成故事 2. 点击「继续生成」创建 script 类型消息 3. 点击 story-card 的展开/收起按钮,验证故事正文能正确展开和收起 4. 确认控制台无报错 - [ ] **Step 3: 提交代码** ```bash git add mini-program/src/pages/main/ScriptView.vue git commit -m "fix: 修复 story-card 展开失效 bug 移除 resultHasScriptReplies 条件包裹,让故事正文始终由 storyCollapsed 控制展开/收起" ``` --- ### Task 2: 添加新方法支持消息卡片功能 **Files:** - Modify: `mini-program/src/pages/main/ScriptView.vue` (script 部分) - [ ] **Step 1: 添加 copyMessageContent 方法** 在 `toggleMessageCollapse` 方法之后(约第 450 行),添加复制消息内容的方法: ```javascript const copyMessageContent = (message) => { const content = message?.content || '' if (!content.trim()) { uni.showToast({ title: '暂无可复制内容', icon: 'none' }) return } uni.setClipboardData({ data: content, success: () => { uni.showToast({ title: '已复制', icon: 'success' }) } }) analytics.track('script_message_copy_click', { message_id: message?.id || '', content_length: content.length }, { eventType: 'script', pagePath }) } ``` - [ ] **Step 2: 添加 playMessageTts 方法** 在 `copyMessageContent` 方法之后,添加播放 TTS 的方法: ```javascript const playMessageTts = (message) => { const scriptId = currentResult.value?.id || '' ttsPlayer.playSource(scriptId) analytics.track('script_message_tts_click', { message_id: message?.id || '', script_id: scriptId }, { eventType: 'script', pagePath }) } ``` - [ ] **Step 3: 修改 toggleMessageCollapse 方法添加埋点** 找到 `toggleMessageCollapse` 方法(约第 442-450 行),在方法开头添加埋点代码: 修改前: ```javascript const toggleMessageCollapse = (message) => { collapsedMessageIds.value[message.id] = !isMessageCollapsed(message) } ``` 修改后: ```javascript const toggleMessageCollapse = (message) => { collapsedMessageIds.value[message.id] = !isMessageCollapsed(message) analytics.track('script_message_collapse_toggle', { message_id: message?.id || '', collapsed: collapsedMessageIds.value[message.id] }, { eventType: 'script', pagePath }) } ``` - [ ] **Step 4: 验证方法添加** 在微信开发者工具中编译运行,确认控制台无语法错误。新方法暂时不会被调用,后续任务会在模板中使用。 - [ ] **Step 5: 提交代码** ```bash git add mini-program/src/pages/main/ScriptView.vue git commit -m "feat: 添加消息卡片功能方法 - copyMessageContent: 复制消息内容到剪贴板 - playMessageTts: 播放故事 TTS 音频 - toggleMessageCollapse: 添加展开/收起埋点" ``` --- ### Task 3: 在 result-chat-list 中添加功能按钮组 **Files:** - Modify: `mini-program/src/pages/main/ScriptView.vue:245-270` - [ ] **Step 1: 在 assistant 消息中添加功能按钮组** 找到 `result-chat-list` 部分(约第 245-270 行),在消息内容和展开/收起按钮之后、时间戳之前,添加功能按钮组。 修改前: ```vue {{ getMessageContent(message) }} {{ isMessageCollapsed(message) ? '展开全文' : '收起全文' }} {{ formatMessageTime(message.createdAt) }} ``` 修改后: ```vue {{ getMessageContent(message) }} {{ isMessageCollapsed(message) ? '展开全文' : '收起全文' }} 复制 换个方向 不像我 继续生成 ▶ 播放 {{ formatMessageTime(message.createdAt) }} ``` **说明:** - 按钮组使用 `.message-actions` 容器,2 列网格布局 - 复制、换个方向、不像我、继续生成使用 `.action-btn` 样式 - 播放按钮使用 `.action-btn.primary` 样式(主色调突出) - 所有按钮都调用 Task 2 中定义的方法或复用现有方法 - [ ] **Step 2: 验证按钮组显示** 在微信开发者工具中编译运行: 1. 进入「实现心愿」页面,生成故事 2. 点击「继续生成」创建 assistant 消息 3. 验证每条 assistant 消息下方显示 5 个功能按钮(复制、换个方向、不像我、继续生成、播放) 4. 验证按钮布局为 2 列网格 - [ ] **Step 3: 验证按钮功能** 逐个测试按钮功能: 1. **复制**:点击后应复制消息内容,显示「已复制」提示 2. **换个方向**:点击后应进入「换方向」修订确认流程 3. **不像我**:点击后应进入「不像我」修订确认流程 4. **继续生成**:点击后应收起故事并聚焦输入框 5. **播放**:点击后应播放故事 TTS 音频 确认控制台无报错,所有功能正常。 - [ ] **Step 4: 提交代码** ```bash git add mini-program/src/pages/main/ScriptView.vue git commit -m "feat: 在 result-chat-list 中添加功能按钮组 为每条 assistant 消息添加完整功能按钮: - 复制:复制消息内容到剪贴板 - 换个方向:进入换方向修订确认 - 不像我:进入不像我修订确认 - 继续生成:收起故事并聚焦输入框 - 播放:播放故事 TTS 音频" ``` --- ### Task 4: 添加消息按钮组样式 **Files:** - Modify: `mini-program/src/pages/main/ScriptView.vue` (style 部分) - [ ] **Step 1: 添加 .message-actions 样式** 在 `