diff --git a/src/panels/helpers/contextHelper.ts b/src/panels/helpers/contextHelper.ts index dbe9100..58b9a86 100644 --- a/src/panels/helpers/contextHelper.ts +++ b/src/panels/helpers/contextHelper.ts @@ -142,6 +142,39 @@ export function addToDocumentSet(docs: Array<{ path: string; relativePath: strin documentSet = [...documentSet, ...docs]; } -export function saveDocumentSet(docs: Array<{ path: string; relativePath: string }>) { - documentSet = docs; +export function saveDocumentSet( + docs: Array<{ path: string; relativePath: string }>, + name: string, + panel: vscode.WebviewPanel +) { + const newDocSet = { + id: Date.now().toString(), + name, + documents: docs, + updatedAt: new Date().toISOString(), + }; + documentSets.push(newDocSet); + panel.webview.postMessage({ + command: "documentSetSaved", + documentSets: documentSets, + }); +} + +let documentSets: Array<{ + id: string; + name: string; + documents: Array<{ path: string; relativePath: string }>; + updatedAt: string; +}> = []; + +export function getDocumentSets() { + return documentSets; +} + +export function deleteDocumentSet(id: string, panel: vscode.WebviewPanel) { + documentSets = documentSets.filter(ds => ds.id !== id); + panel.webview.postMessage({ + command: "documentSetSaved", + documentSets: documentSets, + }); } diff --git a/src/panels/helpers/messageRouter.ts b/src/panels/helpers/messageRouter.ts index ecc9adf..4024761 100644 --- a/src/panels/helpers/messageRouter.ts +++ b/src/panels/helpers/messageRouter.ts @@ -368,7 +368,12 @@ export async function handleWebviewMessage( case "saveDocumentSet": const { saveDocumentSet } = await import("./contextHelper"); - saveDocumentSet(message.documents || []); + saveDocumentSet(message.documents || [], message.name || "", panel); + break; + + case "deleteDocumentSet": + const { deleteDocumentSet } = await import("./contextHelper"); + deleteDocumentSet(message.id, panel); break; case "openContextSettings": diff --git a/src/views/contextSettingsComponent.ts b/src/views/contextSettingsComponent.ts index 8bf683d..d791daf 100644 --- a/src/views/contextSettingsComponent.ts +++ b/src/views/contextSettingsComponent.ts @@ -110,6 +110,47 @@ export function getContextSettingsComponentStyles(): string { font-size: 13px; } + .docset-item { + display: flex; + align-items: center; + gap: 12px; + padding: 12px; + border: 1px solid var(--vscode-panel-border); + border-radius: 6px; + margin-bottom: 8px; + background: var(--vscode-editor-background); + } + + .docset-item:hover { + background: var(--vscode-list-hoverBackground); + } + + .docset-name { + font-size: 13px; + font-weight: 500; + } + + .docset-meta { + font-size: 11px; + color: var(--vscode-descriptionForeground); + flex: 1; + } + + .docset-delete-btn { + background: transparent; + border: none; + color: var(--vscode-foreground); + cursor: pointer; + padding: 4px; + opacity: 0.6; + border-radius: 4px; + } + + .docset-delete-btn:hover { + opacity: 1; + background: var(--vscode-toolbar-hoverBackground); + } + ${getDocsetDialogStyles()} `; } diff --git a/src/views/docsetDialog.ts b/src/views/docsetDialog.ts index c642a4a..80d5222 100644 --- a/src/views/docsetDialog.ts +++ b/src/views/docsetDialog.ts @@ -286,6 +286,34 @@ export function getDocsetDialogScript(): string { closeDocsetDialog(); } + function renderDocumentSets(documentSets) { + const listEl = document.getElementById('contextDocsList'); + if (!listEl) return; + + if (!documentSets || documentSets.length === 0) { + listEl.innerHTML = '

暂无文档集

'; + return; + } + + listEl.innerHTML = documentSets.map(ds => \` +
+
\${ds.name}
+
更新于 \${new Date(ds.updatedAt).toLocaleString('zh-CN')}
+ +
+ \`).join(''); + } + + function deleteDocumentSet(id) { + if (confirm('确定删除此文档集?')) { + vscode.postMessage({ command: 'deleteDocumentSet', id }); + } + } + window.addEventListener('message', event => { const message = event.data; if (message.command === 'filesSelectedForDocset') { @@ -294,6 +322,8 @@ export function getDocsetDialogScript(): string { } docsetFiles = [...docsetFiles, ...message.files]; updateDocsetDisplay(); + } else if (message.command === 'documentSetSaved') { + renderDocumentSets(message.documentSets); } }); `;