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 @@