From f0c02881745277533ff1d285943158a3fe31e331 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B4=BE=E5=90=8C=E5=AD=A6?= Date: Thu, 23 Oct 2025 13:17:21 +0800 Subject: [PATCH 1/2] =?UTF-8?q?UPDATE:=20=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- electron/preload/lifecycle.js | 93 +++++++++++-------- frontend/src/api/plan/plan.ts | 14 +-- .../plan/planList/components/childrenPlan.vue | 8 +- package.json | 2 +- 4 files changed, 65 insertions(+), 52 deletions(-) diff --git a/electron/preload/lifecycle.js b/electron/preload/lifecycle.js index 67bbda1..4582273 100644 --- a/electron/preload/lifecycle.js +++ b/electron/preload/lifecycle.js @@ -4,7 +4,7 @@ const path = require('path'); const { logger } = require('ee-core/log'); const { getConfig } = require('ee-core/config'); const { getMainWindow } = require('ee-core/electron'); -const { getBaseDir } = require('ee-core/ps'); +const ps = require('ee-core/ps'); const { app } = require('electron'); // 动态获取 scripts 目录路径 @@ -74,7 +74,10 @@ class Lifecycle { async ready() { logger.info('[lifecycle] ready'); // 延迟加载 scripts - loadScripts(); + if (ps.isProd()) { + loadScripts(); + } + } /** @@ -493,44 +496,55 @@ class Lifecycle { */ async windowReady() { logger.info('[lifecycle] window-ready'); + if (ps.isProd()) { + // 创建日志窗口 + this.logWindowManager = new LogWindowManager(); + this.logWindowManager.createLogWindow(); + this.logWindowManager.addLog('system', '='.repeat(60)); + this.logWindowManager.addLog('system', 'NPQS9100 启动中...'); + this.logWindowManager.addLog('system', '='.repeat(60)); - // 创建日志窗口 - this.logWindowManager = new LogWindowManager(); - this.logWindowManager.createLogWindow(); - this.logWindowManager.addLog('system', '='.repeat(60)); - this.logWindowManager.addLog('system', 'NPQS9100 启动中...'); - this.logWindowManager.addLog('system', '='.repeat(60)); + // 创建 Loading 窗口 + this.startupManager = new StartupManager(); + this.startupManager.createLoadingWindow(); - // 创建 Loading 窗口 - this.startupManager = new StartupManager(); - this.startupManager.createLoadingWindow(); + // 开始启动流程 + try { + await this.startApplication(); + } catch (error) { + logger.error('[lifecycle] Failed to start application:', error); + this.logWindowManager.addLog('error', `启动失败: ${error.message}`); + this.logWindowManager.addLog('system', '请检查日志窗口了解详细错误信息'); + this.startupManager.showError(error.message || '启动失败,请查看日志'); + + // 显示错误5秒后关闭Loading窗口,但不关闭日志窗口 + setTimeout(() => { + this.startupManager.closeLoadingWindow(); + + // 即使启动失败,也显示主窗口(但用户可能需要手动修复问题) + const win = getMainWindow(); + win.show(); + win.focus(); + + // 添加主窗口关闭事件监听 + win.on('close', async () => { + logger.info('[lifecycle] Main window closing (after error), cleaning up...'); + await this.cleanup(); + }); + + this.logWindowManager.addLog('warn', '应用已启动,但部分服务可能未正常运行'); + }, 5000); + } + } else { + const win = getMainWindow(); + const {windowsOption} = getConfig(); + if (windowsOption.show == false) { + win.once('ready-to-show', () => { + win.show(); + win.focus(); + }) + } - // 开始启动流程 - try { - await this.startApplication(); - } catch (error) { - logger.error('[lifecycle] Failed to start application:', error); - this.logWindowManager.addLog('error', `启动失败: ${error.message}`); - this.logWindowManager.addLog('system', '请检查日志窗口了解详细错误信息'); - this.startupManager.showError(error.message || '启动失败,请查看日志'); - - // 显示错误5秒后关闭Loading窗口,但不关闭日志窗口 - setTimeout(() => { - this.startupManager.closeLoadingWindow(); - - // 即使启动失败,也显示主窗口(但用户可能需要手动修复问题) - const win = getMainWindow(); - win.show(); - win.focus(); - - // 添加主窗口关闭事件监听 - win.on('close', async () => { - logger.info('[lifecycle] Main window closing (after error), cleaning up...'); - await this.cleanup(); - }); - - this.logWindowManager.addLog('warn', '应用已启动,但部分服务可能未正常运行'); - }, 5000); } // 主窗口初始化但不显示,等待启动流程完成后再显示 @@ -542,7 +556,10 @@ class Lifecycle { */ async beforeClose() { logger.info('[lifecycle] before-close hook triggered'); - await this.cleanup(); + if (ps.isProd()) { + await this.cleanup(); + } + } } Lifecycle.toString = () => '[class Lifecycle]'; diff --git a/frontend/src/api/plan/plan.ts b/frontend/src/api/plan/plan.ts index 632d652..e172c35 100644 --- a/frontend/src/api/plan/plan.ts +++ b/frontend/src/api/plan/plan.ts @@ -42,7 +42,7 @@ export const getPqErrSysList = () => { } //获取指定模式下所有未绑定的设备 -export const getUnboundPqDevList = (params: { pattern: string}) => { +export const getUnboundPqDevList = (params: { pattern: string }) => { return http.get(`/pqDev/listUnbound?pattern=${params.pattern}`) } @@ -141,22 +141,22 @@ export const importSubPlan = (params: Plan.ResPlan) => { // 导出计划检测结果数据 export const exportPlanCheckData = (params: any) => { - return http.post( - `/adPlan/exportPlanCheckData?planId=${params.id}&devIds=${params.devIds}&report=${params.report}` - ) + return http.post(`/adPlan/exportPlanCheckData?planId=${params.id}&devIds=${params.devIds}&report=${params.report}`) } //根据误差体系id获取测试项 -export const getPqErrSysTestItemList = (params: {errorSysId : string}) => { +export const getPqErrSysTestItemList = (params: { errorSysId: string }) => { return http.get(`/pqErrSys/getTestItems?id=${params.errorSysId}`) } // 获取计划项目成员 -export const getMemberList = (params: {id : string}) => { +export const getMemberList = (params: { id: string }) => { return http.get(`/adPlan/getMemberList?planId=${params.id}`) } // 导入并合并子检测计划检测结果数据 export const importAndMergePlanCheckData = (params: Plan.ResPlan) => { - return http.upload(`/adPlan/importAndMergePlanCheckData`, params) + return http.upload(`/adPlan/importAndMergePlanCheckData`, params, { + timeout: 60000 * 20 + }) } \ No newline at end of file diff --git a/frontend/src/views/plan/planList/components/childrenPlan.vue b/frontend/src/views/plan/planList/components/childrenPlan.vue index 9a56d08..82d3173 100644 --- a/frontend/src/views/plan/planList/components/childrenPlan.vue +++ b/frontend/src/views/plan/planList/components/childrenPlan.vue @@ -184,10 +184,9 @@ v-if="progressData.status === 'success'" type="primary" title="点击打开目录" - :href="progressData.message" @click="openDownloadLocation" > - {{ progressData.message }} + {{ filePath }} { } const exportPlanCheckResultData = async (selectedListIds: string[]) => { + filePath.value = '' const params = { id: planFormContent.value.id, report: downloadReport.value, @@ -773,10 +773,6 @@ const openDownloadLocation = () => { if (filePath.value) { // 打开指定文件所在的目录,并选中该文件 Renderer.shell.showItemInFolder(filePath.value) - } else { - // 使用默认下载路径 - const downloadPath = Renderer.app.getPath('downloads') - Renderer.shell.openPath(downloadPath) } } else { ElMessage.warning('当前运行环境不支持,请复制路径自行打开') diff --git a/package.json b/package.json index 92b0fb8..e82ce17 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "autofit.js": "^3.2.8", "dayjs": "^1.10.7", - "ee-core": "2.10.0", + "ee-core": "4.1.5", "electron-updater": "^5.3.0", "event-source-polyfill": "^1.0.31", "lodash": "^4.17.21", From 32808ce622da0d908294df0ab684c5bca24fc81c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B4=BE=E5=90=8C=E5=AD=A6?= Date: Thu, 23 Oct 2025 14:15:55 +0800 Subject: [PATCH 2/2] =?UTF-8?q?UPDATE:=20=E4=B8=8A=E4=BC=A0=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E6=9B=BF=E6=8D=A2=E6=9C=80=E6=96=B0=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/components/ImportZip/index.vue | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/ImportZip/index.vue b/frontend/src/components/ImportZip/index.vue index ba57416..3efa208 100644 --- a/frontend/src/components/ImportZip/index.vue +++ b/frontend/src/components/ImportZip/index.vue @@ -12,6 +12,7 @@ action="#" class="upload" :limit="1" + :on-exceed="handleExceed" :http-request="uploadZip" accept=".zip" :auto-upload="!parameter.confirmMessage" @@ -56,7 +57,15 @@