zhangjie 1 سال پیش
والد
کامیت
46a5cb570b
2فایلهای تغییر یافته به همراه36 افزوده شده و 3 حذف شده
  1. 32 3
      src/features/invigilation/RealtimeMonitoring/RealtimeMonitoring.vue
  2. 4 0
      src/store/modules/invigilation.js

+ 32 - 3
src/features/invigilation/RealtimeMonitoring/RealtimeMonitoring.vue

@@ -436,7 +436,7 @@ export default {
     };
   },
   computed: {
-    ...mapState("invigilation", ["liveDomains"]),
+    ...mapState("invigilation", ["liveDomains", "warningMessageTimeCaches"]),
     isFullScreen() {
       return this.$store.state.isFullScreen;
     },
@@ -453,7 +453,10 @@ export default {
   },
   methods: {
     ...mapActions("invigilation", ["updateDetailIds"]),
-    ...mapMutations("invigilation", ["setDetailIds"]),
+    ...mapMutations("invigilation", [
+      "setDetailIds",
+      "setWarningMessageTimeCaches",
+    ]),
     clearLoopSetTs() {
       if (!this.loopSetTs.length) return;
       this.loopSetTs.forEach((sett) => {
@@ -621,6 +624,31 @@ export default {
       });
       this.communicationCount = res.data.data.count || 0;
     },
+    getValidWarningList(data) {
+      let dataList = [];
+      const maxCount = 16;
+      const maxCacheTime = 5 * 60 * 1000;
+      const warningMessageTimeCaches = { ...this.warningMessageTimeCaches };
+      for (let i = 0; i < data.length; i++) {
+        const item = data[i];
+        const stdKey = item.examRecordId;
+        const nowTime = Date.now();
+
+        if (warningMessageTimeCaches[stdKey]) {
+          if (nowTime - warningMessageTimeCaches[stdKey] > maxCacheTime) {
+            dataList.push(item);
+          }
+        } else {
+          warningMessageTimeCaches[stdKey] = nowTime;
+          dataList.push(item);
+        }
+
+        if (dataList.length >= maxCount) {
+          this.setWarningMessageTimeCaches(warningMessageTimeCaches);
+          return dataList;
+        }
+      }
+    },
     async fetchWarningNotice() {
       if (!this.filter.examId) return;
       this.cleartNoticeLoopSetTs();
@@ -653,7 +681,7 @@ export default {
       const maxNoticeCount = 3;
 
       const res = await invigilationWarningMessage(this.filter.examId);
-      const dataList = res.data.data.slice(-16);
+      const dataList = this.getValidWarningList(res.data.data);
       for (let i = 0, len = dataList.length; i < len; i++) {
         const item = dataList[i];
         const stdKey = item.examRecordId;
@@ -741,6 +769,7 @@ export default {
     },
   },
   beforeDestroy() {
+    this.setWarningMessageTimeCaches = {};
     delete window.inviligateWarning;
   },
   beforeRouteEnter(to, from, next) {

+ 4 - 0
src/store/modules/invigilation.js

@@ -23,6 +23,7 @@ const state = {
   detailIds: [],
   liveDomains: [],
   selectedExamId: null,
+  warningMessageTimeCaches: {},
 };
 
 const mutations = {
@@ -44,6 +45,9 @@ const mutations = {
   setSelectedExamId(state, selectedExamId) {
     state.selectedExamId = selectedExamId;
   },
+  setWarningMessageTimeCaches(state, warningMessageTimeCaches) {
+    state.warningMessageTimeCaches = warningMessageTimeCaches;
+  },
 };
 
 const actions = {