소스 검색

fix: 回评历史切换报错问题

zhangjie 1 개월 전
부모
커밋
edc74c55ce

+ 3 - 1
src/features/mark/composables/useSliceTrack.ts

@@ -358,7 +358,9 @@ export default function useSliceTrack(hasMarkResultToRender = false) {
     // 在阻止渲染的情况下,watchEffect收集不到 store.currentTask 的依赖,会导致本组件不再更新
     watch(
       () => markStore.currentTask,
-      () => {
+      (val, oldval) => {
+        // console.log(val?.secretNumber, oldval?.secretNumber);
+        if (val?.secretNumber === oldval?.secretNumber) return;
         setTimeout(renderPaperAndMark, 50);
       }
     );

+ 1 - 0
src/features/mark/scoring/MarkBoardKeyBoard.vue

@@ -1,6 +1,7 @@
 <template>
   <div
     v-if="markStore.currentTask"
+    :key="markStore.currentTask?.secretNumber || 0"
     class="mark-board-track is-key-board"
     :class="[
       markStore.isTrackMode && markStore.isScoreBoardCollapsed

+ 1 - 0
src/features/mark/scoring/MarkBoardMouse.vue

@@ -1,6 +1,7 @@
 <template>
   <div
     v-if="markStore.currentTask"
+    :key="markStore.currentTask?.secretNumber || 0"
     class="mark-board-track is-mouse-board"
     :class="[
       markStore.isTrackMode && markStore.isScoreBoardCollapsed

+ 1 - 0
src/features/mark/scoring/MarkBoardTrack.vue

@@ -1,6 +1,7 @@
 <template>
   <div
     v-if="markStore.currentTask"
+    :key="markStore.currentTask?.secretNumber || 0"
     class="mark-board-track"
     :class="[
       {

+ 16 - 1
src/setups/useTimers.ts

@@ -28,17 +28,32 @@ export function useTimers() {
     mixin__timeouts.push(i);
   }
 
-  onUnmounted(() => {
+  function clearIntervals() {
     for (const i of mixin__intervals) {
       clearInterval(i);
     }
+  }
+
+  function clearTimeouts() {
     for (const i of mixin__timeouts) {
       clearTimeout(i);
     }
+  }
+
+  function clearAll() {
+    clearIntervals();
+    clearTimeouts();
+  }
+
+  onUnmounted(() => {
+    clearAll();
   });
 
   return {
     addInterval,
     addTimeout,
+    clearAll,
+    clearTimeouts,
+    clearIntervals,
   };
 }