Преглед на файлове

学期考试级联查询改造

zhangjie преди 2 години
родител
ревизия
786dd44b1a

+ 127 - 0
src/components/SecpSelect.vue

@@ -0,0 +1,127 @@
+<template>
+  <div :class="['secp-select', { inline: inline }]">
+    <el-form-item v-if="filterProps.includes('semesterId')" label="学期:">
+      <semester-select
+        v-model.trim="filter.semesterId"
+        placeholder="学期"
+        default-select
+        @default-selected="semesterDefaultSelect"
+      ></semester-select>
+    </el-form-item>
+    <el-form-item v-if="filterProps.includes('examId')" label="考试:">
+      <exam-select
+        v-model="filter.examId"
+        :semester-id="filter.semesterId"
+      ></exam-select>
+    </el-form-item>
+    <el-form-item v-if="filterProps.includes('printPlanId')" label="印刷计划:">
+      <print-plan-select
+        v-model.trim="filter.printPlanId"
+        placeholder="印刷计划"
+        clearable
+        :semester-id="filter.semesterId"
+        :exam-id="filter.examId"
+        @change="printPlanChange"
+      ></print-plan-select>
+    </el-form-item>
+    <el-form-item
+      v-if="filterProps.includes('courseCode')"
+      label="课程(代码):"
+      label-width="110px"
+    >
+      <course-select
+        v-model.trim="filter.courseCode"
+        :semester-id="filter.semesterId"
+        :exam-id="filter.examId"
+        :print-plan-id="filter.printPlanId"
+        placeholder="课程(代码)"
+        clearable
+      ></course-select>
+    </el-form-item>
+    <el-form-item v-if="filterProps.includes('paperNumber')" label="试卷编号:">
+      <paper-number-select
+        ref="PaperNumberSelect"
+        v-model="filter.paperNumber"
+        :semester-id="filter.semesterId"
+        :exam-id="filter.examId"
+        :print-plan-id="filter.printPlanId"
+        :course-code="filter.courseCode"
+        placeholder="试卷编号"
+        clearable
+      ></paper-number-select>
+    </el-form-item>
+  </div>
+</template>
+
+<script>
+const fullProps = [
+  "semesterId",
+  "examId",
+  "printPlanId",
+  "courseCode",
+  "paperNumber",
+];
+export default {
+  name: "secp-select",
+  props: {
+    value: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+    inline: {
+      type: Boolean,
+      default: true,
+    },
+  },
+  data() {
+    return {
+      filter: {},
+      filterProps: [],
+    };
+  },
+  watch: {
+    filter: {
+      deep: true,
+      handler() {
+        this.emitChange();
+      },
+    },
+  },
+  created() {
+    this.initData();
+    this.filter = this.$objAssign(this.filter, this.value);
+  },
+  methods: {
+    initData() {
+      this.filterProps = fullProps.filter((field) =>
+        Object.prototype.hasOwnProperty.call(this.value, field)
+      );
+      let filter = {};
+      this.filterProps.forEach((field) => {
+        filter[field] = "";
+      });
+      this.filter = filter;
+    },
+    getFilterData() {
+      return Object.assign({}, this.value, this.filter);
+    },
+    emitChange() {
+      const data = this.getFilterData();
+      this.$emit("input", data);
+      this.$emit("change", data);
+    },
+    semesterDefaultSelect() {
+      this.emitChange();
+      this.$emit("semester-default", this.getFilterData());
+    },
+  },
+};
+</script>
+
+<style scoped>
+.secp-select.inline {
+  display: inline;
+}
+</style>

+ 4 - 34
src/modules/base/views/ApproveRecordManage.vue

@@ -3,40 +3,10 @@
     <div class="part-box part-box-filter part-box-flex">
       <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
         <template v-if="checkPrivilege('condition', 'condition')">
-          <el-form-item label="学期:">
-            <semester-select
-              v-model.trim="filter.semesterId"
-              placeholder="学期"
-              default-select
-              @default-selected="toPage(1)"
-            ></semester-select>
-          </el-form-item>
-          <el-form-item label="考试:">
-            <exam-select
-              v-model="filter.examId"
-              :semester-id="filter.semesterId"
-            ></exam-select>
-          </el-form-item>
-          <el-form-item label="课程(代码):" label-width="110px">
-            <course-select
-              v-model.trim="filter.courseCode"
-              :semester-id="filter.semesterId"
-              :exam-id="filter.examId"
-              placeholder="课程(代码)"
-              clearable
-            ></course-select>
-          </el-form-item>
-          <el-form-item label="试卷编号:">
-            <paper-number-select
-              ref="PaperNumberSelect"
-              v-model="filter.paperNumber"
-              :semester-id="filter.semesterId"
-              :exam-id="filter.examId"
-              :course-code="filter.courseCode"
-              placeholder="试卷编号"
-              clearable
-            ></paper-number-select>
-          </el-form-item>
+          <secp-select
+            v-model="filter"
+            @semester-default="toPage(1)"
+          ></secp-select>
           <el-form-item label="状态:">
             <el-select
               v-model="filter.status"

