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 if (!chatInput.value.trim() || generating.value) return
const content = chatInput.value.trim() const content = chatInput.value.trim()
chatInput.value = '' chatInput.value = ''
// 仅在 generationPhase === 'done' 时处理;生成流程中底部输入栏不显示,但防御性 short-circuit
if (generationPhase.value !== 'done') return
const messageId = currentVersionMessageId.value const messageId = currentVersionMessageId.value
const userMessageRes = await createMessage({ const userMessageRes = await createMessage({
@@ -622,15 +626,21 @@ const sendChat = async () => {
}) })
const userMessageId = userMessageRes.data?.id const userMessageId = userMessageRes.data?.id
messages.value.push({ // 用户消息追加到统一对话流 resultMessages
id: userMessageId, resultMessages.value.push({
conversationId: conversationId.value, id: userMessageId || createMessageId(),
role: 'user',
kind: 'text',
content, content,
sender: 'user', pending: false,
type: 'chat' time: formatMessageTime(),
submitted: false,
confirmed: false
}) })
keepResultAtBottom()
generating.value = true generating.value = true
generationStatus.value = 'streaming'
await streamScriptChat({ await streamScriptChat({
operationType: 'chat', operationType: 'chat',
conversationId: conversationId.value, conversationId: conversationId.value,
@@ -638,13 +648,21 @@ const sendChat = async () => {
userMessageId, userMessageId,
content, content,
scriptId: scriptId.value, 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: () => { onDone: () => {
generating.value = false generating.value = false
generationStatus.value = 'idle'
loadMessages() loadMessages()
}, },
onError: (error) => { onError: (error) => {
generating.value = false generating.value = false
generationStatus.value = 'idle'
uni.showToast({ title: error || '生成失败', icon: 'none' }) uni.showToast({ title: error || '生成失败', icon: 'none' })
} }
}) })