feat:实现文档集同步的功能

This commit is contained in:
Roe-xin
2026-03-19 10:36:13 +08:00
parent d2cd7b0bc8
commit 4ba096d898
4 changed files with 71 additions and 14 deletions

View File

@ -132,10 +132,9 @@ export async function handleAddContextDocumentSet(panel: vscode.WebviewPanel) {
} }
export async function handleGetDocumentSetList(panel: vscode.WebviewPanel) { export async function handleGetDocumentSetList(panel: vscode.WebviewPanel) {
const documents = getDocumentSet();
panel.webview.postMessage({ panel.webview.postMessage({
command: "showDocumentSetList", command: "showDocumentSetList",
documents: documents, documents: documentSets,
}); });
} }

View File

@ -552,5 +552,13 @@ export async function handleWebviewMessage(
} }
} }
break; break;
case "loadDocumentSets":
const { getDocumentSets } = await import("./contextHelper");
panel.webview.postMessage({
command: "documentSetSaved",
documentSets: getDocumentSets(),
});
break;
} }
} }

View File

@ -408,7 +408,7 @@ export function getContextButtonScript(): string {
currentListData = documents; currentListData = documents;
filteredListData = documents; filteredListData = documents;
selectedItems.clear(); selectedItems.clear();
renderList(documents); renderDocumentSetList(documents);
} }
} }
} }
@ -481,6 +481,43 @@ export function getContextButtonScript(): string {
\`).join(''); \`).join('');
} }
// 渲染文档集列表
function renderDocumentSetList(data) {
const body = document.getElementById('contextMenuListBody');
if (!body) return;
filteredListData = data || [];
body.innerHTML = filteredListData.map((item, index) => \`
<div class="context-menu-list-item \${selectedItems.has(item.id) ? 'selected' : ''}" onclick="toggleDocumentSetSelection(\${index})">
<input type="checkbox" id="item-\${index}" \${selectedItems.has(item.id) ? 'checked' : ''} />
<label>\${item.name}</label>
</div>
\`).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) { function toggleItemSelection(index) {
const selectedItem = filteredListData[index]; const selectedItem = filteredListData[index];
@ -514,8 +551,15 @@ export function getContextButtonScript(): string {
// 确认选择 // 确认选择
function confirmSelection() { function confirmSelection() {
try { try {
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)); const selected = currentListData.filter(item => selectedItems.has(item.path));
if (selected.length > 0) { if (selected.length > 0) {
if (currentListType === 'documentSet') { if (currentListType === 'documentSet') {
vscode.postMessage({ vscode.postMessage({
@ -524,10 +568,11 @@ export function getContextButtonScript(): string {
}); });
} else { } else {
selected.forEach(item => { selected.forEach(item => {
addContextItem(currentListType === 'documentSetItem' ? 'file' : currentListType, item.path, item.relativePath || item.path); addContextItem(currentListType, item.path, item.relativePath || item.path);
}); });
} }
} }
}
} finally { } finally {
const menu = document.getElementById('contextMenu'); const menu = document.getElementById('contextMenu');
const button = document.querySelector('.add-context-button'); const button = document.querySelector('.add-context-button');

View File

@ -248,6 +248,11 @@ export function getSettingsComponentScript(): string {
content.classList.remove('active'); content.classList.remove('active');
} }
}); });
// 切换到上下文标签页时加载文档集列表
if (tabName === 'context') {
vscode.postMessage({ command: 'loadDocumentSets' });
}
} }
// 监听打开设置标签页的消息 // 监听打开设置标签页的消息