Przeglądaj źródła

feat: 命题任务新增开课学院

zhangjie 11 miesięcy temu
rodzic
commit
8508290ac9

+ 22 - 19
src/components/base/BaseCourseSelect.vue → src/components/base/OrgCourseSelect.vue

@@ -10,25 +10,31 @@
   >
     <el-option
       v-for="item in optionList"
-      :key="item.id"
-      :value="item.id"
-      :label="`${item.name}(${item.code})`"
+      :key="item.basicCourseId"
+      :value="item.basicCourseId"
+      :label="`${item.courseName}(${item.courseCode})`"
     >
-      <span>{{ `${item.name}(${item.code})` }}</span>
+      <span>{{ `${item.courseName}(${item.courseCode})` }}</span>
     </el-option>
   </el-select>
 </template>
 
 <script>
-import { courseQuery } from "../../modules/base/api";
+import { courseQueryByOrg } from "../../modules/base/api";
 
 export default {
-  name: "base-course-select",
+  name: "org-course-select",
   props: {
     disabled: { type: Boolean, default: false },
     placeholder: { type: String, default: "请选择" },
     value: { type: [Number, String], default: "" },
     clearable: { type: Boolean, default: true },
+    filterParam: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
   },
   data() {
     return {
@@ -43,30 +49,27 @@ export default {
         this.selected = val;
       },
     },
-    teachingRoomId(val, oldval) {
-      if (val !== oldval) {
-        this.search("");
+    filterParam(val, oldval) {
+      if (JSON.stringify(val) !== JSON.stringify(oldval)) {
+        this.search();
         this.$emit("input", "");
         this.$emit("change", {});
       }
     },
   },
-  async created() {
-    this.search();
-  },
   methods: {
-    async search(query) {
-      const res = await courseQuery({
-        param: query,
-        teachingRoomId: this.teachingRoomId,
-      });
-      this.optionList = res.basicCourseList;
+    async search() {
+      this.optionList = [];
+      if (!this.filterParam.examId || !this.filterParam.belongOrgId) return;
+
+      const res = await courseQueryByOrg(this.filterParam);
+      this.optionList = res || [];
     },
     select() {
       this.$emit("input", this.selected);
       this.$emit(
         "change",
-        this.optionList.find((item) => item.id === this.selected)
+        this.optionList.find((item) => item.basicCourseId === this.selected)
       );
     },
   },

+ 25 - 4
src/modules/exam/components/ModifyExamTask.vue

@@ -38,16 +38,29 @@
           ></exam-select>
           <span v-else>{{ modalForm.examName }}</span>
         </el-form-item>
+        <el-form-item v-if="editable" prop="belongOrgId" label="开课学院:">
+          <org-select
+            v-model="modalForm.belongOrgId"
+            placeholder="开课学院"
+            style="width: 100%"
+            :filter-param="{
+              withoutSecondOrg: true,
+            }"
+          ></org-select>
+        </el-form-item>
         <el-form-item prop="courseId" label="课程(代码):">
-          <base-course-select
+          <org-course-select
             v-if="editable"
-            ref="CourseSelect"
-            v-model.trim="modalForm.courseId"
+            v-model="modalForm.courseId"
             placeholder="请选择"
             clearable
             class="width-full"
+            :filter-param="{
+              examId: modalForm.examId,
+              belongOrgId: modalForm.belongOrgId,
+            }"
             @change="courseChange"
-          ></base-course-select>
+          ></org-course-select>
           <span v-else
             >{{ modalForm.courseName }}({{ modalForm.courseCode }})</span
           >
@@ -128,6 +141,7 @@ const initModalForm = {
   semesterName: "",
   examId: "",
   examName: "",
+  belongOrgId: "",
   courseId: "",
   courseCode: "",
   courseName: "",
@@ -192,6 +206,13 @@ export default {
             trigger: "change",
           },
         ],
+        belongOrgId: [
+          {
+            required: true,
+            message: "请选择开课学院",
+            trigger: "change",
+          },
+        ],
         courseId: [
           {
             required: true,

+ 2 - 2
src/plugins/globalVuePlugins.js

@@ -33,7 +33,7 @@ import ProfessionalSelect from "../components/base/ProfessionalSelect.vue";
 import TrainingPlanSelect from "../components/base/TrainingPlanSelect.vue";
 import TrainingPlanCourseSelect from "../components/base/TrainingPlanCourseSelect.vue";
 // base
-import BaseCourseSelect from "../components/base/BaseCourseSelect.vue";
+import OrgCourseSelect from "../components/base/OrgCourseSelect.vue";
 // other
 import SecpSelect from "../components/SecpSelect.vue";
 
@@ -68,7 +68,7 @@ const components = {
   TrainingPlanSelect,
   TrainingPlanCourseSelect,
   // base
-  BaseCourseSelect,
+  OrgCourseSelect,
   // other
   SecpSelect,
 };