界面隐显后继续流式输出;优化中断逻辑
This commit is contained in:
@@ -1418,13 +1418,14 @@ import { openFile as openFileNative, downloadAndOpen } from '@/utils/fileOpener.
|
||||
streamingMessageId.value = null
|
||||
}
|
||||
// 立即关闭弹窗,清除超时
|
||||
// clearTimeout(aiResponseTimer)
|
||||
isThinking.value = false
|
||||
socketStore.isThinking = false
|
||||
isSelfSent.value = false
|
||||
textMessage.value = ''
|
||||
uploadedFiles.value = []
|
||||
// takeConversationMessages 由后端中断确认驱动(见 handleBusinessMessage)
|
||||
// 中断后刷新消息列表,获取服务端最终状态
|
||||
await takeConversationMessages()
|
||||
// await takeUserConversations()
|
||||
uni.showToast({
|
||||
title: '已中断',
|
||||
icon: 'none',
|
||||
@@ -1982,10 +1983,23 @@ import { openFile as openFileNative, downloadAndOpen } from '@/utils/fileOpener.
|
||||
|
||||
if (chatType === 0) {
|
||||
await takeUserConversations();
|
||||
// 只有在会话ID存在时才获取消息
|
||||
// 如果正在流式输出,跳过重新加载消息列表,避免打断流式输出
|
||||
if (currentSessionId.value) {
|
||||
isLoadingMessages.value = true
|
||||
takeConversationMessages();
|
||||
if (socketStore.isThinking) {
|
||||
// 流式输出中:不刷新消息,但确保消息列表中包含流式气泡
|
||||
// 如果流式气泡因某些原因丢失,重新创建
|
||||
if (streamingMessageId.value && !allmessages.value.some(m => m._id === streamingMessageId.value)) {
|
||||
allmessages.value = [...allmessages.value, {
|
||||
role: 'assistant',
|
||||
content: socketStore.messageString || '',
|
||||
_streaming: true,
|
||||
_id: streamingMessageId.value
|
||||
}]
|
||||
}
|
||||
} else {
|
||||
isLoadingMessages.value = true
|
||||
takeConversationMessages();
|
||||
}
|
||||
}
|
||||
// AI 对话页面:主动建立 socket 连接,确保消息实时推送
|
||||
if (userToken.value && currentSessionId.value && !socketStore.isConnected) {
|
||||
|
||||
Reference in New Issue
Block a user