From 09338f355a19327961b027247b8abc1941356e9b Mon Sep 17 00:00:00 2001 From: ymy Date: Fri, 31 Jul 2026 14:11:26 +0800 Subject: [PATCH] =?UTF-8?q?chore(filelib-web):=20=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E5=BC=B9=E7=AA=97=E5=8A=A0=E5=88=A0=E9=99=A4=E6=8C=89=E9=92=AE?= =?UTF-8?q?(MANAGE=20=E4=B8=93=E5=B1=9E,=E8=BF=9B=E5=9B=9E=E6=94=B6?= =?UTF-8?q?=E7=AB=99=E5=8F=AF=E6=81=A2=E5=A4=8D),=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E5=85=A5=E5=8F=A3=E4=B8=8D=E5=86=8D=E5=8F=AA=E5=9C=A8=E5=8F=B3?= =?UTF-8?q?=E9=94=AE=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/lib/GridLibraryView.svelte | 2 +- hub/filelib-web/src/lib/OverviewPanel.svelte | 30 ++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/hub/filelib-web/src/lib/GridLibraryView.svelte b/hub/filelib-web/src/lib/GridLibraryView.svelte index 8e9c90a..4385d6a 100644 --- a/hub/filelib-web/src/lib/GridLibraryView.svelte +++ b/hub/filelib-web/src/lib/GridLibraryView.svelte @@ -515,7 +515,7 @@ {#if modal === "detail" && detailNode} (modal = null)}> - + { modal = null; refresh(); }} /> {/if} diff --git a/hub/filelib-web/src/lib/OverviewPanel.svelte b/hub/filelib-web/src/lib/OverviewPanel.svelte index 694bf02..82881e9 100644 --- a/hub/filelib-web/src/lib/OverviewPanel.svelte +++ b/hub/filelib-web/src/lib/OverviewPanel.svelte @@ -6,15 +6,32 @@ import type { ExportJob, NodeDetail } from "./types.js"; import Modal from "./Modal.svelte"; - let { node }: { node: NodeDetail } = $props(); + let { node, ondeleted }: { node: NodeDetail; ondeleted?: () => void } = $props(); let showEditDesc = $state(false); let descDraft = $state(""); let exportJob = $state(null); + let deleting = $state(false); const canEdit = $derived(node.role === "MANAGE" || node.role === "EDIT"); + const canManage = $derived(node.role === "MANAGE"); const roleLabel = $derived(ROLE_LABEL[node.role]); + /** 删除(进回收站,可恢复;ADR-0031)。MANAGE 专属,与右键菜单同语义。 */ + async function deleteNode(): Promise { + if (!confirm(`删除「${node.name}」?移入回收站,可在回收站恢复。`)) return; + deleting = true; + try { + await api(`/database/api/nodes/${node.id}`, { method: "DELETE" }); + toastOk("已移入回收站"); + ondeleted?.(); + } catch (e) { + toastErr(e instanceof Error ? e.message : String(e)); + } finally { + deleting = false; + } + } + $effect(() => { void node.id; exportJob = null; @@ -113,6 +130,17 @@ {/if} {/if} + + {#if canManage} +
+ +
+ 删除后移入回收站,可恢复 + +
+ {/if} {#if showEditDesc}