瀏覽代碼

双评主观题检查调整

zhangjie 1 年之前
父節點
當前提交
c1ed658ee7

+ 2 - 2
src/features/check/CommonMarkBody.vue

@@ -342,9 +342,9 @@ const showBigImage = (event: MouseEvent) => {
 //   console.log({ key, target, type });
 // });
 let topKB = $ref(10);
-const topKBStyle = $computed(() => topKB + "%");
+// const topKBStyle = $computed(() => topKB + "%");
 let leftKB = $ref(10);
-const leftKBStyle = $computed(() => leftKB + "%");
+// const leftKBStyle = $computed(() => leftKB + "%");
 function moveCicle(event: KeyboardEvent) {
   // query mark-body-container and body to calc max/min topKB and max leftKB
   if (event.key === "k") {

+ 44 - 28
src/features/check/SubjectiveAnswer.vue

@@ -78,7 +78,11 @@
     />
     <div class="mark-main">
       <mark-body @error="removeBrokenTask" />
-      <mark-board-track v-if="store.isTrackMode" @submit="saveTaskToServer" />
+      <mark-board-track
+        v-if="store.isTrackMode"
+        isCheckAnswer
+        @submit="saveTaskToServer"
+      />
       <mark-board-key-board
         v-if="store.shouldShowMarkBoardKeyBoard"
         @submit="saveTaskToServer"
@@ -99,6 +103,7 @@
   <ShortCutModal />
   <MarkBoardTrackDialog
     v-if="store.isTrackMode"
+    isCheckAnswer
     @submit="saveTaskToServer"
     @allZeroSubmit="allZeroSubmit"
   />
@@ -289,19 +294,22 @@ const getMarkData = () => {
     groupMap[groupNumber].specialTagList.push(track);
   });
 
+  const modifiedQuestions = Object.keys(store.currentTaskModifyQuestion).filter(
+    (k) => store.currentTaskModifyQuestion[k]
+  );
+
   let groups = Object.values(groupMap).map((item) => {
     let qScore = {};
-    item.trackList.forEach((track) => {
+    const trackList = item.trackList.filter((track) =>
+      modifiedQuestions.includes(`${track.mainNumber}_${track.subNumber}`)
+    );
+    if (!trackList.length) return null;
+
+    trackList.forEach((track) => {
       const qno = `${track.mainNumber * 1000}${track.subNumber}`;
       qScore[qno] = (qScore[qno] || 0) + track.score;
     });
 
-    // 过滤分数未修改小题的分组
-    const groupChanged = Object.entries(qScore).some(
-      ([qno, score]) => score !== taskQuestionInfo[qno].score
-    );
-    if (!groupChanged) return null;
-
     let qScoreList = Object.entries(qScore).map(([qno, score]) => {
       return {
         qno: qno * 1,
@@ -314,6 +322,7 @@ const getMarkData = () => {
     return {
       ...commomData,
       ...item,
+      trackList,
       scoreList,
       markerScore: calcSum(scoreList),
       studentId: store.currentTask.studentId,
@@ -381,25 +390,25 @@ const saveTaskToServer = async () => {
     return;
   }
 
-  if (!store.isTrackMode) {
-    markResult.trackList = [];
-  } else {
-    const trackScores =
-      markResult.trackList
-        .map((t) => Math.round((t.score || 0) * 100))
-        .reduce((acc, s) => acc + s, 0) / 100;
-    // console.log(markResult.trackList);
-    // console.log(trackScores, markResult.markerScore);
-
-    if (trackScores !== markResult.markerScore) {
-      void message.error({
-        content: "轨迹分与总分不一致,请检查。",
-        duration: 3,
-        key: mkey,
-      });
-      return;
-    }
-  }
+  // if (!store.isTrackMode) {
+  //   markResult.trackList = [];
+  // } else {
+  //   const trackScores =
+  //     markResult.trackList
+  //       .map((t) => Math.round((t.score || 0) * 100))
+  //       .reduce((acc, s) => acc + s, 0) / 100;
+  //   // console.log(markResult.trackList);
+  //   // console.log(trackScores, markResult.markerScore);
+
+  //   if (trackScores !== markResult.markerScore) {
+  //     void message.error({
+  //       content: "轨迹分与总分不一致,请检查。",
+  //       duration: 3,
+  //       key: mkey,
+  //     });
+  //     return;
+  //   }
+  // }
 
   console.log("save task to server");
   void message.loading({ content: "保存检查任务...", key: mkey });
@@ -417,7 +426,14 @@ const saveTaskToServer = async () => {
   }
 
   if (!isMultiStudent) {
-    window.close();
+    void message.success({
+      content: "页面将在3秒钟之后关闭",
+      key: mkey,
+      duration: 2,
+    });
+    // setTimeout(() => {
+    //   window.close();
+    // }, 3000);
     return;
   }
   await getNextStudent();

+ 38 - 12
src/features/mark/MarkBoardTrack.vue

@@ -116,7 +116,7 @@
         <img src="@/assets/icons/icon-down.svg" />
       </div>
     </div>
-    <div class="board-scores">
+    <div v-if="!questionScoreDisabled" class="board-scores">
       <div
         v-for="(s, i) in questionScoreSteps.slice(1)"
         :key="i"
@@ -134,16 +134,19 @@
       </div>
     </div>
     <div class="board-footer">
-      <qm-button
-        class="board-goback"
-        :clickTimeout="300"
-        @click="clearLatestMarkOfCurrentQuetion"
-      >
-        <template #icon>
-          <img src="@/assets/icons/icon-goback.svg" />
-        </template>
-        回退
-      </qm-button>
+      <div>
+        <qm-button
+          v-if="!questionScoreDisabled"
+          class="board-goback"
+          :clickTimeout="300"
+          @click="clearLatestMarkOfCurrentQuetion"
+        >
+          <template #icon>
+            <img src="@/assets/icons/icon-goback.svg" />
+          </template>
+          回退
+        </qm-button>
+      </div>
 
       <qm-button
         class="board-clear"
@@ -172,7 +175,7 @@ import { addFocusTrack, removeFocusTrack } from "./use/focusTracks";
 import EventBus from "@/plugins/eventBus";
 import { cloneDeep } from "lodash-es";
 
-const props = defineProps<{ modal?: boolean }>();
+const props = defineProps<{ modal?: boolean; isCheckAnswer?: boolean }>();
 const emit = defineEmits(["submit", "unselectiveSubmit"]);
 const { dragSpliter, areaHeight } = dragSplitPane();
 const activeRightMenuItem = ref<any>(null);
@@ -243,6 +246,25 @@ watch(
   () => (store.currentScore = undefined)
 );
 
+watch(
+  () => store.currentTask,
+  () => {
+    if (!props.isCheckAnswer) return;
+
+    let currentTaskModifyQuestion = {};
+    store.currentTask.questionList.forEach((q) => {
+      const qno = `${q.mainNumber}_${q.subNumber}`;
+      currentTaskModifyQuestion[qno] = false;
+    });
+    store.currentTaskModifyQuestion = currentTaskModifyQuestion;
+  }
+);
+
+const questionScoreDisabled = $computed(() => {
+  const qno = `${store.currentQuestion.mainNumber}_${store.currentQuestion.subNumber}`;
+  return props.isCheckAnswer && !store.currentTaskModifyQuestion[qno];
+});
+
 const questionScore = $computed(
   () =>
     store.currentTask &&
@@ -303,6 +325,7 @@ let keyPressTimestamp = 0;
 let keys: string[] = [];
 function numberKeyListener(event: KeyboardEvent) {
   if (!store.currentQuestion) return;
+  if (questionScoreDisabled) return;
   if (" jiklc".includes(event.key)) return;
   // if (event.key === "#") {
   //   keys = [];
@@ -411,6 +434,9 @@ function clearLatestMarkOfCurrentQuetion() {
 function clearAllMarksOfCurrentQuetion() {
   if (!store.currentTask?.markResult || !store.currentQuestion) return;
 
+  const qno = `${store.currentQuestion.mainNumber}_${store.currentQuestion.subNumber}`;
+  store.currentTaskModifyQuestion[qno] = true;
+
   const markResult = store.currentTask.markResult;
   store.removeScoreTracks = markResult.trackList.filter(
     (q) =>

+ 3 - 1
src/features/mark/MarkBoardTrackDialog.vue

@@ -4,13 +4,14 @@
     title="给分板"
     top="10%"
     fixedWidth
-    width="362px"
+    width="380px"
     height="600px"
     customClass="board-track-dialog"
     @close="close"
   >
     <mark-board-track
       modal
+      isCheckAnswer
       @submit="$emit('submit')"
       @allZeroSubmit="$emit('allZeroSubmit')"
       @unselectiveSubmit="$emit('unselectiveSubmit')"
@@ -24,6 +25,7 @@ import { store } from "@/store/store";
 import MarkBoardTrack from "./MarkBoardTrack.vue";
 
 defineEmits(["submit", "allZeroSubmit", "unselectiveSubmit"]);
+defineProps<{ isCheckAnswer?: boolean }>();
 
 const close = () => {
   store.toggleScoreBoard();

+ 2 - 0
src/store/store.ts

@@ -43,6 +43,8 @@ const initState: MarkStore = {
   tasks: [],
   message: null,
   currentTask: undefined,
+  // 主观题检查时,缓存已经修改过的试题
+  currentTaskModifyQuestion: {},
   currentQuestion: undefined,
   currentScore: undefined,
   currentSpecialTag: undefined,

+ 5 - 0
src/styles/page.less

@@ -735,6 +735,11 @@
       &:hover {
         background: #f0f0f0;
       }
+
+      &[disabled] {
+        color: #999;
+        background-color: #f0f0f0;
+      }
     }
     .board-clear {
       background-color: #fff2f0;