feat:实现文档集同步的功能
This commit is contained in:
@ -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,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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,18 +551,26 @@ export function getContextButtonScript(): string {
|
|||||||
// 确认选择
|
// 确认选择
|
||||||
function confirmSelection() {
|
function confirmSelection() {
|
||||||
try {
|
try {
|
||||||
const selected = currentListData.filter(item => selectedItems.has(item.path));
|
if (currentListType === 'documentSetItem') {
|
||||||
|
const selected = currentListData.filter(item => selectedItems.has(item.id));
|
||||||
if (selected.length > 0) {
|
selected.forEach(docSet => {
|
||||||
if (currentListType === 'documentSet') {
|
docSet.documents.forEach(doc => {
|
||||||
vscode.postMessage({
|
addContextItem('file', doc.path, doc.relativePath || doc.path);
|
||||||
command: 'saveDocumentSet',
|
|
||||||
documents: selected
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
selected.forEach(item => {
|
|
||||||
addContextItem(currentListType === 'documentSetItem' ? 'file' : currentListType, item.path, item.relativePath || item.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 {
|
} finally {
|
||||||
|
|||||||
@ -248,6 +248,11 @@ export function getSettingsComponentScript(): string {
|
|||||||
content.classList.remove('active');
|
content.classList.remove('active');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 切换到上下文标签页时加载文档集列表
|
||||||
|
if (tabName === 'context') {
|
||||||
|
vscode.postMessage({ command: 'loadDocumentSets' });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听打开设置标签页的消息
|
// 监听打开设置标签页的消息
|
||||||
|
|||||||
Reference in New Issue
Block a user