From 8269775d78f974a266c848ea15e73a85dafec2a5 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期四, 11 七月 2024 16:51:17 +0800
Subject: [PATCH] 监控展示还没开始做题的学生

---
 src/views/exam/exam/monitor.vue         |   57 ++++++++++---------
 src/views/answer/info.vue               |   72 +++++++++++++----------
 src/views/meet/index.vue                |    1 
 src/views/exam/exam/MarkPaper.vue       |    1 
 src/router.js                           |    4 
 src/views/exam/exam/ExamManage.vue      |   30 ++++++---
 src/views/exam/exam/MarkPaperDetail.vue |    3 +
 7 files changed, 96 insertions(+), 72 deletions(-)

diff --git a/src/router.js b/src/router.js
index 41f3fee..8d90ad3 100644
--- a/src/router.js
+++ b/src/router.js
@@ -291,7 +291,7 @@
         component: () => import('@/views/education/cheat/list'),
         name: 'EducationCheatPage',
         meta: { title: '浣滃紛璁板綍', noCache: true }
-      },
+      }
     ]
   },
   {
@@ -345,7 +345,7 @@
           affix: true
         },
         component: () => import('@/views/sys/SysSetting')
-      },
+      }
     ]
   },
 
diff --git a/src/views/answer/info.vue b/src/views/answer/info.vue
index d9de560..05db274 100644
--- a/src/views/answer/info.vue
+++ b/src/views/answer/info.vue
@@ -4,7 +4,7 @@
     <div class="bg">
       <div class="main">
         <!-- 寰呰繑鍥炵殑鏍囬 -->
-        <TitleIndex title="绛斿嵎绠$悊" />
+        <TitleIndex title="绛斿嵎绠$悊"/>
         <div class="content">
           <!-- 鎼滅储 -->
           <div>
@@ -23,9 +23,9 @@
           </div>
           <!-- 琛ㄦ牸 -->
           <el-table v-loading="listLoading" :data="tableData" border fit highlight-current-row>
-            <el-table-column prop="examName" label="鑰冭瘯鍚嶇О" align="center" />
-            <el-table-column prop="paperName" label="璇曞嵎鍚嶇О" align="center" />
-            <el-table-column prop="userName" width="150" label="鍙傝�冧汉" align="center" />
+            <el-table-column prop="examName" label="鑰冭瘯鍚嶇О" align="center"/>
+            <el-table-column prop="paperName" label="璇曞嵎鍚嶇О" align="center"/>
+            <el-table-column prop="userName" width="150" label="鍙傝�冧汉" align="center"/>
             <el-table-column label="寰楀垎" width="150px" align="center">
               <template slot-scope="{row}">
                 {{ row.score }} / {{ row.totalScore }}
@@ -36,7 +36,11 @@
                 {{ row.questionCorrect }} / {{ row.questionCount }}
               </template>
             </el-table-column>
-            <el-table-column prop="doTime" label="鑰楁椂" width="80px" align="center" />
+            <el-table-column prop="doTime" label="鑰楁椂" width="100px" align="center">
+              <template slot-scope="{row}">
+                {{ formattedDoTime(row) }}
+              </template>
+            </el-table-column>
             <el-table-column prop="submitTime" label="鎻愪氦鏃堕棿" width="240px" align="center">
               <template slot-scope="{row}">
                 <span :style="row.status === 0 ? '' : 'color: red'">
@@ -51,7 +55,7 @@
             </el-table-column>
           </el-table>
           <pagination v-show="total > 0" :total="total" :page.sync="queryParam.pageIndex"
-            :limit.sync="queryParam.pageSize" @pagination="search" />
+                      :limit.sync="queryParam.pageSize" @pagination="search"/>
         </div>
       </div>
     </div>
@@ -67,7 +71,7 @@
   components: {
     Pagination
   },
