|
@@ -103,6 +103,11 @@
|
|
|
@on-next="toNextPaper"
|
|
|
ref="SimpleImagePreview"
|
|
|
></simple-image-preview>
|
|
|
+ <!-- ScanCoverWarningDialog -->
|
|
|
+ <scan-cover-warning-dialog
|
|
|
+ ref="ScanCoverWarningDialog"
|
|
|
+ @confirm="coverWarningConfirm"
|
|
|
+ ></scan-cover-warning-dialog>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
@@ -111,11 +116,13 @@ import { getStudentGroupByExamNumber } from "../api";
|
|
|
import {
|
|
|
decodeImageCode,
|
|
|
getEarliestFile,
|
|
|
- saveOutputImage
|
|
|
+ saveOutputImage,
|
|
|
+ checkEmptyCoverFilled
|
|
|
} from "../../../plugins/imageOcr";
|
|
|
import { deepCopy } from "../../../plugins/utils";
|
|
|
import ScanAreaDialog from "../components/ScanAreaDialog";
|
|
|
import ScanExceptionDialog from "../components/ScanExceptionDialog";
|
|
|
+import ScanCoverWarningDialog from "../components/ScanCoverWarningDialog.vue";
|
|
|
import SimpleImagePreview from "@/components/SimpleImagePreview.vue";
|
|
|
import { mapState, mapActions } from "vuex";
|
|
|
import log4js from "@/plugins/logger";
|
|
@@ -126,7 +133,12 @@ const { ipcRenderer } = require("electron");
|
|
|
|
|
|
export default {
|
|
|
name: "group-scan",
|
|
|
- components: { ScanAreaDialog, ScanExceptionDialog, SimpleImagePreview },
|
|
|
+ components: {
|
|
|
+ ScanAreaDialog,
|
|
|
+ ScanExceptionDialog,
|
|
|
+ SimpleImagePreview,
|
|
|
+ ScanCoverWarningDialog
|
|
|
+ },
|
|
|
data() {
|
|
|
return {
|
|
|
isWaiting: true,
|
|
@@ -304,11 +316,7 @@ export default {
|
|
|
},
|
|
|
async examNumberValid(examNumber, type = "AUTO") {
|
|
|
const validRes = await this.checkStudentValid(examNumber);
|
|
|
- if (validRes.valid) {
|
|
|
- // 保存扫描到的试卷
|
|
|
- logger.info(`03考号校验合法:[${type}] ${examNumber}`);
|
|
|
- this.toSaveStudent(examNumber, type);
|
|
|
- } else {
|
|
|
+ if (!validRes.valid) {
|
|
|
logger.error(`03考号校验不合法:[${type}] ${validRes.message}`);
|
|
|
if (!this.canScan) return;
|
|
|
// 考号不合法异常
|
|
@@ -318,7 +326,17 @@ export default {
|
|
|
collectConfig: this.getCurCollectConfig()
|
|
|
};
|
|
|
this.$refs.ScanExceptionDialog.open();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 检查是否存在空白卷覆盖有作答卷
|
|
|
+ const covered = await this.checkUnaswerCoverAnswer(examNumber);
|
|
|
+ if (covered) {
|
|
|
+ return;
|
|
|
}
|
|
|
+
|
|
|
+ // 保存扫描到的试卷
|
|
|
+ logger.info(`03考号校验合法:[${type}] ${examNumber}`);
|
|
|
+ this.toSaveStudent(examNumber, type);
|
|
|
},
|
|
|
async checkStudentValid(examNumber) {
|
|
|
let validInfo = { valid: true, message: "" };
|
|
@@ -362,6 +380,27 @@ export default {
|
|
|
}
|
|
|
return validInfo;
|
|
|
},
|
|
|
+ async checkUnaswerCoverAnswer(examNumber) {
|
|
|
+ const historyStudent = this.historyList.find(
|
|
|
+ item => item.examNumber === examNumber
|
|
|
+ );
|
|
|
+ if (!historyStudent) return false;
|
|
|
+
|
|
|
+ const covered = await checkEmptyCoverFilled(
|
|
|
+ historyStudent.originImgPath,
|
|
|
+ this.curImage.url,
|
|
|
+ this.curSubject.collectConfig.answerCheckArea
|
|
|
+ );
|
|
|
+ return covered;
|
|
|
+ },
|
|
|
+ coverWarningConfirm() {
|
|
|
+ logger.info(`05采集结束:重复扫描空白卷 - ${this.curImage.name}`);
|
|
|
+
|
|
|
+ // 删除扫描文件,继续开始下一个任务
|
|
|
+ fs.unlinkSync(this.curImage.url);
|
|
|
+ this.scrollTaskList();
|
|
|
+ this.restartInitFile();
|
|
|
+ },
|
|
|
async toSaveStudent(examNumber, type) {
|
|
|
const compressRate = this.GLOBAL.compressRate;
|
|
|
const result = await saveOutputImage(
|