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) {
const documents = getDocumentSet();
panel.webview.postMessage({
command: "showDocumentSetList",
documents: documents,
documents: documentSets,
});
}

View File

@ -552,5 +552,13 @@ export async function handleWebviewMessage(
}
}
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;
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) => \`
<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) {
const selectedItem = filteredListData[index];
@ -514,8 +551,15 @@ export function getContextButtonScript(): string {
// 确认选择
function confirmSelection() {
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));
if (selected.length > 0) {
if (currentListType === 'documentSet') {
vscode.postMessage({
@ -524,10 +568,11 @@ export function getContextButtonScript(): string {
});
} else {
selected.forEach(item => {
addContextItem(currentListType === 'documentSetItem' ? 'file' : currentListType, item.path, item.relativePath || item.path);
addContextItem(currentListType, item.path, item.relativePath || item.path);
});
}
}
}
} finally {
const menu = document.getElementById('contextMenu');
const button = document.querySelector('.add-context-button');

View File

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