// ============================================================ // 最小化系统菜单 // // 策略:已全面采用 H5 自定义导航栏,系统菜单仅保留 macOS 必需的 Edit 菜单 // (否则 Cmd+C/V/A 等系统级快捷键会失效)。 // // macOS → 仅 Edit 菜单(undo/redo/cut/copy/paste/selectAll) // Windows → 完全移除系统菜单栏 // Linux → 完全移除系统菜单栏 // ============================================================ import { app, Menu, type MenuItemConstructorOptions } from 'electron'; import { isMacOS } from '../utils/platform'; import { APP_NAME } from '../../../shared/constants/app'; import { APP_VERSION } from '../../../shared/constants/version'; /** * macOS 最小 Edit 菜单 * 必须保留,否则 Cmd+C / Cmd+V / Cmd+A / Cmd+Z 等快捷键全部失效 */ function buildMinimalEditMenu(): MenuItemConstructorOptions { return { label: 'Edit', submenu: [ { label: '撤销', accelerator: 'Cmd+Z', role: 'undo' }, { label: '重做', accelerator: 'Shift+Cmd+Z', role: 'redo' }, { type: 'separator' }, { label: '剪切', accelerator: 'Cmd+X', role: 'cut' }, { label: '复制', accelerator: 'Cmd+C', role: 'copy' }, { label: '粘贴', accelerator: 'Cmd+V', role: 'paste' }, { label: '全选', accelerator: 'Cmd+A', role: 'selectAll' }, ], }; } /** * 设置应用菜单 * macOS → 最小 Edit 菜单 * Windows/Linux → 无菜单(导航栏由 H5 组件实现) */ export function setupAppMenu(): void { if (isMacOS()) { const template: MenuItemConstructorOptions[] = [buildMinimalEditMenu()]; const menu = Menu.buildFromTemplate(template); Menu.setApplicationMenu(menu); } else { // Windows / Linux:完全移除菜单栏 Menu.setApplicationMenu(null); } // 关于面板信息(macOS 原生 About / Windows 自定义) app.setAboutPanelOptions({ applicationName: APP_NAME, applicationVersion: APP_VERSION, version: '', credits: 'Powered by Electron + React 19 + TypeScript', }); }