Преглед изворни кода

来自3.2.9的需求合并

zhangjie пре 1 година
родитељ
комит
4339e32473

+ 6 - 0
src/constants/enumerate.js

@@ -119,6 +119,12 @@ export const SYNC_PRINT_STATUS = {
 export const EXAM_TYPE = {
   FORMAL: "正式考试",
   MAKEUP: "补考",
+  REBUILD: "重修",
+};
+// 印刷计划类型
+export const PRINT_PLAN_TYPE = {
+  FORMAL: "正式考试",
+  MAKEUP: "补考",
 };
 
 export const EXAM_MODE_TYPE = {

+ 4 - 1
src/modules/base/components/ModifyExam.vue

@@ -167,7 +167,10 @@ export default {
       this.modalIsShow = true;
     },
     categoryChange() {
-      if (this.modalForm.category === "MAKEUP") {
+      if (
+        this.modalForm.category === "MAKEUP" ||
+        this.modalForm.category === "REBUILD"
+      ) {
         this.modalForm.examModel = "MODEL2";
       } else {
         this.modalForm.examModel = "MODEL1";

+ 73 - 3
src/modules/base/components/ModifyStudent.vue

@@ -18,6 +18,35 @@
       :key="modalForm.id"
       label-width="65px"
     >
+      <el-form-item prop="semesterId" label="学期:">
+        <semester-select
+          v-model="modalForm.semesterId"
+          placeholder="学期"
+          :disabled="isEdit"
+        ></semester-select>
+      </el-form-item>
+      <el-form-item prop="examId" label="考试:">
+        <exam-select
+          v-model="modalForm.examId"
+          :semester-id="modalForm.semesterId"
+          placeholder="考试"
+          :disabled="isEdit"
+        ></exam-select>
+      </el-form-item>
+      <el-form-item prop="courseCode" label="课程代码:">
+        <el-input
+          v-model.trim="modalForm.courseCode"
+          placeholder="请输入课程代码"
+          clearable
+        ></el-input>
+      </el-form-item>
+      <el-form-item prop="courseName" label="课程名称:">
+        <el-input
+          v-model.trim="modalForm.courseName"
+          placeholder="请输入课程名称"
+          clearable
+        ></el-input>
+      </el-form-item>
       <el-form-item prop="studentName" label="姓名:">
         <el-input
           v-model.trim="modalForm.studentName"
@@ -30,6 +59,7 @@
           v-model.trim="modalForm.studentCode"
           placeholder="请输入学号"
           clearable
+          :disabled="isEdit"
         ></el-input>
       </el-form-item>
       <el-form-item prop="phoneNumber" label="手机号:">
@@ -87,6 +117,10 @@ import { updateStudent, unitQueryByType } from "../api";
 
 const initModalForm = {
   id: null,
+  semesterId: "",
+  examId: "",
+  courseCode: "",
+  courseName: "",
   studentName: "",
   studentCode: "",
   phoneNumber: "",
@@ -119,6 +153,44 @@ export default {
       isSubmit: false,
       modalForm: { ...initModalForm },
       rules: {
+        semesterId: [
+          {
+            required: true,
+            message: "请选择学期",
+            trigger: "change",
+          },
+        ],
+        examId: [
+          {
+            required: true,
+            message: "请选择考试",
+            trigger: "change",
+          },
+        ],
+        courseCode: [
+          {
+            required: true,
+            message: "请输入课程代码",
+            trigger: "change",
+          },
+          {
+            message: "课程代码不能超过50个字",
+            max: 50,
+            trigger: "change",
+          },
+        ],
+        courseName: [
+          {
+            required: true,
+            message: "请输入课程名称",
+            trigger: "change",
+          },
+          {
+            message: "课程名称不能超过100个字",
+            max: 100,
+            trigger: "change",
+          },
+        ],
         studentName: [
           {
             required: true,
@@ -183,11 +255,9 @@ export default {
   },
   methods: {
     initData(val) {
+      this.modalForm = this.$objAssign(initModalForm, val);
       if (val.id) {
-        this.modalForm = this.$objAssign(initModalForm, val);
         this.getClazz();
-      } else {
-        this.modalForm = { ...initModalForm };
       }
     },
     visibleChange() {

+ 17 - 4
src/modules/base/views/StudentManage.vue

@@ -2,6 +2,11 @@
   <div class="student-manage">
     <div class="part-box part-box-filter">
       <el-form ref="FilterForm" label-position="left" label-width="90px" inline>
+        <secp-select
+          v-model="filter"
+          default-select-exam
+          @exam-default="toPage(1)"
+        ></secp-select>
         <el-form-item label="学院:">
           <college-select
             v-model="filter.collegeId"
@@ -104,6 +109,8 @@
         ></el-table-column>
         <el-table-column prop="studentName" label="姓名"></el-table-column>
         <el-table-column prop="studentCode" label="学号"></el-table-column>
+        <el-table-column prop="courseCode" label="课程代码"></el-table-column>
+        <el-table-column prop="courseName" label="课程名称"></el-table-column>
         <el-table-column prop="phoneNumber" label="手机号" width="120">
           <span slot-scope="scope">{{
             scope.row.phoneNumber | defaultFieldFilter
@@ -167,6 +174,10 @@
       ref="ImportFile"
       title="导入学生"
       :upload-url="uploadUrl"
+      :upload-data="{
+        semesterId: filter.semesterId,
+        examId: filter.examId,
+      }"
       :format="['xls', 'xlsx']"
       :download-handle="() => downloadTemplate('student')"
       :download-filename="dfilename"
@@ -196,6 +207,8 @@ export default {
   data() {
     return {
       filter: {
+        semesterId: "",
+        examId: "",
         queryParams: "",
         collegeId: "",
         majorId: "",
@@ -221,9 +234,6 @@ export default {
       );
     },
   },
-  mounted() {
-    this.getList();
-  },
   methods: {
     async getList() {
       if (!this.checkPrivilege("list", "list")) return;
@@ -246,7 +256,10 @@ export default {
       this.multipleSelection = val.map((item) => item.id);
     },
     toAdd() {
-      this.curRow = {};
+      this.curRow = {
+        semesterId: this.filter.semesterId,
+        examId: this.filter.examId,
+      };
       this.$refs.ModifyStudent.open();
     },
     toEdit(row) {

+ 44 - 34
src/modules/exam/components/ApplyContent.vue

@@ -14,15 +14,15 @@
       <table class="table mb-2">
         <colgroup>
           <col width="100" />
-          <col width="270" />
+          <col width="240" />
           <col />
-          <col v-if="IS_APPLY" width="80" />
+          <col v-if="IS_APPLY && !IS_REBUILD" width="80" />
         </colgroup>
         <tr>
           <th>试卷类型</th>
           <th>试卷文件</th>
           <th>答题卡</th>
-          <th v-if="IS_APPLY">操作</th>
+          <th v-if="IS_APPLY && !IS_REBUILD">操作</th>
         </tr>
         <tr v-for="(attachment, index) in paperAttachments" :key="index">
           <td>
@@ -89,6 +89,7 @@
                   >预览</el-button
                 >
                 <el-button
+                  v-if="!IS_REBUILD"
                   class="btn-primary"
                   type="text"
                   :disabled="!attachment.cardId"
@@ -205,35 +206,37 @@
                   @click="toViewCard(attachment)"
                   >预览</el-button
                 >
-                <el-button
-                  class="btn-primary"
-                  type="text"
-                  :disabled="
-                    !attachment.cardId ||
-                    (attachment.cardType === 'GENERIC' &&
-                      attachment.createMethod !== 'STANDARD')
-                  "
-                  @click="toCopyCard(attachment)"
-                  >复制</el-button
-                >
-                <el-button
-                  class="btn-primary"
-                  type="text"
-                  :disabled="
-                    !attachment.cardId ||
-                    attachment.cardType === 'GENERIC' ||
-                    !(!attachment.used && attachment.createId === user.id)
-                  "
-                  @click="toEditCard(attachment)"
-                  >编辑</el-button
-                >
-                <el-button
-                  class="btn-primary"
-                  type="text"
-                  :disabled="!canCreateCard"
-                  @click="toCreateCard(attachment)"
-                  >新建</el-button
-                >
+                <template v-if="!IS_REBUILD">
+                  <el-button
+                    class="btn-primary"
+                    type="text"
+                    :disabled="
+                      !attachment.cardId ||
+                      (attachment.cardType === 'GENERIC' &&
+                        attachment.createMethod !== 'STANDARD')
+                    "
+                    @click="toCopyCard(attachment)"
+                    >复制</el-button
+                  >
+                  <el-button
+                    class="btn-primary"
+                    type="text"
+                    :disabled="
+                      !attachment.cardId ||
+                      attachment.cardType === 'GENERIC' ||
+                      !(!attachment.used && attachment.createId === user.id)
+                    "
+                    @click="toEditCard(attachment)"
+                    >编辑</el-button
+                  >
+                  <el-button
+                    class="btn-primary"
+                    type="text"
+                    :disabled="!canCreateCard"
+                    @click="toCreateCard(attachment)"
+                    >新建</el-button
+                  >
+                </template>
               </template>
               <el-button
                 v-else
@@ -251,7 +254,7 @@
               </el-button>
             </td>
           </template>
-          <td v-if="IS_APPLY" class="text-right">
+          <td v-if="IS_APPLY && !IS_REBUILD" class="text-right">
             <el-button
               v-if="index === paperAttachments.length - 1"
               class="btn-primary btn-icon"
@@ -275,7 +278,7 @@
         </tr>
       </table>
 
-      <el-form>
+      <el-form v-if="!IS_REBUILD">
         <el-form-item label="单次抽卷卷型数量:" label-width="150">
           <el-input-number
             v-model="curTaskApply.drawCount"
@@ -677,6 +680,7 @@ import { copyCard } from "../../card/api";
 const initTaskApply = {
   examId: "",
   examTaskId: "",
+  category: "",
   paperNumber: "",
   paperType: "A",
   paperAttachmentIds: "",
@@ -862,6 +866,9 @@ export default {
     exposedMode() {
       return !!this.curTaskApply.exposedPaperType;
     },
+    IS_REBUILD() {
+      return this.curTaskApply.category === "REBUILD";
+    },
   },
   mounted() {
     this.user = this.$ls.get("user", {});
@@ -976,6 +983,9 @@ export default {
         paperNumber: this.curTaskApply.paperNumber,
       });
       this.cards = data || [];
+      if (this.IS_REBUILD) {
+        this.cards = this.cards.filter((item) => item.type === "GENERIC");
+      }
     },
     async getFlowHistory() {
       if (!this.curTaskApply.flowId) return;

+ 1 - 0
src/modules/exam/components/ModifyTaskApply.vue

@@ -134,6 +134,7 @@ const initModalForm = {
   examId: "",
   examName: "",
   examModel: "",
+  category: "",
   semesterId: "",
   semesterName: "",
   courseCode: "",

+ 8 - 1
src/modules/exam/components/ModifyTaskPaper.vue

@@ -59,7 +59,7 @@
       </div>
 
       <div>
-        <div v-if="IS_EDIT" class="mb-2 text-right">
+        <div v-if="IS_EDIT && !IS_REBUILD" class="mb-2 text-right">
           <el-button
             type="info"
             icon="el-icon-circle-plus-outline"
@@ -286,6 +286,7 @@ import { copyCard } from "../../card/api";
 const initTaskApply = {
   examId: "",
   examTaskId: "",
+  category: "",
   paperType: "A",
   paperAttachmentIds: "",
   cardId: "",
@@ -350,6 +351,9 @@ export default {
     exposedMode() {
       return !!this.curTaskApply.exposedPaperType;
     },
+    IS_REBUILD() {
+      return this.curTaskApply.category === "REBUILD";
+    },
   },
   data() {
     return {
@@ -373,6 +377,9 @@ export default {
         paperNumber: this.instance.paperNumber,
       });
       this.cards = data || [];
+      if (this.IS_REBUILD) {
+        this.cards = this.cards.filter((item) => item.type === "GENERIC");
+      }
     },
     async visibleChange() {
       const data = await taskApplyDetail(this.instance.id);

+ 17 - 0
src/modules/exam/components/UploadPaperDialog.vue

@@ -29,6 +29,15 @@
       <el-button type="info" @click="toPreview" style="margin-left: 10px"
         >预览</el-button
       >
+      <div v-if="showTemp" class="mt-2">
+        <span>试卷模板:</span>
+        <a
+          class="cont-link"
+          href="/temp/paper-template.doc"
+          download="试卷上传模板.doc"
+          >试卷上传模板.doc</a
+        >
+      </div>
     </div>
     <div slot="footer">
       <el-button type="primary" @click="confirm" :disabled="loading"
@@ -82,6 +91,7 @@ export default {
         },
       },
       curConfig: { format: [], uploadUrl: "" },
+      showTemp: false,
     };
   },
   computed: {
@@ -89,6 +99,13 @@ export default {
       return this.uploadType === "paper";
     },
   },
+  mounted() {
+    const schoolCode = this.$ls.get("schoolInfo", {
+      schoolCode: "",
+    }).schoolCode;
+    // this.showTemp = schoolCode === "test-school-2";
+    this.showTemp = schoolCode === "gdpu";
+  },
   methods: {
     visibleChange() {
       this.$refs.UploadFileView.setAttachmentName(

+ 1 - 0
src/modules/exam/components/createExamAndPrintTask/CreateExamAndPrintTask.vue

@@ -106,6 +106,7 @@ const initExamTask = {
   semesterId: "",
   examId: "",
   examModel: "",
+  category: "",
   courseCode: "",
   courseName: "",
   paperNumber: "",

+ 43 - 33
src/modules/exam/components/createExamAndPrintTask/InfoExamTask.vue

@@ -99,13 +99,13 @@
             <col width="90" />
             <col width="280" />
             <col />
-            <col width="80" />
+            <col v-if="!IS_REBUILD" width="80" />
           </colgroup>
           <tr>
             <th>试卷类型</th>
             <th>试卷文件</th>
             <th>答题卡</th>
-            <th>操作</th>
+            <th v-if="!IS_REBUILD">操作</th>
           </tr>
           <tr v-for="(attachment, index) in paperAttachments" :key="index">
             <td>{{ attachment.name }}卷</td>
@@ -165,6 +165,7 @@
                 >预览</el-button
               >
               <el-button
+                v-if="!IS_REBUILD"
                 class="btn-primary"
                 type="text"
                 :disabled="!attachment.cardId"
@@ -226,37 +227,39 @@
                 @click="toViewCard(attachment)"
                 >预览</el-button
               >
-              <el-button
-                class="btn-primary"
-                type="text"
-                :disabled="
-                  !attachment.cardId ||
-                  (attachment.cardType === 'GENERIC' &&
-                    attachment.createMethod !== 'STANDARD')
-                "
-                @click="toCopyCard(attachment)"
-                >复制</el-button
-              >
-              <el-button
-                class="btn-primary"
-                type="text"
-                :disabled="
-                  !attachment.cardId ||
-                  attachment.cardType === 'GENERIC' ||
-                  !(!attachment.used && attachment.createId === user.id)
-                "
-                @click="toEditCard(attachment)"
-                >编辑</el-button
-              >
-              <el-button
-                class="btn-primary"
-                type="text"
-                :disabled="!canCreateCard"
-                @click="toCreateCard(attachment)"
-                >新建</el-button
-              >
+              <template v-if="!IS_REBUILD">
+                <el-button
+                  class="btn-primary"
+                  type="text"
+                  :disabled="
+                    !attachment.cardId ||
+                    (attachment.cardType === 'GENERIC' &&
+                      attachment.createMethod !== 'STANDARD')
+                  "
+                  @click="toCopyCard(attachment)"
+                  >复制</el-button
+                >
+                <el-button
+                  class="btn-primary"
+                  type="text"
+                  :disabled="
+                    !attachment.cardId ||
+                    attachment.cardType === 'GENERIC' ||
+                    !(!attachment.used && attachment.createId === user.id)
+                  "
+                  @click="toEditCard(attachment)"
+                  >编辑</el-button
+                >
+                <el-button
+                  class="btn-primary"
+                  type="text"
+                  :disabled="!canCreateCard"
+                  @click="toCreateCard(attachment)"
+                  >新建</el-button
+                >
+              </template>
             </td>
-            <td class="text-right">
+            <td v-if="!IS_REBUILD" class="text-right">
               <el-button
                 v-if="index === paperAttachments.length - 1"
                 class="btn-primary btn-icon"
@@ -279,7 +282,7 @@
           </tr>
         </table>
 
-        <el-form>
+        <el-form v-if="!IS_REBUILD">
           <el-form-item label="单次抽卷卷型数量:" label-width="150">
             <el-input-number
               v-model="examTaskDetail.drawCount"
@@ -494,6 +497,9 @@ export default {
     IS_TIKU_TAB() {
       return this.curTab === "tiku";
     },
+    IS_REBUILD() {
+      return this.examTask.category === "REBUILD";
+    },
   },
   watch: {
     "examTask.examId": function (val, oldval) {
@@ -559,6 +565,9 @@ export default {
         examId: this.examTask.examId,
       });
       this.cards = data || [];
+      if (this.IS_REBUILD) {
+        this.cards = this.cards.filter((item) => item.type === "GENERIC");
+      }
     },
     async getCourses() {
       if (!this.examTask.teachingRoomId) return;
@@ -573,6 +582,7 @@ export default {
     examChange(val) {
       if (!val.id) return;
       this.examTask.examModel = val.examModel;
+      this.examTask.category = val.category;
       this.clearTaskData();
     },
     courseChange(val) {

+ 43 - 15
src/modules/exam/components/createExamAndPrintTask/InfoPrintTask.vue

@@ -1,13 +1,15 @@
 <template>
   <div class="info-print-task">
-    <p v-if="IS_MODEL2" class="tips-info mb-2">
-      考试需要命题老师提交具体印刷份数
-    </p>
-    <p v-else class="tips-info mb-2">
-      考试需要命题老师提交完整的考务数据,每个卷袋表示一个考场,人数字段为应考人数,备份数量为该考场试卷题卡备用数量
-    </p>
+    <template v-if="!IS_REBUILD">
+      <p v-if="IS_MODEL2" class="tips-info mb-2">
+        考试需要命题老师提交具体印刷份数
+      </p>
+      <p v-else class="tips-info mb-2">
+        考试需要命题老师提交完整的考务数据,每个卷袋表示一个考场,人数字段为应考人数,备份数量为该考场试卷题卡备用数量
+      </p>
+    </template>
     <el-form ref="modalFormComp" label-position="top">
-      <el-form-item label="考试时间:" required>
+      <el-form-item v-if="!IS_REBUILD" label="考试时间:" required>
         <el-date-picker
           v-model="createDate"
           type="date"
@@ -37,7 +39,7 @@
         style="margin-bottom: 0"
       ></el-form-item>
     </el-form>
-    <div v-if="IS_MODEL2" class="part-box">
+    <div v-if="IS_MODEL2 || IS_REBUILD" class="part-box">
       <div class="box-justify mb-1">
         <div></div>
         <el-button type="primary" @click="toSelectClass">选择班级</el-button>
@@ -49,6 +51,7 @@
           <col width="120" />
           <col width="200" />
           <col width="300" />
+          <col width="100" />
         </colgroup>
         <tr>
           <th>卷袋序号</th>
@@ -56,6 +59,7 @@
           <th>备份数量</th>
           <th>印刷室</th>
           <th>班级</th>
+          <th>操作</th>
         </tr>
         <tr>
           <td>1</td>
@@ -68,6 +72,7 @@
               :step="1"
               step-strictly
               :controls="false"
+              :disabled="IS_REBUILD"
             ></el-input-number>
           </td>
           <td>
@@ -99,6 +104,14 @@
           <td>
             {{ model2ClassList.map((item) => item.clazzName).join(",") }}
           </td>
+          <td>
+            <el-button
+              class="btn-primary"
+              type="text"
+              @click="toViewModel2Student"
+              >查看考生</el-button
+            >
+          </td>
         </tr>
       </table>
     </div>
@@ -250,13 +263,13 @@
         teachingRoomId: infoExamTask.teachingRoomId,
       }"
       :show-student="showStudent"
-      :selected-ids="IS_MODEL2 ? model2ClassIds : null"
+      :selected-ids="IS_MODEL2 || IS_REBUILD ? model2ClassIds : null"
       @modified="examStudentModified"
     ></modify-exam-task-student>
     <!-- PreviewTaskStudent -->
     <preview-task-student
       ref="PreviewTaskStudent"
-      :student-list="curRow.examTaskStudentObjectParamList"
+      :student-list="examStudentList"
       :show-student="showStudent"
       @close="previewStudentClosed"
     ></preview-task-student>
@@ -297,6 +310,7 @@ export default {
       tableData: [],
       model2ClassList: [],
       model2ClassIds: [],
+      model2Students: [],
       curRow: {},
       printHouses: [],
       extendFields: [],
@@ -331,6 +345,9 @@ export default {
     IS_MODEL2() {
       return this.infoExamTask.examModel === "MODEL2";
     },
+    IS_REBUILD() {
+      return this.infoExamTask.category === "REBUILD";
+    },
   },
   watch: {
     "infoExamTask.examId": function (val, oldval) {
@@ -364,10 +381,11 @@ export default {
         }
       );
 
-      if (this.IS_MODEL2) {
+      if (this.IS_MODEL2 || this.IS_REBUILD) {
         this.modalForm.backupCount = this.infoExamPrintPlan.backupCount;
         this.model2ClassList = [];
         this.model2ClassIds = [];
+        this.model2Students = [];
         return;
       }
 
@@ -410,9 +428,9 @@ export default {
       return true;
     },
     checkData() {
-      if (!this.checkTime()) return Promise.reject();
+      if (!this.IS_REBUILD && !this.checkTime()) return Promise.reject();
 
-      if (this.IS_MODEL2) {
+      if (this.IS_MODEL2 || this.IS_REBUILD) {
         if (!this.modalForm.totalSubjects) {
           this.$message.error("请输入印刷份数!");
           return Promise.reject();
@@ -581,7 +599,7 @@ export default {
       return data;
     },
     examStudentModified({ selectedStudents, isSelectStudent }) {
-      if (this.IS_MODEL2) {
+      if (this.IS_MODEL2 || this.IS_REBUILD) {
         this.model2ClassList = selectedStudents.map((item) => {
           return {
             clazzId: item.clazzId,
@@ -590,6 +608,12 @@ export default {
         });
         this.model2ClassIds = this.model2ClassList.map((item) => item.clazzId);
         this.modalForm.classId = this.model2ClassIds.join();
+        this.model2Students = selectedStudents
+          .map((item) => item.children)
+          .flat();
+        if (this.IS_REBUILD) {
+          this.modalForm.totalSubjects = this.model2Students.length;
+        }
         return;
       }
       if (this.studentUploaded) {
@@ -620,7 +644,11 @@ export default {
     },
     toViewStudent(row) {
       // console.log(row);
-      this.curRow = row;
+      this.examStudentList = row.examTaskStudentObjectParamList;
+      this.$refs.PreviewTaskStudent.open();
+    },
+    toViewModel2Student() {
+      this.examStudentList = this.model2Students;
       this.$refs.PreviewTaskStudent.open();
     },
     previewStudentClosed() {

+ 91 - 2
src/modules/exam/components/createExamAndPrintTask/PreviewTaskStudent.vue

@@ -1,6 +1,6 @@
 <template>
   <el-dialog
-    class="preview-task-student"
+    class="preview-task-student page-dialog"
     :visible.sync="modalIsShow"
     title="考试对象学生"
     top="10px"
@@ -9,8 +9,38 @@
     :close-on-press-escape="false"
     append-to-body
     @close="modalClose"
+    @open="visibleChange"
   >
-    <el-table ref="TableList" :data="studentList">
+    <div class="part-box part-box-filter" style="padding-bottom: 5px">
+      <el-form ref="FilterForm" label-position="left" label-width="0" inline>
+        <el-form-item label="班级:">
+          <el-select
+            v-model="filter.basicClazzName"
+            placeholder="班级"
+            clearable
+          >
+            <el-option
+              v-for="item in classes"
+              :key="item"
+              :value="item"
+              :label="item"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="姓名/学号:">
+          <el-input
+            v-model="filter.studentNameCode"
+            placeholder="姓名/学号"
+            clearable
+          ></el-input>
+        </el-form-item>
+        <el-form-item label-width="0px">
+          <el-button type="primary" @click="toPage(1)">查询</el-button>
+        </el-form-item>
+      </el-form>
+    </div>
+
+    <el-table ref="TableList" :data="dataList">
       <el-table-column type="index" label="序号" width="70"></el-table-column>
       <el-table-column prop="studentName" label="姓名"> </el-table-column>
       <el-table-column prop="studentCode" label="学号"> </el-table-column>
@@ -32,6 +62,19 @@
         </template>
       </el-table-column>
     </el-table>
+    <div class="part-page">
+      <el-pagination
+        background
+        layout="total, sizes, prev, pager, next, jumper"
+        :pager-count="5"
+        :current-page="current"
+        :total="total"
+        :page-size="size"
+        @current-change="toPage"
+        @size-change="pageSizeChange"
+      >
+      </el-pagination>
+    </div>
   </el-dialog>
 </template>
 
@@ -53,6 +96,15 @@ export default {
   data() {
     return {
       modalIsShow: false,
+      dataList: [],
+      current: 1,
+      size: this.GLOBAL.pageSize,
+      total: 0,
+      filter: {
+        basicClazzName: "",
+        studentNameCode: "",
+      },
+      classes: [],
     };
   },
   methods: {
@@ -62,6 +114,43 @@ export default {
     open() {
       this.modalIsShow = true;
     },
+    visibleChange() {
+      this.getClasses();
+      this.toPage(1);
+    },
+    getClasses() {
+      this.classes = Array.from(
+        new Set(this.studentList.map((item) => item.basicClazzName))
+      );
+    },
+    getList() {
+      let datas = this.studentList;
+      if (this.filter.basicClazzName) {
+        datas = datas.filter(
+          (item) => item.basicClazzName === this.filter.basicClazzName
+        );
+      }
+      if (this.filter.studentNameCode) {
+        const escapeRegexpString = (value = "") =>
+          String(value).replace(/[|\\{}()[\]^$+*?.]/g, "\\$&");
+        const reg = new RegExp(
+          escapeRegexpString(this.filter.studentNameCode),
+          "i"
+        );
+        datas = datas.filter(
+          (item) => reg.test(item.studentName) || reg.test(item.studentCode)
+        );
+      }
+
+      this.total = datas.length;
+      const startIndex = this.size * (this.current - 1);
+      const endIndex = this.size * this.current;
+      this.dataList = datas.slice(startIndex, endIndex);
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    },
     toEnable(row) {
       if (
         this.studentList.filter((item) => item.enable).length === 1 &&

+ 22 - 0
src/modules/print/components/PrintPlanBkDetail.vue

@@ -68,6 +68,20 @@
               clearable
             ></el-input>
           </el-form-item>
+          <el-form-item label="校区:">
+            <el-input
+              v-model="filter.capusName"
+              placeholder="校区"
+              clearable
+            ></el-input>
+          </el-form-item>
+          <el-form-item label="班级:">
+            <el-input
+              v-model="filter.className"
+              placeholder="班级"
+              clearable
+            ></el-input>
+          </el-form-item>
           <el-form-item label-width="0px">
             <el-button type="primary" @click="search">查询</el-button>
           </el-form-item>
@@ -125,6 +139,10 @@
               >{{ scope.row.realName }}({{ scope.row.loginName }})</span
             >
           </el-table-column>
+          <el-table-column prop="capusName" label="校区" min-width="100">
+          </el-table-column>
+          <el-table-column prop="className" label="班级" min-width="100">
+          </el-table-column>
           <el-table-column prop="statusDisplay" label="状态" width="100">
           </el-table-column>
           <el-table-column
@@ -246,6 +264,8 @@ export default {
         courseCode: "",
         paperNumber: "",
         userName: "",
+        capusName: "",
+        className: "",
       },
       current: 1,
       size: this.GLOBAL.pageSize,
@@ -265,6 +285,8 @@ export default {
         courseCode: "",
         paperNumber: "",
         userName: "",
+        capusName: "",
+        className: "",
       };
       this.size = this.GLOBAL.pageSize;
       this.dataList = [];

+ 3 - 3
src/modules/print/views/PrintPlanManage.vue

@@ -213,7 +213,7 @@
     >
       <div class="big-btns">
         <el-button
-          v-for="(val, key) in EXAM_TYPE"
+          v-for="(val, key) in PRINT_PLAN_TYPE"
           :key="key"
           type="primary"
           @click="toAdd(key)"
@@ -227,7 +227,7 @@
 
 <script>
 import { printPlanListPage, removePrintPlan, finishPrintPlan } from "../api";
-import { PRINT_PLAN_STATUS, EXAM_TYPE } from "@/constants/enumerate";
+import { PRINT_PLAN_STATUS, PRINT_PLAN_TYPE } from "@/constants/enumerate";
 import pickerOptions from "@/constants/datePickerOptions";
 import ModifyPrintPlan from "../components/ModifyPrintPlan";
 import PrintPlanDetail from "../components/PrintPlanDetail.vue";
@@ -255,7 +255,7 @@ export default {
       PRINT_PLAN_STATUS,
       curUserId: this.$ls.get("user", { id: "" }).id,
       modalIsShow: false,
-      EXAM_TYPE,
+      PRINT_PLAN_TYPE,
       // date-picker
       createTime: [],
       pickerOptions,