diff --git a/app.js b/app.js index c37cc67..f64f2f8 100644 --- a/app.js +++ b/app.js @@ -1,8 +1,9 @@ -const { app, BrowserWindow, ipcMain } = require('electron') +const { app, BrowserWindow, ipcMain, Tray, Menu, globalShortcut } = require('electron') const path = require('path') +let mainWin = null function createWindow() { - const win = new BrowserWindow({ + mainWin = new BrowserWindow({ width: 1280, height: 900, frame: false, @@ -11,18 +12,63 @@ function createWindow() { preload: path.join(__dirname, '/electron/preload.js'), }, }) - win.setMinimumSize(1280, 900); - - if (process.env.NODE_ENV === 'dev') { + const win = mainWin + win.setMinimumSize(1280, 900) + if (process.env.NODE_ENV === 'development') { win.webContents.openDevTools({ mode: 'detach' }) win.loadURL('http://localhost:4678/') } else { win.loadURL(`file://${__dirname}/dist/index.html`) } + const tray = new Tray(path.join(__dirname, 'public/icon.png')) + tray.setTitle('Alger Music') + tray.setToolTip('Alger Music') + tray.setContextMenu( + Menu.buildFromTemplate([ + { + label: '显示', + click: () => { + win.show() + }, + }, + { + label: '退出', + click: () => { + win.destroy() + }, + }, + ]) + ) + tray.click = () => { + win.show() + } + + // 快捷键显示 隐藏 + } app.whenReady().then(createWindow) +app.on('ready',()=>{ + globalShortcut.register('CommandOrControl+Alt+Shift+M', () => { + if (mainWin.isVisible()) { + mainWin.hide() + } else { + mainWin.show() + } + }) +}) + +app.on('window-all-closed', () => { + if (process.platform !== 'darwin') { + app.quit() + } +}) + +app.on('will-quit', () => { + globalShortcut.unregisterAll() +}) + ipcMain.on('minimize-window', (event) => { const win = BrowserWindow.fromWebContents(event.sender) win.minimize() @@ -39,7 +85,7 @@ ipcMain.on('maximize-window', (event) => { ipcMain.on('close-window', (event) => { const win = BrowserWindow.fromWebContents(event.sender) - win.close() + win.destroy() }) ipcMain.on('drag-start', (event, data) => { @@ -47,4 +93,9 @@ ipcMain.on('drag-start', (event, data) => { win.webContents.beginFrameSubscription((frameBuffer) => { event.reply('frame-buffer', frameBuffer) }) -}) \ No newline at end of file +}) + +ipcMain.on('mini-tray', (event) => { + const win = BrowserWindow.fromWebContents(event.sender) + win.hide() +}) diff --git a/electron/preload.js b/electron/preload.js index 0aca27a..531b338 100644 --- a/electron/preload.js +++ b/electron/preload.js @@ -5,4 +5,5 @@ contextBridge.exposeInMainWorld('electronAPI', { maximize: () => ipcRenderer.send('maximize-window'), close: () => ipcRenderer.send('close-window'), dragStart: (data) => ipcRenderer.send('drag-start', data), + miniTray: () => ipcRenderer.send('mini-tray'), }) \ No newline at end of file diff --git a/package.json b/package.json index ee5eeae..6178408 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "build": "vite build", "serve": "vite preview", "es": "vite && electron .", - "start": "set NODE_ENV=production && electron .", + "start": "set NODE_ENV=development&&electron .", "e:b": "electron-builder --config ./electron.config.json", "eb": "vite build && e:b" }, diff --git a/src/App.vue b/src/App.vue index 3ce9594..c99f0b6 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,22 +1,24 @@ - - - - - + + + + + diff --git a/src/layout/components/TitleBar.vue b/src/layout/components/TitleBar.vue index f359af9..64659e0 100644 --- a/src/layout/components/TitleBar.vue +++ b/src/layout/components/TitleBar.vue @@ -16,6 +16,9 @@