浏览代码

Merge branch 'release_1.0.0' of http://git.qmth.com.cn/scan-central/client-admin into release_1.0.0

刘洋 8 月之前
父节点
当前提交
0ca328a8a2

+ 10 - 4
pnpm-lock.yaml

@@ -6,7 +6,7 @@ specifiers:
   '@babel/plugin-transform-runtime': ^7.11.5
   '@babel/preset-env': ^7.11.5
   '@babel/preset-react': ^7.10.4
-  '@qmth/ui': ^1.0.16
+  '@qmth/ui': ^1.0.21
   '@types/crypto-js': ^4.2.2
   '@types/lodash-es': ^4.17.12
   '@types/mockjs': ^1.0.10
@@ -31,6 +31,7 @@ specifiers:
   electron-log: ^4.2.4
   element-resize-detector: ^1.2.4
   esbuild-loader: ^4.0.2
+  ini-parser: ^0.0.2
   less: ^4.2.0
   lodash-es: ^4.17.21
   mockjs: ^1.1.0
@@ -61,13 +62,14 @@ specifiers:
 
 dependencies:
   '@ant-design/icons-vue': 7.0.1_vue@3.5.0
-  '@qmth/ui': 1.0.16_typescript@5.5.4
+  '@qmth/ui': 1.0.21_typescript@5.5.4
   '@vueuse/core': 10.11.1_vue@3.5.0
   axios: 1.7.7
   core-js: 3.38.1
   crypto-js: 4.2.0
   echarts: 5.5.1
   element-resize-detector: 1.2.4
+  ini-parser: 0.0.2
   less: 4.2.0
   lodash-es: 4.17.21
   mockjs: 1.1.0
@@ -2392,8 +2394,8 @@ packages:
     resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==}
     dev: true
 
-  /@qmth/ui/1.0.16_typescript@5.5.4:
-    resolution: {integrity: sha512-MvMD/V0Ta78t7sdjImGFZDENGXvn1x+/Pdpx6PC+sVoN3SlvhCh2Suulk9+AraNCAtDdKUsAWZNvIG6VWu30/g==}
+  /@qmth/ui/1.0.21_typescript@5.5.4:
+    resolution: {integrity: sha512-kf67EpzxdK8TDuqh7OURA58IznQC49BoRWQUCsSh365dxhTpBrdjHICt37wBol+qqjVqBOySSzPs92KARugCog==}
     dependencies:
       ant-design-vue: 4.2.1_vue@3.5.0
       element-resize-detector: 1.2.4
@@ -5545,6 +5547,10 @@ packages:
     resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
     dev: true
 
+  /ini-parser/0.0.2:
+    resolution: {integrity: sha512-HwrdoAGH+GGo9bIwZ8dA2zJ7Mofha9JfiaobkY93WSfYfDC8t6kDTRiNkd2Lv2OOCagv8Z0qdkedasHC8pMQdQ==}
+    dev: false
+
   /ini/1.3.8:
     resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
     dev: false

+ 4 - 0
src/render/components/SimplePagination/index.vue

@@ -61,6 +61,10 @@ function onChange(page: number, pageSize: number) {
     width: 70px;
     overflow: hidden;
   }
+  .ant-pagination-jump-next,
+  .ant-pagination-jump-prev {
+    display: none;
+  }
   .ant-pagination-options-quick-jumper {
     margin: 0;
   }

+ 2 - 0
src/render/styles/pages.less

