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