zhangjie 2 년 전
부모
커밋
f3691a53be

+ 2 - 1
card/components/ElementPropEdit.vue

@@ -109,7 +109,8 @@ export default {
         element.startNumber + element.questionsCount - 1
       ];
 
-      const unvalid = relateTopics.some(topic => {
+      const unvalid = relateTopics.some(item => {
+        const topic = item.type === "EXPLAIN" ? item.parent : item;
         const tr = [
           topic.startNumber,
           topic.startNumber + topic.questionsCount - 1

+ 6 - 4
card/components/PageStructDialog.vue

@@ -48,16 +48,18 @@ export default {
         if (!topic.parent) return;
         curTopicNo = topic.parent.topicNo;
         if (structData[curTopicNo]) {
-          if (topic.type !== "COMPOSITION") {
-            structData[curTopicNo].questionsCount +=
-              topic.parent.questionsCount;
+          if (topic.type !== "COMPOSITION" && topic.type !== "EXPLAIN") {
+            structData[curTopicNo].questionsCount += topic.questionsCount;
           }
         } else {
           let sd = {
             topicNo: curTopicNo,
             topicName: topic.parent.topicName,
-            questionsCount: topic.parent.questionsCount
+            questionsCount: topic.questionsCount
           };
+          if (topic.type === "EXPLAIN")
+            sd.questionsCount = topic.parent.questionsCount;
+
           structData[curTopicNo] = sd;
         }
       });

+ 27 - 18
src/components/base/ClassSelect.vue

@@ -12,14 +12,14 @@
       v-for="item in optionList"
       :key="item.id"
       :value="item.id"
-      :label="item.name"
+      :label="item.clazzName"
     >
     </el-option>
   </el-select>
 </template>
 
 <script>
-import { unitQueryByType } from "../../modules/base/api";
+import { conditionListClazz } from "../../modules/base/api";
 
 export default {
   name: "class-select",
@@ -28,12 +28,9 @@ export default {
     placeholder: { type: String, default: "请选择" },
     value: { type: [Number, String], default: "" },
     clearable: { type: Boolean, default: true },
-    majorId: { type: String, default: "" },
-    cascader: { type: Boolean, default: false },
-    type: {
-      type: String,
-      default: "CLAZZ"
-    }
+    semesterId: { type: String, default: "" },
+    examId: { type: String, default: "" },
+    courseCode: { type: String, default: "" }
   },
   data() {
     return {
@@ -48,9 +45,23 @@ export default {
         this.selected = val;
       }
     },
-    majorId(val, oldval) {
+    semesterId(val, oldval) {
+      if (val !== oldval) {
+        this.search();
+        this.$emit("input", "");
+        this.$emit("change", {});
+      }
+    },
+    examId(val, oldval) {
       if (val !== oldval) {
-        this.search("");
+        this.search();
+        this.$emit("input", "");
+        this.$emit("change", {});
+      }
+    },
+    courseCode(val, oldval) {
+      if (val !== oldval) {
+        this.search();
         this.$emit("input", "");
         this.$emit("change", {});
       }
@@ -61,14 +72,12 @@ export default {
   },
   methods: {
     async search() {
-      this.optionList = [];
-      if (this.cascader && !this.majorId) return;
-      const res = await unitQueryByType(
-        {
-          majorId: this.majorId
-        },
-        this.type
-      );
+      let data = {
+        semesterId: this.semesterId,
+        examId: this.examId,
+        courseCode: this.courseCode
+      };
+      const res = await conditionListClazz(data);
       this.optionList = res;
     },
     select() {

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

@@ -0,0 +1,83 @@
+<template>
+  <el-select
+    v-model="selected"
+    class="class-select"
+    :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 { unitQueryByType } from "../../modules/base/api";
+
+export default {
+  name: "major-class-select",
+  props: {
+    disabled: { type: Boolean, default: false },
+    placeholder: { type: String, default: "请选择" },
+    value: { type: [Number, String], default: "" },
+    clearable: { type: Boolean, default: true },
+    majorId: { type: String, default: "" },
+    cascader: { type: Boolean, default: false },
+    type: {
+      type: String,
+      default: "CLAZZ"
+    }
+  },
+  data() {
+    return {
+      optionList: [],
+      selected: ""
+    };
+  },
+  watch: {
+    value: {
+      immediate: true,
+      handler(val) {
+        this.selected = val;
+      }
+    },
+    majorId(val, oldval) {
+      if (val !== oldval) {
+        this.search("");
+        this.$emit("input", "");
+        this.$emit("change", {});
+      }
+    }
+  },
+  async created() {
+    this.search();
+  },
+  methods: {
+    async search() {
+      this.optionList = [];
+      if (this.cascader && !this.majorId) return;
+      const res = await unitQueryByType(
+        {
+          majorId: this.majorId
+        },
+        this.type
+      );
+      this.optionList = res;
+    },
+    select() {
+      this.$emit("input", this.selected);
+      this.$emit(
+        "change",
+        this.optionList.find(item => item.id === this.selected)
+      );
+    }
+  }
+};
+</script>

+ 2 - 2
src/components/base/PaperNumberSelect.vue

@@ -15,7 +15,7 @@
 </template>
 
 <script>
-import { conditionPaperNumber } from "../../modules/base/api";
+import { conditionListPaperNumber } from "../../modules/base/api";
 import { objFilterNull } from "../../plugins/utils";
 
 export default {
@@ -83,7 +83,7 @@ export default {
         printPlanId: this.printPlanId,
         courseCode: this.courseCode
       };
-      const res = await conditionPaperNumber(objFilterNull(data));
+      const res = await conditionListPaperNumber(objFilterNull(data));
       this.optionList = res;
     },
     select() {

+ 30 - 8
src/components/base/QuestionTeacherUserSelect.vue

@@ -8,12 +8,19 @@
     :disabled="disabled"
     @change="select"
   >
-    <el-option
-      v-for="item in optionList"
-      :key="item.id"
-      :value="item.id"
-      :label="`${item.name}(${item.loginName})`"
-    ></el-option>
+    <el-option-group
+      v-for="group in groups"
+      :key="group.label"
+      :label="group.label"
+    >
+      <el-option
+        v-for="item in group.options"
+        :key="item.id"
+        :value="item.id"
+        :label="`${item.name}(${item.loginName})`"
+      >
+      </el-option>
+    </el-option-group>
   </el-select>
 </template>
 
@@ -31,7 +38,7 @@ export default {
   },
   data() {
     return {
-      optionList: [],
+      groups: [],
       selected: ""
     };
   },
@@ -60,7 +67,22 @@ export default {
         param: query,
         courseCode: this.courseCode
       });
-      this.optionList = res;
+      this.groups = [
+        {
+          label: "机构",
+          options: res.blurryUserDtoList
+        },
+        {
+          label: "课程",
+          options: res.courseUserList.map(item => {
+            return {
+              id: item.id,
+              name: item.realName,
+              loginName: item.loginName
+            };
+          })
+        }
+      ];
     },
     select() {
       this.$emit("input", this.selected);

+ 9 - 1
src/modules/base/api.js

@@ -44,7 +44,7 @@ export const conditionListCourse = ({ semesterId, examId, printPlanId }) => {
   });
 };
 // paper_number
-export const conditionPaperNumber = ({
+export const conditionListPaperNumber = ({
   semesterId,
   examId,
   courseCode,
@@ -57,6 +57,14 @@ export const conditionPaperNumber = ({
     printPlanId
   });
 };
+// clazz
+export const conditionListClazz = ({ semesterId, examId, courseCode }) => {
+  return $postParam("/api/admin/basic/condition/list_clazz", {
+    semesterId,
+    examId,
+    courseCode
+  });
+};
 
 // user --------------------------------->
 // user-manage

+ 2 - 2
src/modules/base/components/course-simple/SelectSimpleStudent.vue

@@ -20,14 +20,14 @@
         ></major-select>
       </el-form-item>
       <el-form-item>
-        <class-select
+        <major-class-select
           v-model="filter.clazzId"
           class="width-200"
           :major-id="filter.majorId"
           cascader
           placeholder="班级"
           @change="classChange"
-        ></class-select>
+        ></major-class-select>
       </el-form-item>
       <el-form-item>
         <el-button type="primary" :disabled="!canSearch" @click="toPage(1)"

+ 1 - 1
src/modules/base/components/course-simple/SelectSimpleTeacher.vue

@@ -92,7 +92,7 @@ export default {
       this.multipleSelection = [];
       this.emitChange();
       const data = await courseTeachTeacherQuery(this.filter.orgId);
-      this.dataList = data.records || [];
+      this.dataList = data || [];
     },
     handleSelectionChange(val) {
       this.multipleSelection = val.map(item => item.id);

+ 23 - 8
src/modules/base/views/PrintPlanPushManage.vue

@@ -16,6 +16,27 @@
               :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>
           <el-form-item label="学院:">
             <college-select
               v-model="filter.orgId"
@@ -37,13 +58,6 @@
               ></el-option>
             </el-select>
           </el-form-item>
-          <el-form-item label="课程名称:">
-            <el-input
-              v-model="filter.courseName"
-              placeholder="课程名称"
-              clearable
-            ></el-input>
-          </el-form-item>
           <el-form-item>
             <el-date-picker
               v-model="createTime"
@@ -232,7 +246,8 @@ export default {
         examId: "",
         orgId: "",
         syncStatus: "",
-        courseName: "",
+        courseCode: "",
+        paperNumber: "",
         startTime: "",
         endTime: ""
       },

+ 2 - 2
src/modules/base/views/StudentManage.vue

@@ -17,12 +17,12 @@
           ></major-select>
         </el-form-item>
         <el-form-item label="班级:">
-          <class-select
+          <major-class-select
             v-model="filter.clazzId"
             :major-id="filter.majorId"
             cascader
             placeholder="班级"
-          ></class-select>
+          ></major-class-select>
         </el-form-item>
         <el-form-item label="姓名/学号:">
           <el-input

+ 3 - 3
src/modules/stmms/components/SelectTransferUser.vue

@@ -19,9 +19,9 @@
         >
           <el-option
             v-for="item in optionList"
-            :key="item.id"
-            :value="item.id"
-            :label="item.realName"
+            :key="item.userId"
+            :value="item.userId"
+            :label="`${item.realName}(${item.roleName})`"
           >
           </el-option>
         </el-select>

+ 1 - 1
src/modules/stmms/components/markParam/MarkPaperMarker.vue

@@ -35,7 +35,7 @@
             class="tag-spin"
             size="medium"
           >
-            {{ user.label }}
+            {{ user.name }}({{ user.orgName }})
           </el-tag>
         </template>
       </el-table-column>

+ 9 - 7
src/modules/stmms/views/ScoreArchive.vue

@@ -4,7 +4,10 @@
       <el-form ref="FilterForm" label-position="left" inline>
         <template v-if="checkPrivilege('condition', 'condition')">
           <el-form-item label="学期:">
-            <semester-select v-model="filter.semesterId"></semester-select>
+            <semester-select
+              v-model="filter.semesterId"
+              default-select
+            ></semester-select>
           </el-form-item>
           <el-form-item label="考试:">
             <exam-select
@@ -25,8 +28,10 @@
           <el-form-item label="班级:">
             <class-select
               v-model="filter.clazzId"
-              type="ALL_CLAZZ"
               placeholder="班级"
+              :semester-id="filter.semesterId"
+              :exam-id="filter.examId"
+              :course-code="filter.courseCode"
             ></class-select>
           </el-form-item>
         </template>
@@ -34,9 +39,6 @@
           <el-button
             v-if="checkPrivilege('button', 'select')"
             type="primary"
-            :disabled="
-              !filter.semesterId || !filter.examId || !filter.courseCode
-            "
             @click="toPage(1)"
             >查询</el-button
           >
@@ -49,7 +51,7 @@
             type="primary"
             icon="el-icon-download"
             :loading="loading"
-            :disabled="!filter.semesterId || !filter.courseCode"
+            :disabled="!filter.semesterId || !filter.examId"
             @click="toDownloadAll"
             >一键下载</el-button
           >
@@ -67,7 +69,7 @@
             type="primary"
             icon="el-icon-download"
             :loading="exportLoading"
-            :disabled="!filter.semesterId || !filter.courseCode"
+            :disabled="!filter.semesterId || !filter.examId"
             @click="toExport"
             >成绩导出</el-button
           >

+ 2 - 0
src/plugins/globalVuePlugins.js

@@ -22,6 +22,7 @@ import CollegeSelect from "../components/base/CollegeSelect.vue";
 import ClazzSelect from "../components/base/ClazzSelect.vue";
 import MajorSelect from "../components/base/MajorSelect.vue";
 import ClassSelect from "../components/base/ClassSelect.vue";
+import MajorClassSelect from "../components/base/MajorClassSelect.vue";
 import ExamSelect from "../components/base/ExamSelect.vue";
 import OrgSelect from "../components/base/OrgSelect.vue";
 import DataTaskDialog from "../components/base/DataTaskDialog.vue";
@@ -46,6 +47,7 @@ const components = {
   ClazzSelect,
   MajorSelect,
   ClassSelect,
+  MajorClassSelect,
   ExamSelect,
   OrgSelect,
   DataTaskDialog