const { BrowserWindow } = require('electron'); const path = require('path'); /** * 启动状态管理器 * 管理启动流程和显示启动进度 */ class StartupManager { constructor() { this.loadingWindow = null; this.steps = [ { id: 'init', label: '正在初始化应用...', progress: 0 }, { id: 'check-mysql-port', label: '正在检测MySQL端口...', progress: 15 }, { id: 'start-mysql', label: '正在启动MySQL数据库...', progress: 30 }, { id: 'wait-mysql', label: '等待MySQL就绪...', progress: 45 }, { id: 'check-java-port', label: '正在检测后端服务端口...', progress: 60 }, { id: 'generate-config', label: '正在生成配置文件...', progress: 70 }, { id: 'start-java', label: '正在启动后端服务...', progress: 80 }, { id: 'wait-java', label: '等待后端服务就绪...', progress: 90 }, { id: 'done', label: '启动完成!', progress: 100 } ]; this.currentStep = 0; } /** * 创建 Loading 窗口 */ createLoadingWindow() { this.loadingWindow = new BrowserWindow({ width: 500, height: 300, frame: false, transparent: true, resizable: false, alwaysOnTop: true, skipTaskbar: true, // 不在任务栏显示 webPreferences: { nodeIntegration: true, contextIsolation: false } }); // 加载 loading 页面 const loadingHtml = path.join(__dirname, '../public/html/loading.html'); this.loadingWindow.loadFile(loadingHtml); return this.loadingWindow; } /** * 更新启动进度 * @param {string} stepId - 步骤ID * @param {object} extraInfo - 额外信息 */ updateProgress(stepId, extraInfo = {}) { const stepIndex = this.steps.findIndex(s => s.id === stepId); if (stepIndex !== -1) { this.currentStep = stepIndex; const step = this.steps[stepIndex]; const progressData = { step: stepId, label: step.label, progress: step.progress, ...extraInfo }; // 发送进度到 loading 窗口 if (this.loadingWindow && !this.loadingWindow.isDestroyed()) { this.loadingWindow.webContents.send('startup-progress', progressData); } console.log(`[StartupManager] ${step.label} (${step.progress}%)`, extraInfo); } } /** * 显示错误信息 * @param {string} error - 错误信息 */ showError(error) { if (this.loadingWindow && !this.loadingWindow.isDestroyed()) { this.loadingWindow.webContents.send('startup-error', { error }); } console.error('[StartupManager] Error:', error); } /** * 关闭 Loading 窗口 */ closeLoadingWindow() { if (this.loadingWindow && !this.loadingWindow.isDestroyed()) { // 使用 destroy() 而不是 close() 确保窗口被完全销毁 this.loadingWindow.destroy(); this.loadingWindow = null; } } /** * 获取所有步骤 */ getSteps() { return this.steps; } /** * 获取当前步骤 */ getCurrentStep() { return this.steps[this.currentStep]; } } module.exports = StartupManager;