From 0de17d02518a579e7827c59c6711f0eec26499a1 Mon Sep 17 00:00:00 2001 From: chenqiang Date: Tue, 12 Aug 2025 20:55:51 +0800 Subject: [PATCH] 1.0.201 --- electron/service/fileService.js | 72 +++++++++++++++++++--- package.json | 2 +- src/views/WelcomeView.vue | 5 +- src/views/admin/AdminHomeView.vue | 85 ++++++++++++++++++++------ src/views/admin/ExamManagementView.vue | 20 +++++- src/views/user/EndView.vue | 10 +-- src/views/user/ExamingView.vue | 48 ++------------- 7 files changed, 163 insertions(+), 79 deletions(-) diff --git a/electron/service/fileService.js b/electron/service/fileService.js index 49a5cc5..50cc98c 100644 --- a/electron/service/fileService.js +++ b/electron/service/fileService.js @@ -370,15 +370,57 @@ function getAppSaveDir() { const portableFlagPath = path.join(appDir, 'portable.txt'); const isPortable = fs.existsSync(portableFlagPath); - // 所有生产环境(包括便携和非便携)都使用应用同级的output目录 - const outputDir = path.join(appDir, 'output'); - if (!fs.existsSync(outputDir)) { - fs.mkdirSync(outputDir, { recursive: true }); + // 便携模式:使用应用根目录 + if (isPortable) { + return appDir; + } else { + // 非便携模式:使用应用同级的output目录 + const outputDir = path.join(appDir, 'output'); + if (!fs.existsSync(outputDir)) { + fs.mkdirSync(outputDir, { recursive: true }); + } + return outputDir; } - return outputDir; } } +/** + * 获取用户桌面目录路径 + * @returns {string} 用户桌面绝对路径 + */ +function getDesktopDir() { + try { + // 使用Electron的app.getPath方法获取桌面路径 + return app.getPath('desktop'); + } catch (error) { + console.error('获取桌面路径失败:', error); + // 发生错误时,返回当前工作目录作为备选 + return process.cwd(); + } +} + +/** + * 将文件复制到用户桌面 + * @param {string} filePath - 要复制的文件的绝对路径 + * @returns {Promise} + */ +export async function copyToDesk(filePath) { + try { + const desktopDir = getDesktopDir(); + const fileName = path.basename(filePath); + const destPath = path.join(desktopDir, fileName); + + // 使用fs.promises进行文件复制 + await fs.promises.copyFile(filePath, destPath); + console.log(`文件已成功复制到桌面: ${destPath}`); + return destPath; + } catch (error) { + console.error('复制文件到桌面失败:', error); + throw error; + } +} + + /** * 生成试卷PDF文件 * @param {string} jsonString - 包含试卷信息的JSON字符串 @@ -431,7 +473,15 @@ export async function generatePaperPdf(jsonString) { // 生成文件名 // 格式化paper_end_time,移除特殊字符 - const formattedEndTime = endTime.replace(/[:\s]/g, '-'); + const endDate = new Date(endTime.replace(/-/g, '/')); + const formattedEndTime = [ + endDate.getFullYear(), + String(endDate.getMonth() + 1).padStart(2, '0'), + String(endDate.getDate()).padStart(2, '0'), + String(endDate.getHours()).padStart(2, '0'), + String(endDate.getMinutes()).padStart(2, '0'), + String(endDate.getSeconds()).padStart(2, '0') + ].join(''); const fileName = `${examineeName}_${idCard}_${formattedEndTime}.pdf`; // 获取保存路径 @@ -774,7 +824,15 @@ export async function generatePaperPdf(jsonString) { doc.end(); return new Promise((resolve, reject) => { - writeStream.on('finish', () => resolve(filePath)); + writeStream.on('finish', async () => { + try { + // 调用copyToDesk方法将文件复制到桌面,获取新的路径 + const newFilePath = await copyToDesk(filePath); + resolve(newFilePath); + } catch (error) { + reject(error); + } + }); writeStream.on('error', reject); }); } catch (error) { diff --git a/package.json b/package.json index 28b6be7..168f701 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "electron-exam", - "version": "1.0.2", + "version": "1.0.201", "private": true, "type": "module", "main": "electron/main.js", diff --git a/src/views/WelcomeView.vue b/src/views/WelcomeView.vue index 7dc2d9e..9641743 100644 --- a/src/views/WelcomeView.vue +++ b/src/views/WelcomeView.vue @@ -313,8 +313,9 @@ const validateAdminPassword = (password) => { .main-background { background-image: url('@/assets/bg.jpeg'); - background-size: 'cover'; - background-position: 'center'; + background-size: 100% 100%; /* 拉伸背景图以填满容器 */ + background-position: center; /* 保持居中 */ + background-repeat: no-repeat; /* 避免重复 */ } /* 适配移动设备 */ diff --git a/src/views/admin/AdminHomeView.vue b/src/views/admin/AdminHomeView.vue index 54218a5..7ab5c49 100644 --- a/src/views/admin/AdminHomeView.vue +++ b/src/views/admin/AdminHomeView.vue @@ -4,26 +4,35 @@

管理员首页

-
-
-

总试题数

- -
-

120

+
+ + +
-
-

总考试数

- -
-

8

+ + +
-
-
-

总考生数

- -
-

156

+
+ + +
@@ -31,18 +40,54 @@