浏览代码

feat: 通用查询

zhangjie 1 年之前
父节点
当前提交
fb3441b2b4

+ 2 - 7
src/components/base/ProfessionalSelect.vue

@@ -1,7 +1,6 @@
 <template>
 <template>
   <el-select
   <el-select
     v-model="selected"
     v-model="selected"
-    class="professional-select"
     :placeholder="placeholder"
     :placeholder="placeholder"
     filterable
     filterable
     :clearable="clearable"
     :clearable="clearable"
@@ -19,7 +18,7 @@
 </template>
 </template>
 
 
 <script>
 <script>
-import { conditionProfessionalClazz } from "../../modules/base/api";
+import { conditionProfessionalList } from "../../modules/base/api";
 
 
 export default {
 export default {
   name: "professional-select",
   name: "professional-select",
@@ -28,7 +27,6 @@ export default {
     placeholder: { type: String, default: "请选择" },
     placeholder: { type: String, default: "请选择" },
     value: { type: [Number, String], default: "" },
     value: { type: [Number, String], default: "" },
     clearable: { type: Boolean, default: true },
     clearable: { type: Boolean, default: true },
-    orgId: { type: String, default: "" },
   },
   },
   data() {
   data() {
     return {
     return {
@@ -43,9 +41,6 @@ export default {
         this.selected = val;
         this.selected = val;
       },
       },
     },
     },
-    orgId(val, oldval) {
-      if (val !== oldval) this.search();
-    },
   },
   },
   created() {
   created() {
     this.search();
     this.search();
@@ -53,7 +48,7 @@ export default {
   methods: {
   methods: {
     async search() {
     async search() {
       this.optionList = [];
       this.optionList = [];
-      const res = await conditionProfessionalClazz({ orgId: this.orgId });
+      const res = await conditionProfessionalList();
       this.optionList = res;
       this.optionList = res;
     },
     },
     select() {
     select() {

+ 83 - 0
src/components/base/TrainingPlanCourseSelect.vue

@@ -0,0 +1,83 @@
+<template>
+  <el-select
+    v-model="selected"
+    :placeholder="placeholder"
+    filterable
+    :clearable="clearable"
+    :disabled="disabled"
+    @change="select"
+  >
+    <el-option
+      v-for="item in optionList"
+      :key="item.id"
+      :value="item.id"
+      :label="item.name"
+    >
+    </el-option>
+  </el-select>
+</template>
+
+<script>
+import { conditionTrainingPlanCourseList } from "../../modules/base/api";
+
+export default {
+  name: "training-plan-course-select",
+  props: {
+    disabled: { type: Boolean, default: false },
+    placeholder: { type: String, default: "请选择" },
+    value: { type: [Number, String], default: "" },
+    clearable: { type: Boolean, default: true },
+    professionalId: { type: String, default: "" },
+    cultureProgramId: { type: String, default: "" },
+  },
+  data() {
+    return {
+      optionList: [],
+      selected: "",
+    };
+  },
+  watch: {
+    value: {
+      immediate: true,
+      handler(val) {
+        this.selected = val;
+      },
+    },
+    professionalId(val, oldval) {
+      if (val !== oldval) {
+        this.search();
+        this.$emit("input", "");
+        this.$emit("change", {});
+      }
+    },
+    cultureProgramId(val, oldval) {
+      if (val !== oldval) {
+        this.search();
+        this.$emit("input", "");
+        this.$emit("change", {});
+      }
+    },
+  },
+  created() {
+    this.search();
+  },
+  methods: {
+    async search() {
+      this.optionList = [];
+      if (!this.professionalId || !this.cultureProgramId) return;
+      const res = await conditionTrainingPlanCourseList({
+        professionalId: this.professionalId,
+        cultureProgramId: this.cultureProgramId,
+      });
+      this.optionList = res;
+    },
+    select() {
+      this.$emit("input", this.selected);
+      this.$emit(
+        "change",
+        this.optionList.find((item) => item.id === this.selected)
+      );
+    },
+  },
+};
+</script>

+ 73 - 0
src/components/base/TrainingPlanSelect.vue

@@ -0,0 +1,73 @@
+<template>
+  <el-select
+    v-model="selected"
+    :placeholder="placeholder"
+    filterable
+    :clearable="clearable"
+    :disabled="disabled"
+    @change="select"
+  >
+    <el-option
+      v-for="item in optionList"
+      :key="item.id"
+      :value="item.id"
+      :label="item.name"
+    >
+    </el-option>
+  </el-select>
+</template>
+
+<script>
+import { conditionTrainingPlanList } from "../../modules/base/api";
+
+export default {
+  name: "training-plan-select",
+  props: {
+    disabled: { type: Boolean, default: false },
+    placeholder: { type: String, default: "请选择" },
+    value: { type: [Number, String], default: "" },
+    clearable: { type: Boolean, default: true },
+    professionalId: { type: String },
+    professionalRequired: { type: Boolean, default: false },
+  },
+  data() {
+    return {
+      optionList: [],
+      selected: "",
+    };
+  },
+  watch: {
+    value: {
+      immediate: true,
+      handler(val) {
+        this.selected = val;
+      },
+    },
+    professionalId(val, oldval) {
+      if (val !== oldval && this.professionalRequired) {
+        this.search();
+        this.$emit("input", "");
+        this.$emit("change", {});
+      }
+    },
+  },
+  created() {
+    this.search();
+  },
+  methods: {
+    async search() {
+      this.optionList = [];
+      if (this.professionalRequired && !this.professionalId) return;
+      const res = await conditionTrainingPlanList(this.professionalId);
+      this.optionList = res;
+    },
+    select() {
+      this.$emit("input", this.selected);
+      this.$emit(
+        "change",
+        this.optionList.find((item) => item.id === this.selected)
+      );
+    },
+  },
+};
+</script>

+ 17 - 4
src/modules/base/api.js

@@ -64,10 +64,23 @@ export const conditionListClazz = ({ semesterId, examId, courseCode }) => {
   });
   });
 };
 };
 // professional
 // professional
-export const conditionProfessionalClazz = ({ orgId, name }) => {
-  return $postParam("/api/admin/basic/professional/list", {
-    orgId,
-    name,
+export const conditionProfessionalList = () => {
+  return $postParam("/api/admin/basic/condition/list_professional", {});
+};
+// training-plan
+export const conditionTrainingPlanList = (professionalId) => {
+  return $postParam("/api/admin/basic/condition/list_culture_program", {
+    professionalId,
+  });
+};
+// training-plan-course
+export const conditionTrainingPlanCourseList = ({
+  professionalId,
+  cultureProgramId,
+}) => {
+  return $postParam("/api/admin/basic/condition/list_culture_program_course", {
+    professionalId,
+    cultureProgramId,
   });
   });
 };
 };
 
 

+ 3 - 1
src/modules/target/api.js

@@ -144,7 +144,9 @@ export const courseExamineListPage = (datas) => {
   );
   );
 };
 };
 export const deleteCourseExamine = (id) => {
 export const deleteCourseExamine = (id) => {
-  return $postParam("/api/admin/obe/course_outline/delete", { id });
+  return $postParam("/api/admin/obe/course_outline/assessment_setting_delete", {
+    id,
+  });
 };
 };
 
 
 // 课程考核方式和内容-评价方式 ------------------->
 // 课程考核方式和内容-评价方式 ------------------->

