chenken 6 ani în urmă
părinte
comite
88bdc33240

+ 38 - 0
src/modules/oe/component/audit.vue

@@ -0,0 +1,38 @@
+<template>
+  <div>
+    <el-form :model="auditForm">
+      <el-form-item label="违纪类型">
+        <el-select v-model="auditForm.disciplineType" placeholder="请选择">
+          <el-option
+            v-for="item in disciplineTypeList"
+            :key="item.name"
+            :label="item.desc"
+            :value="item.name"
+          >
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="详情描述">
+        <el-input
+          v-model="auditForm.disciplineDetail"
+          type="textarea"
+          :autosize="{ minRows: 6, maxRows: 10 }"
+          placeholder="请输入内容"
+        >
+        </el-input>
+      </el-form-item>
+    </el-form>
+    <slot></slot>
+  </div>
+</template>
+<script>
+import { disciplineTypeList } from "../constants/constants";
+export default {
+  props: ["auditForm"],
+  data() {
+    return {
+      disciplineTypeList: disciplineTypeList
+    };
+  }
+};
+</script>

+ 14 - 10
src/modules/oe/component/commonForm.vue

@@ -1,5 +1,5 @@
 <template>
-  <el-form :model="form" label-width="80px">
+  <el-form :model="form" label-width="120px">
     <el-col :span="8">
       <el-form-item label="考试批次">
         <el-select
@@ -75,18 +75,19 @@
       </el-form-item>
     </el-col>
     <el-col :span="8">
-      <el-form-item label="考生姓名">
-        <el-input v-model="form.studentName" placeholder="全部"> </el-input>
+      <el-form-item label="姓名">
+        <el-input v-model="form.studentName" placeholder="姓名"> </el-input>
       </el-form-item>
     </el-col>
     <el-col :span="8">
       <el-form-item label="身份证号">
-        <el-input v-model="form.identityNumber" placeholder="全部"> </el-input>
+        <el-input v-model="form.identityNumber" placeholder="身份证号">
+        </el-input>
       </el-form-item>
     </el-col>
     <el-col :span="8">
       <el-form-item label="学号">
-        <el-input v-model="form.studentCode" placeholder="全部"> </el-input>
+        <el-input v-model="form.studentCode" placeholder="学号"> </el-input>
       </el-form-item>
     </el-col>
     <slot></slot>
