Pārlūkot izejas kodu

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

zhangjie 4 gadi atpakaļ
vecāks
revīzija
797571baf7

+ 33 - 1
src/api/examwork-examstudent.js

@@ -11,6 +11,7 @@ export function searchExamStudents({
   identity = "",
   grade = "",
   classNo = "",
+  hasPhoto = "",
   pageNumber = 1,
   pageSize = 10,
 }) {
@@ -24,16 +25,47 @@ export function searchExamStudents({
       identity,
       grade,
       classNo,
+      hasPhoto,
       pageNumber,
       pageSize,
     },
-    (v) => v !== ""
+    (v) => v !== "" && v !== null
   );
   return httpApp.post(
     "/api/admin/examStudent/query?" + object2QueryString(data)
   );
 }
 
+export function exportExamStudent({
+  examId = "",
+  activityId = "",
+  roomCode = "",
+  courseCode = "",
+  name = "",
+  identity = "",
+  grade = "",
+  classNo = "",
+  hasPhoto = "",
+}) {
+  const data = pickBy(
+    {
+      examId,
+      activityId,
+      roomCode,
+      name,
+      courseCode,
+      identity,
+      grade,
+      classNo,
+      hasPhoto,
+    },
+    (v) => v !== "" && v !== null
+  );
+  return httpApp.post(
+    "/api/admin/examStudent/export?" + object2QueryString(data)
+  );
+}
+
 export function saveExamStudent({
   id = "",
   examId = "",

+ 59 - 0
src/components/BasePhotoStateSelect.vue

@@ -0,0 +1,59 @@
+<template>
+  <el-select
+    v-model="selected"
+    class="size-select"
+    placeholder="请选择"
+    @change="select"
+    :style="styles"
+    clearable
+  >
+    <el-option
+      v-for="item in optionList"
+      :key="item.code"
+      :label="item.name"
+      :value="item.code"
+    >
+      <span>{{ item.name }}</span>
+    </el-option>
+  </el-select>
+</template>
+
+<script>
+export default {
+  name: "BasePhotoStateSelect",
+  props: {
+    value: {
+      type: Number,
+      default: 1,
+    },
+    options: { type: Array, default: () => null },
+    styles: { type: String },
+  },
+  data() {
+    return {
+      optionList: this.options || [
+        { code: 0, name: "未上传" },
+        { code: 1, name: "已上传" },
+      ],
+      selected: "",
+    };
+  },
+  async created() {},
+  watch: {
+    value: {
+      immediate: true,
+      handler(val) {
+        this.selected = val;
+      },
+    },
+  },
+  methods: {
+    select() {
+      this.$emit("input", this.selected);
+      this.$emit("change", this.selected);
+    },
+  },
+};
+</script>
+
+<style></style>

+ 1 - 0
src/constant/constants.js

@@ -124,6 +124,7 @@ export const IMPORT_EXPORT_TASKS = [
   { code: "IMPORT_EXAM_PAPER", name: "导入试卷" },
   { code: "IMPORT_INVIGILATE_USER", name: "导入监考员" },
   { code: "EXPORT_INVIGILATE_USER", name: "导出监考员" },
+  { code: "EXPORT_EXAM_STUDENT", name: "导出考生" },
 ];
 
 let domain;

+ 47 - 2
src/features/examwork/ExamStudentManagement/ExamStudentManagement.vue

@@ -30,6 +30,9 @@
           <el-form-item label="教学班级">
             <el-input v-model.trim="form.classNo"></el-input>
           </el-form-item>
+          <el-form-item label="相片">
+            <BasePhotoStateSelect v-model="form.hasPhoto" />
+          </el-form-item>
           <el-form-item>
             <el-button type="primary" @click="handleCurrentChange(0)"
               >查询</el-button
@@ -51,7 +54,12 @@
             @click="toggleEnableExamStudentArray({ enable: 0 })"
             >禁用</el-button
           >
-          <!-- <el-button>导入</el-button> -->
+          <el-button
+            type="primary"
+            icon="icon icon-upload"
+            @click="exportExamStudent"
+            >导出</el-button
+          >
         </div>
       </div>
     </div>
@@ -93,8 +101,18 @@
       <el-table-column width="170" label="教学班级">
         <span slot-scope="scope">{{ scope.row.classNo }}</span>
       </el-table-column>
-      <el-table-column :context="_self" label="操作" width="210">
+      <el-table-column :context="_self" label="操作" width="260">
         <div slot-scope="scope">
+          <el-button
+            size="mini"
+            type="primary"
+            plain
+            @click="openBasePhotoDialog(scope.row.basePhotoUrl)"
+            v-if="scope.row.basePhotoUrl"
+          >
+            相片
+          </el-button>
+          <span v-else style="width: 66px; display: inline-block;">无相片</span>
           <el-button size="mini" type="primary" plain @click="edit(scope.row)">
             编辑
           </el-button>
@@ -122,6 +140,14 @@
       />
     </div>
 
+    <el-dialog
+      title="底照"
+      :visible.sync="basePhotoDialogVisible"
+      destroy-on-close
+    >
+      <img :src="selectedBasePhoto" style="width: 400px;" />
+    </el-dialog>
+
     <ExamStudentManagementDialog
       ref="theDialog"
       :examId="examId"
@@ -133,6 +159,7 @@
 
 <script>
 import {
+  exportExamStudent,
   searchExamStudents,
   toggleEnableExamStudent,
   toggleEnableExamStudentArray,
@@ -160,6 +187,7 @@ export default {
         identity: "",
         grade: "",
         classNo: "",
+        hasPhoto: null,
       },
       rules: {
         examId: [{ required: true, message: "批次必选" }],
@@ -169,6 +197,8 @@ export default {
       pageSize: 10,
       total: 10,
       selected: {},
+      selectedBasePhoto: null,
+      basePhotoDialogVisible: false,
     };
   },
   async created() {},
@@ -228,6 +258,21 @@ export default {
       this.$notify({ title: "操作成功", type: "success" });
       this.searchForm();
     },
+    openBasePhotoDialog(url) {
+      this.selectedBasePhoto = url;
+      this.basePhotoDialogVisible = true;
+    },
+    async exportExamStudent() {
+      try {
+        const valid = await this.$refs.form.validate();
+        if (!valid) return;
+      } catch (error) {
+        console.log(error);
+        return;
+      }
+      await exportExamStudent(this.form);
+      this.$notify({ title: "导出任务已成功启动", type: "success" });
+    },
   },
 };
 </script>

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

@@ -141,7 +141,7 @@ export default {
   },
   filters: {
     taskName(code) {
-      return IMPORT_EXPORT_TASKS.find((v) => v.code == code).name;
+      return IMPORT_EXPORT_TASKS.find((v) => v.code == code)?.name;
     },
   },
 };