85 lines
2.2 KiB
JavaScript
85 lines
2.2 KiB
JavaScript
const { app, BrowserWindow, globalShortcut } = require('electron')
|
|
const path = require('path')
|
|
const { startServer } = require('./server')
|
|
|
|
let server = null
|
|
let PORT = null
|
|
|
|
app.whenReady().then(async () => {
|
|
try {
|
|
// 启动本地服务器
|
|
const serverInfo = await startServer()
|
|
server = serverInfo.server
|
|
PORT = serverInfo.PORT
|
|
|
|
const sceneArg = process.argv.find(a => a.startsWith('--scene='))
|
|
const query = sceneArg ? { scene: sceneArg.split('=')[1] } : {}
|
|
|
|
const win = new BrowserWindow({
|
|
width: 1280,
|
|
height: 720,
|
|
minWidth: 800,
|
|
minHeight: 600,
|
|
resizable: true,
|
|
maximizable: true,
|
|
minimizable: true,
|
|
closable: true,
|
|
autoHideMenuBar: false,
|
|
webPreferences: {
|
|
nodeIntegration: false,
|
|
contextIsolation: true
|
|
},
|
|
icon: path.join(__dirname, '..', 'public', 'icon.png') // 应用图标
|
|
})
|
|
|
|
// 注册全屏切换快捷键 (F11 或 Command+F)
|
|
globalShortcut.register('F11', () => {
|
|
win.setFullScreen(!win.isFullScreen())
|
|
})
|
|
|
|
// 注册退出快捷键 (Alt+F4 或 Command+Q)
|
|
globalShortcut.register('Alt+F4', () => {
|
|
app.quit()
|
|
})
|
|
|
|
// 构建查询参数字符串
|
|
const queryString = new URLSearchParams(query).toString()
|
|
const url = queryString ? `http://127.0.0.1:${PORT}/index.html?${queryString}` : `http://127.0.0.1:${PORT}/index.html`
|
|
|
|
console.log('🚀 Loading app from:', url)
|
|
win.loadURL(url)
|
|
|
|
// 打开开发者工具,方便调试(生产环境可以注释掉)
|
|
// win.webContents.openDevTools()
|
|
} catch (error) {
|
|
console.error('❌ Failed to start app:', error)
|
|
app.quit()
|
|
}
|
|
})
|
|
|
|
app.on('window-all-closed', () => {
|
|
// 取消注册所有快捷键
|
|
globalShortcut.unregisterAll()
|
|
if (server) {
|
|
server.close() // 关闭服务器
|
|
}
|
|
app.quit()
|
|
})
|
|
|
|
app.on('before-quit', () => {
|
|
// 取消注册所有快捷键
|
|
globalShortcut.unregisterAll()
|
|
if (server) {
|
|
server.close() // 确保服务器被关闭
|
|
}
|
|
})
|
|
|
|
// 防止应用在 Mac 上关闭窗口后退出
|
|
app.on('activate', () => {
|
|
if (BrowserWindow.getAllWindows().length === 0) {
|
|
app.whenReady().then(() => {
|
|
// 重新创建窗口的逻辑
|
|
})
|
|
}
|
|
})
|