【合并v3.8.2最新版代码】

Squashed commit of the following:

commit f30a8c658a
Author: JEECG <445654970@qq.com>
Date:   Thu Jul 31 11:35:16 2025 +0800

    数据库缺少openapi微服务网关配置

commit e84d7726d2
Author: JEECG <445654970@qq.com>
Date:   Thu Jul 31 10:20:09 2025 +0800

    后台接口地址修改

commit 0f39802698
Author: JEECG <445654970@qq.com>
Date:   Thu Jul 31 09:56:24 2025 +0800

    docker自动化部署命令

commit a014a3ed0e
Author: JEECG <445654970@qq.com>
Date:   Wed Jul 30 21:55:16 2025 +0800

    v3.8.2 优化一键docker启动前后端

commit 5720d1a01e
Author: JEECG <445654970@qq.com>
Date:   Wed Jul 30 19:26:38 2025 +0800

    升级版本号到3.8.2

commit 5eed6ac6d2
Author: JEECG <445654970@qq.com>
Date:   Wed Jul 30 18:49:29 2025 +0800

    升级版本号到3.8.2

commit 0cfa1e223a
Author: JEECG <445654970@qq.com>
Date:   Wed Jul 30 18:28:10 2025 +0800

    v3.8.2 系统通知改造支持分类

commit 219869f4c0
Author: JEECG <445654970@qq.com>
Date:   Wed Jul 30 18:25:58 2025 +0800

    v3.8.2 版本前端代码

commit e6edde963a
Author: JEECG <445654970@qq.com>
Date:   Wed Jul 30 18:25:46 2025 +0800

    v3.8.2 版本后端代码

commit c44b66128e
Author: JEECG <445654970@qq.com>
Date:   Wed Jul 30 18:23:09 2025 +0800

    XXL-JOB(2.4.0 及以上)已被移除,分片参数获取方式变更。

commit 9356b04741
Author: JEECG <445654970@qq.com>
Date:   Wed Jul 30 10:57:52 2025 +0800

    升级online到3.8.2-beta

commit d0a094f9a3
Author: JEECG <445654970@qq.com>
Date:   Wed Jul 30 10:57:31 2025 +0800

    升级mybatis-plus到3.5.12、升级jsqlparser到4.9

commit 73eb625737
Author: JEECG <445654970@qq.com>
Date:   Wed Jul 30 09:51:34 2025 +0800

    升级jimureport到v2.1.1

commit 74880705b8
Author: 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:
JEECG
2025-07-31 14:23:45 +08:00
parent f67cfa1bfb
commit 6c15b45a8c
190 changed files with 6482 additions and 2501 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -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();
});

View File

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

View File

@ -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'),
});

View File

@ -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', () => {

View File

@ -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();