|
@@ -101,11 +101,14 @@ import {
|
|
|
saveOutputImage,
|
|
|
clearDir,
|
|
|
decodeImageCode,
|
|
|
+ getDirScanFile,
|
|
|
+ deleteFiles,
|
|
|
} from "../../../plugins/imageOcr";
|
|
|
import db from "../../../plugins/db";
|
|
|
import { evokeScanner } from "../../../plugins/scanner";
|
|
|
import SimpleImagePreview from "@/components/SimpleImagePreview.vue";
|
|
|
import HandleInputDialog from "./HandleInputDialog.vue";
|
|
|
+import timeMixins from "@/mixins/setTimeMixins";
|
|
|
import log4js from "@/plugins/logger";
|
|
|
const logger = log4js.getLogger("scan");
|
|
|
|
|
@@ -115,6 +118,7 @@ export default {
|
|
|
SimpleImagePreview,
|
|
|
HandleInputDialog,
|
|
|
},
|
|
|
+ mixins: [timeMixins],
|
|
|
props: {
|
|
|
task: {
|
|
|
type: Object,
|
|
@@ -139,6 +143,8 @@ export default {
|
|
|
saving: false,
|
|
|
maxCacheCount: 120,
|
|
|
lastStudentCode: "",
|
|
|
+ // 非等待模式:delayMode:0
|
|
|
+ looping: false,
|
|
|
};
|
|
|
},
|
|
|
computed: {
|
|
@@ -152,6 +158,12 @@ export default {
|
|
|
hasSelectedData() {
|
|
|
return this.scanStageList.some((item) => item.selected);
|
|
|
},
|
|
|
+ IS_DELAY_MODE() {
|
|
|
+ return this.GLOBAL.delayMode === 1;
|
|
|
+ },
|
|
|
+ },
|
|
|
+ beforeDestroy() {
|
|
|
+ this.stopLoopScaningFile();
|
|
|
},
|
|
|
methods: {
|
|
|
initData() {
|
|
@@ -200,12 +212,15 @@ export default {
|
|
|
startTask() {
|
|
|
logger.info(`01开始扫描`);
|
|
|
this.scanStageList = [];
|
|
|
- this.scanStatus = "SCAN";
|
|
|
- this.evokeScanExe();
|
|
|
+ this.continueTask();
|
|
|
},
|
|
|
continueTask() {
|
|
|
this.scanStatus = "SCAN";
|
|
|
- this.evokeScanExe();
|
|
|
+ if (this.IS_DELAY_MODE) {
|
|
|
+ this.evokeScanExe();
|
|
|
+ } else {
|
|
|
+ this.evokeScanExeNotDelay();
|
|
|
+ }
|
|
|
},
|
|
|
async evokeScanExe() {
|
|
|
logger.info("02唤起扫描仪");
|
|
@@ -232,7 +247,47 @@ export default {
|
|
|
this.$refs.HandleInputDialog.open();
|
|
|
}
|
|
|
},
|
|
|
- async stageScanImage(imageList) {
|
|
|
+ async evokeScanExeNotDelay() {
|
|
|
+ logger.info("02唤起扫描仪");
|
|
|
+ this.looping = true;
|
|
|
+ this.loopScaningFile();
|
|
|
+
|
|
|
+ await evokeScanner(this.GLOBAL.input).catch((error) => {
|
|
|
+ console.error(error);
|
|
|
+ });
|
|
|
+ this.stopLoopScaningFile();
|
|
|
+ await this.getScaningFile();
|
|
|
+
|
|
|
+ const scanCount = this.scanStageList.filter(
|
|
|
+ (item) => item.isStage
|
|
|
+ ).length;
|
|
|
+ this.updateScanImageStage();
|
|
|
+
|
|
|
+ // 已扫描的数据
|
|
|
+ const res = getPreUploadFiles(this.GLOBAL.input);
|
|
|
+ if (!res.succeed) {
|
|
|
+ logger.error(
|
|
|
+ `03扫描仪停止,扫描数:${scanCount},故障:${res.errorMsg}`
|
|
|
+ );
|
|
|
+ this.$message.error(res.errorMsg);
|
|
|
+ this.scanStatus = "FINISH";
|
|
|
+ renamePreUploadJsonFile(this.GLOBAL.input);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ logger.info(`03扫描仪停止,扫描数:${scanCount}`);
|
|
|
+ this.scanStatus = "FINISH";
|
|
|
+ renamePreUploadJsonFile(this.GLOBAL.input);
|
|
|
+
|
|
|
+ if (this.task.isFormal && !this.scanStageList[0].studentCode) {
|
|
|
+ this.$refs.HandleInputDialog.open();
|
|
|
+ }
|
|
|
+ },
|
|
|
+ updateScanImageStage() {
|
|
|
+ this.scanStageList.forEach((item) => {
|
|
|
+ item.isStage = true;
|
|
|
+ });
|
|
|
+ },
|
|
|
+ async stageScanImage(imageList, isStage = false) {
|
|
|
const ocrAreaContent = JSON.stringify(this.ocrArea);
|
|
|
for (let i = 0, len = imageList.length; i < len; i++) {
|
|
|
const fileInfo = {
|
|
@@ -244,6 +299,7 @@ export default {
|
|
|
courseName: this.task.courseName,
|
|
|
frontOriginImgPath: imageList[i].frontFile,
|
|
|
versoOriginImgPath: imageList[i].versoFile,
|
|
|
+ basename: imageList[i].basename,
|
|
|
isFormal: this.task.isFormal ? 1 : 0,
|
|
|
studentCode: "",
|
|
|
ocrArea: "",
|
|
@@ -251,6 +307,7 @@ export default {
|
|
|
clientUsername: this.user.loginName,
|
|
|
clientUserLoginTime: this.user.loginTime,
|
|
|
selected: false,
|
|
|
+ isStage,
|
|
|
};
|
|
|
|
|
|
if (this.task.isFormal) {
|
|
@@ -295,6 +352,12 @@ export default {
|
|
|
}).catch(() => {});
|
|
|
if (res !== "confirm") return;
|
|
|
|
|
|
+ const selectedFiles = this.scanStageList
|
|
|
+ .filter((item) => item.selected)
|
|
|
+ .map((item) => [item.frontOriginImgPath, item.versoOriginImgPath])
|
|
|
+ .flat();
|
|
|
+ deleteFiles(selectedFiles);
|
|
|
+
|
|
|
this.scanStageList = this.scanStageList.filter((item) => !item.selected);
|
|
|
|
|
|
const lastStageItem = this.scanStageList.slice(-1)[0];
|
|
@@ -311,6 +374,19 @@ export default {
|
|
|
logger.info(`99数据清空`);
|
|
|
this.$message.success("数据已清空!");
|
|
|
},
|
|
|
+ async saveScanItem(fileInfo) {
|
|
|
+ const ouputImageList = saveOutputImage(
|
|
|
+ [fileInfo.frontOriginImgPath, fileInfo.versoOriginImgPath],
|
|
|
+ {
|
|
|
+ courseCode: this.task.courseCode,
|
|
|
+ }
|
|
|
+ );
|
|
|
+
|
|
|
+ fileInfo.frontOriginImgPath = ouputImageList[0];
|
|
|
+ fileInfo.versoOriginImgPath = ouputImageList[1];
|
|
|
+
|
|
|
+ await db.saveUploadInfo(fileInfo);
|
|
|
+ },
|
|
|
async toSave() {
|
|
|
if (!this.scanStageList.length) {
|
|
|
this.$message.error("当前无要保存的数据!");
|
|
@@ -331,18 +407,9 @@ export default {
|
|
|
logger.info(`04-1开始保存数据`);
|
|
|
for (let i = 0, len = this.scanStageList.length; i < len; i++) {
|
|
|
const fileInfo = this.scanStageList[i];
|
|
|
- const ouputImageList = saveOutputImage(
|
|
|
- [fileInfo.frontOriginImgPath, fileInfo.versoOriginImgPath],
|
|
|
- {
|
|
|
- courseCode: this.task.courseCode,
|
|
|
- }
|
|
|
- );
|
|
|
-
|
|
|
- fileInfo.frontOriginImgPath = ouputImageList[0];
|
|
|
- fileInfo.versoOriginImgPath = ouputImageList[1];
|
|
|
|
|
|
let res = true;
|
|
|
- await db.saveUploadInfo(fileInfo).catch((err) => {
|
|
|
+ await this.saveScanItem(fileInfo).catch((err) => {
|
|
|
res = false;
|
|
|
console.error(err);
|
|
|
logger.error(`04-1保存数据错误,${err}`);
|
|
@@ -382,6 +449,24 @@ export default {
|
|
|
});
|
|
|
});
|
|
|
},
|
|
|
+ // delay mode
|
|
|
+ // 实时获取扫描图片
|
|
|
+ async loopScaningFile() {
|
|
|
+ this.clearSetTs();
|
|
|
+ if (!this.looping) return;
|
|
|
+ await this.getScaningFile();
|
|
|
+
|
|
|
+ this.addSetTime(this.loopScaningFile, 2 * 1000);
|
|
|
+ },
|
|
|
+ stopLoopScaningFile() {
|
|
|
+ this.clearSetTs();
|
|
|
+ this.looping = false;
|
|
|
+ },
|
|
|
+ async getScaningFile() {
|
|
|
+ const cacheFilenams = this.scanStageList.map((item) => item.basename);
|
|
|
+ const newScanFiles = getDirScanFile(this.GLOBAL.input, cacheFilenams);
|
|
|
+ await this.stageScanImage(newScanFiles, true);
|
|
|
+ },
|
|
|
// image-preview
|
|
|
toViewPaper(imgItem) {
|
|
|
this.setCurPaper(imgItem);
|