fix:过滤未配对澄清答案(避免显示孤立 answer 如「love」)

问题: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」→「兄弟姐妹」)仍正常显示
This commit is contained in:
2026-07-26 17:11:52 +08:00
parent ed67739a47
commit e373cb344f
2 changed files with 8 additions and 14 deletions
@@ -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 = {} }
+5 -12
View File
@@ -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 = {} }