|
|
@@ -85,6 +85,7 @@
|
|
|
<ChatMessages
|
|
|
ref="chatMessagesRef"
|
|
|
:messages="messages"
|
|
|
+ :history-loading="isCurrentHistoryLoading"
|
|
|
@file-preview="openFilePreview"
|
|
|
@download-word="downloadWordFile"
|
|
|
@open-file-preview="handleOpenFilePreview"
|
|
|
@@ -251,6 +252,8 @@
|
|
|
currentTask,
|
|
|
messages,
|
|
|
historyLoadedTasks,
|
|
|
+ historyLoadingTaskIds,
|
|
|
+ setHistoryLoading,
|
|
|
getDefaultMessages,
|
|
|
transformHistoryToMessages,
|
|
|
fetchSessionList,
|
|
|
@@ -259,6 +262,10 @@
|
|
|
setCurrentSessionId,
|
|
|
} = useChatTasks();
|
|
|
|
|
|
+ // 当前任务的历史是否正在拉取:切换任务时新任务的 messages 要等接口回来才填充,
|
|
|
+ // 消息区据此显示加载态,避免中间先闪一屏空会话缺省图。
|
|
|
+ const isCurrentHistoryLoading = computed(() => historyLoadingTaskIds.value.includes(currentTaskId.value));
|
|
|
+
|
|
|
// —— 右侧面板/标签页/全屏相关职责已下沉到 useChatPanels ——
|
|
|
const {
|
|
|
showFileList,
|
|
|
@@ -568,6 +575,8 @@
|
|
|
// 流式中的任务不拉历史(避免覆盖在途消息),但必须继续走完下面的初始化:
|
|
|
// currentTaskId 已经切过来了,提前 return 会让上下文用量/模式/进度条/滚动全部停在上一个任务上。
|
|
|
if (!newTask.isStreaming) {
|
|
|
+ // 标记加载中:消息区据 isCurrentHistoryLoading 显示加载态,而不是先闪一屏空会话
|
|
|
+ setHistoryLoading(taskId, true);
|
|
|
try {
|
|
|
const res = await getDetail(newTask.sessionId);
|
|
|
const messages = res?.messages;
|
|
|
@@ -579,6 +588,8 @@
|
|
|
// 拉不到历史时界面会是空白会话,容易被误认为「对话丢了」,必须给出提示
|
|
|
console.error('加载历史会话失败:', error);
|
|
|
message.error('加载历史会话失败,请稍后重试');
|
|
|
+ } finally {
|
|
|
+ setHistoryLoading(taskId, false);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -852,6 +863,7 @@
|
|
|
|
|
|
// 如果是历史任务,加载其消息
|
|
|
if (targetTask.sessionId && !historyLoadedTasks.has(targetTask.id)) {
|
|
|
+ setHistoryLoading(targetTask.id, true);
|
|
|
try {
|
|
|
const res = await getDetail(targetTask.sessionId);
|
|
|
const messages = res?.messages;
|
|
|
@@ -862,6 +874,8 @@
|
|
|
} catch (error) {
|
|
|
console.error('加载历史会话失败:', error);
|
|
|
message.error('加载历史会话失败,请稍后重试');
|
|
|
+ } finally {
|
|
|
+ setHistoryLoading(targetTask.id, false);
|
|
|
}
|
|
|
}
|
|
|
|