瀏覽代碼

feat: 1.2.9新需求

zhangjie 11 月之前
父節點
當前提交
73b8388b28

+ 8 - 0
src/api/invigilation.js

@@ -117,6 +117,14 @@ export function exportPatrolReportList(datas) {
     }
   );
 }
+// 重点标记
+export function invigilateMark(datas) {
+  // examRecordId,status
+  return httpApp.post(
+    "/api/admin/invigilate/mark?" + object2QueryString(datas),
+    []
+  );
+}
 
 // 强制/手动交卷接口
 export function invigilateFinish(datas) {

二進制
src/assets/icon-star-fill.png


二進制
src/assets/icon-star.png


+ 5 - 0
src/constant/constants.js

@@ -105,6 +105,11 @@ export const APPROVE_STATUS = {
   0: "未审阅",
   1: "已审阅",
 };
+// 监控标记状态
+export const MARK_STATUS = {
+  MARK: "标记",
+  UN_MARK: "撤销标记",
+};
 // 重考方式
 export const REEXAM_TYPE = {
   0: "批次内",

+ 1 - 1
src/features/invigilation/InvigilationDetail/InvigilationDetail.vue

@@ -472,7 +472,7 @@ export default {
         customClass: "el-message-box__error",
       }).catch(() => {});
 
-      if (!result) return;
+      if (result !== "confirm") return;
 
       await invigilateExamFinish(
         this.filter.examId,

+ 38 - 5
src/features/invigilation/RealtimeMonitoring/WarningDetail.vue

@@ -171,13 +171,27 @@
               class="action-item"
             >
               <el-button
-                icon="icon icon-media"
+                icon="icon icon-call"
                 size="mideum"
                 :loading="holding"
-                @click="answer(1)"
-                >视频通话</el-button
+                @click="answer(0)"
+                >语音通话</el-button
+              >
+            </div>
+            <div v-if="actionValid" class="action-item">
+              <el-button
+                :icon="
+                  detailInfo.markStatus === 'MARK'
+                    ? 'icon icon-star-fill'
+                    : 'icon icon-star'
+                "
+                size="mideum"
+                @click="toMark"
               >
+                {{ detailInfo.markStatus === "MARK" ? "撤销标记" : "重点标记" }}
+              </el-button>
             </div>
+            <div v-if="actionValid" class="action-item"></div>
             <div class="action-item">
               <el-button
                 icon="icon icon-info-danger"
@@ -366,6 +380,7 @@ import {
 import {
   invigilateDetail,
   invigilateFinish,
+  invigilateMark,
   communicationCalling,
   communicationOver,
   warningStudentDetail,
@@ -744,8 +759,26 @@ export default {
       };
       this.$refs.StudentBreachDialog.open();
     },
+    async toMark() {
+      const typeName =
+        this.detailInfo.markStatus === "MARK" ? "撤销标记" : "标记";
+      const confirm = await this.$confirm(`确定要${typeName}吗?`, "确认提醒", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        iconClass: "el-icon-warning",
+        customClass: "el-message-box__error",
+      }).catch(() => {});
+      if (confirm !== "confirm") return;
+      const status = this.detailInfo.markStatus === "MARK" ? "UN_MARK" : "MARK";
+      await invigilateMark({
+        examRecordId: this.detailInfo.examRecordId,
+        status,
+      });
+      this.$message.success("操作成功!");
+      this.detailInfo.markStatus = status;
+    },
     async toFinish() {
-      const result = await this.$confirm(
+      const confirm = await this.$confirm(
         "试卷若被强制回收,考试再无法重置继续完成考试,请您慎重选择!您确定要强制回收改考试试卷吗?",
         "强制收卷确认提醒",
         {
@@ -756,7 +789,7 @@ export default {
         }
       ).catch(() => {});
 
-      if (!result) return;
+      if (confirm !== "confirm") return;
 
       await invigilateFinish({
         examRecordId: [this.detailInfo.examRecordId],

+ 11 - 0
src/features/invigilation/RealtimeMonitoring/components/RealtimeMonitoringFullHeader.vue

@@ -54,6 +54,13 @@
             </el-option>
           </el-select>
         </el-form-item>
+        <el-form-item class="media-source-select">
+          <el-button
+            :type="filter.markStatus === 'MARK' ? 'warning' : ''"
+            @click="markChange"
+            >重点监控</el-button
+          >
+        </el-form-item>
       </el-form>
     </div>
     <div class="current-date-time">
@@ -87,6 +94,7 @@ export default {
         roomCode: "",
         monitorVideoSource: "",
         monitorStatus: "",
+        markStatus: "",
       },
       /** 场次列表 */
       examActivities: [],
@@ -154,6 +162,9 @@ export default {
       });
       return examActivitys;
     },
+    markChange() {
+      this.filter.markStatus = this.filter.markStatus === "MARK" ? "" : "MARK";
+    },
   },
 };
 </script>

+ 17 - 1
src/features/invigilation/WarningManage/WarningManage.vue

@@ -152,6 +152,20 @@
               :controls="false"
             ></el-input-number>
           </el-form-item>
+          <el-form-item>
+            <el-select
+              v-model="filter.markStatus"
+              placeholder="标记状态"
+              clearable
+            >
+              <el-option
+                v-for="(val, key) in MARK_STATUS"
+                :key="key"
+                :value="key"
+                :label="val"
+              ></el-option>
+            </el-select>
+          </el-form-item>
           <el-form-item>
             <el-button type="primary" @click="toSearch">查询</el-button>
           </el-form-item>
@@ -239,7 +253,7 @@ import {
   invigilationWarningList,
   clearInvigilationFilterUnreadWarningList,
 } from "@/api/invigilation";
-import { APPROVE_STATUS } from "@/constant/constants";
+import { APPROVE_STATUS, MARK_STATUS } from "@/constant/constants";
 import { mapState, mapActions, mapMutations } from "vuex";
 
 export default {
@@ -254,6 +268,7 @@ export default {
         approveStatus: null,
         name: "",
         identity: "",
+        markStatus: null,
         maxMultipleFaceCount: undefined,
         minMultipleFaceCount: undefined,
         maxExceptionCount: undefined,
@@ -264,6 +279,7 @@ export default {
       dataReady: false,
       curExamRoomName: "",
       APPROVE_STATUS,
+      MARK_STATUS,
       multipleSelection: [],
       current: 1,
       total: 0,

+ 6 - 0
src/styles/icons.scss

@@ -306,4 +306,10 @@
   &-waring {
     background-image: url(../assets/icon-waring.png);
   }
+  &-star {
+    background-image: url(../assets/icon-star.png);
+  }
+  &-star-fill {
+    background-image: url(../assets/icon-star-fill.png);
+  }
 }

+ 1 - 1
src/views/Layout/components/NavBar.vue

@@ -135,7 +135,7 @@ export default {
         customClass: "el-message-box__warning",
       }).catch(() => {});
 
-      if (!result) return;
+      if (result !== "confirm") return;
 
       this.$store.commit("invigilation/setSelectedExamId", null);
       this.logout("?cause=点击退出");