From 847e80aa0efa63592f3642701656e816e55f477f Mon Sep 17 00:00:00 2001 From: Peanut Date: Sat, 27 Jun 2026 22:29:27 +0800 Subject: [PATCH] =?UTF-8?q?docs=EF=BC=9A=E6=96=B0=E5=A2=9E=20AI=20?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E5=8D=A1=E7=89=87=E5=8A=9F=E8=83=BD=E6=8C=89?= =?UTF-8?q?=E9=92=AE=E5=AE=9E=E7=8E=B0=E8=AE=A1=E5=88=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2026-06-27-ai-message-card-buttons.md | 467 ++++++++++++++++++ 1 file changed, 467 insertions(+) create mode 100644 docs/superpowers/plans/2026-06-27-ai-message-card-buttons.md diff --git a/docs/superpowers/plans/2026-06-27-ai-message-card-buttons.md b/docs/superpowers/plans/2026-06-27-ai-message-card-buttons.md new file mode 100644 index 0000000..cb57af3 --- /dev/null +++ b/docs/superpowers/plans/2026-06-27-ai-message-card-buttons.md @@ -0,0 +1,467 @@ +--- +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 样式** + +在 `