Просмотр исходного кода

Merge branch 'master' of http://git.qmth.com.cn/themis/frontend-admin

zhangjie 4 лет назад
Родитель
Сommit
36e245b779

+ 2 - 0
src/api/examwork-exam.js

@@ -43,6 +43,7 @@ export function saveExam({
   examCount = 0,
   forceFinish = 0,
   inProcessFaceStrangerIgnore = 0,
+  inProcessRealnessVerify = 0,
   inProcessFaceVerify = 0,
   inProcessLivenessFixedRange = [],
   inProcessLivenessJudgePolicy = "",
@@ -86,6 +87,7 @@ export function saveExam({
       examCount,
       forceFinish,
       inProcessFaceStrangerIgnore,
+      inProcessRealnessVerify,
       inProcessFaceVerify,
       inProcessLivenessFixedRange,
       inProcessLivenessJudgePolicy,

+ 29 - 0
src/api/examwork-markresult.js

@@ -0,0 +1,29 @@
+import { httpApp } from "@/plugins/axiosIndex";
+import { pickBy } from "lodash-es";
+import { object2QueryString } from "@/utils/utils";
+
+export function searchMarkResult({
+  examId = "",
+  examActivityId = "",
+  courseCode = "",
+  name = "",
+  identity = "",
+  pageNumber = 1,
+  pageSize = 10,
+}) {
+  const data = pickBy(
+    {
+      examId,
+      examActivityId,
+      name,
+      courseCode,
+      identity,
+      pageNumber,
+      pageSize,
+    },
+    (v) => v !== "" && v !== null
+  );
+  return httpApp.post(
+    "/api/admin/examStudent/mark/result?" + object2QueryString(data)
+  );
+}

+ 0 - 8
src/components/VEditor/main.js

@@ -1,8 +0,0 @@
-import Vue from "vue";
-import App from "./App.vue";
-
-Vue.config.productionTip = false;
-
-new Vue({
-  render: (h) => h(App),
-}).$mount("#app");

+ 1 - 1
src/features/examwork/CourseManagement/CourseManagement.vue

@@ -58,7 +58,7 @@
       </el-table-column>
       <el-table-column width="100" label="提交答案">
         <span slot-scope="scope">{{
-          scope.row.hasAnswer | zeroOneEnableDisableFilter
+          scope.row.hasAnswer | zeroOneYesNoFilter
         }}</span>
       </el-table-column>
       <el-table-column width="120" label="更新人">

+ 81 - 12
src/features/examwork/ExamManagement/ExamEdit.vue

@@ -47,7 +47,10 @@
           </el-row>
           <el-row>
             <el-form-item label="考试次数限制">
-              <el-input v-model.number.trim="form.examCount"></el-input>
+              <el-input-number
+                v-model.number.trim="form.examCount"
+                :min="0"
+              ></el-input-number>
             </el-form-item>
           </el-row>
           <el-row>
@@ -95,7 +98,10 @@
           </el-row>
           <el-row>
             <el-form-item v-if="enableBreakProxy" label="断点次数">
-              <el-input v-model.trim="form.breakResumeCount"></el-input>
+              <el-input-number
+                v-model.trim="form.breakResumeCount"
+                :min="0"
+              ></el-input-number>
             </el-form-item>
           </el-row>
           <el-row>
@@ -231,30 +237,64 @@
           <el-row class="tab-invililation">
             <h2>过程监控</h2>
             <el-form-item label="是否考中人脸识别">
-              <el-radio v-model="form.inProcessFaceVerify" :label="1"
+              <el-radio
+                :disabled="!!form.cameraPhotoUpload"
+                v-model="form.inProcessFaceVerify"
+                :label="1"
                 >是
               </el-radio>
-              <el-radio v-model="form.inProcessFaceVerify" :label="0"
+              <el-radio
+                :disabled="!!form.cameraPhotoUpload"
+                v-model="form.inProcessFaceVerify"
+                :label="0"
                 >否
               </el-radio>
             </el-form-item>
           </el-row>
-          <el-row>
+          <el-row v-if="form.inProcessFaceVerify">
             <el-form-item label="是否考中陌生人脸识别">
-              <el-radio v-model="form.inProcessFaceStrangerIgnore" :label="0"
+              <el-radio
+                :disabled="!!form.cameraPhotoUpload"
+                v-model="form.inProcessFaceStrangerIgnore"
+                :label="0"
                 >是
               </el-radio>
-              <el-radio v-model="form.inProcessFaceStrangerIgnore" :label="1"
+              <el-radio
+                :disabled="!!form.cameraPhotoUpload"
+                v-model="form.inProcessFaceStrangerIgnore"
+                :label="1"
+                >否
+              </el-radio>
+            </el-form-item>
+          </el-row>
+          <el-row v-if="form.inProcessFaceVerify">
+            <el-form-item label="是否考开启真实性检测">
+              <el-radio
+                :disabled="!!form.cameraPhotoUpload"
+                v-model="form.inProcessRealnessVerify"
+                :label="1"
+                >是
+              </el-radio>
+              <el-radio
+                :disabled="!!form.cameraPhotoUpload"
+                v-model="form.inProcessRealnessVerify"
+                :label="0"
                 >否
               </el-radio>
             </el-form-item>
           </el-row>
           <el-row>
             <el-form-item label="是否考中活体检测">
-              <el-radio v-model="form.inProcessLivenessVerify" :label="1"
+              <el-radio
+                :disabled="!!form.cameraPhotoUpload"
+                v-model="form.inProcessLivenessVerify"
+                :label="1"
                 >是
               </el-radio>
-              <el-radio v-model="form.inProcessLivenessVerify" :label="0"
+              <el-radio
+                :disabled="!!form.cameraPhotoUpload"
+                v-model="form.inProcessLivenessVerify"
+                :label="0"
                 >否
               </el-radio>
             </el-form-item>
@@ -297,14 +337,22 @@
           <el-row class="tab-invililation">
             <h2>监考直播</h2>
             <el-form-item label="是否开启考生端监考直播">
-              <el-radio v-model="form.monitorProxy" :label="true">是 </el-radio>
-              <el-radio v-model="form.monitorProxy" :label="false"
+              <el-radio
+                :disabled="!!form.cameraPhotoUpload"
+                v-model="form.monitorProxy"
+                :label="true"
+                >是
+              </el-radio>
+              <el-radio
+                :disabled="!!form.cameraPhotoUpload"
+                v-model="form.monitorProxy"
+                :label="false"
                 >否
               </el-radio>
             </el-form-item>
           </el-row>
           <el-row>
-            <el-form-item v-if="form.monitorProxy" label="是否需要视频转录">
+            <el-form-item v-if="form.monitorProxy" label="是否需要视频回放">
               <el-radio v-model="form.monitorRecord" :label="1">是 </el-radio>
               <el-radio v-model="form.monitorRecord" :label="0">否 </el-radio>
             </el-form-item>
@@ -474,6 +522,26 @@ export default {
         }
       },
     },
+    "form.cameraPhotoUpload": {
+      handler(v) {
+        if (v) {
+          this.form.mobilePhotoUpload = 0;
+
+          this.form.inProcessFaceVerify = 0;
+          this.form.inProcessFaceStrangerIgnore = 0;
+          this.form.inProcessRealnessVerify = 0;
+          this.form.inProcessLivenessVerify = 0;
+          this.form.monitorProxy = false;
+        }
+      },
+    },
+    "form.mobilePhotoUpload": {
+      handler(v) {
+        if (v) {
+          this.form.cameraPhotoUpload = 0;
+        }
+      },
+    },
   },
   async created() {
     if (this.isEdit) {
@@ -515,6 +583,7 @@ export default {
         entryAuthenticationPolicy: "OFF",
         inProcessFaceVerify: 0,
         inProcessFaceStrangerIgnore: 0,
+        inProcessRealnessVerify: 0,
         inProcessLivenessVerify: 0,
         inProcessLivenessFixedRange: [0, 0],
         inProcessLivenessJudgePolicy: "ALL",

+ 167 - 0
src/features/examwork/MarkResultManagement/MarkResultManagement.vue

@@ -0,0 +1,167 @@
+<template>
+  <div class="student-management">
+    <div class="part-box-head">
+      <div class="part-box-head-left"><h1>成绩查询</h1></div>
+    </div>
+    <div class="part-filter">
+      <div class="part-filter-form">
+        <el-form ref="form" :model="form" :rules="rules" inline>
+          <el-form-item label="批次名称" prop="examId">
+            <ExamSelect v-model="form.examId" />
+          </el-form-item>
+          <el-form-item label="场次代码">
+            <ActivitySelect
+              :examId="form.examId"
+              v-model="form.examActivityId"
+            />
+          </el-form-item>
+          <el-form-item label="科目">
+            <CourseSelect :examId="form.examId" v-model="form.courseCode" />
+          </el-form-item>
+          <el-form-item label="姓名">
+            <el-input v-model.trim="form.name"></el-input>
+          </el-form-item>
+          <el-form-item label="证件号">
+            <el-input v-model.trim="form.identity"></el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" @click="handleCurrentChange(0)"
+              >查询</el-button
+            >
+          </el-form-item>
+        </el-form>
+      </div>
+    </div>
+
+    <el-table :data="tableData">
+      <el-table-column type="selection" width="42" />
+      <el-table-column width="100" label="场次代码">
+        <span slot-scope="scope">{{ scope.row.examActivityCode }}</span>
+      </el-table-column>
+      <el-table-column width="100" label="姓名">
+        <span slot-scope="scope">{{ scope.row.name }}</span>
+      </el-table-column>
+      <el-table-column width="200" label="证件号">
+        <span slot-scope="scope">{{ scope.row.identity }}</span>
+      </el-table-column>
+      <el-table-column width="100" label="科目代码">
+        <span slot-scope="scope">{{ scope.row.courseCode }}</span>
+      </el-table-column>
+      <el-table-column width="100" label="科目名称">
+        <span slot-scope="scope">{{ scope.row.courseName }}</span>
+      </el-table-column>
+      <el-table-column width="100" label="考场代码">
+        <span slot-scope="scope">{{ scope.row.roomCode }}</span>
+      </el-table-column>
+      <el-table-column width="100" label="考场名称">
+        <span slot-scope="scope">{{ scope.row.roomName }}</span>
+      </el-table-column>
+      <el-table-column width="100" label="年级">
+        <span slot-scope="scope">{{ scope.row.grade }}</span>
+      </el-table-column>
+      <el-table-column width="100" label="教学班级">
+        <span slot-scope="scope">{{ scope.row.classNo }}</span>
+      </el-table-column>
+      <el-table-column width="100" label="缺考">
+        <span slot-scope="scope">{{ scope.row.examAbsent }}</span>
+      </el-table-column>
+      <el-table-column width="100" label="违纪次数">
+        <span slot-scope="scope">{{ scope.row.breachCount }}</span>
+      </el-table-column>
+      <el-table-column width="100" label="考试次数">
+        <span slot-scope="scope">{{ scope.row.examCount }}</span>
+      </el-table-column>
+      <el-table-column width="100" label="客观分">
+        <span slot-scope="scope">{{ scope.row.objectiveScore }}</span>
+      </el-table-column>
+      <el-table-column width="100" label="主观分">
+        <span slot-scope="scope">{{ scope.row.subjectiveScore }}</span>
+      </el-table-column>
+      <el-table-column width="100" label="总分">
+        <span slot-scope="scope">{{ scope.row.sumScore }}</span>
+      </el-table-column>
+    </el-table>
+    <div class="part-page">
+      <el-pagination
+        background
+        @current-change="handleCurrentChange"
+        :current-page="currentPage"
+        :page-size="pageSize"
+        :page-sizes="[10, 20, 50, 100, 200, 300]"
+        @size-change="handleSizeChange"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+      />
+    </div>
+  </div>
+</template>
+
+<script>
+import { searchMarkResult } from "@/api/examwork-markresult";
+export default {
+  name: "MarkResultManagement",
+  data() {
+    return {
+      form: {
+        examId: "",
+        examActivityId: "",
+        courseCode: "",
+        name: "",
+        identity: "",
+      },
+      rules: {
+        examId: [{ required: true, message: "批次必选" }],
+      },
+      tableData: [],
+      currentPage: 1,
+      pageSize: 10,
+      total: 10,
+      basePhotoDialogVisible: false,
+      selectedBasePhoto: null,
+      selectedStudent: {},
+    };
+  },
+  async created() {},
+  methods: {
+    async searchForm() {
+      try {
+        const valid = await this.$refs.form.validate();
+        if (!valid) return;
+      } catch (error) {
+        console.log(error);
+        return;
+      }
+      const res = await searchMarkResult({
+        examId: this.form.examId,
+        examActivityId: this.form.examActivityId,
+        identity: this.form.identity,
+        courseCode: this.form.courseCode,
+        name: this.form.name,
+        pageNumber: this.currentPage,
+        pageSize: this.pageSize,
+      });
+      this.tableData = res.data.data.records;
+      this.total = res.data.data.total;
+    },
+    handleCurrentChange(val) {
+      this.currentPage = val;
+      this.searchForm();
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = 1;
+      this.searchForm();
+    },
+    openBasePhotoDialog(url) {
+      this.selectedBasePhoto = url;
+      this.basePhotoDialogVisible = true;
+    },
+    openExamRecord(user) {
+      this.selectedStudent = user;
+      this.$refs.theDialog.openDialog();
+    },
+  },
+};
+</script>
+
+<style></style>

+ 8 - 0
src/router/index.js

@@ -168,6 +168,14 @@ const routes = [
             /* webpackChunkName: "exam" */ "../features/examwork/ImportExportTask/ImportExportTask.vue"
           ),
       },
+      {
+        path: "markresult",
+        name: "MarkResultManagement",
+        component: () =>
+          import(
+            /* webpackChunkName: "exam" */ "../features/examwork/MarkResultManagement/MarkResultManagement.vue"
+          ),
+      },
     ],
   },
   {

+ 4 - 0
src/views/Layout/components/menu.js

@@ -72,6 +72,10 @@ const examMenuConfig = [
         title: "导入导出任务",
         name: "ImportExportTask",
       },
+      {
+        title: "成绩查询",
+        name: "MarkResultManagement",
+      },
     ],
   },
 ];