From 872cf63c7c3101e39e7cdd6512dcf2fed7fd14f8 Mon Sep 17 00:00:00 2001 From: Peanut Date: Sun, 26 Jul 2026 17:15:22 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E8=B0=83=E6=95=B4=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=BF=83=E6=84=BF=E6=B6=88=E6=81=AF=E5=88=B0=E8=81=8A?= =?UTF-8?q?=E5=A4=A9=E6=B5=81=E9=A6=96=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题:DB 中 messageOrder 顺序导致用户心愿(order=8)显示在澄清卡片(order=2,4)之后, 但逻辑上用户心愿应该是第一条消息。 修复: - 在 rebuildResultMessages 完成后,检测 user 类型的 chat 消息位置 - 如果不在首位(index > 0),移动到 resultMessages 数组开头 - ScriptView.vue 和 ScriptDetailView.vue 保持一致 显示顺序现在为: 1. 用户心愿(第一条) 2. 澄清卡片 1 + 答案 3. 澄清卡片 2 + 答案 4. 大纲 5. 正文 --- mini-program/src/pages/main/ScriptDetailView.vue | 9 ++++++++- mini-program/src/pages/main/ScriptView.vue | 7 +++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/mini-program/src/pages/main/ScriptDetailView.vue b/mini-program/src/pages/main/ScriptDetailView.vue index 8af39fb..0a230ad 100644 --- a/mini-program/src/pages/main/ScriptDetailView.vue +++ b/mini-program/src/pages/main/ScriptDetailView.vue @@ -209,7 +209,14 @@ const rebuildResultMessages = (scriptData, messages) => { } }) - // 4. 如果 messages 中没有 script 类型消息,fallback 到 plotJson.fullContent + // 调整顺序:用户心愿应该在最前面(DB 中 messageOrder 可能靠后,但逻辑上是第一条) + const userWishIndex = result.findIndex(m => m.role === 'user' && m.kind === 'text') + if (userWishIndex > 0) { + const [userWish] = result.splice(userWishIndex, 1) + result.unshift(userWish) + } + + // 5. 如果 messages 中没有 script 类型消息,fallback 到 plotJson.fullContent const hasNovel = result.some(m => m.kind === 'novel') if (!hasNovel && scriptData?.plotJson?.fullContent) { result.push({ diff --git a/mini-program/src/pages/main/ScriptView.vue b/mini-program/src/pages/main/ScriptView.vue index aea0570..bb54a19 100644 --- a/mini-program/src/pages/main/ScriptView.vue +++ b/mini-program/src/pages/main/ScriptView.vue @@ -1591,6 +1591,13 @@ const openScriptChat = async (payload = {}) => { // 跳过 system 类型(不展示) }) + // 调整顺序:用户心愿应该在最前面(DB 中 messageOrder 可能靠后,但逻辑上是第一条) + const userWishIndex = resultMessages.value.findIndex(m => m.role === 'user' && m.kind === 'text') + if (userWishIndex > 0) { + const [userWish] = resultMessages.value.splice(userWishIndex, 1) + resultMessages.value.unshift(userWish) + } + analytics.track('script_chat_open_from_library', { script_id: script.id, has_history: messagesList.length > 0