From 9d600a2d5cc7486ff6c9da3d026e74b77b695dbc Mon Sep 17 00:00:00 2001 From: yuyx <237899745@qq.com> Date: Wed, 18 Feb 2026 22:53:53 +0800 Subject: [PATCH] fix(desktop): require in-app confirmation before deleting shares --- desktop-client/src/App.vue | 98 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 94 insertions(+), 4 deletions(-) diff --git a/desktop-client/src/App.vue b/desktop-client/src/App.vue index c48dfaf..1c5735e 100644 --- a/desktop-client/src/App.vue +++ b/desktop-client/src/App.vue @@ -151,6 +151,11 @@ const contextMenu = reactive({ y: 0, item: null as FileItem | null, }); +const shareDeleteDialog = reactive({ + visible: false, + loading: false, + share: null as ShareItem | null, +}); const dropState = reactive({ active: false, uploading: false, @@ -1073,9 +1078,20 @@ async function createDirectLinkForItem(current: FileItem, silent = false) { throw new Error(String(response.data?.message || "创建直链失败")); } +function requestDeleteShare(share: ShareItem) { + if (shareDeleteDialog.loading) return; + shareDeleteDialog.share = share; + shareDeleteDialog.visible = true; +} + +function closeDeleteShareDialog(force = false) { + if (shareDeleteDialog.loading && !force) return; + shareDeleteDialog.visible = false; + shareDeleteDialog.loading = false; + shareDeleteDialog.share = null; +} + async function deleteShare(share: ShareItem) { - const confirmed = window.confirm(`确认删除分享 ${share.share_code} 吗?`); - if (!confirmed) return; const response = await invokeBridge("api_delete_share", { baseUrl: appConfig.baseUrl, shareId: share.id, @@ -1083,9 +1099,27 @@ async function deleteShare(share: ShareItem) { if (response.ok && response.data?.success) { showToast("分享已删除", "success"); await loadShares(true); - return; + return true; } showToast(response.data?.message || "删除分享失败", "error"); + return false; +} + +async function confirmDeleteShare() { + const share = shareDeleteDialog.share; + if (!share || shareDeleteDialog.loading) return; + + shareDeleteDialog.loading = true; + try { + const ok = await deleteShare(share); + if (ok) { + closeDeleteShareDialog(true); + return; + } + shareDeleteDialog.loading = false; + } catch { + shareDeleteDialog.loading = false; + } } async function copyShareLink(share: ShareItem) { @@ -1955,7 +1989,7 @@ onBeforeUnmount(() => {
@@ -2197,6 +2231,22 @@ onBeforeUnmount(() => { ++ 确认删除分享码 {{ shareDeleteDialog.share?.share_code || "-" }} 吗? + 删除后外链将立即失效。 +
+