From c2d525e77fede7ec7a5164020d3065349c7684a4 Mon Sep 17 00:00:00 2001 From: xiaoqidun Date: Thu, 22 Oct 2026 21:37:26 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=85=B3=E9=97=AD=E6=A0=87=E7=AD=BE):=20?= =?UTF-8?q?=E6=9C=AB=E6=A0=87=E7=AD=BE=E5=85=B3=E9=97=AD=E8=A1=8C=E4=B8=BA?= =?UTF-8?q?=E7=BB=9F=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/webui/ofdgo.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/assets/webui/ofdgo.js b/assets/webui/ofdgo.js index 22face3..7116fb9 100644 --- a/assets/webui/ofdgo.js +++ b/assets/webui/ofdgo.js @@ -2473,8 +2473,10 @@ async function closeWorkspace() { if (workspace.closing) return; workspace.closing = true; try { + await Promise.all(workspace.tabs.filter(tab => tab.state.saving && tab.saveCompletion).map(tab => tab.saveCompletion)); if (workspace.tabs.some(tab => tab.state.saving)) { setStatus("文档正在保存,请稍后关闭"); return; } if (batch.running && !window.confirm("批量转换尚未完成,是否退出?")) return; + if (workspace.tabs.some(tab => tab.opening || tab.state.exporting) && !window.confirm("文档正在处理,是否取消并退出?")) return; const dirty = workspace.tabs.some(tab => tab.state.dirty) || canvasEditor.textChanged() || canvasEditor.cropChanged() || canvasEditor.nudgeChanged(); if (dirty && (workspace.switching || workspace.tabs.some(tab => tab.closing) || document.body.hasAttribute("data-busy") || formDialogOpen())) { setStatus("操作正在进行,请完成或取消后关闭"); @@ -2551,7 +2553,7 @@ function renderDocumentTabs() { const icon = document.createElement("span"); icon.className = "close-icon"; close.append(icon); - close.disabled = !tab.state.doc && !tab.opening && !tab.error && workspace.tabs.length === 1; + close.disabled = !nativeHost && !tab.state.doc && !tab.opening && !tab.error && workspace.tabs.length === 1; close.addEventListener("click", async event => { event.stopPropagation(); await closeFile(tab); @@ -2887,6 +2889,7 @@ async function closeFile(tab = null) { tab = documentTab(); } if (tab.closed || tab.closing || workspace.closing) return; + if (nativeHost && workspace.tabs.length === 1) return closeWorkspace(); if (!tab.state.doc && !tab.opening && !tab.error && workspace.tabs.length === 1) return; tab.closing = true; if (implicit) { @@ -2896,6 +2899,7 @@ async function closeFile(tab = null) { try { if (tab.state.saving && tab.saveCompletion) await tab.saveCompletion; if (tab.closed) return; + if ((tab.opening || tab.state.exporting) && !window.confirm("文档正在处理,是否取消并关闭?")) return; if (tab.state.dirty || tab === workspace.active && (canvasEditor.input || canvasEditor.crop || canvasEditor.nudge)) { if (tab !== workspace.active && !await activateDocumentTab(tab)) return; if (!await confirmDocumentClose(tab) || tab.closed || workspace.closing) return; @@ -13496,7 +13500,7 @@ function updateControls() { updateStructureControls(); const hasDoc = Boolean(state.doc); el.newButton.disabled = workspace.closing; - el.closeButton.disabled = !(hasDoc || documentTab().opening || documentTab().error) || workspace.closing; + el.closeButton.disabled = !nativeHost && !(hasDoc || documentTab().opening || documentTab().error) || workspace.closing; updateDocumentControls(); updateDisplayControls(); updateEditorTools(); @@ -13745,7 +13749,7 @@ function setBusy(busy, text = "", percent = 0, status = "", tab = documentTab()) el.newButton.disabled = false; el.documentNewTab.disabled = workspace.closing; el.pageLayoutButton.disabled = busy || !(state.doc?.pageCount > 1); - el.closeButton.disabled = !(state.doc || tab.opening || tab.error) || workspace.closing; + el.closeButton.disabled = !nativeHost && !(state.doc || tab.opening || tab.error) || workspace.closing; el.refreshAppButton.disabled = busy; updateStructureControls(); updateDocumentControls();