refactor(mini-program): handleShortNovelEvent 改为对话流追加消息
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user