chenken 6 năm trước cách đây
mục cha
commit
6d557be578

BIN
src/modules/oe/assets/img/nophoto.jpg


+ 14 - 8
src/modules/oe/routes/routes.js

@@ -6,45 +6,51 @@ import illegalityNameList from "../views/illegalityNameList.vue";
 import scoreStatistics from "../views/scoreStatistics.vue";
 import examDetail from "../views/examDetail.vue";
 import examScheduling from "../views/examScheduling.vue";
+import captureDetail from "../views/captureDetail.vue";
 export default [
   {
     path: "/oe/absent",
     name: "absent",
-    component: absent
+    component: absent //缺考登记
   },
   {
     path: "/oe/awaitingAudit",
     name: "awaitingAudit",
-    component: awaitingAudit
+    component: awaitingAudit //监考待审
   },
   {
     path: "/oe/alreadyAudited",
     name: "alreadyAudited",
-    component: alreadyAudited
+    component: alreadyAudited //监考已审
   },
   {
     path: "/oe/reexamine",
     name: "reexamine",
-    component: reexamine
+    component: reexamine //重考列表
   },
   {
     path: "/oe/illegalityNameList",
     name: "illegalityNameList",
-    component: illegalityNameList
+    component: illegalityNameList //违纪名单
   },
   {
     path: "/oe/scoreStatistics",
     name: "scoreStatistics",
-    component: scoreStatistics
+    component: scoreStatistics //成绩统计
   },
   {
     path: "/oe/examDetail",
     name: "examDetail",
-    component: examDetail
+    component: examDetail //考试详情
   },
   {
     path: "/oe/examScheduling",
     name: "examScheduling",
-    component: examScheduling
+    component: examScheduling //考试进度详情
+  },
+  {
+    path: "/oe/captureDetail",
+    name: "captureDetail",
+    component: captureDetail //抓拍详情
   }
 ];

+ 1 - 1
src/modules/oe/views/absent.vue

@@ -174,7 +174,7 @@ export default {
   created() {}
 };
 </script>
-<style scope>
+<style scoped>
 .header-title {
   text-align: left;
 }

+ 1 - 1
src/modules/oe/views/alreadyAudited.vue

@@ -201,7 +201,7 @@ export default {
   created() {}
 };
 </script>
-<style scope>
+<style scoped>
 .el-row {
   position: static !important;
 }

+ 12 - 2
src/modules/oe/views/awaitingAudit.vue

@@ -108,7 +108,14 @@
               :selectable="selectable"
             >
             </el-table-column>
-            <el-table-column sortable label="考试ID" prop="dataId">
+            <el-table-column sortable label="考试ID">
+              <template slot-scope="scope"
+                ><el-button
+                  @click="gotoCaptureDetail(scope.row.dataId);"
+                  type="text"
+                  >{{ scope.row.dataId }}</el-button
+                ></template
+              >
             </el-table-column>
             <el-table-column sortable label="姓名" prop="studentName">
             </el-table-column>
@@ -334,6 +341,9 @@ export default {
           this.dialogFormVisible = false;
           this.search();
         });
