Files
Frpilot/src/utils/window.ts
T
Yuhang Wu 8185275937 feat: 新增系统托盘功能与关闭确认对话框
- 新增系统托盘图标及菜单,支持显示窗口、启动/停止穿透、退出应用
- 点击窗口关闭按钮或使用系统关闭快捷键时,弹出确认对话框,可选择最小化到托盘或直接退出
- 托盘菜单随语言切换同步更新,且根据穿透运行状态自动启用/禁用对应选项
- 升级应用版本至v1.1.0,添加Tauri tray-icon特性及相关权限配置
2026-10-14 14:54:07 +08:00

67 lines
1.7 KiB
TypeScript

/**
* Tauri 窗口控制封装。
* 在纯浏览器环境(非 Tauri)下调用会被安全忽略,方便 `pnpm dev` 调试。
*/
export function isTauri() {
return typeof window !== "undefined" && "__TAURI_INTERNALS__" in window
}
async function currentWindow() {
if (!isTauri()) return null
const { getCurrentWindow } = await import("@tauri-apps/api/window")
return getCurrentWindow()
}
/** 最小化窗口 */
export async function minimizeWindow() {
const win = await currentWindow()
await win?.minimize()
}
/** 最大化 / 还原窗口 */
export async function toggleMaximizeWindow() {
const win = await currentWindow()
await win?.toggleMaximize()
}
/** 关闭窗口 */
export async function closeWindow() {
const win = await currentWindow()
await win?.close()
}
/** 隐藏窗口(最小化到系统托盘,保持程序在后台运行) */
export async function hideWindow() {
const win = await currentWindow()
await win?.hide()
}
/** 显示并聚焦窗口(从系统托盘恢复) */
export async function revealWindow() {
const win = await currentWindow()
if (!win) return
await win.show()
await win.unminimize()
await win.setFocus()
}
/** 退出整个应用(退出前由调用方负责停止穿透等收尾工作) */
export async function exitApp() {
if (!isTauri()) return
const { exit } = await import("@tauri-apps/plugin-process")
await exit(0)
}
/** 开始拖拽窗口(配合 data-tauri-drag-region 使用) */
export async function startDragging() {
const win = await currentWindow()
await win?.startDragging()
}
/** 是否已最大化 */
export async function isWindowMaximized() {
const win = await currentWindow()
return (await win?.isMaximized()) ?? false
}