+ 61 - 23
src/modules/target/components/course-outline/ModifyCourseOutline.vue

@@ -12,28 +12,54 @@
     <el-form
     <el-form
       ref="modalFormComp"
       ref="modalFormComp"
       :model="modalForm"
       :model="modalForm"
-      :key="modalForm.id"
       :rules="rules"
       :rules="rules"
       label-width="120px"
       label-width="120px"
     >
     >
-      <el-form-item prop="outlineName" label="课程大纲名称:">
+      <el-form-item prop="courseOutlineName" label="课程大纲名称:">
         <el-input
         <el-input
-          v-model.trim="modalForm.outlineName"
+          v-model.trim="modalForm.courseOutlineName"
           placeholder="课程大纲名称"
           placeholder="课程大纲名称"
           clearable
           clearable
         ></el-input>
         ></el-input>
       </el-form-item>
       </el-form-item>
+      <el-form-item prop="cultureProgramId" label="所属培养方案:">
+        <training-plan-select
+          v-model="modalForm.cultureProgramId"
+          placeholder="培养方案"
+          class="width-full"
+          @change="trainingPlanChange"
+        ></training-plan-select>
+      </el-form-item>
+      <el-form-item prop="semesterId" label="修读学期:">
+        <semester-select
+          v-model="modalForm.semesterId"
+          placeholder="修读学期"
+          class="width-full"
+        ></semester-select>
+      </el-form-item>
       <el-form-item prop="courseId" label="课程:">
       <el-form-item prop="courseId" label="课程:">
-        <course-select
+        <el-select
           v-model="modalForm.courseId"
           v-model="modalForm.courseId"
-          placeholder="课程"
-        ></course-select>
+          placeholder="请选择"
+          filterable
+          clearable
+          class="width-full"
+        >
+          <el-option
+            v-for="item in courses"
+            :key="item.id"
+            :value="item.id"
+            :label="item.name"
+          >
+          </el-option>
+        </el-select>
       </el-form-item>
       </el-form-item>
       <el-form-item prop="evaluationMode" label="考核方式:">
       <el-form-item prop="evaluationMode" label="考核方式:">
         <el-select
         <el-select
           v-model="modalForm.evaluationMode"
           v-model="modalForm.evaluationMode"
           placeholder="请选择"
           placeholder="请选择"
           clearable
           clearable
