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) {
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
}