refactor(mini-program): handleShortNovelEvent 改为对话流追加消息

This commit is contained in:
2026-07-19 15:10:42 +08:00
parent c0adb48949
commit 84b6a77632
+27 -14
View File
@@ -1693,33 +1693,45 @@ const handleShortNovelEvent = (event) => {
switch (type) { switch (type) {
case 'status': case 'status':
// 仅更新加载提示,不追加独立消息
generationStatus.value = payload.stage || 'processing' generationStatus.value = payload.stage || 'processing'
break break
case 'clarification_card': case 'clarification_card':
clarificationCard.value = payload.card || null addResultMessage({ role: 'assistant', kind: 'card', card: payload.card || null })
viewState.value = 'clarifying' generationStatus.value = 'idle'
break break
case 'outline_created': case 'outline_created':
novelOutline.value = payload.outline || null addResultMessage({ role: 'assistant', kind: 'outline', outline: payload.outline || null })
viewState.value = 'outlining' generationStatus.value = 'idle'
break break
case 'novel_start': case 'novel_start':
streamContent.value = '' addResultMessage({ role: 'assistant', kind: 'novel', content: '', pending: true })
novelFullText.value = '' generationStatus.value = 'streaming'
viewState.value = 'novel-generating'
break break
case 'novel_delta': case 'novel_delta': {
streamContent.value += payload.delta || '' // 往最后一条 novel 消息追加 delta
const lastNovel = [...resultMessages.value].reverse().find(m => m.kind === 'novel' && m.pending)
if (lastNovel) {
lastNovel.content += payload.delta || ''
}
keepResultAtBottom()
break break
case 'novel_done': }
novelFullText.value = payload.full_text || streamContent.value case 'novel_done': {
streamContent.value = novelFullText.value // 标记最后一条 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 || '' scriptId.value = payload.scriptId || ''
conversationId.value = payload.conversationId || '' conversationId.value = payload.conversationId || ''
currentVersionMessageId.value = payload.currentVersionMessageId || '' currentVersionMessageId.value = payload.currentVersionMessageId || ''
viewState.value = 'result' generationPhase.value = 'done'
viewMode.value = 'chat' generationStatus.value = 'idle'
persistResultMessages()
break break
}
case 'error': case 'error':
// 识别每日限制错误,保存 session_id 供"继续创作"使用 // 识别每日限制错误,保存 session_id 供"继续创作"使用
if (payload.code === 'DAILY_GENERATION_IN_PROGRESS' && session_id) { if (payload.code === 'DAILY_GENERATION_IN_PROGRESS' && session_id) {
@@ -1727,6 +1739,7 @@ const handleShortNovelEvent = (event) => {
markGenerationFailed(payload.message || '今天已有未完成的创作,可点击继续创作恢复') markGenerationFailed(payload.message || '今天已有未完成的创作,可点击继续创作恢复')
} else { } else {
markGenerationFailed(payload.message || '生成失败') markGenerationFailed(payload.message || '生成失败')
addResultMessage({ role: 'assistant', kind: 'text', content: payload.message || '生成失败', failed: true })
} }
break break
} }