Files
pqs-9100_client/scripts/startup-manager.js
2025-10-16 20:18:20 +08:00

117 lines
3.1 KiB
JavaScript

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;