+    },
+    gotoCaptureDetail(examRecordDataId) {
+      alert(examRecordDataId);
     }
   },
   watch: {
@@ -344,7 +354,7 @@ export default {
   created() {}
 };
 </script>
-<style scope>
+<style scoped>
 .el-row {
   position: static !important;
 }

+ 247 - 0
src/modules/oe/views/captureDetail.vue

@@ -0,0 +1,247 @@
+<template>
+  <el-container>
+    <el-header> <div class="header-title">抓拍详情</div> </el-header>
+    <el-main>
+      <el-row>
+        <el-col :span="6">
+          <img :src="studentBasePhotoPath" alt="" width="180" />
+        </el-col>
+        <el-col :span="18">
+          <el-row>
+            <el-col :span="16" class="capture-title"
+              ><span>监考数据ID:{{ examRecordDataId }}</span></el-col
+            >
+            <el-col :span="8" style="text-align: right;">
+              <el-button
+                v-if="showAudit"
+                type="success"
+                icon="el-icon-success"
+                circle
+                title="通过"
+              ></el-button>
+
+              <el-button
+                v-if="showAudit"
+                type="danger"
+                icon="el-icon-error"
+                title="不通过"
+                circle
+                @click="openAuditDialog"
+              ></el-button>
+              <el-button
+                icon="el-icon-back"
+                type="info"
+                title="返回"
+                circle
+              ></el-button
+            ></el-col>
+          </el-row>
+          <el-row class="margin-top-10">
+            <el-col :span="24">
+              <el-table :data="examAuditData" border>
+                <el-table-column sortable label="学号" prop="studentCode">
+                </el-table-column>
+                <el-table-column
+                  sortable
+                  label="身份证号"
+                  prop="identityNumber"
+                >
+                </el-table-column>
+                <el-table-column sortable label="姓名" prop="studentName">
+                </el-table-column>
+                <el-table-column sortable label="课程代码" prop="courseCode">
+                </el-table-column>
+                <el-table-column sortable label="课程名称" prop="courseName">
+                </el-table-column>
+              </el-table>
+            </el-col>
+          </el-row>
+          <el-row class="margin-top-10">
+            <el-col :span="24">
+              <el-table :data="examAuditData" border>
+                <el-table-column
+                  sortable
+                  label="校验次数"
+                  prop="faceTotalCount"
+                >
+                </el-table-column>
+                <el-table-column
+                  sortable
+                  label="成功次数"
+                  prop="faceSuccessCount"
+                >
+                </el-table-column>
+                <el-table-column
+                  sortable
+                  label="陌生人"
+                  prop="faceStrangerCount"
+                >
+                </el-table-column>
+                <el-table-column
+                  sortable
+                  label="成功率(%)"
+                  prop="faceSuccessPercent"
+                >
+                </el-table-column>
+                <el-table-column
+                  sortable
+                  label="违纪类型"
+                  prop="disciplineType"
+                >
+                </el-table-column>
+                <el-table-column
+                  sortable
+                  label="违纪说明"
+                  prop="disciplineDetail"
+                >
+                </el-table-column>
+                <el-table-column sortable label="审核结果" prop="status">
+                </el-table-column> </el-table
+            ></el-col>
+          </el-row>
+          <el-row class="margin-top-10 photorow">
+            <el-col
+              :span="6"
+              :key="item.id"
+              v-for="item in capturesList"
+              class="photocol"
+            >
+              <div class="photo-nopass" v-show="item.pass">通过</div>
+              <div class="photo-nopass" v-show="!item.pass">不通过</div>
+              <img class="photo" :src="item.fileUrl" alt="" width="200" />
+              <div class="photo-stranger" v-show="item.stranger">陌生人</div>
+            </el-col>
+          </el-row>
+        </el-col>
+      </el-row>
+      <el-dialog title="审核" :visible.sync="dialogFormVisible">
+        <auditVue :auditForm="auditForm"
+          ><div class="dialog-footer">
+            <el-button @click="dialogFormVisible = false;">取 消</el-button>
+            <el-button type="primary" @click="doAudit">确 定</el-button>
+          </div></auditVue
+        >
+      </el-dialog>
+    </el-main>
+  </el-container>
+</template>
+<script>
+import { mapState } from "vuex";
+import auditVue from "../component/audit.vue";
+export default {
+  components: { auditVue },
+  data() {
+    return {
+      examRecordDataId: "",
+      examAuditData: [],
+      examRecordData: [],
+      capturesList: [],
+      studentBasePhotoPath: "",
+      showAudit: false,
+      dialogFormVisible: false,
+      auditForm: {
+        examRecordDataId: null,
+        disciplineType: "",
+        disciplineDetail: "",
+        isPass: null
+      }
+    };
+  },
+  computed: {
+    ...mapState({ user: state => state.user })
+  },
+  methods: {
+    getExamAuditData() {
+      var param = new URLSearchParams({
+        examRecordDataId: this.examRecordDataId
+      });
+      this.$http
+        .post("/api/ecs_oe_admin/exam/capture/audit/detail", param)
+        .then(response => {
+          if (response.data) {
+            this.showAudit = response.data.isWarn && !response.data.isAudit;
+            this.examAuditData.push(response.data);
+            var studentId = response.data.studentId;
+            this.getStudentInfo(studentId);
+          }
+        });
+    },
+    listExamCapture() {
+      var param = new URLSearchParams({
+        examRecordDataId: this.examRecordDataId
+      });
+      this.$http
+        .post("/api/ecs_oe_admin/exam/capture/list", param)
+        .then(response => {
+          this.capturesList = response.data;
+        });
+    },
+    getStudentInfo(studentId) {
+      this.$http.get("/api/ecs_core/student/" + studentId).then(response => {
+        if (response.data.photoPath) {
+          var prefix =
+            "http://exam-cloud-test.b0.upaiyun.com/student_base_photo/";
+          this.studentBasePhotoPath = prefix + response.data.photoPath;
+        }
+      });
+    },
+    openAuditDialog() {
+      this.dialogFormVisible = true;
+      this.auditForm = {
+        examRecordDataId: this.examRecordDataId,
+        disciplineType: "",
+        disciplineDetail: "",
+        isPass: false
+      };
+    },
+    doAudit() {}
+  },
+  created() {
+    //this.examRecordDataId = this.$route.query.examRecordDataId;
+    this.examRecordDataId = 1136;
+    this.getExamAuditData();
+    this.listExamCapture();
+  }
+};
+</script>
+<style scoped>
+.margin-top-10 {
+  margin-top: 10px;
+}
+.capture-title {
+  font-size: 20px;
+  font-weight: bold;
+}
+.photorow {
+  border: 1px solid #ebeef5;
+  text-align: center;
+  padding-left: 30px;
+}
+.photocol {
+  position: relative;
+  margin-top: 5px;
+}
+.photo {
+  display: block;
+  width: 208px;
+  height: 159px;
+}
+.photo-nopass {
+  position: absolute;
+  top: 2px;
+  width: 208px;
+  text-align: center;
+  color: white;
+  font-size: 12px;
+  background-color: rgba(10, 10, 10, 0.4);
+}
+.photo-stranger {
+  position: absolute;
+  top: 140px;
+  width: 208px;
+  text-align: center;
+  color: red;
+  font-size: 12px;
+  background-color: rgba(10, 10, 10, 0.4);
+}
+</style>

+ 1 - 1
src/modules/oe/views/examScheduling.vue

@@ -177,7 +177,7 @@ export default {
   created() {}
 };
 </script>
-<style scope>
+<style scoped>
 .el-row {
   position: static !important;
 }

+ 1 - 1
src/modules/oe/views/illegalityNameList.vue

@@ -175,7 +175,7 @@ export default {
   created() {}
 };
 </script>
-<style scope>
+<style scoped>
 .el-row {
   position: static !important;
 }

+ 1 - 1
src/modules/oe/views/reexamine.vue

@@ -145,7 +145,7 @@ export default {
   created() {}
 };
 </script>
-<style scope>
+<style scoped>
 .el-row {
   position: static !important;
 }

+ 1 - 1
src/modules/oe/views/scoreStatistics.vue

@@ -162,7 +162,7 @@ export default {
   created() {}
 };
 </script>
-<style scope>
+<style scoped>
 .el-row {
   position: static !important;
 }