diff --git a/electron/electron.js b/electron/electron.js index b847017f3..a3c9c1985 100644 --- a/electron/electron.js +++ b/electron/electron.js @@ -1,7 +1,7 @@ const fs = require('fs') const os = require("os"); const path = require('path') -const {app, BrowserWindow, ipcMain, dialog, clipboard, nativeImage, shell} = require('electron') +const {app, BrowserWindow, ipcMain, dialog, clipboard, nativeImage, shell, Tray, Menu} = require('electron') const {autoUpdater} = require("electron-updater") const log = require("electron-log"); const fsProm = require('fs/promises'); @@ -12,6 +12,7 @@ const utils = require('./utils'); const config = require('./package.json'); let mainWindow = null, + mainTray = null, subWindow = [], willQuitApp = false, devloadUrl = "", @@ -136,21 +137,34 @@ function createSubWindow(args) { } } - const getTheLock = app.requestSingleInstanceLock() if (!getTheLock) { app.quit() } else { app.on('second-instance', () => { - if (mainWindow) { - if (mainWindow.isMinimized()) { - mainWindow.restore() + utils.setShowWindow(mainWindow) + }) + app.on('ready', () => { + // 创建主窗口 + createMainWindow() + // 创建托盘 + if (['darwin', 'win32'].includes(process.platform)) { + mainTray = new Tray(process.platform === 'darwin' ? config.build.mac.trayIcon : config.build.win.icon); + mainTray.on('click', () => { + utils.setShowWindow(mainWindow) + }) + mainTray.setToolTip(config.name) + if (process.platform === 'win32') { + const trayMenu = Menu.buildFromTemplate([{ + label: '退出', + click: () => { + app.quit() + } + }]) + mainTray.setContextMenu(trayMenu) } - mainWindow.focus() - mainWindow.show() } }) - app.on('ready', createMainWindow) } app.on('activate', () => { @@ -194,10 +208,10 @@ ipcMain.on('windowRouter', (event, args) => { }) /** - * 隐藏窗口(mac隐藏,其他关闭) + * 隐藏窗口(mac|win隐藏,其他关闭) */ ipcMain.on('windowHidden', (event) => { - if (process.platform === 'darwin') { + if (['darwin', 'win32'].includes(process.platform)) { app.hide(); } else { app.quit(); @@ -330,10 +344,16 @@ ipcMain.on('setDockBadge', (event, args) => { // Mac only return; } - if (utils.runNum(args) > 0) { - app.dock.setBadge(String(args)) - } else { - app.dock.setBadge("") + let num = args; + let tray = true; + if (utils.isJson(args)) { + num = args.num + tray = !!args.tray + } + let text = utils.runNum(num) > 0 ? String(num) : "" + app.dock.setBadge(text) + if (tray && mainTray) { + mainTray.setTitle(text) } event.returnValue = "ok" }) diff --git a/electron/package.json b/electron/package.json index 4be00bf2f..903af8b01 100644 --- a/electron/package.json +++ b/electron/package.json @@ -65,6 +65,7 @@ "afterSign": "./notarize.js", "mac": { "icon": "../resources/assets/statics/public/images/logo-app.png", + "trayIcon": "../resources/assets/statics/public/images/tray/logo-trayTemplate.png", "entitlements": "entitlements.plist", "entitlementsInherit": "entitlements.plist", "category": "public.app-category.productivity", diff --git a/electron/utils.js b/electron/utils.js index 0112a4bdc..8b5654f81 100644 --- a/electron/utils.js +++ b/electron/utils.js @@ -270,6 +270,20 @@ module.exports = { return Math.round(time / 1000) }, + /** + * 显示窗口 + * @param win + */ + setShowWindow(win) { + if (win) { + if (win.isMinimized()) { + win.restore() + } + win.focus() + win.show() + } + }, + /** * 窗口关闭事件 * @param event @@ -283,7 +297,7 @@ module.exports = { if (typeof app === "undefined") { sender.destroy() } else { - if (process.platform === 'darwin') { + if (['darwin', 'win32'].includes(process.platform)) { app.hide() } else { app.quit() diff --git a/public/images/tray/logo-tray.png b/public/images/tray/logo-tray.png new file mode 100644 index 000000000..519d0ee1c Binary files /dev/null and b/public/images/tray/logo-tray.png differ diff --git a/public/images/tray/logo-tray@2x.png b/public/images/tray/logo-tray@2x.png new file mode 100644 index 000000000..1001f52aa Binary files /dev/null and b/public/images/tray/logo-tray@2x.png differ diff --git a/public/images/tray/logo-tray@3x.png b/public/images/tray/logo-tray@3x.png new file mode 100644 index 000000000..09e16e8b1 Binary files /dev/null and b/public/images/tray/logo-tray@3x.png differ diff --git a/public/images/tray/logo-trayTemplate.png b/public/images/tray/logo-trayTemplate.png new file mode 100644 index 000000000..dddcfb2d1 Binary files /dev/null and b/public/images/tray/logo-trayTemplate.png differ diff --git a/public/images/tray/logo-trayTemplate@2x.png b/public/images/tray/logo-trayTemplate@2x.png new file mode 100644 index 000000000..46ca80bb8 Binary files /dev/null and b/public/images/tray/logo-trayTemplate@2x.png differ diff --git a/public/images/tray/logo-trayTemplate@3x.png b/public/images/tray/logo-trayTemplate@3x.png new file mode 100644 index 000000000..21ad7af02 Binary files /dev/null and b/public/images/tray/logo-trayTemplate@3x.png differ diff --git a/resources/assets/statics/public/images/tray/logo-tray.png b/resources/assets/statics/public/images/tray/logo-tray.png new file mode 100644 index 000000000..519d0ee1c Binary files /dev/null and b/resources/assets/statics/public/images/tray/logo-tray.png differ diff --git a/resources/assets/statics/public/images/tray/logo-tray@2x.png b/resources/assets/statics/public/images/tray/logo-tray@2x.png new file mode 100644 index 000000000..1001f52aa Binary files /dev/null and b/resources/assets/statics/public/images/tray/logo-tray@2x.png differ diff --git a/resources/assets/statics/public/images/tray/logo-tray@3x.png b/resources/assets/statics/public/images/tray/logo-tray@3x.png new file mode 100644 index 000000000..09e16e8b1 Binary files /dev/null and b/resources/assets/statics/public/images/tray/logo-tray@3x.png differ diff --git a/resources/assets/statics/public/images/tray/logo-trayTemplate.png b/resources/assets/statics/public/images/tray/logo-trayTemplate.png new file mode 100644 index 000000000..dddcfb2d1 Binary files /dev/null and b/resources/assets/statics/public/images/tray/logo-trayTemplate.png differ diff --git a/resources/assets/statics/public/images/tray/logo-trayTemplate@2x.png b/resources/assets/statics/public/images/tray/logo-trayTemplate@2x.png new file mode 100644 index 000000000..46ca80bb8 Binary files /dev/null and b/resources/assets/statics/public/images/tray/logo-trayTemplate@2x.png differ diff --git a/resources/assets/statics/public/images/tray/logo-trayTemplate@3x.png b/resources/assets/statics/public/images/tray/logo-trayTemplate@3x.png new file mode 100644 index 000000000..21ad7af02 Binary files /dev/null and b/resources/assets/statics/public/images/tray/logo-trayTemplate@3x.png differ