From 84b6a7763274ade0e64ea94b6ef60cc7e0e92263 Mon Sep 17 00:00:00 2001 From: Peanut Date: Sun, 19 Jul 2026 15:10:42 +0800 Subject: [PATCH] =?UTF-8?q?refactor(mini-program):=20handleShortNovelEvent?= =?UTF-8?q?=20=E6=94=B9=E4=B8=BA=E5=AF=B9=E8=AF=9D=E6=B5=81=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mini-program/src/pages/main/ScriptView.vue | 41 ++++++++++++++-------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/mini-program/src/pages/main/ScriptView.vue b/mini-program/src/pages/main/ScriptView.vue index 186929e..b5ae68f 100644 --- a/mini-program/src/pages/main/ScriptView.vue +++ b/mini-program/src/pages/main/ScriptView.vue @@ -1693,33 +1693,45 @@ const handleShortNovelEvent = (event) => { switch (type) { case 'status': + // 仅更新加载提示,不追加独立消息 generationStatus.value = payload.stage || 'processing' break case 'clarification_card': - clarificationCard.value = payload.card || null - viewState.value = 'clarifying' + addResultMessage({ role: 'assistant', kind: 'card', card: payload.card || null }) + generationStatus.value = 'idle' break case 'outline_created': - novelOutline.value = payload.outline || null - viewState.value = 'outlining' + addResultMessage({ role: 'assistant', kind: 'outline', outline: payload.outline || null }) + generationStatus.value = 'idle' break case 'novel_start': - streamContent.value = '' - novelFullText.value = '' - viewState.value = 'novel-generating' + addResultMessage({ role: 'assistant', kind: 'novel', content: '', pending: true }) + generationStatus.value = 'streaming' break - case 'novel_delta': - streamContent.value += payload.delta || '' + case 'novel_delta': { + // 往最后一条 novel 消息追加 delta + const lastNovel = [...resultMessages.value].reverse().find(m => m.kind === 'novel' && m.pending) + if (lastNovel) { + lastNovel.content += payload.delta || '' + } + keepResultAtBottom() break - case 'novel_done': - novelFullText.value = payload.full_text || streamContent.value - streamContent.value = novelFullText.value + } + case 'novel_done': { + // 标记最后一条 novel 消息完成 + const lastNovel = [...resultMessages.value].reverse().find(m => m.kind === 'novel') + if (lastNovel) { + if (payload.full_text) lastNovel.content = payload.full_text + lastNovel.pending = false + } scriptId.value = payload.scriptId || '' conversationId.value = payload.conversationId || '' currentVersionMessageId.value = payload.currentVersionMessageId || '' - viewState.value = 'result' - viewMode.value = 'chat' + generationPhase.value = 'done' + generationStatus.value = 'idle' + persistResultMessages() break + } case 'error': // 识别每日限制错误,保存 session_id 供"继续创作"使用 if (payload.code === 'DAILY_GENERATION_IN_PROGRESS' && session_id) { @@ -1727,6 +1739,7 @@ const handleShortNovelEvent = (event) => { markGenerationFailed(payload.message || '今天已有未完成的创作,可点击继续创作恢复') } else { markGenerationFailed(payload.message || '生成失败') + addResultMessage({ role: 'assistant', kind: 'text', content: payload.message || '生成失败', failed: true }) } break }