fix: prevent duplicate history loading
This commit is contained in:
parent
e8411affc1
commit
ef4479866e
@ -122,6 +122,7 @@ const appOptions = {
|
||||
skipConversationLoadedEvent: false,
|
||||
skipConversationHistoryReload: false,
|
||||
_scrollListenerReady: false,
|
||||
historyLoading: false,
|
||||
|
||||
// 工具控制菜单
|
||||
icons: ICONS,
|
||||
@ -844,16 +845,6 @@ const appOptions = {
|
||||
this.ensureScrollListener();
|
||||
});
|
||||
|
||||
const activeConversationId = this.currentConversationId;
|
||||
if (activeConversationId && !activeConversationId.startsWith('temp_')) {
|
||||
setTimeout(() => {
|
||||
if (this.currentConversationId === activeConversationId) {
|
||||
this.fetchAndDisplayHistory();
|
||||
this.fetchConversationTokenStatistics();
|
||||
this.updateCurrentContextTokens();
|
||||
}
|
||||
}, 250);
|
||||
}
|
||||
this.logMessageState('resetAllStates:after-cleanup', { reason });
|
||||
},
|
||||
|
||||
@ -1099,78 +1090,87 @@ const appOptions = {
|
||||
// 关键功能:获取并显示历史对话内容
|
||||
// ==========================================
|
||||
async fetchAndDisplayHistory() {
|
||||
console.log('开始获取历史对话内容...');
|
||||
this.logMessageState('fetchAndDisplayHistory:start', { conversationId: this.currentConversationId });
|
||||
|
||||
if (!this.currentConversationId || this.currentConversationId.startsWith('temp_')) {
|
||||
console.log('没有当前对话ID,跳过历史加载');
|
||||
if (this.historyLoading) {
|
||||
console.log('历史消息正在加载,跳过重复请求');
|
||||
return;
|
||||
}
|
||||
|
||||
this.historyLoading = true;
|
||||
try {
|
||||
// 使用专门的API获取对话消息历史
|
||||
const messagesResponse = await fetch(`/api/conversations/${this.currentConversationId}/messages`);
|
||||
console.log('开始获取历史对话内容...');
|
||||
this.logMessageState('fetchAndDisplayHistory:start', { conversationId: this.currentConversationId });
|
||||
|
||||
if (!messagesResponse.ok) {
|
||||
console.warn('无法获取消息历史,尝试备用方法');
|
||||
// 备用方案:通过状态API获取
|
||||
const statusResponse = await fetch('/api/status');
|
||||
const status = await statusResponse.json();
|
||||
console.log('系统状态:', status);
|
||||
this.applyStatusSnapshot(status);
|
||||
|
||||
// 如果状态中有对话历史字段
|
||||
if (status.conversation_history && Array.isArray(status.conversation_history)) {
|
||||
this.renderHistoryMessages(status.conversation_history);
|
||||
return;
|
||||
}
|
||||
|
||||
console.log('备用方案也无法获取历史消息');
|
||||
if (!this.currentConversationId || this.currentConversationId.startsWith('temp_')) {
|
||||
console.log('没有当前对话ID,跳过历史加载');
|
||||
return;
|
||||
}
|
||||
|
||||
const messagesData = await messagesResponse.json();
|
||||
console.log('获取到消息数据:', messagesData);
|
||||
|
||||
if (messagesData.success && messagesData.data && messagesData.data.messages) {
|
||||
const messages = messagesData.data.messages;
|
||||
console.log(`发现 ${messages.length} 条历史消息`);
|
||||
try {
|
||||
// 使用专门的API获取对话消息历史
|
||||
const messagesResponse = await fetch(`/api/conversations/${this.currentConversationId}/messages`);
|
||||
|
||||
if (messages.length > 0) {
|
||||
// 清空当前显示的消息
|
||||
this.logMessageState('fetchAndDisplayHistory:before-clear-existing');
|
||||
this.messages = [];
|
||||
this.logMessageState('fetchAndDisplayHistory:after-clear-existing');
|
||||
if (!messagesResponse.ok) {
|
||||
console.warn('无法获取消息历史,尝试备用方法');
|
||||
// 备用方案:通过状态API获取
|
||||
const statusResponse = await fetch('/api/status');
|
||||
const status = await statusResponse.json();
|
||||
console.log('系统状态:', status);
|
||||
this.applyStatusSnapshot(status);
|
||||
|
||||
// 渲染历史消息 - 这是关键功能
|
||||
this.renderHistoryMessages(messages);
|
||||
// 如果状态中有对话历史字段
|
||||
if (status.conversation_history && Array.isArray(status.conversation_history)) {
|
||||
this.renderHistoryMessages(status.conversation_history);
|
||||
return;
|
||||
}
|
||||
|
||||
// 滚动到底部
|
||||
this.$nextTick(() => {
|
||||
this.scrollToBottom();
|
||||
});
|
||||
|
||||
console.log('历史对话内容显示完成');
|
||||
} else {
|
||||
console.log('对话存在但没有历史消息');
|
||||
this.logMessageState('fetchAndDisplayHistory:no-history-clear');
|
||||
this.messages = [];
|
||||
this.logMessageState('fetchAndDisplayHistory:no-history-cleared');
|
||||
console.log('备用方案也无法获取历史消息');
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.log('消息数据格式不正确:', messagesData);
|
||||
this.logMessageState('fetchAndDisplayHistory:invalid-data-clear');
|
||||
|
||||
const messagesData = await messagesResponse.json();
|
||||
console.log('获取到消息数据:', messagesData);
|
||||
|
||||
if (messagesData.success && messagesData.data && messagesData.data.messages) {
|
||||
const messages = messagesData.data.messages;
|
||||
console.log(`发现 ${messages.length} 条历史消息`);
|
||||
|
||||
if (messages.length > 0) {
|
||||
// 清空当前显示的消息
|
||||
this.logMessageState('fetchAndDisplayHistory:before-clear-existing');
|
||||
this.messages = [];
|
||||
this.logMessageState('fetchAndDisplayHistory:after-clear-existing');
|
||||
|
||||
// 渲染历史消息 - 这是关键功能
|
||||
this.renderHistoryMessages(messages);
|
||||
|
||||
// 滚动到底部
|
||||
this.$nextTick(() => {
|
||||
this.scrollToBottom();
|
||||
});
|
||||
|
||||
console.log('历史对话内容显示完成');
|
||||
} else {
|
||||
console.log('对话存在但没有历史消息');
|
||||
this.logMessageState('fetchAndDisplayHistory:no-history-clear');
|
||||
this.messages = [];
|
||||
this.logMessageState('fetchAndDisplayHistory:no-history-cleared');
|
||||
}
|
||||
} else {
|
||||
console.log('消息数据格式不正确:', messagesData);
|
||||
this.logMessageState('fetchAndDisplayHistory:invalid-data-clear');
|
||||
this.messages = [];
|
||||
this.logMessageState('fetchAndDisplayHistory:invalid-data-cleared');
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
console.error('获取历史对话失败:', error);
|
||||
console.log('尝试不显示错误弹窗,仅在控制台记录');
|
||||
// 不显示alert,避免打断用户体验
|
||||
this.logMessageState('fetchAndDisplayHistory:error-clear', { error: error?.message || String(error) });
|
||||
this.messages = [];
|
||||
this.logMessageState('fetchAndDisplayHistory:invalid-data-cleared');
|
||||
this.logMessageState('fetchAndDisplayHistory:error-cleared');
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
console.error('获取历史对话失败:', error);
|
||||
console.log('尝试不显示错误弹窗,仅在控制台记录');
|
||||
// 不显示alert,避免打断用户体验
|
||||
this.logMessageState('fetchAndDisplayHistory:error-clear', { error: error?.message || String(error) });
|
||||
this.messages = [];
|
||||
this.logMessageState('fetchAndDisplayHistory:error-cleared');
|
||||
} finally {
|
||||
this.historyLoading = false;
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user