From 45770d15c11f8082ce6e0bcdce55c57348e3aba2 Mon Sep 17 00:00:00 2001 From: zdg Date: Tue, 30 Jul 2024 10:04:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=94=9F=E4=BA=A7=E7=8E=AF?= =?UTF-8?q?=E5=A2=83=E9=9D=99=E6=80=81=E6=96=87=E4=BB=B6=E5=8A=A0=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- src/main/index.js | 20 +++++++++-- src/renderer/src/utils/tool.js | 37 ++++++++++++++++---- src/renderer/src/views/classBegins/index.vue | 9 +++-- 4 files changed, 54 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 578c277..7893b0b 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "js-cookie": "^3.0.5", "jsencrypt": "^3.3.2", "jsondiffpatch": "0.6.0", - "pdfjs-dist": "^4.4.168", + "pdfjs-dist": "4.4.168", "lodash": "^4.17.21", "pinia": "^2.1.7", "pinia-plugin-persistedstate": "^3.2.1", diff --git a/src/main/index.js b/src/main/index.js index cd543a7..665deea 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -75,8 +75,10 @@ function createMainWindow() { mainWindow.show() }) mainWindow.on('closed', () => { - mainWindow = null - app.quit() // 主窗口关闭-结束所有进程 + setTimeout(() => { // 延迟销毁 + mainWindow = null + }, 1000) + // app.quit() // 主窗口关闭-结束所有进程 }) mainWindow.webContents.setWindowOpenHandler((details) => { shell.openExternal(details.url) @@ -163,7 +165,10 @@ app.on('ready', () => { loginWindow.destroy() } if (mainWindow) { - mainWindow.destroy() + mainWindow.close() // 先发出这个关闭指令 + setTimeout(() => { // + mainWindow.destroy() + }, 200); } }) @@ -190,6 +195,14 @@ app.on('ready', () => { ipcMain.on('openWindow', (e, data) => { createLinkWin(data) }) + // 新窗口创建-监听 + ipcMain.on('new-window', (e,data) => { + const { id, type } = data + const win = BrowserWindow.fromId(id) + win.type = type // 绑定独立标识 + remote.enable(win.webContents) // 开启远程服务 + }) + // 打开-登录窗口 createLoginWindow() @@ -197,6 +210,7 @@ app.on('ready', () => { app.on('activate', function () { if (BrowserWindow.getAllWindows().length === 0) createLoginWindow() }) + }) // Quit when all windows are closed, except on macOS. There, it's common diff --git a/src/renderer/src/utils/tool.js b/src/renderer/src/utils/tool.js index 7a56f5e..96fcf18 100644 --- a/src/renderer/src/utils/tool.js +++ b/src/renderer/src/utils/tool.js @@ -3,7 +3,8 @@ */ // const { ipcRenderer } = window.electron || {} // import { ipcRenderer } from 'electron' // 渲染器里面可以使用ipcRenderer - +// Remote.app.getAppPath() E:\njys-work\AIx_Smarttalk\dist\win-unpacked\resources\app.asar +// path.join(__dirname) 根目录 E:\njys-work\AIx_Smarttalk\dist\win-unpacked\resources\app.asar\out\renderer const path = require('path') const Remote = require('@electron/remote') @@ -13,7 +14,22 @@ const { ipcRenderer } = require('electron') const BaseUrl = process.env['ELECTRON_RENDERER_URL']+'/#' const isDev = process.env.NODE_ENV !== 'production' - +/** + * 获取静态资源,开发和生产环境 + * @param {*} url + * @param {*} type 类型 app 应用内 user (用户目录 selfFile 自定义文件路径) + * @returns + */ +export const getStaticUrl = (url = '', type = 'app', exitPath = '', isFile = false) => { + if (isDev) return url + else { // 生产环境获取-url + switch(type) { + case 'app': return path.join(__dirname, url) // 应用目录 + case 'user': return (isFile?'file://':'')+path.join(Remote.app.getPath('userData'),exitPath, url) // 用户目录 + default: return '' + } + } +} /** * @description 消息发送-nodejs 消息发送 * @form src/main/tool.js 来源 @@ -55,6 +71,7 @@ export const createWindow = async (type, data) => { } data.option = {...defOption, ...option} const win = await toolWindow(data) + win.setTitle('窗口标题: 我的自定义参数') win.type = type // 唯一标识 win.show() win.setFullScreen(true) // 设置窗口为全屏 @@ -105,8 +122,11 @@ export function toolWindow({url, isFile, isConsole, option={}}) { const config = { width, height, type: 'toolbar', // 创建的窗口类型为工具栏窗口 + icon: path.join(__dirname, '../../resources/logo2.ico'), webPreferences: { + // preload: path.join(__dirname, '../preload/index.js'), preload: '@root/src/preload/index.js', + sandbox: false, nodeIntegration: true, // nodeApi调用 contextIsolation: false, // 沙箱取消 // webSecurity: false // 跨域关闭 @@ -136,17 +156,18 @@ export function toolWindow({url, isFile, isConsole, option={}}) { * @param {*} win 窗口对象 */ const eventHandles = (type, win) => { - // const winAll = Remote.BrowserWindow.getAllWindows() - // const mainWin = winAll.find(o => o.type == 'main') // 主窗口对象 + const winAll = Remote.BrowserWindow.getAllWindows() + const mainWin = winAll.find(o => o.type == 'main') // 主窗口对象 // 公共方法 const publicMethods = ({onClosed}={}) => { // 监听主窗口-关闭事件 - // Remote.ipcMain.on('close-window', () => {console.log('关闭窗口');win.destroy()}) - // mainWin.once('closed', () => {console.log('关闭窗口');win.destroy()}) + mainWin.once('close', () => {win.destroy()}) win.on('closed', () => { - if(onClosed) onClosed() + if(onClosed) onClosed() // 自定义关闭事件 win = null }) + // 新窗口-创建事件(如:主进程加载远程服务) + ipcRenderer.send('new-window', {id:win.id, type}) } switch(type) { case 'tool-sphere': { // 创建-悬浮球 @@ -165,6 +186,7 @@ const eventHandles = (type, win) => { case 'open-PDF': { // 最小化窗口 minimize() Remote.ipcMain.once('open-PDF:minimize', () => {win.destroy()}) + win.webContents.openDevTools() publicMethods() // 加载公共方法 break} default: @@ -180,3 +202,4 @@ const taskHandles = () => { // click: () => {Remote.app.quit()} // })) } + diff --git a/src/renderer/src/views/classBegins/index.vue b/src/renderer/src/views/classBegins/index.vue index dded189..95e59cc 100644 --- a/src/renderer/src/views/classBegins/index.vue +++ b/src/renderer/src/views/classBegins/index.vue @@ -34,15 +34,18 @@