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 @@