feat(mini-program): sendChat 按 generationPhase 切换接口,消息进统一对话流

This commit is contained in:
2026-07-19 15:24:49 +08:00
parent e41266e6f4
commit e109e59f1a
+24 -6
View File
@@ -611,6 +611,10 @@ const sendChat = async () => {
if (!chatInput.value.trim() || generating.value) return
const content = chatInput.value.trim()
chatInput.value = ''
// 仅在 generationPhase === 'done' 时处理;生成流程中底部输入栏不显示,但防御性 short-circuit
if (generationPhase.value !== 'done') return
const messageId = currentVersionMessageId.value
const userMessageRes = await createMessage({
@@ -622,15 +626,21 @@ const sendChat = async () => {
})
const userMessageId = userMessageRes.data?.id
messages.value.push({
id: userMessageId,
conversationId: conversationId.value,
// 用户消息追加到统一对话流 resultMessages
resultMessages.value.push({
id: userMessageId || createMessageId(),
role: 'user',
kind: 'text',
content,
sender: 'user',
type: 'chat'
pending: false,
time: formatMessageTime(),
submitted: false,
confirmed: false
})
keepResultAtBottom()
generating.value = true
generationStatus.value = 'streaming'
await streamScriptChat({
operationType: 'chat',
conversationId: conversationId.value,
@@ -638,13 +648,21 @@ const sendChat = async () => {
userMessageId,
content,
scriptId: scriptId.value,
onDelta: () => {},
onDelta: (delta) => {
// 往最后一条 AI 小说消息追加 delta
const lastAssistant = [...resultMessages.value].reverse().find(m => m.role === 'assistant' && m.kind === 'novel')
if (lastAssistant) {
lastAssistant.content += delta
}
},
onDone: () => {
generating.value = false
generationStatus.value = 'idle'
loadMessages()
},
onError: (error) => {
generating.value = false
generationStatus.value = 'idle'
uni.showToast({ title: error || '生成失败', icon: 'none' })
}
})