You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
3.5 KiB
119 lines
3.5 KiB
// Modules to control application life and create native browser window
|
|
const { app, BrowserWindow ,dialog, globalShortcut} = require('electron')
|
|
const { execSync } = require('child_process');
|
|
const path = require('node:path')
|
|
|
|
function createWindow () {
|
|
// Create the browser window.
|
|
const mainWindow = new BrowserWindow({
|
|
width: 1300,
|
|
height: 800,
|
|
// frame: false,
|
|
icon: path.join(__dirname, 'icon.ico'),
|
|
webPreferences: {
|
|
contextIsolation: false,
|
|
preload: path.join(__dirname, 'preload.js'),
|
|
webSecurity: false, // 允许跨域
|
|
}
|
|
})
|
|
//隐藏菜单
|
|
mainWindow.setMenu(null);
|
|
// and load the index.html of the app.
|
|
//mainWindow.loadFile('index.html')
|
|
// window.isElectron = true;
|
|
mainWindow.loadFile('./dist/index.html')
|
|
// mainWindow.loadURL('http://localhost:8888/')
|
|
|
|
// Open the DevTools.
|
|
// mainWindow.webContents.openDevTools()
|
|
|
|
mainWindow.on('close', e => {
|
|
const choice = dialog.showMessageBoxSync(mainWindow, {
|
|
type: 'info',
|
|
buttons: ['取消', '确认'],
|
|
title: '提示',
|
|
message: '确定要退出系统吗?',
|
|
defaultId: 0, // 默认选中“取消”按钮
|
|
cancelId: 1, // 按下 Esc 键时的默认行为是“取消”
|
|
})
|
|
const leave = choice === 0;
|
|
if (!leave) {
|
|
clearCache(mainWindow)
|
|
} else {
|
|
// 点击取消按钮
|
|
e.preventDefault();
|
|
}
|
|
})
|
|
|
|
mainWindow.on('closed', () => {
|
|
app.quit() // 关闭应用程序
|
|
})
|
|
|
|
// 注册快捷键
|
|
// mainWindow.on('focus', () => {
|
|
// globalShortcut.register('CommandOrControl+Alt+F', function () {
|
|
// mainWindow && mainWindow.webContents.toggleDevTools()
|
|
// })
|
|
// })
|
|
// mainWindow.on('blur', () => {
|
|
// globalShortcut.unregisterAll() // 注销键盘事件
|
|
// })
|
|
}
|
|
|
|
/**
|
|
* @description 清除缓存
|
|
*/
|
|
function clearCache(mainWindow) {
|
|
// 在窗口即将关闭时清除 localStorage 和 sessionStorage
|
|
mainWindow.webContents.executeJavaScript('localStorage.removeItem("Admin-Token");')
|
|
mainWindow.webContents.executeJavaScript('sessionStorage.clear();')
|
|
}
|
|
// 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.
|
|
app.whenReady().then(() => {
|
|
|
|
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', function () {
|
|
if (process.platform !== 'darwin') app.quit()
|
|
})
|
|
|
|
app.on('before-quit', () => {
|
|
// 获取端口
|
|
let port = 30523;
|
|
|
|
// 执行杀死进程的操作
|
|
try {
|
|
const command = `netstat -ano | findstr :${port}`;
|
|
const output = execSync(command).toString();
|
|
const lines = output.trim().split('\n');
|
|
for (const line of lines) {
|
|
const pidMatch = line.match(/LISTENING\s+(\d+)/);
|
|
if (pidMatch) {
|
|
const pid = pidMatch[1];
|
|
execSync(`taskkill /PID ${pid} -t -f`);
|
|
break;
|
|
}
|
|
}
|
|
} catch (error) {
|
|
console.error('无法杀死进程', error);
|
|
}
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
// 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.
|