From c1293c28ac399ac4ad9943d17e0d8bc981f4689a Mon Sep 17 00:00:00 2001 From: Peanut Date: Sun, 19 Jul 2026 13:58:16 +0800 Subject: [PATCH] =?UTF-8?q?fix(mini-program):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=BF=83=E6=84=BF=E5=AE=9E=E7=8E=B0=E9=A1=B5=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E4=B8=8D=E6=98=BE=E7=A4=BA=20+=20=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E7=BB=A7=E7=BB=AD=E4=BC=9A=E8=AF=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. runGeneration 补赋值 generationDisplayText,修复用户输入心愿不显示 2. 识别外部服务 DAILY_GENERATION_IN_PROGRESS 错误码,保存 session_id 3. 失败态新增'继续创作'按钮,调用 followup action=retry 恢复中断会话 4. 新增 resumeSession 方法,重置状态后恢复流式生成 --- mini-program/src/pages/main/ScriptView.vue | 50 +++++++++++++++++++++- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/mini-program/src/pages/main/ScriptView.vue b/mini-program/src/pages/main/ScriptView.vue index c90e9ba..4c65ff0 100644 --- a/mini-program/src/pages/main/ScriptView.vue +++ b/mini-program/src/pages/main/ScriptView.vue @@ -173,7 +173,8 @@ {{ generationCopy }} {{ generationSubcopy }} - + + @@ -346,6 +347,7 @@ const generationScrollTarget = ref('') const generationScrollTop = ref(0) const generationAutoFollow = ref(true) const generationDisplayText = ref('') +const resumeableSessionId = ref('') const lastGenerationPrompt = ref('') const lastSubmitSource = ref('text') const lastGenerationRevision = ref(false) @@ -1641,7 +1643,9 @@ const runGeneration = async ({ prompt, displayText, source = 'text', saveTheme } novelOutline.value = null clarificationCard.value = null novelSessionId.value = '' + resumeableSessionId.value = '' outlineFeedback.value = '' + generationDisplayText.value = display generationScrollTarget.value = '' generationScrollTop.value = 0 generationScrollAnchor.value = 'generation-stream-anchor-a' @@ -1709,7 +1713,13 @@ const handleShortNovelEvent = (event) => { viewMode.value = 'chat' break case 'error': - markGenerationFailed(payload.message || '生成失败') + // 识别每日限制错误,保存 session_id 供"继续创作"使用 + if (payload.code === 'DAILY_GENERATION_IN_PROGRESS' && session_id) { + resumeableSessionId.value = session_id + markGenerationFailed(payload.message || '今天已有未完成的创作,可点击继续创作恢复') + } else { + markGenerationFailed(payload.message || '生成失败') + } break } } @@ -1748,6 +1758,42 @@ const modifyOutline = (feedback) => { }) } +const resumeSession = () => { + if (!resumeableSessionId.value || generating.value) return + novelSessionId.value = resumeableSessionId.value + resumeableSessionId.value = '' + generating.value = true + streamContent.value = '' + novelFullText.value = '' + generationStatus.value = 'waiting' + generationError.value = '' + generationDisplayText.value = '继续之前的创作' + streamWriter.reset() + startGenerationFeedback() + viewState.value = 'generating' + keepGenerationAtBottom() + + try { + currentStreamTask.value = followupStream({ + sessionId: novelSessionId.value, + action: 'retry', + payload: null, + onEvent: handleShortNovelEvent, + onError: (msg) => { + markGenerationFailed(msg) + analytics.track('script_generate_fail', { + source: 'resume', + error: msg + }, { eventType: 'script', pagePath }) + } + }) + } catch (error) { + markGenerationFailed(error.message || '恢复失败') + } finally { + generating.value = false + } +} + const submitWish = async (source = 'text') => { const text = wishText.value.trim() if (!text || generating.value) return