Przeglądaj źródła

feat: 新需求

zhangjie 1 miesiąc temu
rodzic
commit
9d1ccf7f92

+ 7 - 1
src/App.vue

@@ -12,9 +12,10 @@
 </template>
 
 <script setup lang="ts">
-import { watch, watchEffect } from "vue";
+import { watch, watchEffect, onMounted } from "vue";
 import { useMarkStore } from "@/store";
 import zhCN from "ant-design-vue/es/locale/zh_CN";
+import ls from "./utils/storage";
 
 const markStore = useMarkStore();
 markStore.resetInfo();
@@ -32,6 +33,11 @@ watchEffect(() => {
   const bodyScrollProp = spinning ? "hidden" : null;
   document.body.style.overflow = bodyScrollProp;
 });
+
+onMounted(() => {
+  const data = ls.get("schoolInfo", {});
+  if (data.tabName) document.title = data.tabName;
+});
 </script>
 
 <style>

+ 9 - 2
src/features/arbitrate/ArbitrateMarkList.vue

@@ -19,8 +19,15 @@
       </div>
       <div class="noun-item">
         <div class="noun-item-title">评分</div>
-        <div class="noun-item-content">
-          {{ markDetail.totalScore }}
+        <div
+          :class="[
+            'noun-item-content',
+            { 'is-error': markDetail.totalScore === -1 },
+          ]"
+        >
+          {{
+            markDetail.totalScore === -1 ? "评卷失败" : markDetail.totalScore
+          }}
         </div>
       </div>
     </div>

+ 2 - 2
src/features/mark/composables/useAutoChooseFirstQuestion.ts

@@ -85,10 +85,10 @@ export default function useAutoChooseFirstQuestion() {
 
     markStore.currentQuestion = question;
     // FIXME: maybe should be an async function, temp fix for eslint
-    void scrollToQuestionOfBoard(question);
-    scrollToQuestionArea(question);
 
     void nextTick(() => {
+      void scrollToQuestionOfBoard(question);
+      scrollToQuestionArea(question);
       if (markStore.currentQuestion) {
         showRejectedReason(markStore.currentQuestion);
       }

+ 34 - 8
src/features/mark/scoring/MarkBoardTrack.vue

@@ -412,6 +412,24 @@ function submitListener(e: KeyboardEvent) {
     submit();
   }
 }
+
+function aiAbnormalHandle() {
+  if (!props.isCheckAnswer || !markStore.currentTask) return;
+
+  let firstAbnormalQuestion: Question | null = null;
+  markStore.currentTask.questionList.forEach((question) => {
+    if (question.problem || isArbitrated(question) || !question.selfMark)
+      return;
+
+    if (question.markerScore === -1) {
+      clearAllMarksOfCurrentQuetion(question);
+      if (!firstAbnormalQuestion) firstAbnormalQuestion = question;
+    }
+  });
+
+  if (firstAbnormalQuestion) chooseQuestion(firstAbnormalQuestion);
+}
+
 onMounted(() => {
   document.addEventListener("keydown", numberKeyListener);
   document.addEventListener("keydown", submitListener);
@@ -421,6 +439,13 @@ onUnmounted(() => {
   document.removeEventListener("keydown", submitListener);
 });
 
+watch(
+  () => markStore.currentTask,
+  () => {
+    aiAbnormalHandle();
+  }
+);
+
 watch(
   () => markStore.isScoreBoardCollapsed,
   () => {
@@ -464,27 +489,28 @@ function clearLatestMarkOfCurrentQuetion() {
           .reduce((acc, v) => (acc += Math.round(v * 1000)), 0) / 1000;
 }
 
-function clearAllMarksOfCurrentQuetion() {
+function clearAllMarksOfCurrentQuetion(cQuestion: Question | undefined) {
+  const currentQuestion = cQuestion || markStore.currentQuestion;
   // 只要清除分数,就当做修改了
   hasModifyScore.value = true;
 
-  if (!markStore.currentTask?.markResult || !markStore.currentQuestion) return;
+  if (!markStore.currentTask?.markResult || !currentQuestion) return;
 
-  const qno = `${markStore.currentQuestion.mainNumber}_${markStore.currentQuestion.subNumber}`;
+  const qno = `${currentQuestion.mainNumber}_${currentQuestion.subNumber}`;
   markStore.currentTaskModifyQuestion[qno] = true;
 
   const markResult = markStore.currentTask.markResult;
   markStore.removeScoreTracks = markResult.markerTrackList.filter(
     (q) =>
-      q.mainNumber === markStore.currentQuestion?.mainNumber &&
-      q.subNumber === markStore.currentQuestion?.subNumber
+      q.mainNumber === currentQuestion?.mainNumber &&
+      q.subNumber === currentQuestion?.subNumber
   );
   markResult.markerTrackList = markResult.markerTrackList.filter(
     (q) =>
-      q.mainNumber !== markStore.currentQuestion?.mainNumber ||
-      q.subNumber !== markStore.currentQuestion?.subNumber
+      q.mainNumber !== currentQuestion?.mainNumber ||
+      q.subNumber !== currentQuestion?.subNumber
   );
-  const { __index } = markStore.currentQuestion;
+  const { __index } = currentQuestion;
   markResult.scoreList[__index] = null;
 }
 

+ 5 - 1
src/styles/page.less

@@ -809,7 +809,7 @@
 
   .board-footer {
     position: absolute;
-    bottom: 16px;
+    bottom: 12px;
     left: 5px;
     right: 5px;
     height: 36px;
@@ -1325,6 +1325,10 @@
     &-content {
       margin-left: 60px;
       line-height: 20px;
+
+      &.is-error {
+        color: #fe5d4e;
+      }
     }
   }
 }