mirror of
https://github.com/jeecgboot/JeecgBoot.git
synced 2025-12-08 17:12:28 +08:00
【合并v3.8.2最新版代码】
Squashed commit of the following: commitf30a8c658aAuthor: JEECG <445654970@qq.com> Date: Thu Jul 31 11:35:16 2025 +0800 数据库缺少openapi微服务网关配置 commite84d7726d2Author: JEECG <445654970@qq.com> Date: Thu Jul 31 10:20:09 2025 +0800 后台接口地址修改 commit0f39802698Author: JEECG <445654970@qq.com> Date: Thu Jul 31 09:56:24 2025 +0800 docker自动化部署命令 commita014a3ed0eAuthor: JEECG <445654970@qq.com> Date: Wed Jul 30 21:55:16 2025 +0800 v3.8.2 优化一键docker启动前后端 commit5720d1a01eAuthor: JEECG <445654970@qq.com> Date: Wed Jul 30 19:26:38 2025 +0800 升级版本号到3.8.2 commit5eed6ac6d2Author: JEECG <445654970@qq.com> Date: Wed Jul 30 18:49:29 2025 +0800 升级版本号到3.8.2 commit0cfa1e223aAuthor: JEECG <445654970@qq.com> Date: Wed Jul 30 18:28:10 2025 +0800 v3.8.2 系统通知改造支持分类 commit219869f4c0Author: JEECG <445654970@qq.com> Date: Wed Jul 30 18:25:58 2025 +0800 v3.8.2 版本前端代码 commite6edde963aAuthor: JEECG <445654970@qq.com> Date: Wed Jul 30 18:25:46 2025 +0800 v3.8.2 版本后端代码 commitc44b66128eAuthor: JEECG <445654970@qq.com> Date: Wed Jul 30 18:23:09 2025 +0800 XXL-JOB(2.4.0 及以上)已被移除,分片参数获取方式变更。 commit9356b04741Author: JEECG <445654970@qq.com> Date: Wed Jul 30 10:57:52 2025 +0800 升级online到3.8.2-beta commitd0a094f9a3Author: JEECG <445654970@qq.com> Date: Wed Jul 30 10:57:31 2025 +0800 升级mybatis-plus到3.5.12、升级jsqlparser到4.9 commit73eb625737Author: JEECG <445654970@qq.com> Date: Wed Jul 30 09:51:34 2025 +0800 升级jimureport到v2.1.1 commit74880705b8Author: JEECG <445654970@qq.com> Date: Wed Jul 30 09:18:46 2025 +0800 升级online到3.8.2-beta # Conflicts: # jeecg-boot/jeecg-boot-base-core/pom.xml # jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/config/Swagger3Config.java # jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/JeecgSystemApplication.java # jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/pom.xml # jeecg-boot/pom.xml
This commit is contained in:
BIN
jeecgboot-vue3/electron/icons/mac/dock.png
Normal file
BIN
jeecgboot-vue3/electron/icons/mac/dock.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 10 KiB |
BIN
jeecgboot-vue3/electron/icons/mac/tray-icon.png
Normal file
BIN
jeecgboot-vue3/electron/icons/mac/tray-icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.0 KiB |
BIN
jeecgboot-vue3/electron/icons/mac/tray-icon@2x.png
Normal file
BIN
jeecgboot-vue3/electron/icons/mac/tray-icon@2x.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.3 KiB |
@ -1,4 +1,43 @@
|
||||
import {ipcMain} from 'electron'
|
||||
import {openInBrowser} from "../utils";
|
||||
import { Tray, ipcMain, BrowserWindow, app, Notification } from 'electron';
|
||||
import type { NotificationConstructorOptions, IpcMainInvokeEvent } from 'electron';
|
||||
import { openInBrowser } from '../utils';
|
||||
import { omit } from 'lodash-es';
|
||||
|
||||
ipcMain.on('open-in-browser', (event, url) => openInBrowser(url));
|
||||
ipcMain.on('open-in-browser', (event: IpcMainInvokeEvent, url: string) => openInBrowser(url));
|
||||
// 处理任务栏闪烁
|
||||
ipcMain.on('notify-flash', (event: IpcMainInvokeEvent, count: number = 0) => {
|
||||
const win = BrowserWindow.getAllWindows()[0];
|
||||
if (!win) return;
|
||||
if (win.isFocused()) return;
|
||||
if (process.platform === 'win32') {
|
||||
// windows
|
||||
win.flashFrame(true);
|
||||
} else if (process.platform === 'darwin') {
|
||||
// Mac
|
||||
if (app.dock) {
|
||||
app.dock.bounce('informational');
|
||||
// 设置角标(未读消息)
|
||||
if (count > 0) {
|
||||
app.dock.setBadge(count.toString());
|
||||
} else {
|
||||
app.dock.setBadge('');
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
// 通知 (点击通知打开指定页面)
|
||||
ipcMain.on('notify-with-path', (event: IpcMainInvokeEvent, options: NotificationConstructorOptions & { path: string }) => {
|
||||
const win = BrowserWindow.getAllWindows()[0];
|
||||
if (!win) return;
|
||||
if (win.isFocused()) return;
|
||||
const notification = new Notification({
|
||||
...omit(options, 'path'),
|
||||
});
|
||||
notification.on('click', () => {
|
||||
if (win.isMinimized()) win.restore();
|
||||
win.show();
|
||||
win.focus();
|
||||
// win.webContents.send('navigate-to', options.path);
|
||||
});
|
||||
notification.show();
|
||||
});
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
import './ipc';
|
||||
|
||||
import { app, BrowserWindow, Menu } from 'electron';
|
||||
import { app, BrowserWindow, Menu, ipcMain } from 'electron';
|
||||
import { isDev } from './env';
|
||||
import { createMainWindow, createIndexWindow } from './utils/window';
|
||||
import { getAppInfo} from "./utils";
|
||||
import { getAppInfo } from './utils';
|
||||
import { ElectronEnum } from '../src/enums/jeecgEnum';
|
||||
import './ipc';
|
||||
|
||||
// 隐藏所有菜单
|
||||
Menu.setApplicationMenu(null);
|
||||
@ -12,6 +12,14 @@ let mainWindow: BrowserWindow | null = null;
|
||||
|
||||
function main() {
|
||||
mainWindow = createMainWindow();
|
||||
// update-begin--author:liaozhiyang---date:20250725---for:【JHHB-13】桌面应用消息通知
|
||||
mainWindow.on('focus', () => {
|
||||
// 清除任务栏闪烁
|
||||
if (process.platform === 'win32') {
|
||||
mainWindow!.flashFrame(false);
|
||||
}
|
||||
});
|
||||
// update-end--author:liaozhiyang---date:20250725---for:【JHHB-13】桌面应用消息通知
|
||||
return mainWindow;
|
||||
}
|
||||
|
||||
|
||||
@ -1,5 +1,20 @@
|
||||
import {contextBridge, ipcRenderer} from 'electron'
|
||||
import { contextBridge, ipcRenderer } from 'electron';
|
||||
import { ElectronEnum } from '../../src/enums/jeecgEnum';
|
||||
|
||||
contextBridge.exposeInMainWorld('_ELECTRON_PRELOAD_UTILS_', {
|
||||
contextBridge.exposeInMainWorld(ElectronEnum.ELECTRON_API, {
|
||||
openInBrowser: (url: string) => ipcRenderer.send('open-in-browser', url),
|
||||
// 发送消息通知
|
||||
sendNotification: (title: string, body: string, path: string) => {
|
||||
ipcRenderer.send('notify-with-path', { title, body, path });
|
||||
},
|
||||
// 绑定路由跳转
|
||||
onNavigate: (cb: (path: string) => void) => {
|
||||
ipcRenderer.on('navigate-to', (_, path) => cb(path));
|
||||
},
|
||||
// 任务栏闪
|
||||
sendNotifyFlash: () => ipcRenderer.send('notify-flash'),
|
||||
// 托盘闪动
|
||||
trayFlash: () => ipcRenderer.send('tray-flash'),
|
||||
// 托盘停止闪动
|
||||
trayFlashStop: () => ipcRenderer.send('tray-flash-stop'),
|
||||
});
|
||||
|
||||
@ -1,11 +1,18 @@
|
||||
// tray = 系统托盘
|
||||
import path from 'path';
|
||||
import {Tray, Menu, app, dialog, nativeImage, BrowserWindow, Notification} from 'electron';
|
||||
import { Tray, Menu, app, dialog, nativeImage, BrowserWindow, Notification, ipcMain } from 'electron';
|
||||
import type { IpcMainInvokeEvent } from 'electron';
|
||||
import {_PATHS} from '../paths';
|
||||
import {$env, isDev} from '../env';
|
||||
|
||||
const TrayIcons = {
|
||||
normal: nativeImage.createFromPath(path.join(_PATHS.publicRoot, 'logo.png')),
|
||||
// update-begin--author:liaozhiyang---date:20250725---for:【JHHB-13】桌面应用消息通知
|
||||
normal: nativeImage.createFromPath(
|
||||
process.platform === 'win32'
|
||||
? path.join(_PATHS.publicRoot, 'logo.png')
|
||||
: path.join(_PATHS.electronRoot, './icons/mac/tray-icon.png').replace(/[\\/]dist[\\/]/, '/')
|
||||
),
|
||||
// update-end--author:liaozhiyang---date:20250725---for:【JHHB-13】桌面应用消息通知
|
||||
empty: nativeImage.createEmpty(),
|
||||
};
|
||||
|
||||
@ -60,7 +67,21 @@ export function useTray(tray: Tray, win: BrowserWindow) {
|
||||
}
|
||||
tray.setImage(TrayIcons.normal);
|
||||
}
|
||||
|
||||
ipcMain.on('tray-flash', (event: IpcMainInvokeEvent) => {
|
||||
// 仅在 Windows 系统中闪烁
|
||||
if (process.platform === 'win32') {
|
||||
startBlink();
|
||||
}
|
||||
});
|
||||
ipcMain.on('tray-flash-stop', (event: IpcMainInvokeEvent) => {
|
||||
// 仅在 Windows 系统中停止闪烁
|
||||
if (process.platform === 'win32') {
|
||||
stopBlink();
|
||||
}
|
||||
});
|
||||
win.on('focus', () => {
|
||||
stopBlink();
|
||||
});
|
||||
// 发送桌面通知
|
||||
function sendDesktopNotice() {
|
||||
// 判断是否支持桌面通知
|
||||
@ -75,9 +96,8 @@ export function useTray(tray: Tray, win: BrowserWindow) {
|
||||
}
|
||||
const ins = new Notification({
|
||||
title: '通知标题',
|
||||
subtitle: '通知副标题',
|
||||
body: '通知内容第一行\n通知内容第二行',
|
||||
icon: TrayIcons.normal.resize({width: 32, height: 32}),
|
||||
// icon: TrayIcons.normal.resize({width: 32, height: 32}),
|
||||
});
|
||||
|
||||
ins.on('click', () => {
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import type {BrowserWindowConstructorOptions} from 'electron';
|
||||
import {BrowserWindow, dialog} from 'electron';
|
||||
import {app, BrowserWindow, dialog} from 'electron';
|
||||
import path from 'path';
|
||||
import {_PATHS} from '../paths';
|
||||
import {$env, isDev} from '../env';
|
||||
@ -19,7 +19,13 @@ export function createBrowserWindow(options?: BrowserWindowConstructorOptions) {
|
||||
icon: isDev ? _PATHS.appIcon : void 0,
|
||||
...options,
|
||||
});
|
||||
|
||||
// update-begin--author:liaozhiyang---date:20250725---for:【JHHB-13】桌面应用消息通知
|
||||
if (process.platform === 'darwin') { // 仅 macOS 生效
|
||||
if (app.dock) {
|
||||
app.dock.setIcon(path.join(_PATHS.electronRoot, './icons/mac/dock.png').replace(/[\\/]dist[\\/]/, '/'));
|
||||
}
|
||||
}
|
||||
// update-end--author:liaozhiyang---date:20250725---for:【JHHB-13】桌面应用消息通知
|
||||
// 设置窗口打开处理器
|
||||
win.webContents.setWindowOpenHandler(({url}) => {
|
||||
const win = createBrowserWindow();
|
||||
|
||||
Reference in New Issue
Block a user