+          style="width: 240px"
         >
         >
           <el-option
           <el-option
             v-for="(val, key) in EVALUATION_MODE"
             v-for="(val, key) in EVALUATION_MODE"
@@ -49,6 +75,7 @@
           v-model="modalForm.courseType"
           v-model="modalForm.courseType"
           placeholder="请选择"
           placeholder="请选择"
           clearable
           clearable
+          style="width: 240px"
         >
         >
           <el-option
           <el-option
             v-for="(val, key) in COURSE_TYPE"
             v-for="(val, key) in COURSE_TYPE"
@@ -59,19 +86,6 @@
           </el-option>
           </el-option>
         </el-select>
         </el-select>
       </el-form-item>
       </el-form-item>
-      <el-form-item prop="semesterId" label="修读学期:">
-        <semester-select
-          v-model="modalForm.semesterId"
-          placeholder="修读学期"
-        ></semester-select>
-      </el-form-item>
-      <el-form-item prop="cultureProgramId" label="所属专业:">
-        <professional-select
-          v-model="modalForm.cultureProgramId"
-          placeholder="所属专业"
-          :org-id="userOrgId"
-        ></professional-select>
-      </el-form-item>
     </el-form>
     </el-form>
     <div slot="footer">
     <div slot="footer">
       <el-button type="primary" :disabled="isSubmit" @click="submit"
       <el-button type="primary" :disabled="isSubmit" @click="submit"
@@ -84,15 +98,19 @@
 
 
 <script>
 <script>
 import { updateCourseOutline } from "../../api";
 import { updateCourseOutline } from "../../api";