@@ -96,7 +97,7 @@
 import { courseLevels } from "../constants/constants";
 import { mapState } from "vuex";
 export default {
-  props: ["form"],
+  props: ["form", "getExamCondition"],
   data() {
     return {
       examList: [],
@@ -115,13 +116,16 @@ export default {
       }
       this.$http
         .get("/api/ecs_exam_work/exam/queryByNameLike", {
-          params: {
-            name: examName,
-            examTypes: "ONLINE#OFFLINE"
-          }
+          params: this.getExamCondition.params
         })
         .then(response => {
           this.examList = response.data;
+          if (this.getExamCondition.filterCondition == "IS_FACE_ENABLE") {
+            this.examList = this.examList.filter(function(e) {
+              //查询开启人脸识别的
+              return e.properties["IS_FACE_ENABLE"] == "true";
+            });
+          }
         });
     },
     getOrgs(orgName) {

+ 6 - 0
src/modules/oe/routes/routes.js

@@ -1,9 +1,15 @@
 import absent from "../views/absent.vue";
+import awaitingAudit from "../views/awaitingAudit.vue";
 
 export default [
   {
     path: "/oe/absent",
     name: "absent",
     component: absent
+  },
+  {
+    path: "/oe/awaitingAudit",
+    name: "awaitingAudit",
+    component: awaitingAudit
   }
 ];

+ 22 - 14
src/modules/oe/views/absent.vue

@@ -2,7 +2,10 @@
   <el-container>
     <el-header> <div class="header-title">缺考登记</div> </el-header>
     <el-main>
-      <commonFormVue :form="form">&nbsp;</commonFormVue>
+      <commonFormVue
+        :form="form"
+        :getExamCondition="getExamCondition"
+      ></commonFormVue>
       <el-row>
         <el-col :span="24">
           <el-button @click="search" size="medium" type="primary"
@@ -49,9 +52,10 @@
         <el-pagination
           @size-change="handleSizeChange"
           @current-change="handleCurrentChange"
-          :current-page.sync="currentPage1"
-          :page-size="pageSize"
-          layout="total, prev, pager, next"
+          :current-page.sync="form.pageNo"
+          :page-sizes="[10, 30, 50, 100]"
+          :page-size="form.pageSize"
+          layout="total, sizes, prev, pager, next, jumper"
           :total="total"
         >
         </el-pagination>
@@ -60,37 +64,34 @@
   </el-container>
 </template>
 <script>
-import { courseLevels } from "../constants/constants";
 import { mapState } from "vuex";
 import commonFormVue from "../component/commonForm.vue";
 export default {
   components: { commonFormVue },
   data() {
     return {
-      pageSize: 10,
       total: 0,
       tableLoading: false,
       exportLoading: false,
       form: {
         examRecordDataId: null,
-        hasStranger: null,
         courseId: null,
         courseLevel: null,
         examId: null,
         examRecordId: null,
-        faceSuccessPercentLower: null,
-        faceSuccessPercentUpper: null,
         identityNumber: null,
         orgId: null,
         studentCode: null,
         studentName: null,
-        isWarn: null,
         pageNo: 1,
         pageSize: "10",
         rootOrgId: "",
         auditStatus: null
       },
-      currentPage1: 1,
+      getExamCondition: {
+        params: { name: "", examTypes: "ONLINE#OFFLINE" },
+        filterCondition: "IS_FACE_ENABLE"
+      },
       tableData: []
     };
   },
@@ -156,11 +157,18 @@ export default {
           this.exportLoading = false;
         });
     },
+    /**
+     * pagesize改变时触发
+     */
     handleSizeChange(val) {
-      console.log(`每页 ${val} 条`);
+      this.form.pageSize = val;
+      this.search();
     },
-    handleCurrentChange(val) {
-      console.log(`当前页: ${val}`);
+    /**
+     * 当前页改变时触发
+     */
+    handleCurrentChange() {
+      this.search();
     }
   },
   created() {}

+ 354 - 0
src/modules/oe/views/awaitingAudit.vue

@@ -0,0 +1,354 @@
+<template>
+  <el-container>
+    <el-header> <div class="header-title">监考待审</div> </el-header>
+    <el-main>
+      <commonFormVue :form="form" :getExamCondition="getExamCondition">
+        <el-col :span="8">
+          <el-form-item label="考试ID">
+            <el-input v-model="form.examRecordDataId"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="需要审核">
+            <el-select v-model="form.isWarn" clearable placeholder="全部">
+              <el-option value="true" label="是"></el-option>
+              <el-option value="false" label="否"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="陌生人脸">
+            <el-select v-model="form.hasStranger" clearable placeholder="全部">
+              <el-option value="true" label="有"></el-option>
+              <el-option value="false" label="无"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="人脸识别成功率">
+            <el-row>
+              <el-col :span="10">
+                <el-input
+                  size="mini"
+                  v-model="form.faceSuccessPercentLower"
+                  label="下限"
+                ></el-input>
+              </el-col>
+              <el-col :span="2">&nbsp;</el-col>
+              <el-col :span="10">
+                <el-input
+                  size="mini"
+                  v-model="form.faceSuccessPercentUpper"
+                  label="上限"
+                ></el-input>
+              </el-col>
+            </el-row>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="人脸真实性比率">
+            <el-row>
+              <el-col :span="10">
+                <el-input
+                  size="mini"
+                  v-model="form.livenessSuccessPercentLower"
+                  label="下限"
+                ></el-input>
+              </el-col>
+              <el-col :span="2">&nbsp;</el-col>
+              <el-col :span="10">
+                <el-input
+                  size="mini"
+                  v-model="form.livenessSuccessPercentUpper"
+                  label="上限"
+                ></el-input>
+              </el-col>
+            </el-row>
+          </el-form-item>
+        </el-col>
+      </commonFormVue>
+      <el-row>
+        <el-col :span="24">
+          <el-button @click="search" size="medium" type="primary"
+            >查询</el-button
+          >
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="24" style="text-align: right;">
+          <el-button-group>
+            <el-button
+              type="primary"
+              :disabled="batchAuditBtnDisabled"
+              @click="batchAudit('pass');"
+              >通过</el-button
+            >
+            <el-button
+              type="primary"
+              :disabled="batchAuditBtnDisabled"
+              @click="batchAudit('nopass');"
+              >不通过
+            </el-button>
+          </el-button-group>
+        </el-col>
+      </el-row>
+      <el-row class="margin-top-10"
+        ><el-col :span="24">
+          <el-table
+            v-loading="tableLoading"
+            element-loading-text="数据加载中"
+            ref="multipleTable"
+            @selection-change="handleSelectionChange"
+            :data="tableData"
+            border
+          >
+            <el-table-column
+              type="selection"
+              width="55"
+              :selectable="selectable"
+            >
+            </el-table-column>
+            <el-table-column sortable label="考试ID" prop="dataId">
+            </el-table-column>
+            <el-table-column sortable label="姓名" prop="studentName">
+            </el-table-column>
+            <el-table-column sortable label="身份证号" prop="identityNumber">
+            </el-table-column>
+            <el-table-column sortable label="学号" prop="studentCode">
+            </el-table-column>
+            <el-table-column sortable label="学习中心" prop="orgName">
+            </el-table-column>
+            <el-table-column sortable label="课程" prop="courseName">
+            </el-table-column>
+            <el-table-column sortable label="课程层次" prop="courseLevel">
+            </el-table-column>
+            <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="baiduFaceLivenessSuccessPercent"
+            >
+            </el-table-column>
+            <el-table-column label="操作">
+              <template slot-scope="scope">
+                <el-button
+                  v-if="scope.row.isWarn"
+                  size="mini"
+                  type="success"
+                  icon="el-icon-success"
+                  >通过</el-button
+                >
+                <el-button
+                  v-if="scope.row.isWarn"
+                  size="mini"
+                  type="danger"
+                  icon="el-icon-error"
+                  @click="openAuditDialog(scope.row.dataId);"
+                  >不通过
+                </el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+          <div class="block">
+            <el-pagination
+              @size-change="handleSizeChange"
+              @current-change="handleCurrentChange"
+              :current-page.sync="form.pageNo"
+              :page-sizes="[10, 30, 50, 100]"
+              :page-size="form.pageSize"
+              layout="total, sizes, prev, pager, next, jumper"
+              :total="total"
+            >
+            </el-pagination></div></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 commonFormVue from "../component/commonForm.vue";
+import auditVue from "../component/audit.vue";
+export default {
+  components: { commonFormVue, auditVue },
+  data() {
+    return {
+      total: 0,
+      tableLoading: false,
+      exportLoading: false,
+      dialogFormVisible: false,
+      form: {
+        examRecordDataId: null,
+        hasStranger: null,
+        courseId: null,
+        courseLevel: null,
+        examId: null,
+        examRecordId: null,
+        faceSuccessPercentLower: null,
+        faceSuccessPercentUpper: null,
+        livenessSuccessPercentLower: null,
+        livenessSuccessPercentUpper: null,
+        identityNumber: null,
+        orgId: null,
+        studentCode: null,
+        studentName: null,
+        isWarn: null,
+        pageNo: 1,
+        pageSize: 10
+      },
+      auditForm: {
+        examRecordDataId: null,
+        disciplineType: "",
+        disciplineDetail: "",
+        isPass: null
+      },
+      getExamCondition: {
+        params: {
+          name: "",
+          examTypes: "ONLINE",
+          propertyKeys: "IS_FACE_ENABLE"
+        },
+        filterCondition: "IS_FACE_ENABLE"
+      },
+      tableData: [],
+      multipleSelection: [],
+      batchAuditBtnDisabled: true
+    };
+  },
+  computed: {
+    ...mapState({ user: state => state.user })
+  },
+  methods: {
+    search() {
+      if (!this.form.examId) {
+        this.$notify({
+          title: "警告",
+          message: "请选择考试批次",
+          type: "warning",
+          duration: 1000
+        });
+        return false;
+      }
+      this.tableLoading = true;
+      this.$http
+        .post("/api/ecs_oe_admin/exam/record/waiting/audit/list", this.form)
+        .then(response => {
+          if (response.data) {
+            this.tableData = response.data.content;
+            this.total = response.data.totalElements;
+          } else {
+            this.tableData = [];
+          }
+          this.tableLoading = false;
+        });
+    },
+    selectable(row) {
+      return row.isWarn;
+    },
+    handleSelectionChange(val) {
+      this.multipleSelection = val;
+    },
+    /**
+     * pagesize改变时触发
+     */
+    handleSizeChange(val) {
+      this.form.pageSize = val;
+      this.search();
+    },
+    /**
+     * 当前页改变时触发
+     */
+    handleCurrentChange() {
+      this.search();
+    },
+    batchAudit(operate) {
+      var isPass = operate == "pass" ? true : false;
+      this.$confirm("确定执行?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      })
+        .then(() => {
+          var examRecordDataIds = [];
+          for (var i = 0; i < this.multipleSelection.length; i++) {
+            examRecordDataIds.push(this.multipleSelection[i].dataId);
+          }
+          var param = new URLSearchParams({
+            examRecordDataIds: examRecordDataIds,
+            isPass: isPass
+          });
+          this.$http
+            .post("/api/ecs_oe_admin/exam/audit/batch/audit", param)
+            .then(() => {
+              this.$notify({
+                title: "成功",
+                message: "操作成功",
+                type: "success"
+              });
+              this.search();
+            });
+        })
+        .catch(() => {});
+    },
+    openAuditDialog(examRecordDataId) {
+      this.dialogFormVisible = true;
+      this.auditForm = {
+        examRecordDataId: examRecordDataId,
+        disciplineType: "",
+        disciplineDetail: "",
+        isPass: false
+      };
+    },
+    doAudit() {
+      var param = new URLSearchParams(this.auditForm);
+      this.$http
+        .post("/api/ecs_oe_admin/exam/audit/single/audit", param)
+        .then(() => {
+          this.$notify({
+            title: "成功",
+            message: "操作成功",
+            type: "success"
+          });
+          this.dialogFormVisible = false;
+          this.search();
+        });
+    }
+  },
+  watch: {
+    multipleSelection: function() {
+      this.batchAuditBtnDisabled = !(this.multipleSelection.length > 0);
+    }
+  },
+  created() {}
+};
+</script>
+<style scope>
+.el-row {
+  position: static !important;
+}
+.margin-top-10 {
+  margin-top: 10px;
+}
+</style>