zhangjie 3 сар өмнө
parent
commit
d707f7034a

+ 5 - 3
src/App.vue

@@ -13,14 +13,16 @@
 
 <script setup lang="ts">
 import { watch, watchEffect } from "vue";
-import { store } from "@/store/app";
+import { useMarkStore } from "@/store";
 import zhCN from "ant-design-vue/es/locale/zh_CN";
 
+const markStore = useMarkStore();
+
 let spinning = $ref(false);
 
 watch(
-  () => store.globalMask,
-  () => (spinning = store.globalMask)
+  () => markStore.globalMask,
+  () => (spinning = markStore.globalMask)
 );
 
 watchEffect(() => {

+ 1 - 1
src/api/markPage.ts

@@ -1,4 +1,4 @@
-import { useMarkStore } from "@/markStore";
+import { useMarkStore } from "@/store";
 import { httpApp } from "@/plugins/axiosApp";
 import {
   Setting,

+ 14 - 12
src/features/mark/MarkDrawTrack.vue

@@ -62,14 +62,16 @@
 <script setup lang="ts">
 import type { SpecialTag, Track } from "@/types";
 import { toRefs, watch, nextTick, computed } from "vue";
-import { store } from "@/store/app";
+import { useMarkStore } from "@/store";
 import { message } from "ant-design-vue";
 import { CheckOutlined } from "@ant-design/icons-vue";
 import { useRoute } from "vue-router";
 const route = useRoute();
 
+const markStore = useMarkStore();
+
 const doubleTrack = computed(() => {
-  return !!store.setting?.doubleTrack;
+  return !!markStore.setting?.doubleTrack;
 });
 const props = defineProps<{
   trackList: Array<Track>;
@@ -215,8 +217,8 @@ const computeTopAndLeft = (track: Track | SpecialTag) => {
     top: topInsideSliceRatio * 100 + "%",
     left: leftInsideSliceRatio * 100 + "%",
     "font-size":
-      (store.setting.uiSetting["score.fontSize.scale"] || 1) *
-        store.setting.uiSetting["answer.paper.scale"] *
+      (markStore.setting.uiSetting["score.fontSize.scale"] || 1) *
+        markStore.setting.uiSetting["answer.paper.scale"] *
         2.2 +
       "em",
   };
@@ -224,7 +226,7 @@ const computeTopAndLeft = (track: Track | SpecialTag) => {
 const hasMember = (track: any) => {
   return (
     // (store.getMarkStatus === "正评" || store.getMarkStatus === "试评") &&
-    store.focusTracks.find((item: any) => {
+    markStore.focusTracks.find((item: any) => {
       return (
         item.mainNumber == track.mainNumber && item.subNumber == track.subNumber
       );
@@ -232,29 +234,29 @@ const hasMember = (track: any) => {
   );
 };
 const focusedTrack = (track: Track) => {
-  return store.focusTracks.includes(track) || hasMember(track);
+  return markStore.focusTracks.includes(track) || hasMember(track);
 };
 const circleTagClickHandle = (event: MouseEvent) => {
   emit("click-specialtag", event);
 };
 
 watch(
-  () => store.focusTracks,
+  () => markStore.focusTracks,
   () => {
-    if (store.focusTracks.length === 0) return;
+    if (markStore.focusTracks.length === 0) return;
     const minImageIndex = Math.min(
-      ...store.focusTracks.map((t) => t.offsetIndex)
+      ...markStore.focusTracks.map((t) => t.offsetIndex)
     );
     const minImageOffsetY = Math.min(
-      ...store.focusTracks
+      ...markStore.focusTracks
         .filter((t) => t.offsetIndex === minImageIndex)
         .map((t) => t.offsetY)
     );
-    const topTrack = store.focusTracks.find(
+    const topTrack = markStore.focusTracks.find(
       (t) => t.offsetIndex === minImageIndex && t.offsetY === minImageOffsetY
     );
     if (topTrack) {
-      let allHeaderTracks = store.currentTask.questionList
+      let allHeaderTracks = markStore.currentTask.questionList
         .map((item: any) => item.headerTrack || [])
         .flat();
       console.log("allHeaderTracks", allHeaderTracks);

+ 4 - 4
src/features/mark/composables/useDraw.ts

@@ -163,7 +163,7 @@ export default function useDraw() {
   async function preDrawImage(_currentTask: Task | undefined) {
     // console.log("preDrawImage=>curTask:", _currentTask);
 
-    if (!_currentTask?.taskId) return;
+    if (!_currentTask) return;
 
     let maxSliceWidth = 0; // 最大的裁切块宽度,图片容器以此为准
 
@@ -250,7 +250,7 @@ export default function useDraw() {
   }
 
   async function processSliceUrls(_currentTask: Task | undefined) {
-    if (!_currentTask?.taskId) return;
+    if (!_currentTask) return;
 
     const getNum = (num) => Math.max(Math.min(1, num), 0);
 
@@ -283,11 +283,11 @@ export default function useDraw() {
   async function preDrawImageHistory(_currentTask: Task | undefined) {
     console.log("preDrawImageHistory=>curTask:", _currentTask);
 
-    if (!_currentTask?.taskId) return;
+    if (!_currentTask) return;
 
     let maxSliceWidth = 0; // 最大的裁切块宽度,图片容器以此为准
 
-    const hasSliceConfig = _currentTask?.sliceConfig?.length;
+    const hasSliceConfig = _currentTask.sliceConfig?.length;
     // _currentTask.sheetUrls = ["/1-1.jpg", "/1-2.jpg"];
     _currentTask.sliceUrls = await processSliceUrls(_currentTask);
 

+ 7 - 1
src/features/mark/modals/ModalAnswer.vue

@@ -31,6 +31,12 @@ const close = () => {
 };
 
 const url = computed(() => {
-  return markStore.setting.subject.answerUrl?.url || "";
+  const answerUrl = markStore.setting.subject.answerUrl || [];
+  if (answerUrl.length === 0) return "";
+
+  return (
+    answerUrl.filter((u) => u.paperType === markStore.currentTask?.paperType)[0]
+      ?.url || ""
+  );
 });
 </script>

+ 7 - 1
src/features/mark/modals/ModalPaper.vue

@@ -30,6 +30,12 @@ const close = () => {
 };
 
 const url = computed(() => {
-  return markStore.setting.subject.paperUrl?.url || "";
+  const paperUrl = markStore.setting.subject.paperUrl || [];
+  if (paperUrl.length === 0) return "";
+
+  return (
+    paperUrl.filter((u) => u.paperType === markStore.currentTask?.paperType)[0]
+      ?.url || ""
+  );
 });
 </script>

+ 7 - 5
src/features/reject/Reject.vue

@@ -43,7 +43,7 @@
 
 <script setup lang="ts">
 import { onMounted } from "vue";
-import { store } from "@/store/app";
+import { useMarkStore } from "@/store";
 import { message } from "ant-design-vue";
 import { getMarkTask } from "@/api/markPage";
 import { doLogout } from "@/api/markPage";
@@ -54,6 +54,8 @@ import MarkTool from "../mark/toolbar/MarkTool.vue";
 import ModalMinimap from "../mark/modals/ModalMinimap.vue";
 import RejectBoard from "./RejectBoard.vue";
 
+const markStore = useMarkStore();
+
 // taskId
 const rejectParam = vls.get("reject", {});
 
@@ -67,7 +69,7 @@ async function fetchTask() {
 
   const res = await getMarkTask(rejectParam.taskId);
   if (!res?.data) {
-    store.message = "无数据!";
+    markStore.message = "无数据!";
     return;
   }
 
@@ -79,7 +81,7 @@ async function fetchTask() {
   rawTask.paperNumber = rejectParam.paperNumber;
   rawTask.studentCode = rejectParam.studentCode;
   rawTask.studentName = rejectParam.studentName;
-  store.currentTask = rawTask;
+  markStore.currentTask = rawTask;
 }
 
 onMounted(async () => {
@@ -87,7 +89,7 @@ onMounted(async () => {
 });
 
 const renderError = () => {
-  store.currentTask = undefined;
-  store.message = "加载失败,请重新加载。";
+  markStore.currentTask = undefined;
+  markStore.message = "加载失败,请重新加载。";
 };
 </script>

+ 7 - 5
src/features/reject/RejectBoard.vue

@@ -6,7 +6,7 @@
         <p>评卷总分</p>
       </div>
       <div class="board-header-score">
-        <span>{{ store.currentTask?.markerScore }}</span>
+        <span>{{ markStore.currentTask?.markerScore }}</span>
       </div>
     </div>
     <div class="board-body">
@@ -79,9 +79,11 @@ import type { Rule } from "ant-design-vue/es/form";
 import { message, type FormInstance } from "ant-design-vue";
 import { onMounted, ref, reactive } from "vue";
 
-import { store } from "@/store/app";
+import { useMarkStore } from "@/store";
 import { doRejectTask } from "@/api/markPage";
 
+const markStore = useMarkStore();
+
 interface SubQuestion {
   subNumber: string;
   subName: string;
@@ -110,11 +112,11 @@ const columns = [
 ];
 
 function parseQuestions() {
-  if (!store.currentTask?.questionList) return;
+  if (!markStore.currentTask?.questionList) return;
 
   const questionList = [];
 
-  store.currentTask.questionList.forEach((q) => {
+  markStore.currentTask.questionList.forEach((q) => {
     if (!questionList[q.mainNumber]) {
       questionList[q.mainNumber] = {
         mainNumber: q.mainNumber,
@@ -159,7 +161,7 @@ async function toReject(values: FormState) {
   loading.value = true;
 
   const res = await doRejectTask({
-    id: store.currentTask.taskId,
+    id: markStore.currentTask.taskId,
     rejectReason: values.rejectReason,
   }).catch(() => false);
 

+ 0 - 5
src/filters/index.ts

@@ -1,6 +1,5 @@
 import { YYYYMMDDHHmmss } from "@/constants/constants";
 import moment from "moment";
-import { store } from "@/store/app";
 
 export default {
   /** 返回YYYY-MM-DD HH:mm:ss */
@@ -8,10 +7,6 @@ export default {
     return moment(epochTime).format(YYYYMMDDHHmmss);
   },
   /** 根据fileServer得到完整的资源路径 */
-  toCompleteUrl(path: string) {
-    return store.setting.fileServer + path;
-  },
-  /** 根据fileServer得到完整的资源路径 */
   toCompleteUrlWithFileServer(fileServer: string, path: string) {
     return fileServer + path;
   },

+ 7 - 11
src/plugins/axiosApp.ts

@@ -3,7 +3,7 @@ import { loadProgressBar } from "axios-progress-bar";
 import { notifyInvalidTokenThrottled } from "./axiosNotice";
 import axiosRetry from "axios-retry";
 import { message } from "ant-design-vue";
-import { store } from "@/store/app";
+import { useMarkStore } from "@/store";
 import vls from "../utils/storage";
 import { getAuthorization } from "../utils/crypto";
 import { DEVICE_ID, PLATFORM } from "../constants/app";
@@ -15,6 +15,8 @@ const config = {
   withCredentials: true, // Check cross-site Access-Control
 };
 
+const markStore = useMarkStore();
+
 const _axiosApp = axios.create(config);
 axiosRetry(_axiosApp);
 
@@ -57,16 +59,13 @@ function setAuth(config) {
 _axiosApp.interceptors.request.use(
   function (config) {
     if (config.setGlobalMask) {
-      store.globalMask = true;
+      markStore.globalMask = true;
     }
     setAuth(config);
     return config;
   },
   function (error) {
-    // if (error.config.setGlobalMask) {
-    //   store.globalMask = false;
-    // }
-    store.globalMask = false;
+    markStore.globalMask = false;
     void message.error({ content: error, duration: 10 });
     console.log(error);
     return Promise.reject(error);
@@ -79,7 +78,7 @@ _axiosApp.interceptors.response.use(
     initSyncTime(new Date(response.headers.date).getTime());
 
     if (response.config.setGlobalMask) {
-      store.globalMask = false;
+      markStore.globalMask = false;
     }
     return response.data || {};
   },
@@ -87,10 +86,7 @@ _axiosApp.interceptors.response.use(
     if (error.response) {
       initSyncTime(new Date(error.response.headers.date).getTime());
     }
-    // if (error.config?.setGlobalMask) {
-    //   store.globalMask = false;
-    // }
-    store.globalMask = false;
+    markStore.globalMask = false;
 
     const showErrorMessage = !error.config?.noErrorMessage;
     if (!error.response) {

+ 2 - 2
src/types/index.ts

@@ -345,7 +345,7 @@ export interface ColorMap {
 export interface Track {
   /** 大题号 */
   mainNumber: number;
-  /** 小题号,当前api中只有number // 特殊标记中没有 */
+  /** 小题号,当前api中只有number  */
   subNumber: string;
   /** 前端使用,暂时用不着,赋0 */
   number: number;
@@ -373,7 +373,7 @@ export interface Track {
 export interface SpecialTag {
   /** 大题号 */
   mainNumber: number;
-  /** 小题号,当前api中只有number // 特殊标记中没有 */
+  /** 小题号,当前api中只有number */
   subNumber: string;
   /** 第几张图 */
   offsetIndex: number;