+import { conditionTrainingPlanCourseList } from "../../../../modules/base/api";
+
 import { EVALUATION_MODE, COURSE_TYPE } from "@/constants/enumerate";
 import { EVALUATION_MODE, COURSE_TYPE } from "@/constants/enumerate";
 
 
 const initModalForm = {
 const initModalForm = {
   id: null,
   id: null,
-  outlineName: "",
+  courseOutlineName: "",
   courseId: "",
   courseId: "",
   evaluationMode: "",
   evaluationMode: "",
   courseType: "",
   courseType: "",
   cultureProgramId: "",
   cultureProgramId: "",
+  professionalId: "",
+  semesterId: "",
 };
 };
 
 
 export default {
 export default {
@@ -112,9 +130,9 @@ export default {
       EVALUATION_MODE,
       EVALUATION_MODE,
       COURSE_TYPE,
       COURSE_TYPE,
       modalForm: { ...initModalForm },
       modalForm: { ...initModalForm },
-      userOrgId: this.$ls.get("orgId", ""),
+      courses: [],
       rules: {
       rules: {
-        outlineName: [
+        courseOutlineName: [
           { required: true, message: "请输入课程大纲名称", trigger: "change" },
           { required: true, message: "请输入课程大纲名称", trigger: "change" },
           {
           {
             message: "课程大纲名称不能超过30个字",
             message: "课程大纲名称不能超过30个字",
@@ -135,7 +153,7 @@ export default {
           { required: true, message: "请选择修读学期", trigger: "change" },
           { required: true, message: "请选择修读学期", trigger: "change" },
         ],
         ],
         cultureProgramId: [
         cultureProgramId: [
-          { required: true, message: "请选择所属专业", trigger: "change" },
+          { required: true, message: "请选择所属培养方案", trigger: "change" },
         ],
         ],
       },
       },
     };
     };
@@ -151,6 +169,12 @@ export default {
   methods: {
   methods: {
     visibleChange() {
     visibleChange() {
       this.modalForm = this.$objAssign(initModalForm, this.instance);
       this.modalForm = this.$objAssign(initModalForm, this.instance);
+      this.modalForm.courseOutlineName = this.instance.outlineName || "";
+      this.getCourses();
+
+      this.$nextTick(() => {
+        this.$refs.modalFormComp.clearValidate();
+      });
     },
     },
     cancel() {
     cancel() {
       this.modalIsShow = false;
       this.modalIsShow = false;
@@ -158,6 +182,20 @@ export default {
     open() {
     open() {
       this.modalIsShow = true;
       this.modalIsShow = true;
     },
     },
+    async getCourses() {
+      this.courses = [];
+      if (!this.modalForm.professionalId || !this.modalForm.cultureProgramId)
+        return;
+      const res = await conditionTrainingPlanCourseList({
+        professionalId: this.modalForm.professionalId,
+        cultureProgramId: this.modalForm.cultureProgramId,
+      });
+      this.courses = res || [];
+    },
+    trainingPlanChange(val) {
+      this.modalForm.professionalId = val?.professionalId;
+      this.getCourses();
+    },
     async submit() {
     async submit() {
       const valid = await this.$refs.modalFormComp.validate().catch(() => {});
       const valid = await this.$refs.modalFormComp.validate().catch(() => {});
       if (!valid) return;
       if (!valid) return;

+ 9 - 7
src/modules/target/views/CourseExamine.vue

@@ -7,21 +7,23 @@
             <professional-select
             <professional-select
               v-model="filter.professionalId"
               v-model="filter.professionalId"
               placeholder="专业"
               placeholder="专业"
-              :org-id="userOrgId"
             ></professional-select>
             ></professional-select>
           </el-form-item>
           </el-form-item>
           <el-form-item label="培养方案:">
           <el-form-item label="培养方案:">
-            <professional-select
-              v-model="filter.professionalId"
+            <training-plan-select
+              v-model="filter.cultureProgramId"
               placeholder="培养方案"
               placeholder="培养方案"
-              :org-id="userOrgId"
-            ></professional-select>
+              :professional-id="filter.professionalId"
+              professional-required
+            ></training-plan-select>
           </el-form-item>
           </el-form-item>
           <el-form-item label="课程:">
           <el-form-item label="课程:">
-            <course-select
+            <training-plan-course-select
               v-model="filter.courseId"
               v-model="filter.courseId"
               placeholder="课程"
               placeholder="课程"
-            ></course-select>
+              :professional-id="filter.professionalId"
+              :culture-program-id="filter.cultureProgramId"
+            ></training-plan-course-select>
           </el-form-item>
           </el-form-item>
         </template>
         </template>
         <el-form-item label-width="0px">
         <el-form-item label-width="0px">

+ 9 - 7
src/modules/target/views/CourseOutlineManage.vue

@@ -7,21 +7,23 @@
             <professional-select
             <professional-select
               v-model="filter.professionalId"
               v-model="filter.professionalId"
               placeholder="专业"
               placeholder="专业"
-              :org-id="userOrgId"
             ></professional-select>
             ></professional-select>
           </el-form-item>
           </el-form-item>
           <el-form-item label="培养方案:">
           <el-form-item label="培养方案:">
-            <professional-select
-              v-model="filter.professionalId"
+            <training-plan-select
+              v-model="filter.cultureProgramId"
               placeholder="培养方案"
               placeholder="培养方案"
-              :org-id="userOrgId"
-            ></professional-select>
+              :professional-id="filter.professionalId"
+              professional-required
+            ></training-plan-select>
           </el-form-item>
           </el-form-item>
           <el-form-item label="课程:">
           <el-form-item label="课程:">
-            <course-select
+            <training-plan-course-select
               v-model="filter.courseId"
               v-model="filter.courseId"
               placeholder="课程"
               placeholder="课程"
-            ></course-select>
+              :professional-id="filter.professionalId"
+              :culture-program-id="filter.cultureProgramId"
+            ></training-plan-course-select>
           </el-form-item>
           </el-form-item>
           <el-form-item label="课程大纲名称:">
           <el-form-item label="课程大纲名称:">
             <el-input
             <el-input

+ 4 - 0
src/plugins/globalVuePlugins.js

@@ -30,6 +30,8 @@ import OrgSelect from "../components/base/OrgSelect.vue";
 import DataTaskDialog from "../components/base/DataTaskDialog.vue";
 import DataTaskDialog from "../components/base/DataTaskDialog.vue";
 import StatusSelect from "../components/base/StatusSelect.vue";
 import StatusSelect from "../components/base/StatusSelect.vue";
 import ProfessionalSelect from "../components/base/ProfessionalSelect.vue";
 import ProfessionalSelect from "../components/base/ProfessionalSelect.vue";
+import TrainingPlanSelect from "../components/base/TrainingPlanSelect.vue";
+import TrainingPlanCourseSelect from "../components/base/TrainingPlanCourseSelect.vue";
 // base
 // base
 import BaseCourseSelect from "../components/base/BaseCourseSelect.vue";
 import BaseCourseSelect from "../components/base/BaseCourseSelect.vue";
 // other
 // other
@@ -63,6 +65,8 @@ const components = {
   DataTaskDialog,
   DataTaskDialog,
   StatusSelect,
   StatusSelect,
   ProfessionalSelect,
   ProfessionalSelect,
+  TrainingPlanSelect,
+  TrainingPlanCourseSelect,
   // base
   // base
   BaseCourseSelect,
   BaseCourseSelect,
   // other
   // other