Browse Source

图片在处理修改

zhangjie 2 years ago
parent
commit
9d111c038d

BIN
extra/database/org.rdb


+ 1 - 0
package.json

@@ -9,6 +9,7 @@
     "serve": "vue-cli-service serve",
     "build": "vue-cli-service build",
     "lint": "vue-cli-service lint",
+    "win:build": "vue-cli-service electron:build",
     "e:build": "vue-cli-service electron:build --win --x64 --ia32",
     "e:serve": "vue-cli-service electron:serve",
     "postinstall": "electron-builder install-app-deps --arch=ia32",

+ 6 - 0
src/assets/styles/manage.less

@@ -285,6 +285,12 @@
       font-size: 16px;
     }
 
+    > p {
+      overflow: hidden;
+      text-overflow: ellipsis;
+      white-space: nowrap;
+    }
+
     &.task-current {
       box-shadow: 0 0 0 1px @main-color;
     }

+ 1 - 1
src/modules/client/components/ScanAreaSteps.vue

@@ -121,7 +121,7 @@ export default {
       this.$refs[this.currentComponent].checkValid();
     },
     toNext(setting) {
-      console.log(setting);
+      // console.log(setting);
 
       Object.entries(setting).map(([key, val]) => {
         this.newSetting[key] =

+ 17 - 8
src/modules/cropper-task/CropperTaskDetailDialog.vue

@@ -22,12 +22,13 @@
                 'task-over': task.isFinished
               }
             ]"
+            :title="`${task.studentName}${task.examNumber}`"
             @click="toDo(task)"
           >
             <div class="task-item-icon">
               <Icon type="ios-document" />
             </div>
-            <p>{{ task.filename }}</p>
+            <p>{{ task.studentName }}{{ task.examNumber }}</p>
           </div>
         </div>
       </div>
@@ -123,6 +124,9 @@ export default {
       loading: false
     };
   },
