diff --git a/src/main/presenter/windowPresenter/index.ts b/src/main/presenter/windowPresenter/index.ts index a05201bf7..89c3c8812 100644 --- a/src/main/presenter/windowPresenter/index.ts +++ b/src/main/presenter/windowPresenter/index.ts @@ -55,6 +55,17 @@ export class WindowPresenter implements IWindowPresenter { event.returnValue = event.sender.id }) + ipcMain.on('close-floating-window', (event) => { + // 检查发送者是否是悬浮聊天窗口 + const webContentsId = event.sender.id + if ( + this.floatingChatWindow && + this.floatingChatWindow.getWindow()?.webContents.id === webContentsId + ) { + this.hideFloatingChatWindow() + } + }) + // 监听应用即将退出的事件,设置退出标志,避免窗口关闭时触发隐藏逻辑 app.on('before-quit', () => { console.log('App is quitting, setting isQuitting flag.') diff --git a/src/renderer/src/App.vue b/src/renderer/src/App.vue index 9bc2b2d67..dd0532ff7 100644 --- a/src/renderer/src/App.vue +++ b/src/renderer/src/App.vue @@ -169,6 +169,13 @@ const handleGoSettings = () => { } } +// 处理ESC键 - 关闭悬浮聊天窗口 +const handleEscKey = (event: KeyboardEvent) => { + if (event.key === 'Escape') { + window.electron.ipcRenderer.send('close-floating-window') + } +} + getInitComplete() onMounted(() => { @@ -179,6 +186,8 @@ onMounted(() => { document.body.classList.add(themeStore.themeMode) document.body.classList.add(settingsStore.fontSizeClass) + window.addEventListener('keydown', handleEscKey) + // 监听全局错误通知事件 window.electron.ipcRenderer.on(NOTIFICATION_EVENTS.SHOW_ERROR, (_event, error) => { showErrorToast(error) @@ -287,6 +296,8 @@ onBeforeUnmount(() => { errorDisplayTimer.value = null } + window.removeEventListener('keydown', handleEscKey) + // 移除快捷键事件监听 window.electron.ipcRenderer.removeAllListeners(SHORTCUT_EVENTS.ZOOM_IN) window.electron.ipcRenderer.removeAllListeners(SHORTCUT_EVENTS.ZOOM_OUT)