From 4ba096d89875724f0093c4c48bacb5f53f344a0e Mon Sep 17 00:00:00 2001 From: Roe-xin Date: Thu, 19 Mar 2026 10:36:13 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=AE=9E=E7=8E=B0=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E9=9B=86=E5=90=8C=E6=AD=A5=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/panels/helpers/contextHelper.ts | 3 +- src/panels/helpers/messageRouter.ts | 8 ++++ src/views/contextButton.ts | 69 ++++++++++++++++++++++++----- src/views/settingsComponent.ts | 5 +++ 4 files changed, 71 insertions(+), 14 deletions(-) diff --git a/src/panels/helpers/contextHelper.ts b/src/panels/helpers/contextHelper.ts index b11a20f..710a22e 100644 --- a/src/panels/helpers/contextHelper.ts +++ b/src/panels/helpers/contextHelper.ts @@ -132,10 +132,9 @@ export async function handleAddContextDocumentSet(panel: vscode.WebviewPanel) { } export async function handleGetDocumentSetList(panel: vscode.WebviewPanel) { - const documents = getDocumentSet(); panel.webview.postMessage({ command: "showDocumentSetList", - documents: documents, + documents: documentSets, }); } diff --git a/src/panels/helpers/messageRouter.ts b/src/panels/helpers/messageRouter.ts index 0bbc92c..a81fbce 100644 --- a/src/panels/helpers/messageRouter.ts +++ b/src/panels/helpers/messageRouter.ts @@ -552,5 +552,13 @@ export async function handleWebviewMessage( } } break; + + case "loadDocumentSets": + const { getDocumentSets } = await import("./contextHelper"); + panel.webview.postMessage({ + command: "documentSetSaved", + documentSets: getDocumentSets(), + }); + break; } } diff --git a/src/views/contextButton.ts b/src/views/contextButton.ts index a74aac1..86eb799 100644 --- a/src/views/contextButton.ts +++ b/src/views/contextButton.ts @@ -408,7 +408,7 @@ export function getContextButtonScript(): string { currentListData = documents; filteredListData = documents; selectedItems.clear(); - renderList(documents); + renderDocumentSetList(documents); } } } @@ -481,6 +481,43 @@ export function getContextButtonScript(): string { \`).join(''); } + // 渲染文档集列表 + function renderDocumentSetList(data) { + const body = document.getElementById('contextMenuListBody'); + if (!body) return; + + filteredListData = data || []; + + body.innerHTML = filteredListData.map((item, index) => \` +
+ + +
+ \`).join(''); + } + + // 切换文档集选择 + function toggleDocumentSetSelection(index) { + const selectedItem = filteredListData[index]; + if (!selectedItem) return; + + const selectedId = selectedItem.id; + const checkbox = document.getElementById('item-' + index); + const item = document.querySelectorAll('.context-menu-list-item')[index]; + + if (selectedItems.has(selectedId)) { + selectedItems.delete(selectedId); + if (checkbox) checkbox.checked = false; + if (item) item.classList.remove('selected'); + } else { + selectedItems.add(selectedId); + if (checkbox) checkbox.checked = true; + if (item) item.classList.add('selected'); + } + + updateSelectedCount(); + } + // 切换项选择 function toggleItemSelection(index) { const selectedItem = filteredListData[index]; @@ -514,18 +551,26 @@ export function getContextButtonScript(): string { // 确认选择 function confirmSelection() { try { - const selected = currentListData.filter(item => selectedItems.has(item.path)); - - if (selected.length > 0) { - if (currentListType === 'documentSet') { - vscode.postMessage({ - command: 'saveDocumentSet', - documents: selected - }); - } else { - selected.forEach(item => { - addContextItem(currentListType === 'documentSetItem' ? 'file' : currentListType, item.path, item.relativePath || item.path); + if (currentListType === 'documentSetItem') { + const selected = currentListData.filter(item => selectedItems.has(item.id)); + selected.forEach(docSet => { + docSet.documents.forEach(doc => { + addContextItem('file', doc.path, doc.relativePath || doc.path); }); + }); + } else { + const selected = currentListData.filter(item => selectedItems.has(item.path)); + if (selected.length > 0) { + if (currentListType === 'documentSet') { + vscode.postMessage({ + command: 'saveDocumentSet', + documents: selected + }); + } else { + selected.forEach(item => { + addContextItem(currentListType, item.path, item.relativePath || item.path); + }); + } } } } finally { diff --git a/src/views/settingsComponent.ts b/src/views/settingsComponent.ts index fd6513e..8517b16 100644 --- a/src/views/settingsComponent.ts +++ b/src/views/settingsComponent.ts @@ -248,6 +248,11 @@ export function getSettingsComponentScript(): string { content.classList.remove('active'); } }); + + // 切换到上下文标签页时加载文档集列表 + if (tabName === 'context') { + vscode.postMessage({ command: 'loadDocumentSets' }); + } } // 监听打开设置标签页的消息