From 2b08e32c266a666701fa9e03de2852de929392ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BB=9D=E5=B0=98?= <237809796@qq.com> Date: Sat, 1 Aug 2026 16:05:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D:=20=E5=AE=A1=E6=89=B9?= =?UTF-8?q?=E6=B5=AE=E7=AA=97=203=20bug(=E6=89=93=E5=BC=80=E9=9D=A2?= =?UTF-8?q?=E6=9D=BF=E6=9D=83=E9=99=90/=E5=AE=A1=E6=89=B9=E5=90=8E?= =?UTF-8?q?=E7=A9=BA=E8=BD=AC=E8=87=AA=E5=85=B3/=E5=85=B3=E9=97=AD?= =?UTF-8?q?=E9=A1=BA=E5=BA=8F)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src-tauri/capabilities/default.json | 1 + src/App.vue | 8 ++++-- src/i18n/en/aiChat.ts | 4 +-- src/i18n/zh-CN/aiChat.ts | 4 +-- src/views/ApprovalPopup.vue | 41 ++++++++++++++++++++--------- 5 files changed, 39 insertions(+), 19 deletions(-) diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json index d38bb78..32a826e 100644 --- a/src-tauri/capabilities/default.json +++ b/src-tauri/capabilities/default.json @@ -9,6 +9,7 @@ "core:event:allow-emit", "core:window:allow-create", "core:window:allow-close", + "core:window:allow-show", "core:window:allow-set-always-on-top", "core:window:allow-set-focus", "core:window:allow-set-position", diff --git a/src/App.vue b/src/App.vue index 05bb427..fcd2b1a 100644 --- a/src/App.vue +++ b/src/App.vue @@ -122,12 +122,16 @@ let _stopApprovalPopup: (() => void) | null = null let _unlistenPopupReady: (() => void) | null = null async function activateForPopup() { // 浮窗「打开审批面板」按钮 → 聚焦主窗口 + 打开 AI 面板/激活分离窗口 + // 修复 BUG1:setFocus 先行(已授权,失焦场景有效),show 兜底(需 core:window:allow-show, + // capabilities/default.json 已补)。原顺序 show→setFocus,show reject 直接吞掉 setFocus, + // 主窗口最小化/隐藏时 show 失败 → 用户看到「点了没反应」。 try { const { WebviewWindow } = await import('@tauri-apps/api/webviewWindow') const mainWin = await WebviewWindow.getByLabel('main') if (mainWin) { - await mainWin.show() - await mainWin.setFocus() + // setFocus 先行(对未聚焦但可见的窗口即可恢复焦点);show 兜底取消最小化/隐藏 + try { await mainWin.setFocus() } catch { /* setFocus 失败不阻塞 show */ } + try { await mainWin.show() } catch { /* show 未授权或不可用,忽略(setFocus 已尽力) */ } } } catch { /* 忽略 */ } if (!aiStore.state.detached && !aiStore.state.panelOpen) { diff --git a/src/i18n/en/aiChat.ts b/src/i18n/en/aiChat.ts index 6a21b60..bc5638a 100644 --- a/src/i18n/en/aiChat.ts +++ b/src/i18n/en/aiChat.ts @@ -57,8 +57,8 @@ export default { popupTagPath: 'Path auth', popupTagRisk: 'Risk action', popupOpenPanel: 'Open approval panel', - // 根因1:首屏空态友好文案(数据未到达时,替代裸 spinner) - popupEmptyHint: 'Waiting for approval data…', + // 空态文案:正常空态会被 maybeAutoClose 即时关窗,此 hint 仅 close 失败时兜底 + popupEmptyHint: 'Closing…', // ── Provider status ── clickToSwitchProvider: 'Click to switch provider', diff --git a/src/i18n/zh-CN/aiChat.ts b/src/i18n/zh-CN/aiChat.ts index e47ac60..ef34d5b 100644 --- a/src/i18n/zh-CN/aiChat.ts +++ b/src/i18n/zh-CN/aiChat.ts @@ -57,8 +57,8 @@ export default { popupTagPath: '路径授权', popupTagRisk: '风险操作', popupOpenPanel: '打开审批面板', - // 根因1:首屏空态友好文案(数据未到达时,替代裸 spinner) - popupEmptyHint: '等待审批数据…', + // 空态文案:正常空态会被 maybeAutoClose 即时关窗,此 hint 仅 close 失败时兜底 + popupEmptyHint: '正在关闭…', // ── Provider 状态 ── clickToSwitchProvider: '点击切换 Provider', diff --git a/src/views/ApprovalPopup.vue b/src/views/ApprovalPopup.vue index c9ffa1f..b70c766 100644 --- a/src/views/ApprovalPopup.vue +++ b/src/views/ApprovalPopup.vue @@ -30,7 +30,8 @@