diff --git a/.env b/.env
index 999f868..d9b6c89 100644
--- a/.env
+++ b/.env
@@ -1,5 +1,5 @@
# 标题
-VITE_APP_TITLE=万维智学考试通
+VITE_APP_TITLE=信息技术课程考试平台
# 项目本地运行端口号
VITE_PORT=8080
@@ -20,7 +20,7 @@ VITE_APP_DOCALERT_ENABLE=true
VITE_APP_BAIDU_CODE = a1ff8825baa73c3a78eb96aa40325abc
# 默认账户密码
-# VITE_APP_DEFAULT_LOGIN_TENANT = 湖北省技能高考万维考试平台
+# VITE_APP_DEFAULT_LOGIN_TENANT = 信息技术课程考试平台
VITE_APP_DEFAULT_LOGIN_TENANT =
VITE_APP_DEFAULT_LOGIN_USERNAME =
VITE_APP_DEFAULT_LOGIN_PASSWORD =
diff --git a/package.json b/package.json
index ed75621..a7e5653 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "stu-end-tauri-v3",
"version": "2.4.2-snapshot",
- "description": "湖北省技能高考万维考试平台 - 基于vue3、vite4、element-plus、typesScript",
+ "description": "信息技术课程考试平台 - 基于vue3、vite4、element-plus、typesScript",
"author": "luguang",
"private": false,
"scripts": {
diff --git a/src-tauri/binaries/Applications/Applications.dll b/src-tauri/binaries/Applications/Applications.dll
index 22b5905..dfaef9c 100644
Binary files a/src-tauri/binaries/Applications/Applications.dll and b/src-tauri/binaries/Applications/Applications.dll differ
diff --git a/src-tauri/binaries/Applications/Applications.exe b/src-tauri/binaries/Applications/Applications.exe
index f4bed94..5d619c0 100644
Binary files a/src-tauri/binaries/Applications/Applications.exe and b/src-tauri/binaries/Applications/Applications.exe differ
diff --git a/src-tauri/binaries/Applications/Applications.pdb b/src-tauri/binaries/Applications/Applications.pdb
index f1a070f..d53db29 100644
Binary files a/src-tauri/binaries/Applications/Applications.pdb and b/src-tauri/binaries/Applications/Applications.pdb differ
diff --git a/src-tauri/binaries/judgement/app/classes/application.properties b/src-tauri/binaries/judgement/app/classes/application.properties
index f2a58ad..7364caf 100644
--- a/src-tauri/binaries/judgement/app/classes/application.properties
+++ b/src-tauri/binaries/judgement/app/classes/application.properties
@@ -1,6 +1,6 @@
-spring.datasource.url=jdbc:mysql://rm-bp1a44uap1mm20980mo.mysql.rds.aliyuncs.com:3306/pc-exam?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
-spring.datasource.username=pc_exam
-spring.datasource.password=Pcexam123
+spring.datasource.url=jdbc:mysql://127.0.0.1:3306/pc-exam?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
+spring.datasource.username=exam_student
+spring.datasource.password=QASDasd_1_3_#_!_P@ssw0rd!
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
server.port=48082
@@ -11,6 +11,23 @@ spring.main.banner-mode=off
mybatis-plus.configuration.map-underscore-to-camel-case=true
mybatis-plus.mapper-locations=classpath*:/mapper/**/*.xml
mybatis-plus.type-aliases-package=com.example.exam.exam.dal
+# --- ???????? ---
+# ?????????????????????????????????????
+# ????????20-50 ???????????
+spring.datasource.hikari.maximum-pool-size=20
+
+# ???????????? maximum-pool-size ??????????????/?????
+spring.datasource.hikari.minimum-idle=1
+
+# ??????????????????????????????????
+# ???????????????????????????????
+spring.datasource.hikari.max-lifetime=600000
+
+# ???????????????????????????????? > minimum-idle???????
+spring.datasource.hikari.idle-timeout=300000
+
+# ???? Hibernate ????????? Dialect ??
+spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
spring.security.user.name=exam
diff --git a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/dal/EducationPaperQu.class b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/dal/EducationPaperQu.class
index 8c9fa2f..a78596f 100644
Binary files a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/dal/EducationPaperQu.class and b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/dal/EducationPaperQu.class differ
diff --git a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/mapper/EducationPaperQuMapper.class b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/mapper/EducationPaperQuMapper.class
index 1cbbeb2..6d67387 100644
Binary files a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/mapper/EducationPaperQuMapper.class and b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/mapper/EducationPaperQuMapper.class differ
diff --git a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoForEmailSetting/AutoForWinEmailSettingServiceImpl.class b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoForEmailSetting/AutoForWinEmailSettingServiceImpl.class
index 3be3cf2..a675658 100644
Binary files a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoForEmailSetting/AutoForWinEmailSettingServiceImpl.class and b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoForEmailSetting/AutoForWinEmailSettingServiceImpl.class differ
diff --git a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoForWinEdgeSetting/AutoForWinEdgeSettingServiceImpl.class b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoForWinEdgeSetting/AutoForWinEdgeSettingServiceImpl.class
index 1e9ab36..db3f6d7 100644
Binary files a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoForWinEdgeSetting/AutoForWinEdgeSettingServiceImpl.class and b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoForWinEdgeSetting/AutoForWinEdgeSettingServiceImpl.class differ
diff --git a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoforbrower/AutoForBrowerServiceImpl.class b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoforbrower/AutoForBrowerServiceImpl.class
index f999979..e7c2b7a 100644
Binary files a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoforbrower/AutoForBrowerServiceImpl.class and b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoforbrower/AutoForBrowerServiceImpl.class differ
diff --git a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoforc/AutoForCServiceImpl.class b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoforc/AutoForCServiceImpl.class
index 1e35d47..6027539 100644
Binary files a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoforc/AutoForCServiceImpl.class and b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoforc/AutoForCServiceImpl.class differ
diff --git a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoforchoice/AutoForChoiceServiceImpl.class b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoforchoice/AutoForChoiceServiceImpl.class
index ffcd605..9e0c948 100644
Binary files a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoforchoice/AutoForChoiceServiceImpl.class and b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoforchoice/AutoForChoiceServiceImpl.class differ
diff --git a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoforfile/AutoForFileServiceImpl.class b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoforfile/AutoForFileServiceImpl.class
index 610168b..6be0446 100644
Binary files a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoforfile/AutoForFileServiceImpl.class and b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoforfile/AutoForFileServiceImpl.class differ
diff --git a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoformysql/AutoForMysqlServiceImpl.class b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoformysql/AutoForMysqlServiceImpl.class
index 1cf17ca..4911f8a 100644
Binary files a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoformysql/AutoForMysqlServiceImpl.class and b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoformysql/AutoForMysqlServiceImpl.class differ
diff --git a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoforps/AutoForPsServiceImpl.class b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoforps/AutoForPsServiceImpl.class
index 85073c6..2ad4859 100644
Binary files a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoforps/AutoForPsServiceImpl.class and b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/autoforps/AutoForPsServiceImpl.class differ
diff --git a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/ps/PsService.class b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/ps/PsService.class
index 0d43a67..bf45427 100644
Binary files a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/ps/PsService.class and b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/ps/PsService.class differ
diff --git a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/ps/PsServiceImpl.class b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/ps/PsServiceImpl.class
index 4ab692d..4a03616 100644
Binary files a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/ps/PsServiceImpl.class and b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/ps/PsServiceImpl.class differ
diff --git a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpsexcel/JudgementWpsExcelServiceImpl.class b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpsexcel/JudgementWpsExcelServiceImpl.class
index dd46cac..75f92d6 100644
Binary files a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpsexcel/JudgementWpsExcelServiceImpl.class and b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpsexcel/JudgementWpsExcelServiceImpl.class differ
diff --git a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpsexcel/cell/CellIng.class b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpsexcel/cell/CellIng.class
index 373b0dd..22d10b5 100644
Binary files a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpsexcel/cell/CellIng.class and b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpsexcel/cell/CellIng.class differ
diff --git a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpsexcel/excel/JudgementForExcelServiceImpl.class b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpsexcel/excel/JudgementForExcelServiceImpl.class
index 5e8c7c5..2f2a770 100644
Binary files a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpsexcel/excel/JudgementForExcelServiceImpl.class and b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpsexcel/excel/JudgementForExcelServiceImpl.class differ
diff --git a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpspptx/JudgementWpsPptxServiceImpl.class b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpspptx/JudgementWpsPptxServiceImpl.class
index 48b4997..5aba8ba 100644
Binary files a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpspptx/JudgementWpsPptxServiceImpl.class and b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpspptx/JudgementWpsPptxServiceImpl.class differ
diff --git a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpspptx/pptx/JudgementForPptxServiceImpl.class b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpspptx/pptx/JudgementForPptxServiceImpl.class
index 424acdd..f642c10 100644
Binary files a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpspptx/pptx/JudgementForPptxServiceImpl.class and b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpspptx/pptx/JudgementForPptxServiceImpl.class differ
diff --git a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpsword/JudgementWpsWordServiceImpl.class b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpsword/JudgementWpsWordServiceImpl.class
index 77e04a0..e99b75e 100644
Binary files a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpsword/JudgementWpsWordServiceImpl.class and b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpsword/JudgementWpsWordServiceImpl.class differ
diff --git a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpsword/docx4j/DocxMaster.class b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpsword/docx4j/DocxMaster.class
index b09c88a..ea9c95e 100644
Binary files a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpsword/docx4j/DocxMaster.class and b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpsword/docx4j/DocxMaster.class differ
diff --git a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpsword/word/JudgementForWordServiceImpl.class b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpsword/word/JudgementForWordServiceImpl.class
index 76a33c1..79e5c1c 100644
Binary files a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpsword/word/JudgementForWordServiceImpl.class and b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/service/wpsword/word/JudgementForWordServiceImpl.class differ
diff --git a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/utils/ws/file/FileSharingMonitor.class b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/utils/ws/file/FileSharingMonitor.class
new file mode 100644
index 0000000..cfd2ba1
Binary files /dev/null and b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/utils/ws/file/FileSharingMonitor.class differ
diff --git a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/utils/ws/file/FileSharingStatusChecker$1.class b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/utils/ws/file/FileSharingStatusChecker$1.class
new file mode 100644
index 0000000..c68d159
Binary files /dev/null and b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/utils/ws/file/FileSharingStatusChecker$1.class differ
diff --git a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/utils/ws/file/FileSharingStatusChecker.class b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/utils/ws/file/FileSharingStatusChecker.class
new file mode 100644
index 0000000..607f900
Binary files /dev/null and b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/utils/ws/file/FileSharingStatusChecker.class differ
diff --git a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/utils/ws/file/FileSharingWebSocket.class b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/utils/ws/file/FileSharingWebSocket.class
new file mode 100644
index 0000000..0b1ec62
Binary files /dev/null and b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/utils/ws/file/FileSharingWebSocket.class differ
diff --git a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/utils/ws/usb/UsbMonitor$1.class b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/utils/ws/usb/UsbMonitor$1.class
new file mode 100644
index 0000000..bfd25ca
Binary files /dev/null and b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/utils/ws/usb/UsbMonitor$1.class differ
diff --git a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/utils/ws/usb/UsbMonitor.class b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/utils/ws/usb/UsbMonitor.class
new file mode 100644
index 0000000..9257236
Binary files /dev/null and b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/utils/ws/usb/UsbMonitor.class differ
diff --git a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/utils/ws/usb/UsbWebSocket.class b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/utils/ws/usb/UsbWebSocket.class
new file mode 100644
index 0000000..31938b8
Binary files /dev/null and b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/utils/ws/usb/UsbWebSocket.class differ
diff --git a/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/utils/ws/usb/WebSocketConfig.class b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/utils/ws/usb/WebSocketConfig.class
new file mode 100644
index 0000000..0337813
Binary files /dev/null and b/src-tauri/binaries/judgement/app/classes/com/example/exam/exam/utils/ws/usb/WebSocketConfig.class differ
diff --git a/src-tauri/binaries/judgement/app/classes/mapper/paper/EducationPaperQuMapper.xml b/src-tauri/binaries/judgement/app/classes/mapper/paper/EducationPaperQuMapper.xml
index a9e55cc..5b1df67 100644
--- a/src-tauri/binaries/judgement/app/classes/mapper/paper/EducationPaperQuMapper.xml
+++ b/src-tauri/binaries/judgement/app/classes/mapper/paper/EducationPaperQuMapper.xml
@@ -8,14 +8,18 @@
+
- select paper_id, qu_id, sort from education_paper_qu
+ select paper_id, qu_id, sort,scheme_id from education_paper_qu
+
\ No newline at end of file
diff --git a/src-tauri/binaries/judgement/app/exam.jar b/src-tauri/binaries/judgement/app/exam.jar
index f5aafc8..79016ec 100644
Binary files a/src-tauri/binaries/judgement/app/exam.jar and b/src-tauri/binaries/judgement/app/exam.jar differ
diff --git a/src-tauri/binaries/judgement/app/exam.jar.original b/src-tauri/binaries/judgement/app/exam.jar.original
index f3f861e..420b55b 100644
Binary files a/src-tauri/binaries/judgement/app/exam.jar.original and b/src-tauri/binaries/judgement/app/exam.jar.original differ
diff --git a/src-tauri/binaries/judgement/app/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/src-tauri/binaries/judgement/app/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
index 351b3df..736d77a 100644
--- a/src-tauri/binaries/judgement/app/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
+++ b/src-tauri/binaries/judgement/app/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
@@ -1,58 +1,26 @@
-com\example\exam\exam\service\autoforbutton\AutoForButtonServiceImpl.class
com\example\exam\exam\service\wpsexcel\style\Style.class
-com\example\exam\exam\service\autoforps\AutoForPsServiceImpl.class
-com\example\exam\exam\service\stupaperscore\StuPaperScoreService.class
com\example\exam\exam\config\SecurityConfig.class
-com\example\exam\exam\service\stupaperscore\StuPaperScoreServiceImpl.class
-com\example\exam\exam\service\wpsexcel\JudgementWpsExcelServiceImpl.class
-com\example\exam\exam\dal\ExamPsKeyword.class
com\example\exam\exam\dal\ExamQuestion.class
com\example\exam\exam\service\wpsword\docx4j\paragraph\RunText.class
com\example\exam\exam\mapper\ExamErrorQuestionMapper.class
-com\example\exam\exam\service\wpsword\docx4j\utils\XmlUtil.class
com\example\exam\exam\service\wpspptx\JudgementWpsPptxServiceImpl.class
com\example\exam\exam\service\error\ExamErrorQuestionInfoServiceImpl.class
-com\example\exam\exam\dal\StuPaperScoreDO$StuPaperScoreDOBuilder.class
com\example\exam\exam\service\autoforfile\AutoForFileService.class
-com\example\exam\exam\utils\error_question\ErrorQuestion.class
-com\example\exam\exam\controller\info\vo\EmailInfoVo.class
com\example\exam\exam\service\winfile\IFileServerice.class
com\example\exam\exam\utils\ps\PsUtil.class
-com\example\exam\exam\service\wpsexcel\XlsxInfoVo.class
com\example\exam\exam\utils\snowflake\SnowflakeId$Holder.class
com\example\exam\exam\service\wpsexcel\XlsxMaster.class
-com\example\exam\exam\service\autoformysql\AutoForMysqlServiceImpl.class
-com\example\exam\exam\utils\c\LogFileUtils.class
-com\example\exam\exam\service\wpsexcel\cell\CellIng$1.class
com\example\exam\exam\mapper\StuPaperScoreMapper.class
com\example\exam\exam\dal\EducationPaperScheme.class
-com\example\exam\exam\dal\SourceAndTextAndTotal.class
-com\example\exam\exam\service\wpsword\docx4j\section\SectionPage.class
-com\example\exam\exam\utils\brower\BookmarkChecker.class
-com\example\exam\exam\mapper\ExamAppCheckMapper.class
com\example\exam\exam\service\mysql\IMysqlLocalServiceImpl$DeleteInfo.class
-com\example\exam\exam\service\wpspptx\pptx4j\utils\PptxUtils.class
com\example\exam\exam\service\autoForWinEdgeSetting\AutoForWinEdgeSettingService.class
-com\example\exam\exam\service\wpsword\JudgementWpsWordService.class
com\example\exam\exam\service\question\IExamQuestionService.class
com\example\exam\exam\service\wpspptx\pptx4j\utils\Transition.class
-com\example\exam\exam\mapper\EducationPaperQuMapper.class
-com\example\exam\exam\service\mysql\vo\MysqlBooleanVo.class
com\example\exam\exam\service\wpspptx\pptx4j\ShapePage.class
com\example\exam\exam\service\autoForWinEdgeSetting\AutoForWinEdgeSettingServiceImpl.class
com\example\exam\exam\service\wpsword\docx4j\text\TextBoxFontUtils$TextBoxFontInfo.class
-com\example\exam\exam\service\ps\PsService.class
-com\example\exam\exam\dal\ExamQuestionKeyword.class
-com\example\exam\exam\mapper\ExamErrorQuestionInfoMapper.class
com\example\exam\exam\service\autoforps\AutoForPsService.class
com\example\exam\exam\service\wpsexcel\range\RangIng.class
-com\example\exam\exam\service\wpspptx\pptx4j\SlideUtils.class
-com\example\exam\exam\service\wpsexcel\style\Style$1.class
-com\example\exam\exam\service\wpsword\JudgementWpsWordServiceImpl.class
-com\example\exam\exam\service\tenant\SystemTenantServiceImpl.class
-com\example\exam\exam\service\autoforchoice\AutoForChoiceServiceImpl.class
-com\example\exam\exam\controller\auto\AutoController.class
-com\example\exam\exam\service\wpspptx\pptx4j\ShapePic.class
com\example\exam\exam\mapper\ExamQuestionScoreMapper.class
com\example\exam\exam\service\autoforbrower\AutoForBrowerService.class
com\example\exam\exam\service\autoforbutton\AutoForButtonService.class
@@ -61,14 +29,107 @@ com\example\exam\exam\service\wpsexcel\table\TableIng.class
com\example\exam\exam\service\wpsword\docx4j\text\TextBoxFontUtils.class
com\example\exam\exam\utils\zip\ZipUtil.class
com\example\exam\exam\dal\SystemTenant.class
-com\example\exam\exam\service\wpsexcel\excel\JudgementForExcelServiceImpl.class
-com\example\exam\exam\service\wpsword\word\JudgementForWordServiceImpl.class
com\example\exam\exam\utils\Result.class
-com\example\exam\exam\service\wpsexcel\row\RowIng.class
com\example\exam\exam\service\mysql\IMysqlLocalService.class
com\example\exam\exam\service\wpspptx\pptx4j\utils\HexColorUtils.class
-com\example\exam\exam\service\wpspptx\pptx\JudgementForPptxService.class
com\example\exam\exam\service\wpsexcel\JudgementWpsExcelService.class
+com\example\exam\exam\utils\c\JudgementCUtils.class
+com\example\exam\exam\service\wpspptx\pptx4j\SlideUtils$1.class
+com\example\exam\exam\utils\mysql\MySQLExporterUtil.class
+com\example\exam\exam\utils\ws\usb\WebSocketConfig.class
+com\example\exam\exam\utils\ws\file\FileSharingMonitor.class
+com\example\exam\exam\service\wpspptx\pptx4j\SlideMaster.class
+com\example\exam\exam\service\wpsword\docx4j\paragraph\Convert.class
+com\example\exam\exam\service\appcheck\ExamAppCheckService.class
+com\example\exam\exam\service\wpspptx\pptx\JudgementForPptxServiceImpl.class
+com\example\exam\exam\service\wpsword\docx4j\file\isFile.class
+com\example\exam\exam\service\autoforc\AutoForCService.class
+com\example\exam\exam\service\mysql\IMysqlLocalServiceImpl.class
+com\example\exam\exam\service\wpsword\docx4j\vo\DocxDataInfoVO.class
+com\example\exam\exam\service\wpsword\docx4j\utils\WpsWordNameSpaces.class
+com\example\exam\exam\StuApplication.class
+com\example\exam\exam\service\winfile\FileServericeImpl.class
+com\example\exam\exam\service\wpsexcel\XlsxDrawingSheetVo.class
+com\example\exam\exam\mapper\SystemTenantMapper.class
+com\example\exam\exam\service\wpsexcel\ExcelInfoReqVo.class
+com\example\exam\exam\service\wpsword\docx4j\drawing\Drawing.class
+com\example\exam\exam\service\wpsword\docx4j\table\TableIng.class
+com\example\exam\exam\utils\ws\usb\UsbWebSocket.class
+com\example\exam\exam\service\c\JudgementService.class
+com\example\exam\exam\utils\HtmlAppender.class
+com\example\exam\exam\mapper\ExamQuestionKeywordMapper.class
+com\example\exam\exam\config\CorsConfig.class
+com\example\exam\exam\dal\SourceAndText.class
+com\example\exam\exam\service\wpspptx\pptx4j\ShapePic$1.class
+com\example\exam\exam\service\wpsword\docx4j\section\HeaderInfo.class
+com\example\exam\exam\service\wpsexcel\vo\WpsXlsxInfoVo.class
+com\example\exam\exam\service\wpsword\docx4j\paragraph\Paragraphs.class
+com\example\exam\exam\service\appcheck\ExamAppCheckServiceImpl.class
+com\example\exam\exam\service\wpspptx\pptx4j\SlideAllSetting.class
+com\example\exam\exam\utils\CustomMultipartFile.class
+com\example\exam\exam\service\wpsword\docx4j\DocxMaster.class
+com\example\exam\exam\service\wpsexcel\page\PagIng.class
+com\example\exam\exam\service\wpspptx\pptx4j\vo\WpsSlideInfoVo.class
+com\example\exam\exam\utils\ws\file\FileSharingStatusChecker$1.class
+com\example\exam\exam\controller\info\vo\EdgeInfoVo.class
+com\example\exam\exam\dal\ExamAppCheck.class
+com\example\exam\exam\service\tenant\SystemTenantService.class
+com\example\exam\exam\service\wpsword\docx4j\insert\InsertIng.class
+com\example\exam\exam\mapper\EducationPaperSchemeMapper.class
+com\example\exam\exam\service\mysql\vo\MysqlVo.class
+com\example\exam\exam\service\autoForEmailSetting\AutoForWinEmailSettingService.class
+com\example\exam\exam\service\brower\JudgementBrowerService.class
+com\example\exam\exam\dal\ExamQuestionAnswer.class
+com\example\exam\exam\mapper\ExamQuestionMapper.class
+com\example\exam\exam\service\c\JudgementServiceImpl.class
+com\example\exam\exam\service\wpsword\docx4j\text\TextInfo.class
+com\example\exam\exam\mapper\ExamQuestionFileMapper.class
+com\example\exam\exam\service\wpsword\docx4j\drawing\Drawing$1.class
+com\example\exam\exam\service\autoforc\AutoForCServiceImpl.class
+com\example\exam\exam\service\wpsword\docx4j\drawing\DrawingInline.class
+com\example\exam\exam\service\wpsexcel\view\Viewing.class
+com\example\exam\exam\service\wpspptx\pptx4j\SlideSetting.class
+com\example\exam\exam\dal\EducationPaperQu.class
+com\example\exam\exam\service\brower\JudgementBrowerServiceImpl.class
+com\example\exam\exam\utils\ws\file\FileSharingWebSocket.class
+com\example\exam\exam\service\autoforbutton\AutoForButtonServiceImpl.class
+com\example\exam\exam\service\autoforps\AutoForPsServiceImpl.class
+com\example\exam\exam\service\stupaperscore\StuPaperScoreService.class
+com\example\exam\exam\service\stupaperscore\StuPaperScoreServiceImpl.class
+com\example\exam\exam\service\wpsexcel\JudgementWpsExcelServiceImpl.class
+com\example\exam\exam\dal\ExamPsKeyword.class
+com\example\exam\exam\service\wpsword\docx4j\utils\XmlUtil.class
+com\example\exam\exam\dal\StuPaperScoreDO$StuPaperScoreDOBuilder.class
+com\example\exam\exam\utils\error_question\ErrorQuestion.class
+com\example\exam\exam\controller\info\vo\EmailInfoVo.class
+com\example\exam\exam\service\wpsexcel\XlsxInfoVo.class
+com\example\exam\exam\service\autoformysql\AutoForMysqlServiceImpl.class
+com\example\exam\exam\utils\c\LogFileUtils.class
+com\example\exam\exam\service\wpsexcel\cell\CellIng$1.class
+com\example\exam\exam\dal\SourceAndTextAndTotal.class
+com\example\exam\exam\service\wpsword\docx4j\section\SectionPage.class
+com\example\exam\exam\utils\brower\BookmarkChecker.class
+com\example\exam\exam\mapper\ExamAppCheckMapper.class
+com\example\exam\exam\service\wpspptx\pptx4j\utils\PptxUtils.class
+com\example\exam\exam\service\wpsword\JudgementWpsWordService.class
+com\example\exam\exam\mapper\EducationPaperQuMapper.class
+com\example\exam\exam\service\mysql\vo\MysqlBooleanVo.class
+com\example\exam\exam\service\ps\PsService.class
+com\example\exam\exam\dal\ExamQuestionKeyword.class
+com\example\exam\exam\mapper\ExamErrorQuestionInfoMapper.class
+com\example\exam\exam\service\wpspptx\pptx4j\SlideUtils.class
+com\example\exam\exam\utils\ws\usb\UsbMonitor.class
+com\example\exam\exam\service\wpsexcel\style\Style$1.class
+com\example\exam\exam\service\wpsword\JudgementWpsWordServiceImpl.class
+com\example\exam\exam\service\tenant\SystemTenantServiceImpl.class
+com\example\exam\exam\service\autoforchoice\AutoForChoiceServiceImpl.class
+com\example\exam\exam\controller\auto\AutoController.class
+com\example\exam\exam\service\wpspptx\pptx4j\ShapePic.class
+com\example\exam\exam\utils\ws\usb\UsbMonitor$1.class
+com\example\exam\exam\service\wpsexcel\excel\JudgementForExcelServiceImpl.class
+com\example\exam\exam\service\wpsword\word\JudgementForWordServiceImpl.class
+com\example\exam\exam\service\wpsexcel\row\RowIng.class
+com\example\exam\exam\service\wpspptx\pptx\JudgementForPptxService.class
com\example\exam\exam\service\wpsword\docx4j\endNote\EndNoteing.class
com\example\exam\exam\service\autoformysql\AutoForMysqlService.class
com\example\exam\exam\service\autoforbrower\AutoForBrowerServiceImpl.class
@@ -76,99 +137,46 @@ com\example\exam\exam\service\wpspptx\JudgementWpsPptxService.class
com\example\exam\exam\dal\StuPaperScoreDO.class
com\example\exam\exam\service\wpsexcel\ChartTypeEntry.class
com\example\exam\exam\service\error\ExamErrorQuestionServiceImpl.class
-com\example\exam\exam\utils\c\JudgementCUtils.class
com\example\exam\exam\service\wpspptx\pptx4j\SlideMasterUtils.class
com\example\exam\exam\config\WebLogAspect.class
-com\example\exam\exam\service\wpspptx\pptx4j\SlideUtils$1.class
-com\example\exam\exam\utils\mysql\MySQLExporterUtil.class
com\example\exam\exam\service\wpsexcel\XlsxCharVO.class
com\example\exam\exam\service\wpsexcel\excel\JudgementForExcelService.class
-com\example\exam\exam\service\wpspptx\pptx4j\SlideMaster.class
-com\example\exam\exam\service\wpsword\docx4j\paragraph\Convert.class
+com\example\exam\exam\utils\ws\file\FileSharingStatusChecker.class
com\example\exam\exam\utils\file\GetDifferencesBetweenFolders$1.class
-com\example\exam\exam\service\appcheck\ExamAppCheckService.class
-com\example\exam\exam\service\wpspptx\pptx\JudgementForPptxServiceImpl.class
-com\example\exam\exam\service\wpsword\docx4j\file\isFile.class
com\example\exam\exam\service\wpsexcel\chart\ChartHandler.class
com\example\exam\exam\dal\EducationPaper.class
-com\example\exam\exam\service\autoforc\AutoForCService.class
com\example\exam\exam\service\autoforchoice\AutoForChoiceService.class
com\example\exam\exam\service\error\IExamErrorQuestionService.class
com\example\exam\exam\service\wpspptx\pptx4j\utils\PtToCmConverter.class
com\example\exam\exam\service\wpspptx\pptx4j\vo\SlideDataInfoVO.class
-com\example\exam\exam\service\mysql\IMysqlLocalServiceImpl.class
-com\example\exam\exam\service\wpsword\docx4j\vo\DocxDataInfoVO.class
-com\example\exam\exam\service\wpsword\docx4j\utils\WpsWordNameSpaces.class
-com\example\exam\exam\StuApplication.class
com\example\exam\exam\service\wpsword\word\JudgementForWordService.class
com\example\exam\exam\controller\info\InfoController.class
com\example\exam\exam\service\wpsexcel\cell\CellIng.class
com\example\exam\exam\dal\ExamErrorQuestion.class
-com\example\exam\exam\service\winfile\FileServericeImpl.class
com\example\exam\exam\utils\brower\BookmarkDeleter.class
-com\example\exam\exam\service\wpsexcel\XlsxDrawingSheetVo.class
com\example\exam\exam\service\wpsword\docx4j\vo\JudgementWordsVO.class
-com\example\exam\exam\mapper\SystemTenantMapper.class
-com\example\exam\exam\service\wpsexcel\ExcelInfoReqVo.class
com\example\exam\exam\service\wpsword\docx4j\vo\WpsDocxInfoVo.class
com\example\exam\exam\mapper\ExamQuestionAnswerMapper.class
com\example\exam\exam\dal\ExamQuestionScore.class
com\example\exam\exam\service\wpspptx\pptx4j\utils\PtToEmuConverter.class
com\example\exam\exam\service\autoforfile\AutoForFileServiceImpl.class
-com\example\exam\exam\service\wpsword\docx4j\drawing\Drawing.class
-com\example\exam\exam\service\wpsword\docx4j\table\TableIng.class
com\example\exam\exam\service\ps\PsServiceImpl.class
-com\example\exam\exam\service\c\JudgementService.class
com\example\exam\exam\service\wpsword\docx4j\section\ColorUtils.class
-com\example\exam\exam\utils\HtmlAppender.class
com\example\exam\exam\service\autoForEmailSetting\AutoForWinEmailSettingServiceImpl.class
-com\example\exam\exam\mapper\ExamQuestionKeywordMapper.class
-com\example\exam\exam\config\CorsConfig.class
-com\example\exam\exam\dal\SourceAndText.class
-com\example\exam\exam\service\wpspptx\pptx4j\ShapePic$1.class
com\example\exam\exam\controller\auto\vo\StuInfoVo.class
-com\example\exam\exam\service\wpsword\docx4j\section\HeaderInfo.class
-com\example\exam\exam\service\wpsexcel\vo\WpsXlsxInfoVo.class
-com\example\exam\exam\service\wpsword\docx4j\paragraph\Paragraphs.class
com\example\exam\exam\service\wpsexcel\col\ColIng.class
-com\example\exam\exam\service\appcheck\ExamAppCheckServiceImpl.class
com\example\exam\exam\service\question\ExamQuestionServiceImpl.class
com\example\exam\exam\utils\snowflake\SnowflakeId.class
-com\example\exam\exam\service\wpspptx\pptx4j\SlideAllSetting.class
-com\example\exam\exam\utils\CustomMultipartFile.class
com\example\exam\exam\dal\ExamQuestionFile.class
-com\example\exam\exam\service\wpsword\docx4j\DocxMaster.class
-com\example\exam\exam\service\wpsexcel\page\PagIng.class
-com\example\exam\exam\service\wpspptx\pptx4j\vo\WpsSlideInfoVo.class
com\example\exam\exam\service\wpsexcel\pivotTable\PivotTabling.class
com\example\exam\exam\service\wpsexcel\vo\JudgementXlsxVO.class
com\example\exam\exam\service\wpsexcel\range\RangIng$1.class
-com\example\exam\exam\controller\info\vo\EdgeInfoVo.class
com\example\exam\exam\service\error\IExamErrorQuestionInfoService.class
com\example\exam\exam\service\wpsword\docx4j\utils\ColorUtils.class
-com\example\exam\exam\dal\ExamAppCheck.class
-com\example\exam\exam\service\tenant\SystemTenantService.class
-com\example\exam\exam\service\wpsword\docx4j\insert\InsertIng.class
-com\example\exam\exam\mapper\EducationPaperSchemeMapper.class
com\example\exam\exam\dal\ExamErrorQuestionInfo.class
-com\example\exam\exam\service\mysql\vo\MysqlVo.class
-com\example\exam\exam\service\autoForEmailSetting\AutoForWinEmailSettingService.class
com\example\exam\exam\utils\file\GetDifferencesBetweenFolders.class
com\example\exam\exam\mapper\ExamMysqlKeywordMapper.class
-com\example\exam\exam\service\brower\JudgementBrowerService.class
com\example\exam\exam\config\CorsConfig$1.class
-com\example\exam\exam\dal\ExamQuestionAnswer.class
-com\example\exam\exam\mapper\ExamQuestionMapper.class
com\example\exam\exam\service\wpsword\docx4j\DocxSetInfo.class
-com\example\exam\exam\service\c\JudgementServiceImpl.class
-com\example\exam\exam\service\wpsword\docx4j\text\TextInfo.class
-com\example\exam\exam\mapper\ExamQuestionFileMapper.class
-com\example\exam\exam\service\wpsword\docx4j\drawing\Drawing$1.class
com\example\exam\exam\dal\ExamMysqlKeyword.class
com\example\exam\exam\service\wpspptx\pptx4j\vo\JudgementSlidesVO.class
-com\example\exam\exam\service\autoforc\AutoForCServiceImpl.class
-com\example\exam\exam\service\wpsword\docx4j\drawing\DrawingInline.class
-com\example\exam\exam\service\wpsexcel\view\Viewing.class
-com\example\exam\exam\service\wpspptx\pptx4j\SlideSetting.class
-com\example\exam\exam\dal\EducationPaperQu.class
-com\example\exam\exam\service\brower\JudgementBrowerServiceImpl.class
diff --git a/src-tauri/binaries/judgement/app/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/src-tauri/binaries/judgement/app/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
index ac22a6f..98b314c 100644
--- a/src-tauri/binaries/judgement/app/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
+++ b/src-tauri/binaries/judgement/app/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -160,4 +160,10 @@ D:\Java\java-workspace\code\exam\local\src\main\java\com\example\exam\exam\utils
D:\Java\java-workspace\code\exam\local\src\main\java\com\example\exam\exam\utils\ps\PsUtil.java
D:\Java\java-workspace\code\exam\local\src\main\java\com\example\exam\exam\utils\Result.java
D:\Java\java-workspace\code\exam\local\src\main\java\com\example\exam\exam\utils\snowflake\SnowflakeId.java
+D:\Java\java-workspace\code\exam\local\src\main\java\com\example\exam\exam\utils\ws\file\FileSharingMonitor.java
+D:\Java\java-workspace\code\exam\local\src\main\java\com\example\exam\exam\utils\ws\file\FileSharingStatusChecker.java
+D:\Java\java-workspace\code\exam\local\src\main\java\com\example\exam\exam\utils\ws\file\FileSharingWebSocket.java
+D:\Java\java-workspace\code\exam\local\src\main\java\com\example\exam\exam\utils\ws\usb\UsbMonitor.java
+D:\Java\java-workspace\code\exam\local\src\main\java\com\example\exam\exam\utils\ws\usb\UsbWebSocket.java
+D:\Java\java-workspace\code\exam\local\src\main\java\com\example\exam\exam\utils\ws\usb\WebSocketConfig.java
D:\Java\java-workspace\code\exam\local\src\main\java\com\example\exam\exam\utils\zip\ZipUtil.java
diff --git a/src-tauri/binaries/judgement/app/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/src-tauri/binaries/judgement/app/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst
index ec19807..5200ffd 100644
--- a/src-tauri/binaries/judgement/app/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst
+++ b/src-tauri/binaries/judgement/app/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst
@@ -1 +1,3 @@
com\example\exam\exam\StuApplicationTests.class
+com\example\exam\exam\UsbMonitor$1.class
+com\example\exam\exam\UsbMonitor.class
diff --git a/src-tauri/binaries/judgement/app/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/src-tauri/binaries/judgement/app/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
index 0ecbe0a..e80f37b 100644
--- a/src-tauri/binaries/judgement/app/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
+++ b/src-tauri/binaries/judgement/app/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
@@ -1 +1,2 @@
D:\Java\java-workspace\code\exam\local\src\test\java\com\example\exam\exam\StuApplicationTests.java
+D:\Java\java-workspace\code\exam\local\src\test\java\com\example\exam\exam\UsbMonitor.java
diff --git a/src-tauri/binaries/judgement/app/surefire-reports/2025-10-17T11-03-59_181.dumpstream b/src-tauri/binaries/judgement/app/surefire-reports/2025-10-17T11-03-59_181.dumpstream
deleted file mode 100644
index ebd8a22..0000000
--- a/src-tauri/binaries/judgement/app/surefire-reports/2025-10-17T11-03-59_181.dumpstream
+++ /dev/null
@@ -1,5 +0,0 @@
-# Created at 2025-10-17T11:03:59.431
-Boot Manifest-JAR contains absolute paths in classpath 'D:\Java\leiku\apache-maven-3.9.4\conf\repository\org\apache\maven\surefire\surefire-booter\3.5.3\surefire-booter-3.5.3.jar'
-Hint: -Djdk.net.URLClassPath.disableClassPathURLCheck=true
-'other' has different root
-
diff --git a/src-tauri/binaries/judgement/app/surefire-reports/TEST-com.example.exam.exam.StuApplicationTests.xml b/src-tauri/binaries/judgement/app/surefire-reports/TEST-com.example.exam.exam.StuApplicationTests.xml
deleted file mode 100644
index 0ea991e..0000000
--- a/src-tauri/binaries/judgement/app/surefire-reports/TEST-com.example.exam.exam.StuApplicationTests.xml
+++ /dev/null
@@ -1,119 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src-tauri/binaries/judgement/app/surefire-reports/com.example.exam.exam.StuApplicationTests.txt b/src-tauri/binaries/judgement/app/surefire-reports/com.example.exam.exam.StuApplicationTests.txt
deleted file mode 100644
index da48f04..0000000
--- a/src-tauri/binaries/judgement/app/surefire-reports/com.example.exam.exam.StuApplicationTests.txt
+++ /dev/null
@@ -1,4 +0,0 @@
--------------------------------------------------------------------------------
-Test set: com.example.exam.exam.StuApplicationTests
--------------------------------------------------------------------------------
-Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 9.208 s -- in com.example.exam.exam.StuApplicationTests
diff --git a/src-tauri/binaries/judgement/app/test-classes/com/example/exam/exam/UsbMonitor$1.class b/src-tauri/binaries/judgement/app/test-classes/com/example/exam/exam/UsbMonitor$1.class
new file mode 100644
index 0000000..16e858e
Binary files /dev/null and b/src-tauri/binaries/judgement/app/test-classes/com/example/exam/exam/UsbMonitor$1.class differ
diff --git a/src-tauri/binaries/judgement/app/test-classes/com/example/exam/exam/UsbMonitor.class b/src-tauri/binaries/judgement/app/test-classes/com/example/exam/exam/UsbMonitor.class
new file mode 100644
index 0000000..36af4c9
Binary files /dev/null and b/src-tauri/binaries/judgement/app/test-classes/com/example/exam/exam/UsbMonitor.class differ
diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json
index 6318bea..99df12a 100644
--- a/src-tauri/tauri.conf.json
+++ b/src-tauri/tauri.conf.json
@@ -7,12 +7,12 @@
"devUrl": "http://localhost:8080",
"frontendDist": "../dist"
},
- "productName": "湖北省技能高考万维考试平台",
+ "productName": "信息技术课程考试平台",
"app": {
"windows": [
{
"label": "login",
- "title": "湖北省技能高考万维考试平台",
+ "title": "信息技术课程考试平台",
"url": "/login",
"resizable": false,
"fullscreen": true,
diff --git a/src/api/paperPractice/index.ts b/src/api/paperPractice/index.ts
index 5e6efe3..2ddefb0 100644
--- a/src/api/paperPractice/index.ts
+++ b/src/api/paperPractice/index.ts
@@ -12,18 +12,70 @@ export const getPaperPracticeList = (params: any) => {
* @returns {string} 格式化后的文本
*/
export function formatExamQuestions(questionList) {
- const { questionSections } = processPaperData(questionList, examStore.educationPaperSchemeList)
- const orderedExamQuestionList = questionSections.flatMap((section) => section.questions)
+ console.log(questionList, 'questionList')
+
+ // 兼容 showExamPaper 可能为 JSON 字符串或已经被格式化的文本
+ if (!questionList) return '暂无试题数据'
+
+ if (typeof questionList === 'string') {
+ // 如果是 JSON 字符串,尝试解析为数组
+ try {
+ const parsed = JSON.parse(questionList)
+ if (Array.isArray(parsed)) {
+ questionList = parsed
+ } else {
+ // 已经是格式化的文本,直接返回原文(交给 formatWarnInfo 处理)
+ return questionList
+ }
+ } catch (e) {
+ // 不是 JSON 字符串,认为是已经格式化的文本
+ return questionList
+ }
+ }
if (!Array.isArray(questionList) || questionList.length === 0) {
return '暂无试题数据'
}
- return orderedExamQuestionList
+ // 调用 processPaperData 并捕获潜在异常,避免抛出导致上层得到 undefined
+ let questionSections = []
+ try {
+ const res = processPaperData(questionList, examStore.educationPaperSchemeList)
+ console.log('processPaperData result keys:', Object.keys(res || {}))
+ questionSections = res?.questionSections || []
+ console.log('questionSections length:', questionSections.length)
+ // log questions count per section
+ questionSections.forEach((s, i) =>
+ console.log(`section ${i} questions:`, (s.questions || []).length)
+ )
+ } catch (err) {
+ console.error('processPaperData error:', err)
+ return '暂无试题数据'
+ }
+
+ let orderedExamQuestionList = questionSections.flatMap((section) => section.questions)
+
+ // 如果通过 scheme 分组无法获得题目(orderedExamQuestionList 为空),回退使用原始 questionList
+ if (
+ (!orderedExamQuestionList || orderedExamQuestionList.length === 0) &&
+ Array.isArray(questionList) &&
+ questionList.length > 0
+ ) {
+ console.warn('orderedExamQuestionList is empty, falling back to original questionList')
+ // 保证每个题目有 answerList / content 的字段
+ // 这里直接使用 questionList 以保证至少能显示内容
+ // @ts-ignore
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
+ const fallback = questionList
+ // replace orderedExamQuestionList with fallback
+ orderedExamQuestionList = fallback
+ }
+
+ const output = orderedExamQuestionList
.map((question, index) => {
if (question.subjectName !== '选择题')
return `题目 ${index + 1}:
-内容: ${question.content.trim()}
+内容: ${String(question.content || '').trim()}
`
const answers = question.answerList
.map((answer, idx) => `${String.fromCharCode(65 + idx)}. ${answer.content}`)
@@ -36,4 +88,8 @@ ${answers}
`
})
.join('\n')
+
+ console.log('formatExamQuestions output length:', output.length)
+ console.log('formatExamQuestions output preview:', output.slice(0, 400))
+ return output
}
diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts
index 1b82e85..7606c27 100644
--- a/src/locales/zh-CN.ts
+++ b/src/locales/zh-CN.ts
@@ -114,7 +114,7 @@ export default {
small: '小'
},
login: {
- welcome: '湖北省技能高考万维考试平台',
+ welcome: '信息技术课程考试平台',
message: '',
tenantname: '租户名称',
username: '用户名',
@@ -142,9 +142,9 @@ export default {
qrcode: '扫描二维码登录',
btnRegister: '注册',
SmsSendMsg: '验证码已发送',
- resetPassword: "重置密码",
- resetPasswordSuccess: "重置密码成功",
- invalidTenantName: "无效的租户名称"
+ resetPassword: '重置密码',
+ resetPasswordSuccess: '重置密码成功',
+ invalidTenantName: '无效的租户名称'
},
captcha: {
verification: '请完成安全验证',
diff --git a/src/store/modules/settings.ts b/src/store/modules/settings.ts
new file mode 100644
index 0000000..55eff7c
--- /dev/null
+++ b/src/store/modules/settings.ts
@@ -0,0 +1,15 @@
+import { defineStore } from 'pinia'
+import { ref } from 'vue'
+
+export const useSettingStore = defineStore('settings', () => {
+ const settingsFormList = ref([])
+ // 清除所有 settings 相关数据
+ const clearSettingData = () => {
+ settingsFormList.value = []
+ }
+
+ return {
+ settingsFormList,
+ clearSettingData
+ }
+})
diff --git a/src/utils/keyboardDisabler.ts b/src/utils/keyboardDisabler.ts
index 05834e3..f55a499 100644
--- a/src/utils/keyboardDisabler.ts
+++ b/src/utils/keyboardDisabler.ts
@@ -4,7 +4,7 @@
*/
// 手动控制是否启用安全模式和键盘禁用功能的开关
-export const ENABLE_SECURITY_MODE = false //true生产模式,false调试模式
+export let ENABLE_SECURITY_MODE = false // true 生产模式,false 调试模式。可运行时修改
interface SecurityConfig {
enableSecurityMode: boolean
@@ -20,6 +20,7 @@ export class KeyboardDisabler {
private static instance: KeyboardDisabler
private isEnabled = false
private eventListeners: ((e: KeyboardEvent) => void)[] = []
+ private clipboardIntervalId: number | null = null
private config: SecurityConfig
private constructor() {
@@ -35,6 +36,81 @@ export class KeyboardDisabler {
}
}
+ /**
+ * 运行时更新配置并根据需要启用/禁用安全功能
+ */
+ updateConfig(partial: Partial) {
+ this.config = {
+ ...this.config,
+ ...partial
+ }
+ // 同步外部常量
+ ENABLE_SECURITY_MODE = !!this.config.enableSecurityMode
+ if (this.config.enableSecurityMode) {
+ this.enable()
+ } else {
+ this.disable()
+ }
+ }
+
+ /**
+ * 专门用于开启或关闭截屏键的拦截
+ */
+ setDisableScreenshot(flag: boolean) {
+ this.config.disableDevtools = this.config.disableDevtools || flag
+ // expose as a dedicated flag on config for clarity
+ ;(this.config as any).disableScreenshot = flag
+ }
+
+ /**
+ * 启动剪贴板监控(轮询 Clipboard API),检测图片类型并尝试清理
+ * 这是对 PrintScreen 事件的补强:很多平台的 PrtSc 不会触发键盘事件,
+ * 但会把图片放入系统剪贴板,前端可以尝试检测并清空剪贴板。
+ */
+ startClipboardMonitor(pollMs = 800) {
+ if (this.clipboardIntervalId) return
+ if (!(navigator && (navigator as any).clipboard && (navigator as any).clipboard.read)) {
+ this.log('剪贴板读取 API 不可用,无法启用剪贴板监控')
+ return
+ }
+
+ this.clipboardIntervalId = window.setInterval(async () => {
+ try {
+ const items = await (navigator as any).clipboard.read()
+ if (!items || items.length === 0) return
+ for (const item of items) {
+ const types: string[] = item.types || []
+ const hasImage = types.some((t) => t.startsWith('image/'))
+ if (hasImage) {
+ this.log('检测到剪贴板图片,尝试清空剪贴板以阻止截屏流出')
+ try {
+ await (navigator as any).clipboard.writeText('')
+ } catch (err) {
+ // 如果写入文本失败,再尝试写一个空 PNG (不保证成功)
+ try {
+ await (navigator as any).clipboard.write([{ type: 'text/plain', data: '' }])
+ } catch (e) {
+ this.log('清空剪贴板失败:' + e)
+ }
+ }
+ break
+ }
+ }
+ } catch (err) {
+ // 读取剪贴板可能被浏览器权限限制,静默处理
+ }
+ }, pollMs)
+ this.log('已启用剪贴板监控')
+ }
+
+ stopClipboardMonitor() {
+ if (this.clipboardIntervalId) {
+ clearInterval(this.clipboardIntervalId)
+ this.clipboardIntervalId = null
+ this.log('已停止剪贴板监控')
+ }
+ }
+
static getInstance(): KeyboardDisabler {
if (!KeyboardDisabler.instance) {
KeyboardDisabler.instance = new KeyboardDisabler()
@@ -111,6 +187,20 @@ export class KeyboardDisabler {
return false
}
+ // 禁用截屏按键(如果配置要求)
+ const disableScreenshot = !!(this.config as any).disableScreenshot
+ if (disableScreenshot) {
+ // 常见截屏按键:PrintScreen (key could be 'PrintScreen'), 以及 Win+Shift+S (在某些系统上为 Meta+Shift+S)
+ if (e.key === 'PrintScreen' || e.keyCode === 44) {
+ this.blockEvent(e, 'PrintScreen 截屏')
+ return false
+ }
+ if ((e.metaKey || e.key === 'Meta') && e.shiftKey && e.key.toLowerCase() === 's') {
+ this.blockEvent(e, 'Win+Shift+S / Meta+Shift+S 截屏')
+ return false
+ }
+ }
+
if (this.config.disableDevtools) {
// 禁用F12开发者工具
if (e.key === 'F12') {
diff --git a/src/utils/windowManager.ts b/src/utils/windowManager.ts
index 442d76c..8343889 100644
--- a/src/utils/windowManager.ts
+++ b/src/utils/windowManager.ts
@@ -23,17 +23,24 @@ export class WindowManager {
* 在开发模式或调试模式下确保窗口不置顶
*/
static async ensureNotOnTopInDev(): Promise {
- const isDebugMode = !ENABLE_SECURITY_MODE
-
- if (isDebugMode) {
- try {
- const currentWindow = getCurrentWindow()
- await currentWindow.setAlwaysOnTop(false)
- console.log('开发/调试模式:已禁用窗口置顶')
- } catch (error) {
- console.warn('禁用窗口置顶失败:', error)
- }
+ try {
+ const currentWindow = getCurrentWindow()
+ await currentWindow.setAlwaysOnTop(false)
+ console.log('开发/调试模式:已禁用窗口置顶')
+ } catch (error) {
+ console.warn('禁用窗口置顶失败:', error)
}
+ // const isDebugMode = !ENABLE_SECURITY_MODE
+
+ // if (isDebugMode) {
+ // try {
+ // const currentWindow = getCurrentWindow()
+ // await currentWindow.setAlwaysOnTop(false)
+ // console.log('开发/调试模式:已禁用窗口置顶')
+ // } catch (error) {
+ // console.warn('禁用窗口置顶失败:', error)
+ // }
+ // }
}
}
diff --git a/src/views/Login/Login.vue b/src/views/Login/Login.vue
index 86a1631..81e004f 100644
--- a/src/views/Login/Login.vue
+++ b/src/views/Login/Login.vue
@@ -1,16 +1,16 @@
-
+
-
diff --git a/src/views/WindowsSystemSetting/components/ClipboardDetail.vue b/src/views/WindowsSystemSetting/components/ClipboardDetail.vue
index 84096be..848319b 100644
--- a/src/views/WindowsSystemSetting/components/ClipboardDetail.vue
+++ b/src/views/WindowsSystemSetting/components/ClipboardDetail.vue
@@ -59,26 +59,35 @@
diff --git a/src/views/WindowsSystemSetting/components/CortanaDetail.vue b/src/views/WindowsSystemSetting/components/CortanaDetail.vue
index 2fa0190..57f8e0b 100644
--- a/src/views/WindowsSystemSetting/components/CortanaDetail.vue
+++ b/src/views/WindowsSystemSetting/components/CortanaDetail.vue
@@ -58,6 +58,8 @@
diff --git a/src/views/WindowsSystemSetting/components/DevicesDetail.vue b/src/views/WindowsSystemSetting/components/DevicesDetail.vue
index 4a935df..ef9c2b1 100644
--- a/src/views/WindowsSystemSetting/components/DevicesDetail.vue
+++ b/src/views/WindowsSystemSetting/components/DevicesDetail.vue
@@ -111,6 +111,7 @@
diff --git a/src/views/WindowsSystemSetting/components/DisplayDetail.vue b/src/views/WindowsSystemSetting/components/DisplayDetail.vue
index 0b52489..8299841 100644
--- a/src/views/WindowsSystemSetting/components/DisplayDetail.vue
+++ b/src/views/WindowsSystemSetting/components/DisplayDetail.vue
@@ -154,7 +154,8 @@
diff --git a/src/views/examPaper/infoEnter/index.vue b/src/views/examPaper/infoEnter/index.vue
index 1b2bdbc..1997bea 100644
--- a/src/views/examPaper/infoEnter/index.vue
+++ b/src/views/examPaper/infoEnter/index.vue
@@ -85,6 +85,9 @@ import { AppControlCheckApi } from '@/api/appControl/index'
import { formatAppCheckResult, isAllTrue } from './index'
import { service } from '@/config/axios/service'
import { generateTemporaryId, setTemporaryId, removeTemporaryId } from '@/utils/temporaryId'
+import { AppAllApi, AppCloseWhitelistApi } from '@/api/appControl'
+import { formatProcessList } from '@/views/dialog/index'
+import { openDialog } from '../index'
const userStore = useUserStore()
const examStore = useExamStore()
// import { toExamWindow } from '@/utils/new-window';
@@ -114,70 +117,39 @@ const inputCode = ref('')
const goExam = async () => {
const localhostIp = localStorage.getItem('serverIP') || ''
const httpMode = localStorage.getItem('httpMode') || ''
- if (examStore.buttonEnable.isExamPassword === '1') {
- //不需要密码
- AppControlCheckApi(localhostIp).then(({ data: { data } }) => {
- // 格式化返回结果
- if (data.length === 0) {
- push('/examPaper')
- return
- }
- console.log('环境检测结果:', data)
- const res = formatAppCheckResult(data)
- if (res === 'allPass') {
- push('/examPaper')
- return
- }
- ElMessageBox.confirm(`${res}`, '环境检测', {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- dangerouslyUseHTMLString: true,
- cancelButtonClass: 'el-button--danger',
- confirmButtonClass: 'el-button--success',
- closeOnClickModal: false
- }).then(() => {
- // if (!isAllTrue(data)) {
- // ElMessage.error('环境检测不通过,请检查后重试')
- // return
- // }
- push('/examPaper')
- })
+ const whitelist = await AppCloseWhitelistApi()
+ AppAllApi().then(({ data: { data } }) => {
+ // 将data过滤掉checkCloseWhitelist中的值
+ const newData = JSON.parse(data)
+
+ console.log('获取到的应用列表:', newData)
+ console.log('白名单列表:', whitelist)
+
+ const filteredData = newData.filter((item) => {
+ // 获取项的可匹配文本(优先 message、name,其次整个项的字符串化)
+ const text = (
+ typeof item === 'string'
+ ? item
+ : item && (item.message || item.name)
+ ? item.message || item.name
+ : JSON.stringify(item) || ''
+ ).toLowerCase()
+
+ // 只匹配开头(不区分大小写),若 whitelist 中任一项是 text 的前缀则过滤掉
+ return !whitelist.some((whiteItem) => text.startsWith(String(whiteItem || '').toLowerCase()))
})
- return
- }
- ElMessageBox({
- title: '提示',
- message: () =>
- h(
- 'div',
- {
- style: {
- display: 'flex',
- flexDirection: 'column',
- alignItems: 'center',
- justifyContent: 'center'
- }
- },
- [
- h('p', { style: 'margin-bottom:30px; text-align:center;' }, '请输入密码,开始考试'),
- h(ElInput, {
- style: 'width: 396px; text-align: center;',
- modelValue: inputCode.value,
- 'onUpdate:modelValue': (val) => (inputCode.value = val)
- })
- ]
- ),
- showCancelButton: true,
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- cancelButtonClass: 'el-button--danger',
- confirmButtonClass: 'el-button--success',
- closeOnClickModal: false,
- beforeClose: (action, instance, done) => {
- if (action === 'confirm' && inputCode.value === examStore.buttonEnable.examPassword) {
- // 密码正确
- done()
- AppControlCheckApi(localhostIp).then(({ data: { data } }) => {
+ console.log('过滤后的应用列表:', filteredData)
+
+ let { process, number } = formatProcessList(filteredData)
+ localStorage.setItem('process', process)
+ localStorage.setItem('processNumber', number)
+ if (process !== '') {
+ openDialog() // 打开对话框
+ } else {
+ // 在这里执行确定按钮的逻辑
+ if (examStore.buttonEnable.isExamPassword === '1') {
+ //不需要密码
+ AppControlCheckApi(localhostIp, examStore.setExamId).then(({ data: { data } }) => {
// 格式化返回结果
if (data.length === 0) {
push('/examPaper')
@@ -204,13 +176,77 @@ const goExam = async () => {
push('/examPaper')
})
})
- } else if (action === 'confirm') {
- ElMessage.error('密码错误,请重新输入!')
- } else {
- done() // 取消操作
+ return
}
+ ElMessageBox({
+ title: '提示',
+ message: () =>
+ h(
+ 'div',
+ {
+ style: {
+ display: 'flex',
+ flexDirection: 'column',
+ alignItems: 'center',
+ justifyContent: 'center'
+ }
+ },
+ [
+ h('p', { style: 'margin-bottom:30px; text-align:center;' }, '请输入密码,开始考试'),
+ h(ElInput, {
+ style: 'width: 396px; text-align: center;',
+ modelValue: inputCode.value,
+ 'onUpdate:modelValue': (val) => (inputCode.value = val)
+ })
+ ]
+ ),
+ showCancelButton: true,
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ cancelButtonClass: 'el-button--danger',
+ confirmButtonClass: 'el-button--success',
+ closeOnClickModal: false,
+ beforeClose: (action, instance, done) => {
+ if (action === 'confirm' && inputCode.value === examStore.buttonEnable.examPassword) {
+ // 密码正确
+ done()
+ AppControlCheckApi(localhostIp, examStore.setExamId).then(({ data: { data } }) => {
+ // 格式化返回结果
+ if (data.length === 0) {
+ push('/examPaper')
+ return
+ }
+ console.log('环境检测结果:', data)
+ const res = formatAppCheckResult(data)
+ if (res === 'allPass') {
+ push('/examPaper')
+ return
+ }
+ ElMessageBox.confirm(`${res}`, '环境检测', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ dangerouslyUseHTMLString: true,
+ cancelButtonClass: 'el-button--danger',
+ confirmButtonClass: 'el-button--success',
+ closeOnClickModal: false
+ }).then(() => {
+ // if (!isAllTrue(data)) {
+ // ElMessage.error('环境检测不通过,请检查后重试')
+ // return
+ // }
+ push('/examPaper')
+ })
+ })
+ } else if (action === 'confirm') {
+ ElMessage.error('密码错误,请重新输入!')
+ } else {
+ done() // 取消操作
+ }
+ }
+ })
}
})
+
// AppControlCheckApi(localhostIp, examStore.setExamId).then(({ data: { data } }) => {
// // 格式化返回结果
// if (data.length === 0) {
diff --git a/src/views/examPaper/paperInfo/index.ts b/src/views/examPaper/paperInfo/index.ts
index 7829237..e127823 100644
--- a/src/views/examPaper/paperInfo/index.ts
+++ b/src/views/examPaper/paperInfo/index.ts
@@ -4,11 +4,23 @@
* @returns {string}
*/
export function formatWarnInfo(raw) {
- // console.log('formatWarnInfo', raw)
+ console.log('formatWarnInfo raw type:', typeof raw)
+ console.log('formatWarnInfo raw preview:', String(raw).slice(0, 200))
if (!raw) return '暂无数据'
// 题目分割
- const questionBlocks = raw.split(/题目\s*\d+\s*:/g).filter(Boolean)
+ const questionBlocks = String(raw)
+ .split(/题目\s*\d+\s*:/g)
+ .filter(Boolean)
+ console.log('formatWarnInfo questionBlocks length:', questionBlocks.length)
+
+ if (questionBlocks.length === 0) {
+ // 解析后没有分块,返回原始内容以便调试和展示
+ const escapeHtml = (str) =>
+ String(str).replace(/&/g, '&').replace(//g, '>')
+ return `${escapeHtml(raw)}`
+ }
+
return questionBlocks
.map((block, idx) => {
// 题号
@@ -30,7 +42,7 @@ export function formatWarnInfo(raw) {
options = optionsPart
.split(/([A-Z]\.)/)
.filter(Boolean)
- .reduce((arr, cur, i, src) => {
+ .reduce((arr: any, cur, i, src) => {
if (/^[A-Z]\.$/.test(cur) && src[i + 1]) {
arr.push(`${cur} ${src[i + 1].trim()}`)
}
diff --git a/src/views/examPaper/paperInfo/index.vue b/src/views/examPaper/paperInfo/index.vue
index 7981b02..a009079 100644
--- a/src/views/examPaper/paperInfo/index.vue
+++ b/src/views/examPaper/paperInfo/index.vue
@@ -31,6 +31,9 @@ import { generateTemporaryId, setTemporaryId, removeTemporaryId } from '@/utils/
// import { toExamWindow } from '@/utils/new-window';
import { AppControlCheckApi } from '@/api/appControl/index'
import { formatAppCheckResult, isAllTrue } from '../infoEnter/index'
+import { formatProcessList } from '@/views/dialog/index'
+import { openDialog } from '../index'
+import { AppAllApi, AppCloseWhitelistApi } from '@/api/appControl'
const { push } = useRouter()
const examStore = useExamStore()
@@ -65,70 +68,39 @@ const inputCode = ref('')
const goExam = async () => {
const localhostIp = localStorage.getItem('serverIP') || ''
const httpMode = localStorage.getItem('httpMode') || ''
- if (examStore.buttonEnable.isExamPassword === '1') {
- //不需要密码
- AppControlCheckApi(localhostIp).then(({ data: { data } }) => {
- // 格式化返回结果
- if (data.length === 0) {
- push('/examPaper')
- return
- }
- console.log('环境检测结果:', data)
- const res = formatAppCheckResult(data)
- if (res === 'allPass') {
- push('/examPaper')
- return
- }
- ElMessageBox.confirm(`${res}`, '环境检测', {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- dangerouslyUseHTMLString: true,
- cancelButtonClass: 'el-button--danger',
- confirmButtonClass: 'el-button--success',
- closeOnClickModal: false
- }).then(() => {
- // if (!isAllTrue(data)) {
- // ElMessage.error('环境检测不通过,请检查后重试')
- // return
- // }
- push('/examPaper')
- })
+ const whitelist = await AppCloseWhitelistApi()
+ AppAllApi().then(({ data: { data } }) => {
+ // 将data过滤掉checkCloseWhitelist中的值
+ const newData = JSON.parse(data)
+
+ console.log('获取到的应用列表:', newData)
+ console.log('白名单列表:', whitelist)
+
+ const filteredData = newData.filter((item) => {
+ // 获取项的可匹配文本(优先 message、name,其次整个项的字符串化)
+ const text = (
+ typeof item === 'string'
+ ? item
+ : item && (item.message || item.name)
+ ? item.message || item.name
+ : JSON.stringify(item) || ''
+ ).toLowerCase()
+
+ // 只匹配开头(不区分大小写),若 whitelist 中任一项是 text 的前缀则过滤掉
+ return !whitelist.some((whiteItem) => text.startsWith(String(whiteItem || '').toLowerCase()))
})
- return
- }
- ElMessageBox({
- title: '提示',
- message: () =>
- h(
- 'div',
- {
- style: {
- display: 'flex',
- flexDirection: 'column',
- alignItems: 'center',
- justifyContent: 'center'
- }
- },
- [
- h('p', { style: 'margin-bottom:30px; text-align:center;' }, '请输入密码,开始考试'),
- h(ElInput, {
- style: 'width: 396px; text-align: center;',
- modelValue: inputCode.value,
- 'onUpdate:modelValue': (val) => (inputCode.value = val)
- })
- ]
- ),
- showCancelButton: true,
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- cancelButtonClass: 'el-button--danger',
- confirmButtonClass: 'el-button--success',
- closeOnClickModal: false,
- beforeClose: (action, instance, done) => {
- if (action === 'confirm' && inputCode.value === examStore.buttonEnable.examPassword) {
- // 密码正确
- done()
- AppControlCheckApi(localhostIp).then(({ data: { data } }) => {
+ console.log('过滤后的应用列表:', filteredData)
+
+ let { process, number } = formatProcessList(filteredData)
+ localStorage.setItem('process', process)
+ localStorage.setItem('processNumber', number)
+ if (process !== '') {
+ openDialog() // 打开对话框
+ } else {
+ // 在这里执行确定按钮的逻辑
+ if (examStore.buttonEnable.isExamPassword === '1') {
+ //不需要密码
+ AppControlCheckApi(localhostIp, examStore.setExamId).then(({ data: { data } }) => {
// 格式化返回结果
if (data.length === 0) {
push('/examPaper')
@@ -155,13 +127,77 @@ const goExam = async () => {
push('/examPaper')
})
})
- } else if (action === 'confirm') {
- ElMessage.error('密码错误,请重新输入!')
- } else {
- done() // 取消操作
+ return
}
+ ElMessageBox({
+ title: '提示',
+ message: () =>
+ h(
+ 'div',
+ {
+ style: {
+ display: 'flex',
+ flexDirection: 'column',
+ alignItems: 'center',
+ justifyContent: 'center'
+ }
+ },
+ [
+ h('p', { style: 'margin-bottom:30px; text-align:center;' }, '请输入密码,开始考试'),
+ h(ElInput, {
+ style: 'width: 396px; text-align: center;',
+ modelValue: inputCode.value,
+ 'onUpdate:modelValue': (val) => (inputCode.value = val)
+ })
+ ]
+ ),
+ showCancelButton: true,
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ cancelButtonClass: 'el-button--danger',
+ confirmButtonClass: 'el-button--success',
+ closeOnClickModal: false,
+ beforeClose: (action, instance, done) => {
+ if (action === 'confirm' && inputCode.value === examStore.buttonEnable.examPassword) {
+ // 密码正确
+ done()
+ AppControlCheckApi(localhostIp, examStore.setExamId).then(({ data: { data } }) => {
+ // 格式化返回结果
+ if (data.length === 0) {
+ push('/examPaper')
+ return
+ }
+ console.log('环境检测结果:', data)
+ const res = formatAppCheckResult(data)
+ if (res === 'allPass') {
+ push('/examPaper')
+ return
+ }
+ ElMessageBox.confirm(`${res}`, '环境检测', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ dangerouslyUseHTMLString: true,
+ cancelButtonClass: 'el-button--danger',
+ confirmButtonClass: 'el-button--success',
+ closeOnClickModal: false
+ }).then(() => {
+ // if (!isAllTrue(data)) {
+ // ElMessage.error('环境检测不通过,请检查后重试')
+ // return
+ // }
+ push('/examPaper')
+ })
+ })
+ } else if (action === 'confirm') {
+ ElMessage.error('密码错误,请重新输入!')
+ } else {
+ done() // 取消操作
+ }
+ }
+ })
}
})
+
// AppControlCheckApi(localhostIp, examStore.setExamId).then(({ data: { data } }) => {
// // 格式化返回结果
// if (data.length === 0) {
diff --git a/src/views/examPaper/scoreDetails/index.vue b/src/views/examPaper/scoreDetails/index.vue
index a749db3..d8b692c 100644
--- a/src/views/examPaper/scoreDetails/index.vue
+++ b/src/views/examPaper/scoreDetails/index.vue
@@ -23,7 +23,11 @@
ref="tableRef"
:data="datasource"
border
- style="overflow-y: auto; width: 1240px; height: calc(100vh - 140px - 50px - 208px)"
+ :style="{
+ overflowY: 'auto',
+ width: '1240px',
+ height: 'calc(100vh - 140px - 50px - 208px)'
+ }"
:highlight-current-row="true"
height="calc(100vh - 140px - 50px - 208px)"
>
@@ -60,7 +64,7 @@
-
+
@@ -74,7 +78,7 @@