Browse Source

考场关联批次

Michael Wang 4 năm trước cách đây
mục cha
commit
2988bc639d

+ 2 - 1
src/api/examwork-invigilate.js

@@ -3,13 +3,14 @@ import { pickBy } from "lodash-es";
 import { object2QueryString } from "@/utils/utils";
 
 export function searchInvigilators({
+  examId = "",
   roomCode = "",
   userId = "",
   pageNumber = 1,
   pageSize = 10,
 }) {
   const data = pickBy(
-    { roomCode, userId, pageNumber, pageSize },
+    { examId, roomCode, userId, pageNumber, pageSize },
     (v) => v !== ""
   );
   return httpApp.post(

+ 2 - 1
src/api/examwork-task.js

@@ -44,8 +44,9 @@ export function importExamStudent({ examId, fileName, file, md5 }) {
   });
 }
 
-export function importInvigilator({ fileName, file, md5 }) {
+export function importInvigilator({ examId, fileName, file, md5 }) {
   const form = new FormData();
+  form.append("examId", examId);
   form.append("fileName", fileName);
   form.append("file", file);
   return httpApp.post("/api/admin/invigilateUser/import", form, {

+ 11 - 3
src/components/ExamRoomSelect.vue

@@ -26,6 +26,7 @@ import { object2QueryString } from "@/utils/utils";
 export default {
   name: "ExamRoomSelect",
   props: {
+    examId: String,
     value: [String, Array],
     styles: { type: String },
   },
@@ -45,15 +46,22 @@ export default {
         this.selected = val;
       },
     },
+    examId: {
+      immediate: true,
+      handler() {
+        this.search();
+      },
+    },
   },
   methods: {
     async search(query) {
+      if (!this.examId) return;
       const res = await this.$http.post(
-        "/api/admin/sys/examRoom/query?" +
-          object2QueryString({ roomName: query })
+        "/api/admin/sys/exam/privilegeQuery?" +
+          object2QueryString({ examId: this.examId, roomName: query })
       );
       // console.log(res.data);
-      this.optionList = res.data.data;
+      this.optionList = res.data.data.examRooms;
     },
     select() {
       this.$emit("input", this.selected);

+ 3 - 0
src/components/RoleSelect.vue

@@ -48,6 +48,9 @@ export default {
   },
   methods: {
     select() {
+      if (this.selected.length > 1) {
+        this.selected = this.selected.splice(1);
+      }
       this.$emit("input", this.selected);
       this.$emit("change", this.selected);
     },

+ 5 - 1
src/features/examwork/ExamStudentManagement/ExamStudentManagementDialog.vue

@@ -29,7 +29,11 @@
       </el-row>
       <el-row>
         <el-form-item label="考场名称">
-          <ExamRoomSelect v-model="form.roomCode" styles="width: 100%" />
+          <ExamRoomSelect
+            :examId="form.examId"
+            v-model="form.roomCode"
+            styles="width: 100%"
+          />
         </el-form-item>
       </el-row>
       <el-row>

+ 20 - 0
src/features/examwork/InvigilateManagement/InvigilateImportDialog.vue

@@ -34,6 +34,9 @@ import MD5 from "js-md5";
 
 export default {
   name: "InvigilateImportDialog",
+  props: {
+    examId: String,
+  },
   data() {
     return {
       visible: false,
@@ -45,6 +48,22 @@ export default {
       loading: false,
     };
   },
+  watch: {
+    examId: {
+      immediate: true,
+      handler() {
+        this.form = {
+          processPaper: false,
+          processAnswer: false,
+          objectiveShuffle: false,
+          optionShuffle: false,
+          audioPlayCount: 0,
+          file: "",
+          fileName: "",
+        };
+      },
+    },
+  },
   methods: {
     openDialog() {
       this.visible = true;
@@ -73,6 +92,7 @@ export default {
       try {
         this.loading = true;
         await importInvigilator({
+          examId: this.examId,
           file: this.form.file,
           fileName: this.form.fileName,
           md5,

+ 28 - 6
src/features/examwork/InvigilateManagement/InvigilateManagement.vue

@@ -5,12 +5,15 @@
     </div>
     <div class="part-filter">
       <div class="part-filter-form">
-        <el-form :model="form" inline>
-          <!-- <el-form-item v-if="$store.state.user.orgId === null" label="机构">
-        <OrgSelect v-model="form.orgId"></OrgSelect>
-      </el-form-item> -->
+        <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="考场">
-            <ExamRoomSelect v-model="form.roomCode"></ExamRoomSelect>
+            <ExamRoomSelect
+              :examId="form.examId"
+              v-model="form.roomCode"
+            ></ExamRoomSelect>
           </el-form-item>
           <el-form-item label="监考老师">
             <InvigilatorSelect v-model="form.userId"></InvigilatorSelect>
@@ -45,6 +48,12 @@
       <el-table-column width="100" label="ID">
         <span slot-scope="scope">{{ scope.row.id }}</span>
       </el-table-column> -->
+      <el-table-column label="批次ID">
+        <span slot-scope="scope">{{ scope.row.examId }}</span>
+      </el-table-column>
+      <el-table-column label="批次名称">
+        <span slot-scope="scope">{{ scope.row.examName }}</span>
+      </el-table-column>
       <el-table-column width="200" label="考场编码">
         <span slot-scope="scope">{{ scope.row.roomCode }}</span>
       </el-table-column>
@@ -76,6 +85,7 @@
 
     <InvigilateManagementDialog
       ref="theDialog"
+      :examId="form.examId"
       :user="selectedUser"
       @reload="searchForm"
     />
@@ -104,9 +114,13 @@ export default {
   data() {
     return {
       form: {
+        examId: "",
         roomCode: "",
         userId: "",
       },
+      rules: {
+        examId: [{ required: true, message: "批次必选" }],
+      },
       tableData: [],
       currentPage: 1,
       pageSize: 10,
@@ -121,6 +135,7 @@ export default {
   methods: {
     async searchForm() {
       const res = await searchInvigilators({
+        examId: this.form.examId,
         userId: this.form.userId,
         roomCode: this.form.roomCode,
         pageNumber: this.currentPage,
@@ -142,7 +157,14 @@ export default {
       this.selectedUser = user;
       this.$refs.theDialog.openDialog();
     },
-    importDialog() {
+    async importDialog() {
+      try {
+        const valid = await this.$refs.form.validate();
+        if (!valid) return;
+      } catch (error) {
+        console.log(error);
+        return;
+      }
       this.$refs.theDialog2.openDialog();
     },
     exportInvigilate() {

+ 2 - 0
src/features/examwork/InvigilateManagement/InvigilateManagementDialog.vue

@@ -16,6 +16,7 @@
       <el-row>
         <el-form-item label="考场">
           <ExamRoomSelect
+            :examId="examId"
             v-model="form.roomCode"
             style="width: 100%;"
           ></ExamRoomSelect>
@@ -44,6 +45,7 @@ import { saveInvigilator } from "@/api/examwork-invigilate";
 export default {
   name: "InvigilateManagementDialog",
   props: {
+    examId: String,
     user: Object,
   },
   watch: {

+ 1 - 1
src/features/system/UserManagement/UserManagementDialog.vue

@@ -47,7 +47,7 @@
       </el-row>
       <el-row>
         <el-form-item label="角色" prop="roleCode">
-          <RoleSelect v-model="form.roleCode" multiple />
+          <RoleSelect v-model="form.roleCode" :multiple="true" />
         </el-form-item>
       </el-row>
       <el-row>

+ 1 - 7
vue.config.js

@@ -1,12 +1,6 @@
 let proxy = {
   "/api": {
-    target: "http://192.168.10.36:8001/",
-    // target: "http://192.168.10.86:6001/",
-    changeOrigin: true,
-  },
-  "/file": {
-    target: "http://192.168.10.36:8001/",
-    // target: "http://192.168.10.86:6001/",
+    target: "http://192.168.10.26:6001/",
     changeOrigin: true,
   },
 };