From 206de9e618c1b2ea6417951ff40ca712502e2645 Mon Sep 17 00:00:00 2001 From: fhysy <1149505133@qq.com> Date: Mon, 22 Jul 2024 15:51:51 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E9=A1=B5=E9=9D=A2=E5=B8=83=E5=B1=80):=20?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=A4=B4=E9=83=A8=E8=8F=9C=E5=8D=95=E7=9A=84?= =?UTF-8?q?=E8=B7=AF=E7=94=B1=E6=8E=A7=E5=88=B6=EF=BC=8C=E5=88=A0=E9=99=A4?= =?UTF-8?q?dist=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/index.js | 302 ++--- src/renderer/src/layout/Aside.vue | 94 +- src/renderer/src/layout/Header.vue | 1 + src/renderer/src/layout/index.vue | 58 +- src/renderer/src/router/index.js | 104 +- src/renderer/src/views/HomeView.vue | 35 - src/renderer/src/views/switch/index.vue | 1205 ----------------- src/renderer/src/views/system/index.vue | 35 + .../src/views/system/switch/index.vue | 1100 +++++++++++++++ 9 files changed, 1412 insertions(+), 1522 deletions(-) delete mode 100644 src/renderer/src/views/HomeView.vue delete mode 100644 src/renderer/src/views/switch/index.vue create mode 100644 src/renderer/src/views/system/index.vue create mode 100644 src/renderer/src/views/system/switch/index.vue diff --git a/src/main/index.js b/src/main/index.js index 8327b65..20beef7 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -1,182 +1,182 @@ -import { app, shell, BrowserWindow, ipcMain, globalShortcut, dialog } from 'electron' -import { join } from 'path' -import { electronApp, optimizer, is } from '@electron-toolkit/utils' -import icon from '../../resources/icon.png?asset' +import { app, shell, BrowserWindow, ipcMain, globalShortcut, dialog } from 'electron'; +import { join } from 'path'; +import { electronApp, optimizer, is } from '@electron-toolkit/utils'; +import icon from '../../resources/icon.png?asset'; //关闭exe命令 function killProcessByName(processName) { - const command = `taskkill /IM ${processName} /F` - const { exec } = require('child_process') + const command = `taskkill /IM ${processName} /F`; + const { exec } = require('child_process'); - exec(command, (error, stdout, stderr) => { - if (error) { - console.error(`执行的错误: ${error}`) - return - } - console.log(`stdout: ${stdout}`) - console.error(`stderr: ${stderr}`) - }) + exec(command, (error, stdout, stderr) => { + if (error) { + console.error(`执行的错误: ${error}`); + return; + } + console.log(`stdout: ${stdout}`); + console.error(`stderr: ${stderr}`); + }); } -app.commandLine.appendSwitch('disable-web-security') +app.commandLine.appendSwitch('disable-web-security'); function createWindow() { - // Create the browser window. - const mainWindow = new BrowserWindow({ - width: 1100, - height: 700, - show: false, - autoHideMenuBar: true, - icon, - webPreferences: { - preload: join(__dirname, '../preload/index.js'), - sandbox: false, - nodeIntegration: true, - // 禁用同源策略,允许跨域请求 - webSecurity: false, - contextIsolation: false, - csp: "default-src 'self'; connect-src 'self' *", - // 禁止build环境使用DevTool - // devTools: is.dev ? true : false - devTools: true - } - }) - //开启调试 - // mainWindow.webContents.openDevTools() - mainWindow.on('ready-to-show', () => { - mainWindow.show() - }) + // Create the browser window. + const mainWindow = new BrowserWindow({ + width: 1100, + height: 700, + show: false, + autoHideMenuBar: true, + icon, + webPreferences: { + preload: join(__dirname, '../preload/index.js'), + sandbox: false, + nodeIntegration: true, + // 禁用同源策略,允许跨域请求 + webSecurity: false, + contextIsolation: false, + csp: "default-src 'self'; connect-src 'self' *", + // 禁止build环境使用DevTool + // devTools: is.dev ? true : false + devTools: true + } + }); + //开启调试 + // mainWindow.webContents.openDevTools() + mainWindow.on('ready-to-show', () => { + mainWindow.show(); + }); - mainWindow.webContents.setWindowOpenHandler((details) => { - shell.openExternal(details.url) - return { action: 'deny' } - }) - // HMR for renderer base on electron-vite cli. - // Load the remote URL for development or the local html file for production. - if (is.dev && process.env['ELECTRON_RENDERER_URL']) { - mainWindow.loadURL(process.env['ELECTRON_RENDERER_URL']) - } else { - mainWindow.loadFile(join(__dirname, '../renderer/index.html')) - } + mainWindow.webContents.setWindowOpenHandler(details => { + shell.openExternal(details.url); + return { action: 'deny' }; + }); + // HMR for renderer base on electron-vite cli. + // Load the remote URL for development or the local html file for production. + if (is.dev && process.env['ELECTRON_RENDERER_URL']) { + mainWindow.loadURL(process.env['ELECTRON_RENDERER_URL']); + } else { + mainWindow.loadFile(join(__dirname, '../renderer/index.html')); + } - // 设置DevTools快捷键 - // 设置DevTools快捷键 - globalShortcut.register('CommandOrControl+Shift+i', function () { - mainWindow.webContents.openDevTools() - }) - return mainWindow + // 设置DevTools快捷键 + // 设置DevTools快捷键 + globalShortcut.register('CommandOrControl+Shift+i', function () { + mainWindow.webContents.openDevTools(); + }); + return mainWindow; } // 程序单例模式 -let myWindow = null -const gotTheLock = app.requestSingleInstanceLock() +let myWindow = null; +const gotTheLock = app.requestSingleInstanceLock(); if (!gotTheLock) { - // 如果已经有同样的该程序正在运行,则不启动 - app.quit() + // 如果已经有同样的该程序正在运行,则不启动 + app.quit(); } else { - // 如果检测到有同样的该程序正在试图启动... - app.on('second-instance', () => { - if (myWindow) { - // 弹出系统提示对话框 - dialog.showMessageBox({ - message: '此程序已经正在运行' - }) - // 如果该程序窗口处于最小化状态,则恢复窗口 - if (myWindow.isMinimized()) myWindow.restore() - // 将该程序窗口置为当前聚焦态 - myWindow.focus() - } - }) + // 如果检测到有同样的该程序正在试图启动... + app.on('second-instance', () => { + if (myWindow) { + // 弹出系统提示对话框 + dialog.showMessageBox({ + message: '此程序已经正在运行' + }); + // 如果该程序窗口处于最小化状态,则恢复窗口 + if (myWindow.isMinimized()) myWindow.restore(); + // 将该程序窗口置为当前聚焦态 + myWindow.focus(); + } + }); - // This method will be called when Electron has finished - // initialization and is ready to create browser windows. - // Some APIs can only be used after this event occurs. - const { spawn } = require('child_process') - let child = null - let exePluginsExeList = [] - app.whenReady().then(() => { - const fs = require('fs') - const path = require('path') + // This method will be called when Electron has finished + // initialization and is ready to create browser windows. + // Some APIs can only be used after this event occurs. + const { spawn } = require('child_process'); + let child = null; + let exePluginsExeList = []; + app.whenReady().then(() => { + const fs = require('fs'); + const path = require('path'); - const logStream = fs.createWriteStream('app.log', { flags: 'a' }) // 日志文件 - let exePath = path.resolve('./resources/app.asar.unpacked/resources/service') - let exePluginsPath = path.resolve('./resources/app.asar.unpacked/resources/service/plugins') - //单独配置测试环境 - if (process.env.NODE_ENV === 'development') { - exePath = path.resolve('./resources/service') - exePluginsPath = path.resolve('./resources/service/plugins') - } + const logStream = fs.createWriteStream('app.log', { flags: 'a' }); // 日志文件 + let exePath = path.resolve('./resources/app.asar.unpacked/resources/service'); + let exePluginsPath = path.resolve('./resources/app.asar.unpacked/resources/service/plugins'); + //单独配置测试环境 + if (process.env.NODE_ENV === 'development') { + exePath = path.resolve('./resources/service'); + exePluginsPath = path.resolve('./resources/service/plugins'); + } - //查询所有插件目录下的exe文件 - fs.readdir(exePluginsPath, (err, files) => { - if (err) { - return console.log('Unable to scan directory: ' + err) - } - // 筛选出以.exe结尾的文件 - exePluginsExeList = files.filter((file) => path.extname(file).toLowerCase() === '.exe') - }) + //查询所有插件目录下的exe文件 + fs.readdir(exePluginsPath, (err, files) => { + if (err) { + return console.log('Unable to scan directory: ' + err); + } + // 筛选出以.exe结尾的文件 + exePluginsExeList = files.filter(file => path.extname(file).toLowerCase() === '.exe'); + }); - child = spawn('./main.exe', [], { cwd: exePath, stdio: ['ignore', 'pipe', 'pipe'] }) + child = spawn('./main.exe', [], { cwd: exePath, stdio: ['ignore', 'pipe', 'pipe'] }); - //监听进程的输出 - child.stdout.on('data', (data) => { - console.log('stdout:', data.toString()) - logStream.write(data) - }) + //监听进程的输出 + child.stdout.on('data', data => { + console.log('stdout:', data.toString()); + logStream.write(data); + }); - child.stderr.on('data', (data) => { - console.error('stderr:', data.toString()) - logStream.write(data) - }) + child.stderr.on('data', data => { + console.error('stderr:', data.toString()); + logStream.write(data); + }); - child.on('close', (code) => { - console.log(`子进程已退出,退出码 ${code}`) - logStream.end() - }) + child.on('close', code => { + console.log(`子进程已退出,退出码 ${code}`); + logStream.end(); + }); - child.on('exit', (code, signal) => { - console.log(`子进程已退出,退出码 ${code},信号: ${signal}`) - logStream.write(`子进程已退出,退出码 ${code},信号: ${signal}`) - logStream.end() - }) + child.on('exit', (code, signal) => { + console.log(`子进程已退出,退出码 ${code},信号: ${signal}`); + logStream.write(`子进程已退出,退出码 ${code},信号: ${signal}`); + logStream.end(); + }); - // Set app user model id for windows - electronApp.setAppUserModelId('com.electron') + // Set app user model id for windows + electronApp.setAppUserModelId('com.electron'); - // Default open or close DevTools by F12 in development - // and ignore CommandOrControl + R in production. - // see https://github.com/alex8088/electron-toolkit/tree/master/packages/utils - app.on('browser-window-created', (_, window) => { - optimizer.watchWindowShortcuts(window) - }) + // Default open or close DevTools by F12 in development + // and ignore CommandOrControl + R in production. + // see https://github.com/alex8088/electron-toolkit/tree/master/packages/utils + app.on('browser-window-created', (_, window) => { + optimizer.watchWindowShortcuts(window); + }); - // IPC test - ipcMain.on('ping', () => console.log('pong')) + // IPC test + ipcMain.on('ping', () => console.log('pong')); - myWindow = createWindow() + myWindow = createWindow(); - app.on('activate', function () { - // On macOS it's common to re-create a window in the app when the - // dock icon is clicked and there are no other windows open. - if (BrowserWindow.getAllWindows().length === 0) createWindow() - }) - }) + app.on('activate', function () { + // On macOS it's common to re-create a window in the app when the + // dock icon is clicked and there are no other windows open. + if (BrowserWindow.getAllWindows().length === 0) createWindow(); + }); + }); - // Quit when all windows are closed, except on macOS. There, it's common - // for applications and their menu bar to stay active until the user quits - // explicitly with Cmd + Q. - app.on('window-all-closed', () => { - if (process.platform !== 'darwin') { - // 循环关闭插件 EXE 列表 - exePluginsExeList.forEach((exe) => { - killProcessByName(exe) - }) - // child.kill('SIGTERM'); // 或者使用 'SIGKILL' 来强制关闭 - // killProcessByName('gateway.exe'); - // 循环关闭后端服务 - killProcessByName('main.exe') - app.quit() - } - }) + // Quit when all windows are closed, except on macOS. There, it's common + // for applications and their menu bar to stay active until the user quits + // explicitly with Cmd + Q. + app.on('window-all-closed', () => { + if (process.platform !== 'darwin') { + // 循环关闭插件 EXE 列表 + exePluginsExeList.forEach(exe => { + killProcessByName(exe); + }); + // child.kill('SIGTERM'); // 或者使用 'SIGKILL' 来强制关闭 + // killProcessByName('gateway.exe'); + // 循环关闭后端服务 + killProcessByName('main.exe'); + app.quit(); + } + }); } // In this file you can include the rest of your app"s specific main process // code. You can also put them in separate files and require them here. diff --git a/src/renderer/src/layout/Aside.vue b/src/renderer/src/layout/Aside.vue index d457b5c..4ae58f8 100644 --- a/src/renderer/src/layout/Aside.vue +++ b/src/renderer/src/layout/Aside.vue @@ -1,71 +1,63 @@ diff --git a/src/renderer/src/layout/Header.vue b/src/renderer/src/layout/Header.vue index 2dd262a..82c15dd 100644 --- a/src/renderer/src/layout/Header.vue +++ b/src/renderer/src/layout/Header.vue @@ -11,6 +11,7 @@ router="true" > 系统模板 +
diff --git a/src/renderer/src/layout/index.vue b/src/renderer/src/layout/index.vue index 269fd1f..0952bc2 100644 --- a/src/renderer/src/layout/index.vue +++ b/src/renderer/src/layout/index.vue @@ -1,41 +1,35 @@ - diff --git a/src/renderer/src/router/index.js b/src/renderer/src/router/index.js index eba0455..d9db022 100644 --- a/src/renderer/src/router/index.js +++ b/src/renderer/src/router/index.js @@ -1,51 +1,59 @@ -import { createRouter, createWebHistory } from 'vue-router' -import Layout from '@renderer/layout/index.vue' +import { createRouter, createWebHistory } from 'vue-router'; +import Layout from '@renderer/layout/index.vue'; +import systenLayout from '@renderer/views/system/index.vue'; const router = createRouter({ - history: createWebHistory(), - routes: [ - { - path: '/system', - name: 'system', - component: Layout, - redirect: {name: 'switch'}, - children:[ - { - path: 'switch', - name: 'switch', - component: () => import("@renderer/views/switch/index.vue"), - meta: { - menu: 'switch', - keepAlive: true, - } - }, - { - path: 'about', - name: 'about', - component: () => import("@renderer/views/AboutView.vue"), - meta: { - menu: 'about', - keepAlive: true, - } - }, - { - path: 'test', - name: 'test', - component: () => import("@renderer/views/test.vue"), - meta: { - menu: 'test', - keepAlive: true, - } - }, + history: createWebHistory(), + routes: [ + { + path: '/', + component: Layout, + meta: { title: '整体页面布局' }, + redirect: '/system', + children: [ + { + path: '/system', + name: 'system', + component: systenLayout, + redirect: { name: 'switch' }, + children: [ + { + path: 'switch', + name: 'switch', + component: () => import('@renderer/views/system/switch/index.vue'), + meta: { + menu: 'switch', + keepAlive: true + } + }, + { + path: 'about', + name: 'about', + component: () => import('@renderer/views/AboutView.vue'), + meta: { + menu: 'about', + keepAlive: true + } + }, + { + path: 'test', + name: 'test', + component: () => import('@renderer/views/test.vue'), + meta: { + menu: 'test', + keepAlive: true + } + } + ] + } + ] + }, + { + path: '/', // 这个是根路由,现在我们让它重定向到 /system + redirect: '/system' + }, + { path: '/:pathMatch(.*)', redirect: '/' } + ] +}); - ] - }, - { - path: '/', // 这个是根路由,现在我们让它重定向到 /system - redirect: '/system', - }, - { path: '/:pathMatch(.*)', redirect: '/' }, - ] -}) - -export default router +export default router; diff --git a/src/renderer/src/views/HomeView.vue b/src/renderer/src/views/HomeView.vue deleted file mode 100644 index a80d54b..0000000 --- a/src/renderer/src/views/HomeView.vue +++ /dev/null @@ -1,35 +0,0 @@ - - - diff --git a/src/renderer/src/views/switch/index.vue b/src/renderer/src/views/switch/index.vue deleted file mode 100644 index ff0c751..0000000 --- a/src/renderer/src/views/switch/index.vue +++ /dev/null @@ -1,1205 +0,0 @@ - - - - - diff --git a/src/renderer/src/views/system/index.vue b/src/renderer/src/views/system/index.vue new file mode 100644 index 0000000..06fbb56 --- /dev/null +++ b/src/renderer/src/views/system/index.vue @@ -0,0 +1,35 @@ + + + + + diff --git a/src/renderer/src/views/system/switch/index.vue b/src/renderer/src/views/system/switch/index.vue new file mode 100644 index 0000000..91dbc97 --- /dev/null +++ b/src/renderer/src/views/system/switch/index.vue @@ -0,0 +1,1100 @@ + + + + +