@@ -294,11 +294,13 @@
 
     .modal-box {
       min-height: 88px;
+      height: 100%;
       background: #ffffff;
       border-radius: 6px;
       border: 1px solid #e5e5e5;
       padding: 16px;
       color: @text-color1;
+      overflow: hidden;
 
       .box-title {
         height: 22px;

+ 10 - 8
src/render/views/DataCheck/CheckAction.vue

@@ -377,15 +377,17 @@ const questionInfo = computed(() => {
 
 const questions = ref([] as string[]);
 watch(
-  () => dataCheckStore.curPageIndex,
-  (val, oldval) => {
-    if (val !== oldval) {
-      if (!dataCheckStore.curPage || !dataCheckStore.curPage.question) {
-        questions.value = [];
-        return;
-      }
-      questions.value = [...dataCheckStore.curPage.question.result];
+  () => dataCheckStore.curPage?.question?.result,
+  (val) => {
+    if (!val) {
+      questions.value = [];
+      return;
     }
+    questions.value = [...val];
+  },
+  {
+    deep: true,
+    immediate: true,
   }
 );
 

+ 14 - 5
src/render/views/DataCheck/ScanImage/index.vue

@@ -311,11 +311,8 @@ async function onRecogEditConfirm(result: string[]) {
 
   if (data.type === "question") {
     const index = data.index - 1;
-    dataCheckStore.curPage.question.result.splice(
-      index,
-      1,
-      data.result.join("")
-    );
+    dataCheckStore.curPage.question.result.splice(index, 1, result.join(""));
+
     await dataCheckStore.updateField({
       field: "QUESTION",
       value: JSON.stringify(dataCheckStore.curPage.question),
@@ -374,6 +371,18 @@ const fillAreaSetDialogRef = ref();
 function onSetRecogStyle() {
   fillAreaSetDialogRef.value?.open();
 }
+
+// 监听question.result,同步修改客观题的识别结果
+watch(
+  () => dataCheckStore.curPage?.question?.result,
+  (val) => {
+    if (!val) return;
+    updateRecogList();
+  },
+  {
+    deep: true,
+  }
+);
 </script>
 
 <style lang="less" scoped>

+ 57 - 19
src/render/views/RecognizeCheck/RecognizeArbitrate.vue

@@ -25,7 +25,18 @@
         <a-row align="top" :gutter="8" class="m-b-8px">
           <a-col :span="6">
             <div class="modal-box">
-              <p class="box-title">客观题</p>
+              <p
+                v-if="curArbitrateTaskDetail.type === 'question'"
+                class="box-title"
+              >
+                客观题
+              </p>
+              <p
+                v-else-if="curArbitrateTaskDetail.type === 'paperType'"
+                class="box-title"
+              >
+                卷型
+              </p>
               <p class="box-cont">{{ curTaskDetailName }}</p>
             </div>
           </a-col>
@@ -41,7 +52,7 @@
             </div>
           </a-col>
         </a-row>
-        <a-row align="top" :gutter="8">
+        <a-row align="stretch" :gutter="8">
           <a-col :span="3">
             <div class="modal-box">
               <p class="box-title">一评结果</p>
@@ -97,9 +108,11 @@ import {
   SwapLeftOutlined,
 } from "@ant-design/icons-vue";
 import { message } from "ant-design-vue";
+import { useUserStore } from "@/store";
 
 import RecognizeImage from "./RecognizeImage.vue";
 
+import { getBaseDataConfig } from "@/ap/baseDataConfig";
 import {
   recognizeArbitrateTask,
   recognizeArbitrateSave,
@@ -121,8 +134,15 @@ defineOptions({
 
 const router = useRouter();
 const route = useRoute();
+const userStore = useUserStore();
 const groupId = route.params.groupId ? Number(route.params.groupId) : 0;
 
+const paperTypeBarcodeContent = ref<string[]>([]);
+async function getConfig() {
+  const res = await getBaseDataConfig({ examId: userStore.curExam.id });
+  paperTypeBarcodeContent.value = res.paperTypeBarcodeContent || [];
+}
+
 // 任务进度
 const progress = ref({
   finishCount: 0,
@@ -217,22 +237,38 @@ function parseDetails(
     //   });
     // }
 
-    // // 试卷类型
-    // if (page.paperType) {
-    //   details.push({
-    //     ...parseDetailSize(
-    //       recogData.paperType.fill_result[0],
-    //       "paperType",
-    //       0,
-    //       []
-    //     ),
-    //     result1: page.paperType ? page.paperType[0] : "",
-    //     result2: page.paperType ? page.paperType[1] : "",
-    //     pageIndex: page.index,
-    //     groupId: groupId,
-    //     uri: page.uri,
-    //   });
-    // }
+    // 试卷类型
+    if (page.paperType) {
+      let fillArea: AreaSize | null = null;
+      const rect = recogData.paperType.rect || null;
+      if (rect) {
+        const hasArea = rect.some((item) => item);
+        if (hasArea) {
+          fillArea = {
+            x: rect[0],
+            y: rect[1],
+            w: rect[2],
+            h: rect[3],
+          };
+        }
+      }
+
+      details.push({
+        ...parseDetailSize(
+          recogData.paperType.fill_result[0],
+          "paperType",
+          0,
+          []
+        ),
+        options: ["#", ...paperTypeBarcodeContent.value],
+        result1: page.paperType ? page.paperType[0] : "",
+        result2: page.paperType ? page.paperType[1] : "",
+        pageIndex: page.index,
+        groupId,
+        fillArea: fillArea || { x: 0, y: 0, w: 0, h: 0 },
+        uri: page.uri,
+      });
+    }
 
     // 试题
     let index = 0;
@@ -262,8 +298,9 @@ function parseDetails(
 // 任务执行流程 ----------------- start>
 async function setCurTaskDetail() {
   const val = curArbitrateTaskDetails.value[curArbitrateTaskDetailIndex.value];
-  curArbitrateTaskDetail.value = val;
+  if (!val) return;
 
+  curArbitrateTaskDetail.value = val;
   curArbitrateTaskDetail.value.sliceImg = await getSliceFileUrl(
     val.uri,
     val.fillArea
@@ -511,6 +548,7 @@ function goback() {
 
 onMounted(async () => {
   await releaseTask();
+  getConfig();
   initData();
   registKeyEvent();
 });