瀏覽代碼

预处理URL

Michael Wang 4 年之前
父節點
當前提交
22f5fef09d

+ 19 - 1
src/features/arbitrate/Arbitrate.vue

@@ -31,6 +31,7 @@ import {
   saveArbitrateTask,
 } from "@/api/arbitratePage";
 import ArbitrateMarkList from "./ArbitrateMarkList.vue";
+import { Setting, Task } from "@/types";
 
 export default defineComponent({
   name: "Arbitrate",
@@ -69,9 +70,18 @@ export default defineComponent({
       store.setting.uiSetting = {
         "answer.paper.scale": 1,
         "score.board.collapse": false,
-      };
+        "normal.mode": "keyboard",
+      } as Setting["uiSetting"];
       store.setting.splitConfig = settingRes.data.splitConfig;
       store.setting.subject = settingRes.data.subject;
+      if (store.setting.subject?.answerUrl) {
+        store.setting.subject.answerUrl =
+          store.setting.fileServer + store.setting.subject?.answerUrl;
+      }
+      if (store.setting.subject?.paperUrl) {
+        store.setting.subject.paperUrl =
+          store.setting.fileServer + store.setting.subject?.paperUrl;
+      }
     }
     async function updateStatus() {
       const res = await getArbitrateTaskStatus(subjectCode, groupNumber);
@@ -89,6 +99,14 @@ export default defineComponent({
       // message.success({ content: "获取成功", key: mkey });
 
       if (res.data.libraryId) {
+        let rawTask = res.data as Task;
+        rawTask.sliceUrls = rawTask.sliceUrls.map(
+          (s) => store.setting.fileServer + s
+        );
+        rawTask.sheetUrls = rawTask.sheetUrls?.map(
+          (s) => store.setting.fileServer + s
+        );
+        rawTask.jsonUrl = store.setting.fileServer + rawTask.jsonUrl;
         store.currentTask = res.data;
         // if (store.currentTask)
         //   store.setting.subject = store.currentTask.subject;

+ 3 - 12
src/features/arbitrate/MarkBody.vue

@@ -34,7 +34,6 @@
 <script lang="ts">
 import { computed, defineComponent, reactive, ref, watchEffect } from "vue";
 import { store } from "./store";
-import filters from "@/filters";
 import MarkDrawTrack from "./MarkDrawTrack.vue";
 import { SpecialTag, Track } from "@/types";
 import { useTimers } from "@/setups/useTimers";
@@ -97,10 +96,7 @@ export default defineComponent({
       const urls = [];
       // 必须要先加载一遍,把“选择整图”的宽高重置后,再算总高度
       for (const sliceConfig of store.currentTask.sliceConfig) {
-        const url = filters.toCompleteUrlWithFileServer(
-          store.setting.fileServer,
-          store.currentTask.sliceUrls[sliceConfig.i - 1]
-        );
+        const url = store.currentTask.sliceUrls[sliceConfig.i - 1];
         const image = await loadImage(url);
         images.push(image);
         urls.push(url);
@@ -124,10 +120,7 @@ export default defineComponent({
       const tempSliceImagesWithTrackList = [] as Array<SliceImage>;
       for (const sliceConfig of store.currentTask.sliceConfig) {
         accumBottomHeight += sliceConfig.h;
-        const url = filters.toCompleteUrlWithFileServer(
-          store.setting.fileServer,
-          store.currentTask.sliceUrls[sliceConfig.i - 1]
-        );
+        const url = store.currentTask.sliceUrls[sliceConfig.i - 1];
         const indexInSliceUrls = sliceConfig.i;
         const image = images[indexInSliceUrls - 1];
 
@@ -182,9 +175,7 @@ export default defineComponent({
 
       const images = [];
       for (const url of store.currentTask.sliceUrls) {
-        const image = await loadImage(
-          filters.toCompleteUrlWithFileServer(store.setting.fileServer, url)
-        );
+        const image = await loadImage(url);
         images.push(image);
       }
 

+ 18 - 2
src/features/arbitrate/MarkHistory.vue

@@ -23,7 +23,14 @@
       <div v-for="(task, index) of store.historyTasks" :key="index">
         <div
           @click="replaceCurrentTask(task)"
-          class="tw-flex tw-justify-between tw-h-6 tw-place-items-center tw-rounded tw-cursor-pointer"
+          class="
+            tw-flex
+            tw-justify-between
+            tw-h-6
+            tw-place-items-center
+            tw-rounded
+            tw-cursor-pointer
+          "
           :class="store.currentTask === task && 'current-task'"
         >
           <div>{{ task.secretNumber }}</div>
@@ -51,6 +58,7 @@ import { defineComponent, ref, watch, watchEffect } from "vue";
 import { useRoute } from "vue-router";
 import { store } from "./store";
 import { CloseOutlined } from "@ant-design/icons-vue";
+import { cloneDeep } from "lodash";
 
 export default defineComponent({
   name: "MarkHistory",
@@ -103,7 +111,15 @@ export default defineComponent({
       });
       loading.value = false;
       if (res.data) {
-        store.historyTasks = res.data;
+        let data = cloneDeep(res.data) as Array<Task>;
+        data = data.map((t) => {
+          t.sliceUrls = t.sliceUrls.map((s) => store.setting.fileServer + s);
+          t.sheetUrls = t.sheetUrls?.map((s) => store.setting.fileServer + s);
+          t.jsonUrl = store.setting.fileServer + t.jsonUrl;
+
+          return t;
+        });
+        store.historyTasks = data;
       }
     }
 

+ 37 - 9
src/features/arbitrate/store.ts

@@ -1,27 +1,55 @@
-import { InspectStore, Task } from "@/types";
+import { MarkStore, Setting } from "@/types";
 import { reactive } from "vue";
 
 const obj = {
   setting: {
+    mode: "TRACK",
+    examType: "SCAN_IMAGE",
+    forceMode: false,
+    sheetView: false,
+    sheetConfig: [],
+    enableAllZero: false,
     fileServer: "",
     userName: "",
-    subject: { name: "", code: "" },
+    subject: <Setting["subject"]>{},
+    forceSpecialTag: false,
     uiSetting: {
       "answer.paper.scale": 1,
       "score.board.collapse": false,
+      "normal.mode": "keyboard",
+      "paper.modal": false,
+      "answer.modal": false,
+      "minimap.modal": false,
+      "specialTag.modal": false,
     },
+    statusValue: "FORMAL",
+    problemTypes: [],
+    groupNumber: 0,
+    groupTitle: "",
+    topCount: 0,
     splitConfig: [],
+    prefetchCount: 3,
+    startTime: 0,
+    endTime: 0,
   },
-  status: {
-    totalCount: 0,
-    markedCount: 0,
-  },
+  status: <MarkStore["status"]>{},
+  groups: [],
+  tasks: [],
+  message: null,
+  currentMarkResult: undefined,
   currentTask: undefined,
+  currentQuestion: undefined,
+  currentScore: undefined,
+  currentSpecialTag: undefined,
+  markResults: [],
   historyOpen: false,
   MarkBoardTrackCollapse: false,
   historyTasks: [],
-  focusTracks: [],
-  message: null,
-} as InspectStore;
+  removeScoreTracks: [],
+  maxModalZIndex: 1020,
+  minimapScrollTo: 0,
+  allPaperModal: false,
+  sheetViewModal: false,
+} as MarkStore;
 
 export const store = reactive(obj);

+ 9 - 1
src/features/inspect/Inspect.vue

@@ -29,7 +29,7 @@ import { useRoute } from "vue-router";
 import MarkBody from "./MarkBody.vue";
 import MarkHistory from "./MarkHistory.vue";
 import MarkBoardInspect from "./MarkBoardInspect.vue";
-import { Question } from "@/types";
+import { Question, Task } from "@/types";
 import { message } from "ant-design-vue";
 
 export default defineComponent({
@@ -101,6 +101,14 @@ export default defineComponent({
       // message.success({ content: "获取成功", key: mkey });
 
       if (res.data.studentId) {
+        let rawTask = res.data as Task;
+        rawTask.sliceUrls = rawTask.sliceUrls.map(
+          (s) => store.setting.fileServer + s
+        );
+        rawTask.sheetUrls = rawTask.sheetUrls?.map(
+          (s) => store.setting.fileServer + s
+        );
+        rawTask.jsonUrl = store.setting.fileServer + rawTask.jsonUrl;
         store.currentTask = res.data;
         if (store.currentTask)
           store.setting.subject = store.currentTask.subject;

+ 2 - 8
src/features/inspect/MarkBody.vue

@@ -31,7 +31,6 @@
 <script lang="ts">
 import { computed, defineComponent, reactive, ref, watchEffect } from "vue";
 import { store } from "./store";
-import filters from "@/filters";
 import MarkDrawTrack from "./MarkDrawTrack.vue";
 import { SpecialTag, Track } from "@/types";
 import { useTimers } from "@/setups/useTimers";
@@ -65,17 +64,12 @@ export default defineComponent({
 
       const images = [];
       for (const url of store.currentTask.sliceUrls) {
-        const image = await loadImage(
-          filters.toCompleteUrlWithFileServer(store.setting.fileServer, url)
-        );
+        const image = await loadImage(url);
         images.push(image);
       }
 
       for (const url of store.currentTask.sliceUrls) {
-        const completeUrl = filters.toCompleteUrlWithFileServer(
-          store.setting.fileServer,
-          url
-        );
+        const completeUrl = url;
 
         const indexInSliceUrls = store.currentTask.sliceUrls.indexOf(url) + 1;
         const image = images[indexInSliceUrls - 1];

+ 18 - 2
src/features/inspect/MarkHistory.vue

@@ -23,7 +23,14 @@
       <div v-for="(task, index) of store.historyTasks" :key="index">
         <div
           @click="replaceCurrentTask(task)"
-          class="tw-flex tw-justify-between tw-h-6 tw-place-items-center tw-rounded tw-cursor-pointer"
+          class="
+            tw-flex
+            tw-justify-between
+            tw-h-6
+            tw-place-items-center
+            tw-rounded
+            tw-cursor-pointer
+          "
           :class="store.currentTask === task && 'current-task'"
         >
           <div>{{ task.secretNumber }}</div>
@@ -51,6 +58,7 @@ import { defineComponent, ref, watch, watchEffect } from "vue";
 import { useRoute } from "vue-router";
 import { store } from "./store";
 import { CloseOutlined } from "@ant-design/icons-vue";
+import { cloneDeep } from "lodash";
 
 export default defineComponent({
   name: "MarkHistory",
@@ -103,7 +111,15 @@ export default defineComponent({
       });
       loading.value = false;
       if (res.data) {
-        store.historyTasks = res.data;
+        let data = cloneDeep(res.data) as Array<Task>;
+        data = data.map((t) => {
+          t.sliceUrls = t.sliceUrls.map((s) => store.setting.fileServer + s);
+          t.sheetUrls = t.sheetUrls?.map((s) => store.setting.fileServer + s);
+          t.jsonUrl = store.setting.fileServer + t.jsonUrl;
+
+          return t;
+        });
+        store.historyTasks = data;
       }
     }
 

+ 9 - 1
src/features/library/inspect/LibraryInspect.vue

@@ -20,7 +20,7 @@ import { useRoute } from "vue-router";
 import MarkBody from "./MarkBody.vue";
 import MarkHistory from "./MarkHistory.vue";
 import MarkBoardInspect from "./MarkBoardInspect.vue";
-import { Question } from "@/types";
+import { Question, Task } from "@/types";
 import { message } from "ant-design-vue";
 import {
   clearInspectedTask,
@@ -78,6 +78,14 @@ export default defineComponent({
       // message.success({ content: "获取成功", key: mkey });
 
       if (res.data.libraryId) {
+        let rawTask = res.data as Task;
+        rawTask.sliceUrls = rawTask.sliceUrls.map(
+          (s) => store.setting.fileServer + s
+        );
+        rawTask.sheetUrls = rawTask.sheetUrls?.map(
+          (s) => store.setting.fileServer + s
+        );
+        rawTask.jsonUrl = store.setting.fileServer + rawTask.jsonUrl;
         store.currentTask = res.data;
         if (store.currentTask)
           store.setting.subject = store.currentTask.subject;

+ 3 - 12
src/features/library/inspect/MarkBody.vue

@@ -34,7 +34,6 @@
 <script lang="ts">
 import { computed, defineComponent, reactive, ref, watchEffect } from "vue";
 import { store } from "./store";
-import filters from "@/filters";
 import MarkDrawTrack from "./MarkDrawTrack.vue";
 import { SpecialTag, Track } from "@/types";
 import { useTimers } from "@/setups/useTimers";
@@ -97,10 +96,7 @@ export default defineComponent({
       const urls = [];
       // 必须要先加载一遍,把“选择整图”的宽高重置后,再算总高度
       for (const sliceConfig of store.currentTask.sliceConfig) {
-        const url = filters.toCompleteUrlWithFileServer(
-          store.setting.fileServer,
-          store.currentTask.sliceUrls[sliceConfig.i - 1]
-        );
+        const url = store.currentTask.sliceUrls[sliceConfig.i - 1];
         const image = await loadImage(url);
         images.push(image);
         urls.push(url);
@@ -124,10 +120,7 @@ export default defineComponent({
       const tempSliceImagesWithTrackList = [] as Array<SliceImage>;
       for (const sliceConfig of store.currentTask.sliceConfig) {
         accumBottomHeight += sliceConfig.h;
-        const url = filters.toCompleteUrlWithFileServer(
-          store.setting.fileServer,
-          store.currentTask.sliceUrls[sliceConfig.i - 1]
-        );
+        const url = store.currentTask.sliceUrls[sliceConfig.i - 1];
         const indexInSliceUrls = sliceConfig.i;
         const image = images[indexInSliceUrls - 1];
 
@@ -182,9 +175,7 @@ export default defineComponent({
 
       const images = [];
       for (const url of store.currentTask.sliceUrls) {
-        const image = await loadImage(
-          filters.toCompleteUrlWithFileServer(store.setting.fileServer, url)
-        );
+        const image = await loadImage(url);
         images.push(image);
       }
 

+ 18 - 2
src/features/library/inspect/MarkHistory.vue

@@ -23,7 +23,14 @@
       <div v-for="(task, index) of store.historyTasks" :key="index">
         <div
           @click="replaceCurrentTask(task)"
-          class="tw-flex tw-justify-between tw-h-6 tw-place-items-center tw-rounded tw-cursor-pointer"
+          class="
+            tw-flex
+            tw-justify-between
+            tw-h-6
+            tw-place-items-center
+            tw-rounded
+            tw-cursor-pointer
+          "
           :class="store.currentTask === task && 'current-task'"
         >
           <div>{{ task.secretNumber }}</div>
@@ -51,6 +58,7 @@ import { defineComponent, ref, watch, watchEffect } from "vue";
 import { useRoute } from "vue-router";
 import { store } from "./store";
 import { CloseOutlined } from "@ant-design/icons-vue";
+import { cloneDeep } from "lodash";
 
 export default defineComponent({
   name: "MarkHistory",
@@ -103,7 +111,15 @@ export default defineComponent({
       });
       loading.value = false;
       if (res.data) {
-        store.historyTasks = res.data;
+        let data = cloneDeep(res.data) as Array<Task>;
+        data = data.map((t) => {
+          t.sliceUrls = t.sliceUrls.map((s) => store.setting.fileServer + s);
+          t.sheetUrls = t.sheetUrls?.map((s) => store.setting.fileServer + s);
+          t.jsonUrl = store.setting.fileServer + t.jsonUrl;
+
+          return t;
+        });
+        store.historyTasks = data;
       }
     }
 

+ 20 - 1
src/features/mark/Mark.vue

@@ -98,6 +98,14 @@ export default defineComponent({
         } as Setting["uiSetting"];
       }
       store.setting = settingRes.data;
+      if (store.setting.subject?.answerUrl) {
+        store.setting.subject.answerUrl =
+          store.setting.fileServer + store.setting.subject?.answerUrl;
+      }
+      if (store.setting.subject?.paperUrl) {
+        store.setting.subject.paperUrl =
+          store.setting.fileServer + store.setting.subject?.paperUrl;
+      }
     }
     async function updateStatus() {
       const res = await getStatus();
@@ -110,6 +118,17 @@ export default defineComponent({
     async function updateTask() {
       const res = await getTask();
       if (res.data.libraryId) {
+        let rawTask = res.data as Task;
+        rawTask.sliceUrls = rawTask.sliceUrls.map(
+          (s) => store.setting.fileServer + s
+        );
+        rawTask.sheetUrls = rawTask.sheetUrls?.map(
+          (s) => store.setting.fileServer + s
+        );
+        rawTask.jsonUrl = store.setting.fileServer + rawTask.jsonUrl;
+        //         for (const sliceUrl of (res.data as Task).sliceUrls) {
+        //   fetch(store.setting.fileServer + sliceUrl);
+        // }
         store.tasks.push(res.data);
         if (!store.historyOpen) {
           // 在正评中,才能替换task
@@ -125,7 +144,7 @@ export default defineComponent({
 
         // prefetch sliceUrls image
         for (const sliceUrl of (res.data as Task).sliceUrls) {
-          fetch(store.setting.fileServer + sliceUrl);
+          fetch(sliceUrl);
         }
       } else {
         store.message = res.data.message;

+ 3 - 10
src/features/mark/MarkBody.vue

@@ -21,8 +21,6 @@
             z-index: 1000;
           "
         >
-          <!-- @mouseover="(e) => (e.target.style.opacity = 0.01)"
-          @mouseout="(e) => (e.target.style.opacity = 1)" -->
           {{ markStatus }}
         </div>
         <div
@@ -69,7 +67,6 @@ import {
   watchEffect,
 } from "vue";
 import { getMarkStatus, store } from "./store";
-import filters from "@/filters";
 import MarkDrawTrack from "./MarkDrawTrack.vue";
 import { ModeEnum, SpecialTag, Track } from "@/types";
 import { useTimers } from "@/setups/useTimers";
@@ -138,9 +135,7 @@ export default defineComponent({
       const urls = [];
       // 必须要先加载一遍,把“选择整图”的宽高重置后,再算总高度
       for (const sliceConfig of store.currentTask.sliceConfig) {
-        const url = filters.toCompleteUrl(
-          store.currentTask.sliceUrls[sliceConfig.i - 1]
-        );
+        const url = store.currentTask.sliceUrls[sliceConfig.i - 1];
         const image = await loadImage(url);
         images.push(image);
         urls.push(url);
@@ -164,9 +159,7 @@ export default defineComponent({
       const tempSliceImagesWithTrackList = [] as Array<SliceImage>;
       for (const sliceConfig of store.currentTask.sliceConfig) {
         accumBottomHeight += sliceConfig.h;
-        const url = filters.toCompleteUrl(
-          store.currentTask.sliceUrls[sliceConfig.i - 1]
-        );
+        const url = store.currentTask.sliceUrls[sliceConfig.i - 1];
         const image = images[urls.indexOf(url)];
 
         const dataUrl = await getDataUrlForSliceConfig(
@@ -218,7 +211,7 @@ export default defineComponent({
 
       const images = [];
       for (const url of store.currentTask.sliceUrls) {
-        const image = await loadImage(filters.toCompleteUrl(url));
+        const image = await loadImage(url);
         images.push(image);
       }
 

+ 4 - 0
src/features/mark/MarkHistory.vue

@@ -138,6 +138,10 @@ export default defineComponent({
             q.__origScore = q.score;
             return q;
           });
+          t.sliceUrls = t.sliceUrls.map((s) => store.setting.fileServer + s);
+          t.sheetUrls = t.sheetUrls?.map((s) => store.setting.fileServer + s);
+          t.jsonUrl = store.setting.fileServer + t.jsonUrl;
+
           return t;
         });
         store.historyTasks = data;