From b4fca0abfaaab442fb0713986d5442b32100033a Mon Sep 17 00:00:00 2001 From: Peanut Date: Sun, 19 Jul 2026 15:15:49 +0800 Subject: [PATCH] =?UTF-8?q?refactor(mini-program):=20runGeneration+?= =?UTF-8?q?=E4=BA=A4=E4=BA=92=E5=87=BD=E6=95=B0=E6=94=B9=E4=B8=BA=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E5=AF=B9=E8=AF=9D=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 | 48 ++++++++++++++-------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/mini-program/src/pages/main/ScriptView.vue b/mini-program/src/pages/main/ScriptView.vue index b5ae68f..6b115c9 100644 --- a/mini-program/src/pages/main/ScriptView.vue +++ b/mini-program/src/pages/main/ScriptView.vue @@ -1661,8 +1661,11 @@ const runGeneration = async ({ prompt, displayText, source = 'text', saveTheme } streamWriter.reset() startGenerationFeedback() ttsPlayer.reset() - viewState.value = 'generating' - keepGenerationAtBottom() + viewState.value = 'chat' + generationPhase.value = 'generating' + resultMessages.value = [] + addResultMessage({ role: 'user', kind: 'text', content: display }) + keepResultAtBottom() try { currentStreamTask.value = startNovelStream({ @@ -1745,37 +1748,50 @@ const handleShortNovelEvent = (event) => { } } -const submitClarification = (answer) => { +const submitClarification = (msg, answer) => { if (answeringClarification.value) return + if (msg) { + msg.submitted = true + msg.answer = answer + } + addResultMessage({ role: 'user', kind: 'text', content: answer }) answeringClarification.value = true currentStreamTask.value = followupStream({ sessionId: novelSessionId.value, action: 'answer_clarification', payload: { answer }, onEvent: handleShortNovelEvent, - onError: (msg) => markGenerationFailed(msg) + onError: (errMsg) => markGenerationFailed(errMsg) }) setTimeout(() => { answeringClarification.value = false }, 200) } -const confirmOutline = () => { +const confirmOutline = (msg) => { + if (msg) msg.confirmed = true + addResultMessage({ role: 'user', kind: 'text', content: '确认大纲' }) currentStreamTask.value = followupStream({ sessionId: novelSessionId.value, action: 'confirm_outline', payload: null, onEvent: handleShortNovelEvent, - onError: (msg) => markGenerationFailed(msg) + onError: (errMsg) => markGenerationFailed(errMsg) }) } -const modifyOutline = (feedback) => { - if (!feedback || !feedback.trim()) return +const modifyOutline = (msg) => { + const feedback = msg?.feedback || '' + if (!feedback.trim()) { + uni.showToast({ title: '请先填写修改意见', icon: 'none' }) + return + } + if (msg) msg.confirmed = true + addResultMessage({ role: 'user', kind: 'text', content: feedback }) currentStreamTask.value = followupStream({ sessionId: novelSessionId.value, action: 'modify_outline', payload: { feedback }, onEvent: handleShortNovelEvent, - onError: (msg) => markGenerationFailed(msg) + onError: (errMsg) => markGenerationFailed(errMsg) }) } @@ -1784,15 +1800,13 @@ const resumeSession = () => { novelSessionId.value = resumeableSessionId.value resumeableSessionId.value = '' generating.value = true - streamContent.value = '' - novelFullText.value = '' + generationPhase.value = 'generating' generationStatus.value = 'waiting' generationError.value = '' - generationDisplayText.value = '继续之前的创作' + addResultMessage({ role: 'user', kind: 'text', content: '继续之前的创作' }) streamWriter.reset() startGenerationFeedback() - viewState.value = 'generating' - keepGenerationAtBottom() + keepResultAtBottom() try { currentStreamTask.value = followupStream({ @@ -1800,11 +1814,11 @@ const resumeSession = () => { action: 'retry', payload: null, onEvent: handleShortNovelEvent, - onError: (msg) => { - markGenerationFailed(msg) + onError: (errMsg) => { + markGenerationFailed(errMsg) analytics.track('script_generate_fail', { source: 'resume', - error: msg + error: errMsg }, { eventType: 'script', pagePath }) } })