+ 8 - 0
src/modules/exam/views/DataTaskManage.vue

@@ -3,6 +3,10 @@
     <div class="part-box part-box-filter part-box-flex">
       <el-form ref="FilterForm" label-position="left" label-width="55px" inline>
         <template v-if="checkPriv('condition', 'condition')">
+          <secp-select
+            v-model="filter"
+            @semester-default="toPage(1)"
+          ></secp-select>
           <el-form-item label="类别:">
             <el-select
               v-model="filter.type"
@@ -192,6 +196,10 @@ export default {
   data() {
     return {
       filter: {
+        semesterId: "",
+        examId: "",
+        courseCode: "",
+        paperNumber: "",
         type: "",
         status: "",
         result: "",

+ 4 - 9
src/modules/exam/views/DownloadManage.vue

@@ -3,15 +3,10 @@
     <div class="part-box part-box-filter part-box-flex">
       <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
         <template v-if="checkPrivilege('condition', 'condition')">
-          <el-form-item label="学期:">
-            <semester-select v-model="filter.semesterId"></semester-select>
-          </el-form-item>
-          <el-form-item label="考试:">
-            <exam-select
-              v-model="filter.examId"
-              :semester-id="filter.semesterId"
-            ></exam-select>
-          </el-form-item>
+          <secp-select
+            v-model="filter"
+            @semester-default="toPage(1)"
+          ></secp-select>
           <el-form-item label="机构:">
             <org-select v-model="filter.orgId" placeholder="机构"></org-select>
           </el-form-item>

+ 4 - 34
src/modules/exam/views/ExamTaskManage.vue

@@ -3,40 +3,10 @@
     <div class="part-box part-box-filter">
       <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
         <template v-if="checkPrivilege('condition', 'condition')">
-          <el-form-item label="学期:">
-            <semester-select
-              v-model="filter.semesterId"
-              default-select
-              @default-selected="getList"
-            ></semester-select>
-          </el-form-item>
-          <el-form-item label="考试:">
-            <exam-select
-              v-model="filter.examId"
-              :semester-id="filter.semesterId"
-            ></exam-select>
-          </el-form-item>
-          <el-form-item label="课程(代码):" label-width="110px">
-            <course-select
-              ref="CourseSelect"
-              v-model="filter.courseCode"
-              :semester-id="filter.semesterId"
-              :exam-id="filter.examId"
-              placeholder="课程(代码)"
-              clearable
-            ></course-select>
-          </el-form-item>
-          <el-form-item label="试卷编号:">
-            <paper-number-select
-              ref="PaperNumberSelect"
-              v-model="filter.paperNumber"
-              :semester-id="filter.semesterId"
-              :exam-id="filter.examId"
-              :course-code="filter.courseCode"
-              placeholder="试卷编号"
-              clearable
-            ></paper-number-select>
-          </el-form-item>
+          <secp-select
+            v-model="filter"
+            @semester-default="getList"
+          ></secp-select>
           <el-form-item label="命题状态:">
             <el-select
               v-model="filter.status"

+ 4 - 34
src/modules/exam/views/TaskApplyManage.vue

@@ -3,40 +3,10 @@
     <div class="part-box part-box-filter part-box-flex">
       <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
         <template v-if="checkPrivilege('condition', 'condition')">
-          <el-form-item label="学期:">
-            <semester-select
-              v-model="filter.semesterId"
-              default-select
-              @default-selected="getList"
-            ></semester-select>
-          </el-form-item>
-          <el-form-item label="考试:">
-            <exam-select
-              v-model="filter.examId"
-              :semester-id="filter.semesterId"
-            ></exam-select>
-          </el-form-item>
-          <el-form-item label="课程(代码):" label-width="110px">
-            <course-select
-              ref="CourseSelect"
-              v-model="filter.courseCode"
-              :semester-id="filter.semesterId"
-              :exam-id="filter.examId"
-              placeholder="课程(代码)"
-              clearable
-            ></course-select>
-          </el-form-item>
-          <el-form-item label="试卷编号:">
-            <paper-number-select
-              ref="PaperNumberSelect"
-              v-model="filter.paperNumber"
-              :semester-id="filter.semesterId"
-              :exam-id="filter.examId"
-              :course-code="filter.courseCode"
-              placeholder="试卷编号"
-              clearable
-            ></paper-number-select>
-          </el-form-item>
+          <secp-select
+            v-model="filter"
+            @semester-default="toPage(1)"
+          ></secp-select>
           <el-form-item label="审核状态:">
             <el-select
               v-model="filter.auditStatus"

+ 4 - 34
src/modules/exam/views/TaskPaperManage.vue

@@ -3,40 +3,10 @@
     <div class="part-box part-box-filter">
       <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
         <template v-if="checkPrivilege('condition', 'condition')">
-          <el-form-item label="学期:">
-            <semester-select
-              v-model="filter.semesterId"
-              default-select
-              @default-selected="getList"
-            ></semester-select>
-          </el-form-item>
-          <el-form-item label="考试:">
-            <exam-select
-              v-model="filter.examId"
-              :semester-id="filter.semesterId"
-            ></exam-select>
-          </el-form-item>
-          <el-form-item label="课程(代码):" label-width="110px">
-            <course-select
-              ref="CourseSelect"
-              v-model="filter.courseCode"
-              :semester-id="filter.semesterId"
-              :exam-id="filter.examId"
-              placeholder="课程(代码)"
-              clearable
-            ></course-select>
-          </el-form-item>
-          <el-form-item label="试卷编号:">
-            <paper-number-select
-              ref="PaperNumberSelect"
-              v-model="filter.paperNumber"
-              :semester-id="filter.semesterId"
-              :exam-id="filter.examId"
-              :course-code="filter.courseCode"
-              placeholder="试卷编号"
-              clearable
-            ></paper-number-select>
-          </el-form-item>
+          <secp-select
+            v-model="filter"
+            @semester-default="toPage(1)"
+          ></secp-select>
           <el-form-item label="入库时间:">
             <el-date-picker
               v-model="createTime"

+ 4 - 34
src/modules/exam/views/TaskReviewManage.vue

@@ -18,40 +18,10 @@
             (!AUDITED && checkPrivilege('condition', 'notReviewCondition'))
           "
         >
-          <el-form-item label="学期:">
-            <semester-select
-              v-model="filter.semesterId"
-              default-select
-              @default-selected="getList"
-            ></semester-select>
-          </el-form-item>
-          <el-form-item label="考试:">
-            <exam-select
-              v-model="filter.examId"
-              :semester-id="filter.semesterId"
-            ></exam-select>
-          </el-form-item>
-          <el-form-item label="课程(代码):" label-width="110px">
-            <course-select
-              ref="CourseSelect"
-              v-model="filter.courseCode"
-              :semester-id="filter.semesterId"
-              :exam-id="filter.examId"
-              placeholder="课程(代码)"
-              clearable
-            ></course-select>
-          </el-form-item>
-          <el-form-item label="试卷编号:">
-            <paper-number-select
-              ref="PaperNumberSelect"
-              v-model="filter.paperNumber"
-              :semester-id="filter.semesterId"
-              :exam-id="filter.examId"
-              :course-code="filter.courseCode"
-              placeholder="试卷编号"
-              clearable
-            ></paper-number-select>
-          </el-form-item>
+          <secp-select
+            v-model="filter"
+            @semester-default="toPage(1)"
+          ></secp-select>
           <el-form-item label="命题老师:">
             <question-teacher-select
               ref="QuestionTeacherSelect"

+ 4 - 13
src/modules/print/views/PrintPlanManage.vue

@@ -3,19 +3,10 @@
     <div class="part-box part-box-filter part-box-flex">
       <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
         <template v-if="checkPrivilege('condition', 'condition')">
-          <el-form-item label="学期:">
-            <semester-select
-              v-model="filter.semesterId"
-              default-select
-              @default-selected="getList"
-            ></semester-select>
-          </el-form-item>
-          <el-form-item label="考试:">
-            <exam-select
-              v-model="filter.examId"
-              :semester-id="filter.semesterId"
-            ></exam-select>
-          </el-form-item>
+          <secp-select
+            v-model="filter"
+            @semester-default="search"
+          ></secp-select>
           <el-form-item label="印刷计划:">
             <print-plan-select
               v-model.trim="filter.printPlanIdList"

+ 0 - 1
src/modules/print/views/PrintTaskManage.vue

@@ -54,7 +54,6 @@
               v-model.trim="filter.printHouseId"
               placeholder="印刷室"
               clearable
-              @change="printPlanChange"
             ></print-room-select>
           </el-form-item>
           <el-form-item label="印刷状态:">

+ 8 - 0
src/modules/stmms/views/SyncManage.vue

@@ -3,6 +3,10 @@
     <div class="part-box part-box-filter part-box-flex">
       <el-form ref="FilterForm" label-position="left" inline>
         <template v-if="checkPriv('condition', 'condition')">
+          <secp-select
+            v-model="filter"
+            @semester-default="toPage(1)"
+          ></secp-select>
           <el-form-item label="同步类型:">
             <el-select
               v-model="filter.type"
@@ -167,6 +171,10 @@ export default {
       STMMS_SYNC_STATUS: {},
       DATA_TASK_RESULT,
       filter: {
+        semesterId: "",
+        examId: "",
+        courseCode: "",
+        paperNumber: "",
         result: "",
         type: "",
         status: "",

+ 4 - 0
src/plugins/globalVuePlugins.js

@@ -28,6 +28,8 @@ import OrgSelect from "../components/base/OrgSelect.vue";
 import DataTaskDialog from "../components/base/DataTaskDialog.vue";
 // base
 import BaseCourseSelect from "../components/base/BaseCourseSelect.vue";
+// other
+import SecpSelect from "../components/SecpSelect.vue";
 
 const components = {
   ViewFooter,
@@ -55,6 +57,8 @@ const components = {
   DataTaskDialog,
   // base
   BaseCourseSelect,
+  // other
+  SecpSelect,
 };
 
 export default {