From 5a5d82eef831b426acb88745a44a0ab9776b7d72 Mon Sep 17 00:00:00 2001 From: XiaoFeng <117837368+Fzhiyu1@users.noreply.github.com> Date: Mon, 12 Jan 2026 18:10:01 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E5=88=97=E8=A1=A8=E9=87=8D=E5=A4=8D=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加去重逻辑,防止相同ID的历史记录被重复添加 - 防止滚动事件监听器重复注册 - 添加请求ID防止并发加载 - 修正offset计算,使用实际数组长度 --- src/views/conversationHistoryBar.ts | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/views/conversationHistoryBar.ts b/src/views/conversationHistoryBar.ts index 1e8cde0..80e5785 100644 --- a/src/views/conversationHistoryBar.ts +++ b/src/views/conversationHistoryBar.ts @@ -303,6 +303,7 @@ export function getConversationHistoryBarScript(): string { let totalHistory = 0; let hasMoreHistory = false; let isLoadingHistory = false; + let currentLoadRequestId = 0; // 请求 ID,用于防止并发加载 const HISTORY_PAGE_SIZE = 10; const MAX_HISTORY_ITEMS = 100; @@ -346,11 +347,15 @@ export function getConversationHistoryBarScript(): string { return; } + // 生成新的请求 ID,用于防止并发加载 + const requestId = ++currentLoadRequestId; + isLoadingHistory = true; vscode.postMessage({ command: 'loadConversationHistory', offset: currentOffset, - limit: HISTORY_PAGE_SIZE + limit: HISTORY_PAGE_SIZE, + requestId: requestId }); } @@ -362,11 +367,19 @@ export function getConversationHistoryBarScript(): string { return; } - // 追加新数据 - conversationHistory = conversationHistory.concat(data.items); + // 追加新数据(去重) + const existingIds = new Set(conversationHistory.map(item => item.id)); + const newItems = []; + for (const item of data.items) { + if (!existingIds.has(item.id)) { + existingIds.add(item.id); + newItems.push(item); + } + } + conversationHistory = conversationHistory.concat(newItems); totalHistory = data.total; hasMoreHistory = data.hasMore; - currentOffset += data.items.length; + currentOffset = conversationHistory.length; const historyList = document.getElementById('historyList'); if (!historyList) { @@ -454,9 +467,10 @@ export function getConversationHistoryBarScript(): string { }); } - // 监听下拉菜单滚动事件 + // 监听下拉菜单滚动事件(防止重复注册) const historyDropdownMenu = document.getElementById('historyDropdownMenu'); - if (historyDropdownMenu) { + if (historyDropdownMenu && !historyDropdownMenu._scrollListenerAdded) { + historyDropdownMenu._scrollListenerAdded = true; historyDropdownMenu.addEventListener('scroll', () => { const menu = historyDropdownMenu; const scrollTop = menu.scrollTop;