From f8d6e881df76d82d3893c0420c45b5374645a5ee Mon Sep 17 00:00:00 2001 From: Peanut Date: Mon, 20 Jul 2026 22:57:24 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=81=A2=E5=A4=8D=20addResultMessage=20?= =?UTF-8?q?+=20=E6=B8=B2=E6=9F=93=E5=B1=82=E8=BF=87=E6=BB=A4=EF=BC=8C?= =?UTF-8?q?=E9=81=BF=E5=85=8D=E9=87=8D=E5=A4=8D=E6=B0=94=E6=B3=A1=E5=90=8C?= =?UTF-8?q?=E6=97=B6=E6=94=AF=E6=8C=81=E5=90=8E=E7=BB=AD=20loading?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mini-program/src/pages/main/ScriptView.vue | 27 +++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/mini-program/src/pages/main/ScriptView.vue b/mini-program/src/pages/main/ScriptView.vue index 6decd1d..11413d3 100644 --- a/mini-program/src/pages/main/ScriptView.vue +++ b/mini-program/src/pages/main/ScriptView.vue @@ -114,7 +114,7 @@ @@ -944,12 +944,32 @@ const generationCopy = computed(() => { // chat 视图 loading 显示条件:等待首个 assistant 响应期间 // - generationPhase === 'generating':生成流程未完成 +// 渲染层过滤:去掉"紧跟在已提交 card 后、内容等于 card.answer"的 user 消息,避免重复气泡 +// 这样 showChatLoading 仍能根据"最后一条是 user"正确判断等待状态 +const visibleResultMessages = computed(() => { + const list = resultMessages.value + if (!list || list.length < 2) return list + return list.filter((m, idx) => { + if (!(m.role === 'user' && m.kind === 'text')) return true + // 向前查找最近的 card 消息 + for (let i = idx - 1; i >= 0; i--) { + const prev = list[i] + if (prev.kind === 'card') { + // 是已提交 card 且内容相同 → 过滤 + if (prev.submitted && prev.answer && m.content === prev.answer) return false + return true + } + } + return true + }) +}) + // - generationStatus !== 'failed':非失败状态 // - 最后一条消息是 user:说明还没收到 assistant 响应(card/outline/novel) const showChatLoading = computed(() => { if (generationPhase.value !== 'generating') return false if (generationStatus.value === 'failed') return false - const list = resultMessages.value + const list = visibleResultMessages.value if (!list || !list.length) return false const lastMsg = list[list.length - 1] return lastMsg && lastMsg.role === 'user' @@ -1753,8 +1773,9 @@ const submitClarification = (answer) => { const label = option?.label || answer if (card) { card.submitted = true - card.answer = label // 显示用 label(中文);答案已在卡片中显示,无需额外用户气泡 + card.answer = label // 显示用 label(中文);答案已在卡片中显示,但同时添加 user 消息让 loading 能正确判断等待状态 } + addResultMessage({ role: 'user', kind: 'text', content: label }) answeringClarification.value = true currentStreamTask.value = followupStream({ sessionId: novelSessionId.value,