+  beforeDestroy() {
+    this.stopUpload();
+  },
   methods: {
     visibleChange(visible) {
       if (visible) {
@@ -150,6 +154,7 @@ export default {
 
       const nextTaskIndex = this.taskList.findIndex(item => !item.isFinished);
       if (nextTaskIndex === -1) {
+        this.curCollectConfig = JSON.parse(this.taskList[0].cropperSet);
         this.$Message.success("当前任务已全部结束");
       } else {
         this.curCollectConfig =
@@ -184,8 +189,8 @@ export default {
       if (paperInfo.originImgPath) return paperInfo.originImgPath;
 
       const pInfo = await getPaperInfo({
-        workId: paperInfo.workId,
-        subjectId: paperInfo.subjectId,
+        workId: paperInfo.examId,
+        subject: paperInfo.subject,
         examNumber: paperInfo.examNumber
       }).catch(() => {});
       if (!pInfo) {
@@ -197,7 +202,7 @@ export default {
 
       const outputOriginPath = await downloadOriginImg({
         ...paperInfo,
-        url: pInfo.imgSrc
+        url: pInfo.sheetSrc
       }).catch(() => {});
       if (!outputOriginPath) {
         this.$Message.error("下载原图失败,请重新尝试!");
@@ -222,7 +227,7 @@ export default {
       }
     },
     async curTaskFinished(setting) {
-      await updateCropperTaskDetail({
+      const updateData = {
         id: this.curTask.id,
         cropperSet: JSON.stringify(setting),
         originImgPath: this.curTask.originImgPath,
@@ -231,11 +236,14 @@ export default {
         isFinished: 1,
         isUpload: 0,
         updateTime: formatDate()
-      });
+      };
+      await updateCropperTaskDetail(updateData);
       await this.updateProgress();
 
-      const curTask = this.taskList.find(item => item.id === this.curTask.id);
-      curTask.isFinished = true;
+      const ind = this.taskList.findIndex(item => item.id === this.curTask.id);
+      this.taskList[ind] = Object.assign({}, this.curTask, {
+        ...updateData
+      });
 
       return true;
     },
@@ -294,6 +302,7 @@ export default {
       const nextTask = this.taskList.find(item => !item.isFinished);
       if (!nextTask) {
         this.$Message.success("当前任务已全部结束");
+        this.curTask = {};
         return;
       }
 

+ 17 - 2
src/modules/cropper-task/ModifyCropperTask.vue

@@ -88,6 +88,11 @@ export default {
             required: true,
             message: "请输入任务名称",
             trigger: "change"
+          },
+          {
+            max: 100,
+            message: "任务名称最长100个字符",
+            trigger: "change"
           }
         ],
         inputFile: [
@@ -124,7 +129,7 @@ export default {
         {
           title: "选择输入目录",
           filters: [{ name: "excel", extensions: ["xls", "xlsx"] }],
-          properties: ["openDirectory"]
+          properties: ["openFile"]
         },
         folderPaths => {
           if (folderPaths && folderPaths[0]) {
@@ -135,10 +140,18 @@ export default {
     },
     checkData(data) {
       // let error
-      const columnNames = ["工作id", "科目", "科目名称", "考号", "姓名"];
+      const columnNames = [
+        "工作id",
+        "科目id",
+        "科目代码",
+        "科目名称",
+        "考号",
+        "姓名"
+      ];
       const columnCodes = [
         "examId",
         "subjectId",
+        "subject",
         "subjectName",
         "examNumber",
         "studentName"
@@ -220,6 +233,7 @@ export default {
             const [
               examId,
               subjectId,
+              subject,
               subjectName,
               examNumber,
               studentName
@@ -228,6 +242,7 @@ export default {
               cropperTaskId,
               examId,
               subjectId,
+              subject,
               subjectName,
               examNumber,
               studentName,

+ 2 - 2
src/modules/cropper-task/api.js

@@ -1,5 +1,5 @@
 import { $get } from "@/plugins/axios";
 
-export const getPaperInfo = ({ workId, subjectId, examNumber }) => {
-  return $get(`/api/papers/${workId}/${subjectId}/${examNumber}`);
+export const getPaperInfo = ({ workId, subject, examNumber }) => {
+  return $get(`/api/papers/${workId}/${subject}/${examNumber}`);
 };

+ 15 - 7
src/modules/cropper-task/uploadMixin.js

@@ -67,8 +67,7 @@ export default {
         this.taskSetTs.push(
           setTimeout(() => {
             this.startUpload();
-          }),
-          5 * 1000
+          }, 5 * 1000)
         );
         return;
       }
@@ -77,10 +76,21 @@ export default {
       this.runUploadTask();
     },
     async runUploadTask() {
-      if (!this.uploadTaskIdList.length || !this.taskRunning) {
+      this.clearTaskSetTs();
+      this.clearUploadSetTs();
+
+      if (!this.taskRunning) {
         this.overUploadTask();
         return;
       }
+      if (!this.uploadTaskIdList.length) {
+        this.taskSetTs.push(
+          setTimeout(() => {
+            this.startUpload();
+          }, 5 * 1000)
+        );
+        return;
+      }
 
       const cropperTaskDetailId = this.uploadTaskIdList.shift();
       this.curUploadTask = await this.getUploadTask(cropperTaskDetailId);
@@ -88,8 +98,7 @@ export default {
         this.uploadSetTs.push(
           setTimeout(() => {
             this.runUploadTask();
-          }),
-          10
+          }, 10)
         );
         return;
       }
@@ -113,8 +122,7 @@ export default {
       this.uploadSetTs.push(
         setTimeout(() => {
           this.runUploadTask();
-        }),
-        10
+        }, 10)
       );
     },
     overUploadTask() {

+ 15 - 1
src/plugins/db.js

@@ -657,12 +657,24 @@ export function getCropperTaskFinishCount(cropperTaskId) {
 
 /**
  * 
+CREATE TABLE "cropper_task" (
+  "id" INTEGER NOT NULL,
+  "name" TEXT NOT NULL,
+  "inputFile" TEXT NOT NULL,
+  "taskCount" integer NOT NULL,
+  "finishedCount" integer NOT NULL DEFAULT 0,
+  "createTime" TEXT NOT NULL,
+  "updateTime" TEXT NOT NULL DEFAULT '',
+  PRIMARY KEY ("id")
+);
+ * 
 CREATE TABLE "cropper_task_detail" (
   "id" INTEGER NOT NULL,
   "cropperTaskId" INTEGER NOT NULL,
   "examId" text NOT NULL,
   "paperId" text,
   "subjectId" text NOT NULL,
+  "subject" text NOT NULL,
   "subjectName" TEXT,
   "examNumber" text NOT NULL,
   "studentName" TEXT NOT NULL,
@@ -704,6 +716,7 @@ export function addCropperTaskDetail(paramList) {
       params.examId,
       params.paperId || "",
       params.subjectId,
+      params.subject,
       params.subjectName,
       params.examNumber,
       params.studentName,
@@ -724,7 +737,8 @@ export function addCropperTaskDetail(paramList) {
   });
   const vals = listVals.join(",");
 
-  const sql = `INSERT INTO cropper_task_detail (cropperTaskId,examId,paperId, subjectId,subjectName,examNumber,studentName,originImgPath, formalImgPath,sliceImgPath,imageEncrypt,isUpload,cropperSet,isFinished,createTime,updateTime) VALUES ${vals}`;
+  const sql = `INSERT INTO cropper_task_detail (cropperTaskId,examId,paperId, subjectId,subject,subjectName,examNumber,studentName,originImgPath, formalImgPath,sliceImgPath,imageEncrypt,isUpload,cropperSet,isFinished,createTime,updateTime) VALUES ${vals}`;
+  // console.log(sql);
 
   return new Promise((resolve, reject) => {
     db.run(sql, function(err) {

+ 178 - 0
src/plugins/db.sql

@@ -0,0 +1,178 @@
+/*
+ Navicat Premium Data Transfer
+ 
+ Source Server         : sqlite-msyj-org
+ Source Server Type    : SQLite
+ Source Server Version : 3021000
+ Source Schema         : main
+ 
+ Target Server Type    : SQLite
+ Target Server Version : 3021000
+ File Encoding         : 65001
+ 
+ Date: 09/08/2022 08:32:08
+ */
+PRAGMA foreign_keys = false;
+
+-- ----------------------------
+-- Table structure for cropper_task
+-- ----------------------------
+DROP TABLE IF EXISTS "cropper_task";
+
+CREATE TABLE "cropper_task" (
+  "id" INTEGER NOT NULL,
+  "name" TEXT NOT NULL,
+  "inputFile" TEXT NOT NULL,
+  "taskCount" integer NOT NULL,
+  "finishedCount" integer NOT NULL DEFAULT 0,
+  "createTime" TEXT NOT NULL,
+  "updateTime" TEXT NOT NULL DEFAULT '',
+  PRIMARY KEY ("id")
+);
+
+-- ----------------------------
+-- Table structure for cropper_task_detail
+-- ----------------------------
+DROP TABLE IF EXISTS "cropper_task_detail";
+
+CREATE TABLE "cropper_task_detail" (
+  "id" INTEGER NOT NULL,
+  "cropperTaskId" INTEGER NOT NULL,
+  "examId" text NOT NULL,
+  "paperId" text,
+  "subjectId" text NOT NULL,
+  "subject" TEXT NOT NULL,
+  "subjectName" TEXT,
+  "examNumber" text NOT NULL,
+  "studentName" TEXT NOT NULL,
+  "originImgPath" TEXT,
+  "formalImgPath" TEXT,
+  "sliceImgPath" TEXT,
+  "compressRate" integer NOT NULL DEFAULT 100,
+  "imageEncrypt" integer NOT NULL DEFAULT 1,
+  "isUpload" integer NOT NULL DEFAULT 0,
+  "cropperSet" TEXT,
+  "isFinished" integer NOT NULL DEFAULT 0,
+  "createTime" TEXT NOT NULL DEFAULT '',
+  "updateTime" TEXT NOT NULL DEFAULT '',
+  PRIMARY KEY ("id")
+);
+
+-- ----------------------------
+-- Table structure for dict
+-- ----------------------------
+DROP TABLE IF EXISTS "dict";
+
+CREATE TABLE "dict" ("key" TEXT NOT NULL, "val" TEXT);
+
+-- ----------------------------
+-- Table structure for export_task
+-- ----------------------------
+DROP TABLE IF EXISTS "export_task";
+
+CREATE TABLE "export_task" (
+  "id" INTEGER NOT NULL,
+  "examId" text NOT NULL,
+  "examName" TEXT NOT NULL,
+  "imageType" integer,
+  "isWatermark" integer,
+  "isResume" integer,
+  "nameRule" integer,
+  "startScore" integer,
+  "endScore" integer,
+  "outputDir" TEXT NOT NULL,
+  "savePathRule" TEXT NOT NULL,
+  "isFinish" integer DEFAULT 0,
+  "createdTime" TEXT NOT NULL,
+  "finishTime" TEXT,
+  PRIMARY KEY ("id")
+);
+
+-- ----------------------------
+-- Table structure for export_task_detail
+-- ----------------------------
+DROP TABLE IF EXISTS "export_task_detail";
+
+CREATE TABLE "export_task_detail" (
+  "id" INTEGER NOT NULL COLLATE BINARY PRIMARY KEY AUTOINCREMENT,
+  "serialNo" integer NOT NULL DEFAULT 1,
+  "taskId" text NOT NULL,
+  "examId" text NOT NULL,
+  "examName" TEXT NOT NULL,
+  "school" TEXT,
+  "studentId" text NOT NULL,
+  "studentName" TEXT NOT NULL,
+  "subject" TEXT NOT NULL,
+  "subjectName" TEXT NOT NULL,
+  "areaCode" TEXT NOT NULL,
+  "areaName" TEXT NOT NULL,
+  "examNumber" text NOT NULL,
+  "score" TEXT NOT NULL,
+  "url" TEXT NOT NULL,
+  "filename" TEXT NOT NULL,
+  "isDownload" integer NOT NULL DEFAULT 0,
+  "createdTime" TEXT NOT NULL,
+  "finishTime" TEXT
+);
+
+-- ----------------------------
+-- Table structure for rotate_history
+-- ----------------------------
+DROP TABLE IF EXISTS "rotate_history";
+
+CREATE TABLE "rotate_history" (
+  "id" INTEGER NOT NULL,
+  "examId" text NOT NULL,
+  "subjectId" text NOT NULL,
+  "paperId" text NOT NULL,
+  "studentName" TEXT NOT NULL,
+  "examNumber" text NOT NULL,
+  "imageEncrypt" integer NOT NULL,
+  "filePath" TEXT NOT NULL,
+  "isUpload" integer NOT NULL DEFAULT 0,
+  "createdTime" TEXT NOT NULL,
+  "finishTime" TEXT,
+  PRIMARY KEY ("id")
+);
+
+-- ----------------------------
+-- Table structure for scan
+-- ----------------------------
+DROP TABLE IF EXISTS "scan";
+
+CREATE TABLE "scan" (
+  "id" INTEGER NOT NULL,
+  "examId" text NOT NULL,
+  "examName" TEXT NOT NULL,
+  "paperId" text,
+  "subjectId" text NOT NULL,
+  "subjectName" TEXT NOT NULL,
+  "examNumber" text NOT NULL,
+  "studentName" text NOT NULL,
+  "siteCode" text NOT NULL,
+  "roomCode" text NOT NULL,
+  "originImgPath" TEXT,
+  "formalImgPath" TEXT NOT NULL,
+  "sliceImgPath" TEXT NOT NULL,
+  "compressRate" integer NOT NULL DEFAULT 100,
+  "level" TEXT,
+  "imageEncrypt" integer NOT NULL DEFAULT 1,
+  "isUpload" integer NOT NULL DEFAULT 0,
+  "missing" integer NOT NULL DEFAULT 0,
+  "isManual" integer NOT NULL DEFAULT 0,
+  "clientUserId" text NOT NULL,
+  "clientUsername" text NOT NULL,
+  "clientUserLoginTime" text NOT NULL,
+  "createdTime" text NOT NULL,
+  "finishTime" text,
+  PRIMARY KEY ("id")
+);
+
+-- ----------------------------
+-- Table structure for sqlite_sequence
+-- ----------------------------
+DROP TABLE IF EXISTS "sqlite_sequence";
+
+CREATE TABLE "sqlite_sequence" ("name", "seq");
+
+PRAGMA foreign_keys = true;