diff --git a/src/app.vue b/src/App.vue similarity index 81% rename from src/app.vue rename to src/App.vue index e92f45fe7009547bb4a7a910902bc61fe8493720..fb0a01fb66f66053ee4235128e7e968a73ab9379 100644 --- a/src/app.vue +++ b/src/App.vue @@ -1,42 +1,37 @@ - - - - - + + + + + diff --git a/src/background.js b/src/background.js index 8fe899660b7e141038d30d43e29eb8f177b7aaf8..5715d1fad61b8a3d62c5997c75907557d0ce35d0 100644 --- a/src/background.js +++ b/src/background.js @@ -4,14 +4,17 @@ import { app, protocol, BrowserWindow, Menu, globalShortcut } from 'electron' import { createProtocol } from 'vue-cli-plugin-electron-builder/lib' const isDevelopment = process.env.NODE_ENV !== 'production' -const path = require('path') +const path = require('path'); + +let mainWin = null let toOpenDevTools = null + protocol.registerSchemesAsPrivileged([ - { scheme: 'app', privileges: { secure: true, standard: true }} + { scheme: 'app', privileges: { secure: true, standard: true } } ]) -let mainWin = null + async function createWindow() { - try{ + try { mainWin = new BrowserWindow({ width: 1400, height: 1000, @@ -19,18 +22,18 @@ async function createWindow() { backgroundColor: '#2e2c29', title: '系统软件安装管理平台', webPreferences: { - nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION, - contextIsolation: !process.env.ELECTRON_NODE_INTEGRATION, - webSecurity: false + nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION === 'true', + contextIsolation: process.env.ELECTRON_NODE_INTEGRATION !== 'true', + webSecurity: true } }) - const menuTemplate = Menu.buildFromTemplate([ + + // 设置菜单栏 + const menuTemplate = [ { label: '返回&(Ctrl+B)', accelerator: 'Ctrl+B', - click: () => { - mainWin.webContents.goBack() - } + click: () => mainWin.webContents.goBack() }, { label: '全屏&(Ctrl+F)', @@ -47,41 +50,46 @@ async function createWindow() { accelerator: 'Ctrl+S', role: 'reload' } - ]) - Menu.setApplicationMenu(menuTemplate) + ]; + Menu.setApplicationMenu(Menu.buildFromTemplate(menuTemplate)) + + // 显示窗口 mainWin.once('ready-to-show', () => { mainWin.maximize() mainWin.show() }) + + // 加载页面 createProtocol('app') mainWin.loadURL('app://./index.html') - toOpenDevTools = function() { - mainWin.webContents.openDevTools() - } - } catch(error) { - console.log(error) + + // 打开开发者工具 + toOpenDevTools = () => mainWin.webContents.openDevTools() + } catch (error) { + console.error('Failed to create window:', error) } } +// 监听应用事件 app.on('window-all-closed', () => { if (process.platform !== 'darwin') { app.quit() } }) + app.whenReady().then(() => { - globalShortcut.register('ctrl+shift+alt+d', () => { - toOpenDevTools() - }) + globalShortcut.register('ctrl+shift+alt+d', toOpenDevTools) }) app.on('activate', () => { - if (BrowserWindow.getAllWindows().length === 0) createWindow() + if (BrowserWindow.getAllWindows().length === 0) { + createWindow() + } }) -app.on('ready', async() => { - createWindow() -}) +app.on('ready', createWindow) +// 开发环境下的优雅退出 if (isDevelopment) { if (process.platform === 'win32') { process.on('message', (data) => { diff --git a/src/store/modules/node-source.js b/src/store/modules/node-source.js index 4e354bbc664b67a522f132c7edee4c430993ca53..b6049d9f80b5bc984c41cb7ea9a645fa31064b7e 100644 --- a/src/store/modules/node-source.js +++ b/src/store/modules/node-source.js @@ -2,27 +2,33 @@ const nodeSource = { state: { // 存放节点,检测源配置30秒后才能再次操作 - nodeCheckSetting: [] + nodeCheckSetting: new Map() }, getters: { }, mutations: { - // 倒计时30秒 SET_CHECK_SOURCE_INTERVAL(state, nodeId) { + console.log(`Setting check source interval for node ${nodeId}`) + + if (state.nodeCheckSetting.has(nodeId)) { + console.log(`Clearing existing interval for node ${nodeId}`) + clearTimeout(state.nodeCheckSetting.get(nodeId).timeout) + state.nodeCheckSetting.delete(nodeId) + } + const obj = { nodeId, time: 30 } - obj.interval = setInterval(() => { - obj.time-- - if (obj.time === 0 && obj.interval !== undefined) { - clearInterval(obj.interval) - const nodeIndex = state.nodeCheckSetting.findIndex(item => item.nodeId === nodeId) - state.nodeCheckSetting.splice(nodeIndex, 1) - } - }, 1000) - state.nodeCheckSetting.push(obj) + + obj.timeout = setTimeout(() => { + console.log(`Interval finished for node ${nodeId}`) + state.nodeCheckSetting.delete(nodeId) + }, 30000) + + state.nodeCheckSetting.set(nodeId, obj) + console.log(`Interval set for node ${nodeId}`) } }, actions: {