Răsfoiți Sursa

课程目标接口

zhangjie 1 an în urmă
părinte
comite
8c4e29c51f

+ 3 - 3
src/modules/base/api.js

@@ -580,7 +580,7 @@ export const batchAddTeacherSimple = (datas) => {
   return $postParam("/api/admin/teach/course/select_create_teacher", datas);
 };
 export const teacherSimpleCourseQuery = (datas) => {
-  return $postParam("/api/admin/teach/course/find_teacher_by_org", datas);
+  return $postParam("/api/admin/teach/course/find_clazz_list", datas);
 };
 export const teacherSimpleAssignCourse = (datas) => {
   return $post("/api/admin/teach/course/assign_clazz", datas);
@@ -609,8 +609,8 @@ export const deleteCourseEvaluation = (id) => {
   return $postParam("/api/admin/teach/course_evaluation/delete", { id });
 };
 // course-weight-manage
-export const courseWeightDetail = (courseCode) => {
-  return $postParam("/api/admin/teach/course_weight/find", { courseCode });
+export const courseWeightDetail = (datas) => {
+  return $postParam("/api/admin/teach/course_weight/find", datas);
 };
 export const courseWeightSave = (datas) => {
   return $post("/api/admin/teach/course_weight/save", datas);

+ 7 - 26
src/modules/base/components/course-simple/CourseTargetManage.vue

@@ -3,7 +3,6 @@
     <div class="part-box part-box-pad box-justify">
       <p>请根据《课程教学大纲》中的课程对“毕业要求”进行填写</p>
       <div>
-        <el-button type="success" @click="toImport">导入课程知识点</el-button>
         <el-button type="primary" @click="toAdd">新增目标</el-button>
       </div>
     </div>
@@ -46,33 +45,18 @@
       ref="ModifyCourseTarget"
       :instance="curRow"
       @modified="getList"
+      @enforce-close="getList"
     ></modify-course-target>
-    <!-- ImportFile -->
-    <import-file
-      ref="ImportFile"
-      title="导入课程知识点"
-      :upload-url="uploadUrl"
-      :upload-data="{
-        courseCode: course.courseCode,
-        examId: course.examId,
-      }"
-      :format="['xls', 'xlsx']"
-      :download-handle="() => downloadTemplate('courseProperty')"
-      :download-filename="dfilename"
-      :auto-upload="false"
-      @upload-success="getList"
-    ></import-file>
   </div>
 </template>
 
 <script>
 import { courseTargetList, deleteCourseTarget } from "../../api";
 import ModifyCourseTarget from "./ModifyCourseTarget.vue";
-import ImportFile from "@/components/ImportFile.vue";
 
 export default {
   name: "CourseTargetManage",
-  components: { ModifyCourseTarget, ImportFile },
+  components: { ModifyCourseTarget },
   props: {
     course: {
       type: Object,
@@ -85,22 +69,19 @@ export default {
     return {
       dataList: [],
       curRow: {},
-      // import
-      uploadUrl: "/api/admin/teach/coure_target/dimension_import",
-      dfilename: "课程知识点导入模板.xlsx",
     };
   },
   mounted() {
-    // this.getList();
+    this.getList();
   },
   methods: {
     async getList() {
-      const res = await courseTargetList(this.course.courseCode);
+      const res = await courseTargetList({
+        examId: this.course.examId,
+        courseCode: this.course.courseCode,
+      });
       this.dataList = res || [];
     },
-    toImport() {
-      this.$refs.ImportFile.open();
-    },
     toAdd() {
       this.curRow = {
         courseCode: this.course.courseCode,

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

@@ -170,7 +170,10 @@ export default {
   },
   methods: {
     async getList() {
-      const res = await courseWeightDetail(this.course.courseCode);
+      const res = await courseWeightDetail({
+        examId: this.course.examId,
+        courseCode: this.course.courseCode,
+      });
       this.dataList = res.submitForm || [];
       this.transformData(this.dataList);
     },

+ 23 - 7
src/modules/base/components/course-simple/ModifyCourseTarget.vue

@@ -29,6 +29,7 @@
           <el-button
             type="text"
             class="btn-act-primary"
+            icon="el-icon-circle-plus-outline"
             @click="toSelectDimension"
             >选择知识点</el-button
           >
@@ -36,18 +37,27 @@
             v-if="dimensionList.length"
             :data="dimensionList"
             :show-header="false"
+            border
           >
             <el-table-column prop="name" label="知识点">
               <template slot-scope="scope">
                 {{ scope.row.name }}({{ scope.row.code }})
               </template>
             </el-table-column>
-            <el-table-column class-name="action-column" label="操作" width="60">
+            <el-table-column
+              class-name="action-column"
+              label="操作"
+              width="40"
+              align="center"
+            >
               <template slot-scope="scope">
-                <i
-                  class="el-icon-error"
+                <el-button
+                  type="text"
+                  class="btn-danger"
+                  icon="el-icon-error"
                   @click="toDeleteDimension(scope.$index)"
-                ></i>
+                >
+                </el-button>
               </template>
             </el-table-column>
           </el-table>
@@ -79,6 +89,7 @@
       :selected-data="modalForm.dimensionIdList"
       :disabled-data="instance.disabledDimensionIds"
       @confirm="dimensionSelected"
+      @enforce-close="enforceClose"
     ></select-dimension-dialog>
   </div>
 </template>
@@ -103,7 +114,7 @@ export default {
     instance: {
       type: Object,
       default() {
-        return { disabledDimensionIds: [] };
+        return {};
       },
     },
   },
@@ -162,12 +173,17 @@ export default {
         this.dimensionList = [...val.dimensionList];
         this.updateDimensionIds();
       } else {
+        this.dimensionList = [];
         this.modalForm.dimensionIdList = [];
       }
     },
     visibleChange() {
       this.initData(this.instance);
     },
+    enforceClose() {
+      this.modalIsShow = false;
+      this.$emit("enforce-close");
+    },
     cancel() {
       this.modalIsShow = false;
     },
@@ -185,12 +201,12 @@ export default {
     dimensionSelected(dimensions) {
       this.dimensionList = [...dimensions];
       this.updateDimensionIds();
-      this.$refs.modalFormComp.validateField("dimensionIdList").catch(() => {});
+      this.$refs.modalFormComp.validateField("dimensionIdList");
     },
     toDeleteDimension(index) {
       this.dimensionList.splice(index, 1);
       this.updateDimensionIds();
-      this.$refs.modalFormComp.validateField("dimensionIdList").catch(() => {});
+      this.$refs.modalFormComp.validateField("dimensionIdList");
     },
     async submit() {
       const valid = await this.$refs.modalFormComp.validate().catch(() => {});

+ 92 - 27
src/modules/base/components/course-simple/SelectDimensionDialog.vue

@@ -1,38 +1,68 @@
 <template>
-  <el-dialog
-    class="select-dimension-dialog"
-    :visible.sync="modalIsShow"
-    title="选择知识点"
-    top="10vh"
-    width="600px"
-    :close-on-click-modal="false"
-    :close-on-press-escape="false"
-    append-to-body
-    @opened="visibleChange"
-  >
-    <el-tree
-      ref="treeRef"
-      :data="treeData"
-      show-checkbox
-      check-on-click-node
-      check-strictly
-      node-key="id"
-      :props="defaultProps"
+  <div>
+    <el-dialog
+      class="select-dimension-dialog page-dialog"
+      :visible.sync="modalIsShow"
+      title="选择知识点"
+      top="10px"
+      width="600px"
+      :close-on-click-modal="false"
+      :close-on-press-escape="false"
+      append-to-body
+      @opened="visibleChange"
     >
-    </el-tree>
+      <div class="box-justify mb-2">
+        <div></div>
+        <el-button type="success" @click="toImport">导入课程知识点</el-button>
+      </div>
+      <div class="part-box part-box-pad mb-0">
+        <el-tree
+          ref="treeRef"
+          :data="treeData"
+          show-checkbox
+          check-on-click-node
+          check-strictly
+          :expand-on-click-node="false"
+          node-key="id"
+          default-expand-all
+          :props="defaultProps"
+        >
+        </el-tree>
+      </div>
 
-    <div slot="footer">
-      <el-button type="primary" @click="submit">确认</el-button>
-      <el-button @click="cancel">取消</el-button>
-    </div>
-  </el-dialog>
+      <div slot="footer">
+        <el-button type="primary" @click="submit">确认</el-button>
+        <el-button @click="cancel">取消</el-button>
+      </div>
+    </el-dialog>
+
+    <!-- ImportFile -->
+    <import-file
+      ref="ImportFile"
+      title="导入课程知识点"
+      :upload-url="uploadUrl"
+      :upload-data="{
+        courseCode: course.courseCode,
+        examId: course.examId,
+      }"
+      :format="['xls', 'xlsx']"
+      :download-handle="() => downloadTemplate('courseProperty')"
+      :download-filename="dfilename"
+      :auto-upload="false"
+      @upload-success="dimensionUploaded"
+    ></import-file>
+  </div>
 </template>
 
 <script>
 import { courseDimensionTree } from "../../api";
+import ImportFile from "@/components/ImportFile.vue";
+import templateDownload from "@/mixins/templateDownload";
 
 export default {
   name: "select-dimension-dialog",
+  components: { ImportFile },
+  mixins: [templateDownload],
   props: {
     selectedData: {
       type: Array,
@@ -64,6 +94,9 @@ export default {
         children: "children",
         label: "name",
       },
+      // import
+      uploadUrl: "/api/admin/teach/course_target/dimension_import",
+      dfilename: "课程知识点导入模板.xlsx",
     };
   },
   watch: {
@@ -71,12 +104,40 @@ export default {
       immediate: true,
       handler(val, oldVal) {
         if (!val) return;
-        if (val !== oldVal) this.getTree();
+        if (
+          val.examId &&
+          val.courseCode &&
+          (!oldVal ||
+            oldVal.examId !== val.examId ||
+            oldVal.courseCode !== val.courseCode)
+        ) {
+          this.getTree();
+        }
       },
     },
   },
   methods: {
+    async dimensionUploaded() {
+      const data = await courseDimensionTree({
+        examId: this.course.examId,
+        courseCode: this.course.courseCode,
+      });
+      this.treeData = data || [];
+
+      // 已存在课程目标的情况,强制关闭弹窗
+      if (this.disabledData.length) {
+        this.modalIsShow = false;
+        this.$emit("enforce-close");
+        return;
+      }
+
+      this.$nextTick(() => {
+        this.$refs.treeRef.setCheckedKeys([]);
+      });
+    },
     async getTree() {
+      if (!this.course.examId || !this.course.courseCode) return;
+
       const data = await courseDimensionTree({
         examId: this.course.examId,
         courseCode: this.course.courseCode,
@@ -93,6 +154,9 @@ export default {
       };
       mdTree(this.treeData);
     },
+    toImport() {
+      this.$refs.ImportFile.open();
+    },
     visibleChange() {
       this.updateDisableNode();
       this.$refs.treeRef.setCheckedKeys(this.selectedData);
@@ -104,7 +168,8 @@ export default {
       this.modalIsShow = true;
     },
     submit() {
-      const selectedNodes = this.$refs.treeRef.setCheckedNodes();
+      const selectedNodes = this.$refs.treeRef.getCheckedNodes();
+      console.log(selectedNodes);
 
       if (!selectedNodes.length) {
         this.$message.error("请选择知识点");

+ 1 - 1
src/modules/base/views/CourseSimpleManage.vue

@@ -152,7 +152,7 @@ export default {
       this.$refs.ModifyCourseSimple.open();
     },
     toEditClazz(row) {
-      this.curCourse = row;
+      this.curCourse = { ...row, examId: this.filter.examId };
       this.$refs.CourseSimpleDetail.open();
     },
     toDelete(row) {

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

@@ -30,7 +30,7 @@
         </el-form-item>
         <el-form-item label="班级:">
           <el-input
-            v-model.trim="filter.teachClazzId"
+            v-model.trim="filter.teachClazz"
             placeholder="班级"
             clearable
           ></el-input>
@@ -241,7 +241,7 @@ export default {
         teacher: "",
         college: "",
         major: "",
-        teachClazzId: "",
+        teachClazz: "",
         examStudentInfo: "",
       },
       queriedFilter: {},