feat(mini-program): sendChat 按 generationPhase 切换接口,消息进统一对话流
This commit is contained in:
@@ -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' })
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user