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