-  data() {
+  data () {
     return {
       listLoading: true,
       queryParam: {
@@ -82,16 +86,22 @@
       tableData: [],
       visible: false,
       subjects: []
-    };
+    }
   },
-  created() {
-    this.queryParam.examId = this.$route.query.id;
-    this.queryParam.userId = this.$route.query.userId;
-    this.search();
+  created () {
+    this.queryParam.examId = this.$route.query.id
+    this.queryParam.userId = this.$route.query.userId
+    this.search()
   },
   methods: {
+    formattedDoTime (row) {
+      const totalSeconds = row.doTime
+      const minutes = Math.floor(totalSeconds / 60)
+      const seconds = totalSeconds % 60
+      return `${minutes}鍒�${seconds < 10 ? '0' + seconds : seconds}绉抈
+    },
     // 鑾峰彇鍒楄〃
-    search() {
+    search () {
       this.listLoading = true
       examPaperAnswerApi.page(this.queryParam).then(re => {
         this.tableData = re.data.list
@@ -101,29 +111,29 @@
         this.listLoading = false
       })
     },
-    view(row) {
-      this.$router.push({ path: '/answer/answer-detail', query: { id: row.id } });
+    view (row) {
+      this.$router.push({ path: '/answer/answer-detail', query: { id: row.id } })
     },
-    handleExport() {
+    handleExport () {
       let that = this
-      let url = '/api/admin/examPaperAnswer/exportExcel?userName=' + this.queryParam.userName;
-      if (this.queryParam.userId) url += '&userId=' + this.queryParam.userId;
-      if (this.queryParam.examId) url += '&examId=' + this.queryParam.examId;
-      var x = new XMLHttpRequest();
-      x.open("POST", url, true);
-      x.responseType = "blob";
+      let url = '/api/admin/examPaperAnswer/exportExcel?userName=' + this.queryParam.userName
+      if (this.queryParam.userId) url += '&userId=' + this.queryParam.userId
+      if (this.queryParam.examId) url += '&examId=' + this.queryParam.examId
+      var x = new XMLHttpRequest()
+      x.open('POST', url, true)
+      x.responseType = 'blob'
       x.onload = function () {
-        var url = window.URL.createObjectURL(x.response);
-        var a = document.createElement("a");
-        a.href = url;
-        if (that.queryParam.examId) a.download = that.tableData[0].examName + '.xlsx';
-        if (that.queryParam.userId) a.download = that.tableData[0].userName + '.xlsx';
-        a.click();
-      };
-      x.send();
+        var url = window.URL.createObjectURL(x.response)
+        var a = document.createElement('a')
+        a.href = url
+        if (that.queryParam.examId) a.download = that.tableData[0].examName + '.xlsx'
+        if (that.queryParam.userId) a.download = that.tableData[0].userName + '.xlsx'
+        a.click()
+      }
+      x.send()
     }
   }
-};
+}
 </script>
 <style scoped lang="scss">
 .flex {
diff --git a/src/views/exam/exam/ExamManage.vue b/src/views/exam/exam/ExamManage.vue
index 742481a..e4c5765 100644
--- a/src/views/exam/exam/ExamManage.vue
+++ b/src/views/exam/exam/ExamManage.vue
@@ -35,10 +35,10 @@
         label="鍙傝�冪彮绾�"
         prop="className"
       ></el-table-column>
-<!--      <el-table-column-->
-<!--        label="鐝骇浜烘暟"-->
-<!--        prop="studentNum"-->
-<!--      ></el-table-column>-->
+      <!--      <el-table-column-->
+      <!--        label="鐝骇浜烘暟"-->
+      <!--        prop="studentNum"-->
+      <!--      ></el-table-column>-->
       <el-table-column
         label="鑰冭瘯鍦扮偣"
         prop="examPlace"
@@ -81,8 +81,10 @@
             <el-button slot="reference" type="danger" size="small">鍒犻櫎</el-button>
           </el-popconfirm>
 
-          <el-button v-if="scope.row.status === 'finished'" type="success" size="small" @click="markPaper(scope.row)">闃呭嵎</el-button>
-          <el-button type="danger" size="small" @click="deleteExam(scope.row.id)">鍒犻櫎</el-button>
+          <el-button v-if="scope.row.status === 'finished'" type="success" size="small" @click="markPaper(scope.row)">
+            闃呭嵎
+          </el-button>
+          <el-button type="danger" size="small" @click="deleteExam(scope.row)">鍒犻櫎</el-button>
           <el-button type="warning" size="small" @click="monitor(scope.row)">鐩戞帶</el-button>
         </template>
       </el-table-column>
@@ -245,16 +247,22 @@
         this.classesList = res.data.data
       })
     },
-    deleteExam (id) {
-      deleteExamById(id).then(res => {
-        this.$message.success('鍒犻櫎鎴愬姛')
-        this.page()
+    deleteExam (row) {
+      this.$confirm('纭鏄惁鍒犻櫎' + row.examName + '?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        deleteExamById(row.id).then(res => {
+          this.$message.success('鍒犻櫎鎴愬姛')
+          this.page()
+        })
       })
     },
     handlerEdit (row) {
       this.examForm = {
         ...row,
-      time: [row.startTime, row.endTime]
+        time: [row.startTime, row.endTime]
       }
       this.title = '淇敼鑰冭瘯'
       this.open = true
diff --git a/src/views/exam/exam/MarkPaper.vue b/src/views/exam/exam/MarkPaper.vue
index 3586dfd..77dca0d 100644
--- a/src/views/exam/exam/MarkPaper.vue
+++ b/src/views/exam/exam/MarkPaper.vue
@@ -91,7 +91,6 @@
   mounted () {
     this.examInfo.examName = this.$route.query.examName
     this.examInfo.examId = this.$route.query.examId
-    console.log('------->' + this.examInfo.examName + '------->' + this.examInfo.examId)
     if (this.examInfo.examId) {
       this.getExamInfo()
     }
diff --git a/src/views/exam/exam/MarkPaperDetail.vue b/src/views/exam/exam/MarkPaperDetail.vue
index ef466f7..70319d6 100644
--- a/src/views/exam/exam/MarkPaperDetail.vue
+++ b/src/views/exam/exam/MarkPaperDetail.vue
@@ -56,6 +56,7 @@
         </el-row>
       </el-form>
     </div>
+    <el-empty v-if="empty" style="width:1200px;height:500px;"></el-empty>
   </div>
 </template>
 
@@ -71,11 +72,13 @@
     getStudentExam(this.$route.query.examId, this.$route.query.userId).then(re => {
       this.formLoading = true
       this.form = re.data.data
+      if (!this.form.titleItems) this.empty = true;
       this.formLoading = false
     })
   },
   data () {
     return {
+      empty: false,
       paperQuestionList: [],
       form: {},
       formLoading: false,
diff --git a/src/views/exam/exam/monitor.vue b/src/views/exam/exam/monitor.vue
index e43fad8..90695bb 100644
--- a/src/views/exam/exam/monitor.vue
+++ b/src/views/exam/exam/monitor.vue
@@ -10,11 +10,11 @@
     </el-form>
 
     <el-table v-loading="listLoading" :data="tableData" border fit highlight-current-row style="width: 100%">
-      <el-table-column align="center" prop="examName" label="鑰冭瘯" />
-      <el-table-column align="center" prop="userName" label="濮撳悕" show-overflow-tooltip />
-      <el-table-column align="center" prop="createTime" label="寮�濮嬫椂闂�" />
-      <el-table-column align="center" prop="doTime" label="鑰楁椂锛堢锛�" />
-      <el-table-column align="center" prop="status" label="鐘舵��" :formatter="statusFormatter" />
+      <el-table-column align="center" prop="examName" label="鑰冭瘯"/>
+      <el-table-column align="center" prop="userName" label="濮撳悕" show-overflow-tooltip/>
+      <el-table-column align="center" prop="createTime" label="寮�濮嬫椂闂�"/>
+      <el-table-column align="center" prop="doTime" label="鑰楁椂锛堢锛�"/>
+      <el-table-column align="center" prop="status" label="鐘舵��" :formatter="statusFormatter"/>
       <el-table-column label="鎿嶄綔" align="center">
         <template slot-scope="{row}">
           <el-popover
@@ -23,7 +23,7 @@
             trigger="click">
             <el-form :model="addTimeForm" ref="addTimeForm" :rules="addTimeRule">
               <el-form-item label="瀛﹀憳">
-                <div>{{row.userName}}</div>
+                <div>{{ row.userName }}</div>
               </el-form-item>
               <el-form-item label="鍔犲灏戝垎閽�">
                 <el-input v-model="addTimeForm.addTimeM" type="number" size="small"/>
@@ -45,15 +45,15 @@
       </el-table-column>
     </el-table>
     <pagination v-show="total > 0" :total="total" :page.sync="queryParam.pageIndex" :limit.sync="queryParam.pageSize"
-      @pagination="search" />
+                @pagination="search"/>
 
     <el-dialog :visible.sync="visible" width="400px">
       <el-form :model="form" ref="form" label-width="100px" v-loading="formLoading" :rules="rules">
         <el-form-item label="鍚嶇О锛�" prop="name" required>
-          <el-input v-model="form.name" maxlength="10" show-word-limit />
+          <el-input v-model="form.name" maxlength="10" show-word-limit/>
         </el-form-item>
         <el-form-item label="鎺掑簭锛�" prop="itemOrder" required>
-          <el-input-number v-model="form.itemOrder" type="number" :min="1" :max="100" />
+          <el-input-number v-model="form.itemOrder" type="number" :min="1" :max="100"/>
         </el-form-item>
         <el-form-item>
           <el-button type="primary" @click="submitForm">鎻愪氦</el-button>
@@ -74,7 +74,7 @@
 
 export default {
   components: { Pagination },
-  data() {
+  data () {
     return {
       listLoading: true,
       queryParam: {
@@ -117,18 +117,19 @@
           { required: true, message: '璇疯緭鍏ュ姞鏃舵椂闂�', trigger: 'blur' }
         ]
       },
-    };
+    }
   },
-  created() {
-    this.queryParam.examId = this.$route.query.examId;
+  created () {
+    this.queryParam.examId = this.$route.query.examId
     this.search()
   },
   methods: {
     // 澶勭悊鍔犳椂
-    handlerAddTime() {
+    handlerAddTime (row) {
       this.$refs['addTimeForm'].validate((valid) => {
         if (valid) {
           this.addTimeForm.examId = this.queryParam.examId
+          this.addTimeForm.userId = row.userId
           addTime(this.addTimeForm).then(res => {
             this.$message.success('鍔犳椂鎴愬姛')
           })
@@ -136,28 +137,30 @@
       })
     },
     // 寮哄埗浜ゅ嵎
-    handlerForceSubmit(userId) {
+    handlerForceSubmit (userId) {
       this.forceSubmitForm.examId = this.queryParam.examId
       this.forceSubmitForm.userId = userId
       forceSubmit(this.forceSubmitForm).then(res => {
         this.$message.success('寮哄埗浜ゅ嵎鎴愬姛')
       })
     },
-    handleNullify(row) {
-      let cheatObj = { examId: row.examId, cheatUser: row.userId };
+    handleNullify (row) {
+      let cheatObj = { examId: row.examId, cheatUser: row.userId }
       cheatApi.edit(cheatObj).then(res => {
-        this.$message.success(res.message);
+        this.$message.success(res.message)
       })
     },
-    statusFormatter(row) {
+    statusFormatter (row) {
       if (row.status === 'temp') {
         return '杩涜涓�'
       } else if (row.status === 'finish') {
         return '宸茬粨鏉�'
+      } else if (!row.status) {
+        return '鏈紑濮�'
       }
     },
     // 鑾峰彇鍒楄〃
-    search() {
+    search () {
       this.listLoading = true
       monitorList(this.queryParam).then(re => {
         re = re.data
@@ -168,17 +171,17 @@
         this.listLoading = false
       })
     },
-    edit(row) {
+    edit (row) {
       cheatApi.select(row.id).then(re => {
         if (re.code === 1) {
-          this.form = re.data;
-          this.visible = true;
+          this.form = re.data
+          this.visible = true
         } else {
           this.$message.error(re.message)
         }
       })
     },
-    status(row) {
+    status (row) {
       let question = {
         id: row.id,
         status: row.status === '绂佺敤' ? '鍚敤' : '绂佺敤'
@@ -192,7 +195,7 @@
         }
       })
     },
-    deletecheat(row) {
+    deletecheat (row) {
       let _this = this
       cheatApi.deletecheat(row.id).then(re => {
         if (re.code === 1) {
@@ -203,7 +206,7 @@
         }
       })
     },
-    submitForm() {
+    submitForm () {
       let _this = this
       this.$refs.form.validate((valid) => {
         if (valid) {
@@ -223,7 +226,7 @@
         }
       })
     },
-    resetForm() {
+    resetForm () {
       let lastId = this.form.id
       this.$refs['form'].resetFields()
       this.form.id = lastId
diff --git a/src/views/meet/index.vue b/src/views/meet/index.vue
index 3586391..d186859 100644
--- a/src/views/meet/index.vue
+++ b/src/views/meet/index.vue
@@ -34,6 +34,7 @@
     jitsiApi.addListener('readyToClose', () => {
       window.close()
     })
+
   }
 }
 

--
Gitblit v1.8.0