From 5acfcbdc3884fab0bd2771caf1d69ce2ef9f41df Mon Sep 17 00:00:00 2001 From: chenqiang Date: Mon, 11 Aug 2025 23:02:15 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E7=89=88=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- electron/main.js | 31 +++++++++++++++++++++++++++++-- electron/service/examService.js | 18 ------------------ package.json | 11 +++++++---- src/views/user/EndView.vue | 2 ++ 4 files changed, 38 insertions(+), 24 deletions(-) diff --git a/electron/main.js b/electron/main.js index a0c0cb6..a2174cd 100644 --- a/electron/main.js +++ b/electron/main.js @@ -1,5 +1,5 @@ // 确保所有导入都使用 ES 模块语法 -import { app, BrowserWindow, ipcMain } from "electron"; +import { app, BrowserWindow, ipcMain, dialog } from "electron"; import path from "path"; import { fileURLToPath } from "url"; import { @@ -68,7 +68,9 @@ function createWindow() { } mainWindow = new BrowserWindow({ - fullscreen: true, + // 将fullscreen改为false,添加maximized: true + fullscreen: false, + maximized: true, webPreferences: { preload: path.join(__dirname, "../electron/preload.js"), nodeIntegration: false, @@ -83,6 +85,28 @@ function createWindow() { mainWindow.loadFile(path.join(__dirname, "../dist/index.html")); } + // 添加窗口关闭前的确认对话框 + mainWindow.on('close', (event) => { + // 阻止默认关闭行为 + event.preventDefault(); + + // 显示确认对话框 + dialog.showMessageBox({ + type: 'warning', + title: '关闭确认', + message: '系统关闭后,已进行中的试卷将不会被保存,是否确认要关闭?', + buttons: ['取消', '确认关闭'], + defaultId: 0 + }).then((result) => { + // 如果用户点击确认关闭 + if (result.response === 1) { + // 允许窗口关闭 + mainWindow.destroy(); + } + // 否则取消关闭 + }); + }); + // 当窗口关闭时,清空引用 mainWindow.on("closed", () => { mainWindow = null; @@ -97,6 +121,9 @@ app.whenReady().then(() => { }); app.on("window-all-closed", () => { + // 在所有窗口关闭后,清空主窗口引用 + mainWindow = null; + // 对于非macOS平台,仍然需要退出应用 if (process.platform !== "darwin") { app.quit(); } diff --git a/electron/service/examService.js b/electron/service/examService.js index 1d1eba8..55c1c35 100644 --- a/electron/service/examService.js +++ b/electron/service/examService.js @@ -205,15 +205,6 @@ export async function initExamIpc(ipcMain) { } }); - ipcMain.handle("exam-fetch-last", async () => { - try { - return { success: true, data: await fetchLastExam() }; - } catch (error) { - console.error("Failed to fetch last exam:", error); - return { success: false, error: error.message }; - } - }); - ipcMain.handle("exam-fetch-by-id", async (event, id) => { try { return { success: true, data: await fetchExamById(id) }; @@ -223,15 +214,6 @@ export async function initExamIpc(ipcMain) { } }); - ipcMain.handle("exam-update", async (event, { id, examData }) => { - try { - const result = await modifyExam(id, examData); - return { success: result, data: { id, ...examData } }; - } catch (error) { - console.error(`Failed to update exam ${id}:`, error); - return { success: false, error: error.message }; - } - }); ipcMain.handle("exam-delete", async (event, id) => { try { diff --git a/package.json b/package.json index 6f3b71d..865eb89 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,8 @@ "build": "vite build", "preview": "vite preview", "electron:dev": "vite --mode electron", - "electron:build": "vite build && electron-builder" + "electron:build": "vite build && electron-builder", + "electron:build:win": "vite build && electron-builder --win --x64" }, "dependencies": { "@element-plus/icons-vue": "^2.3.1", @@ -58,11 +59,12 @@ { "target": "nsis", "arch": [ - "ia32" + "x64" ] } ], - "icon": "public/favicon.ico" + "icon": "public/favicon.ico", + "artifactName": "${productName}-${version}-win64.${ext}" }, "nsis": { "oneClick": false, @@ -73,7 +75,8 @@ "installerHeaderIcon": "public/favicon.ico", "createDesktopShortcut": true, "createStartMenuShortcut": true, - "shortcutName": "电子考试系统" + "shortcutName": "电子考试系统", + "runAfterFinish": true } } } diff --git a/src/views/user/EndView.vue b/src/views/user/EndView.vue index bcd6f06..0055f70 100644 --- a/src/views/user/EndView.vue +++ b/src/views/user/EndView.vue @@ -9,9 +9,11 @@
+