From e373cb344f6959e767b6879e5517cc2afca59a66 Mon Sep 17 00:00:00 2001 From: Peanut Date: Sun, 26 Jul 2026 17:11:52 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E8=BF=87=E6=BB=A4=E6=9C=AA?= =?UTF-8?q?=E9=85=8D=E5=AF=B9=E6=BE=84=E6=B8=85=E7=AD=94=E6=A1=88=EF=BC=88?= =?UTF-8?q?=E9=81=BF=E5=85=8D=E6=98=BE=E7=A4=BA=E5=AD=A4=E7=AB=8B=20answer?= =?UTF-8?q?=20=E5=A6=82=E3=80=8Clove=E3=80=8D=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题:DB 中部分 clarification_answer 没有对应 question(如 messageOrder=1 的「love」), 原逻辑将其渲染为独立 user 文本消息,导致用户看到无法理解的孤立答案气泡。 修复: - 未配对的 clarification_answer 不再展示为 user 文本消息,直接 return 跳过 - 原因:没有 question 上下文的 answer 无法正确渲染,只显示答案会造成用户困惑 - ScriptView.vue 和 ScriptDetailView.vue 保持一致 数据影响: - 「十年后的来信」剧本 messageOrder=1 的「love」answer 将被过滤 - 正常配对的 answer(如「family」→「家人」「sibling」→「兄弟姐妹」)仍正常显示 --- .../src/pages/main/ScriptDetailView.vue | 5 +++-- mini-program/src/pages/main/ScriptView.vue | 17 +++++------------ 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/mini-program/src/pages/main/ScriptDetailView.vue b/mini-program/src/pages/main/ScriptDetailView.vue index 3a659b8..8af39fb 100644 --- a/mini-program/src/pages/main/ScriptDetailView.vue +++ b/mini-program/src/pages/main/ScriptDetailView.vue @@ -193,8 +193,9 @@ const rebuildResultMessages = (scriptData, messages) => { } else if (m.type === 'clarification_answer') { // 已配对的 answer 由 question 那一步负责渲染;这里跳过 if (answerAssigned.has(m.id)) return - // 未配对的 answer 展示为独立 user 文本 - result.push({ id: m.id, role: 'user', kind: 'text', content: m.content || '' }) + // 未配对的 answer(如 messageOrder 在所有 question 之前的预填充)不展示 + // 原因:没有对应 question 的 answer 无法正确渲染(用户看不到问题,只显示答案会造成困惑) + return } else if (m.type === 'outline') { let outline = {} try { outline = JSON.parse(m.content || '{}') } catch (e) { outline = {} } diff --git a/mini-program/src/pages/main/ScriptView.vue b/mini-program/src/pages/main/ScriptView.vue index 94a836f..aea0570 100644 --- a/mini-program/src/pages/main/ScriptView.vue +++ b/mini-program/src/pages/main/ScriptView.vue @@ -1513,7 +1513,8 @@ const openScriptChat = async (payload = {}) => { questionAnswerMap.set(q.id, matched) } }) - // 未匹配的 answer(如 messageOrder 在所有 question 之前的预填充)按独立 user 消息展示 + // 未匹配的 answer(如 messageOrder 在所有 question 之前的预填充)不展示 + // 原因:没有对应 question 的 answer 无法正确渲染(用户看不到问题,只显示答案会造成困惑) clarificationAnswers.forEach(a => { if (!answerAssigned.has(a.id)) unmatchedAnswers.push(a) }) @@ -1547,17 +1548,9 @@ const openScriptChat = async (payload = {}) => { } else if (m.type === 'clarification_answer') { // 已配对到 question 的 answer 由 question 那一步负责渲染;这里跳过 if (answerAssigned.has(m.id)) return - // 未配对的 answer(如用户对未识别 question 的回答)展示为独立 user 文本 - resultMessages.value.push({ - id: m.id || createMessageId(), - role: 'user', - kind: 'text', - content: m.content || '', - pending: false, - time: formatMessageTime(), - submitted: false, - confirmed: false - }) + // 未配对的 answer(如 messageOrder 在所有 question 之前的预填充)不展示 + // 原因:没有对应 question 的 answer 无法正确渲染(用户看不到问题,只显示答案会造成困惑) + return } else if (m.type === 'outline') { let outline = {} try { outline = JSON.parse(m.content || '{}') } catch (e) { outline = {} }