Ver código fonte

课程管理-评价方式

zhangjie 1 ano atrás
pai
commit
8e88613477

+ 2 - 0
src/constants/enumerate.js

@@ -237,6 +237,8 @@ export const IMPORT_TEMPLATE_TYPE = {
   examTaskStudent: "TEMPLATE_EXAM_TASK_STUDENT",
   // 命题计划导入模板
   examStatistics: "TEMPLATE_EXAM_STATISTICS",
+  // 课程知识点
+  courseProperty: "COURSE_PROPERTY",
 };
 // 印刷 -------------->
 // 印刷计划状态

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

@@ -595,7 +595,7 @@ export const courseDimensionTree = (courseCode) => {
     courseCode,
   });
 };
-// comment-style-manage
+// comment-evaluation-manage
 export const courseEvaluationList = (courseCode) => {
   return $postParam("/api/admin/teach/course_evaluation/list", { courseCode });
 };

+ 86 - 3
src/modules/base/components/course-simple/CourseEvaluationManage.vue

@@ -1,13 +1,96 @@
 <template>
-  <div class="">CourseEvaluationManage</div>
+  <div class="course-evaluation-manage">
+    <div class="part-box part-box-pad box-justify">
+      <p></p>
+      <div>
+        <el-button type="primary" @click="toAdd">自定义评价方式</el-button>
+      </div>
+    </div>
+    <div class="part-box part-box-pad">
+      <el-table :data="dataList">
+        <!-- <el-table-column type="index" label="序号" width="70"></el-table-column> -->
+        <el-table-column
+          prop="evaluation"
+          label="评价方式"
+          min-width="120"
+        ></el-table-column>
+        <el-table-column
+          prop="evaluationDesc"
+          label="评价方式描述"
+          min-width="300"
+        >
+        </el-table-column>
+        <el-table-column class-name="action-column" label="操作" width="80px">
+          <template slot-scope="scope">
+            <el-button
+              class="btn-danger"
+              type="text"
+              @click="toDelete(scope.row)"
+              >删除</el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+    </div>
+
+    <!-- ModifyCourseEvaluation -->
+    <modify-course-evaluation
+      ref="ModifyCourseEvaluation"
+      :instance="curRow"
+      @modified="getList"
+    ></modify-course-evaluation>
+  </div>
 </template>
 
 <script>
+import { courseEvaluationList, deleteCourseEvaluation } from "../../api";
+import ModifyCourseEvaluation from "./ModifyCourseEvaluation.vue";
+
 export default {
   name: "CourseEvaluationManage",
+  components: { ModifyCourseEvaluation },
+  props: {
+    course: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+  },
   data() {
-    return {};
+    return {
+      dataList: [],
+      curRow: {},
+    };
+  },
+  mounted() {
+    this.getList();
+  },
+  methods: {
+    async getList() {
+      const res = await courseEvaluationList(this.course.courseCode);
+      this.dataList = res || [];
+    },
+    toAdd() {
+      this.curRow = { courseCode: this.course.courseCode };
+      this.$refs.ModifyCourseEvaluation.open();
+    },
+    async toDelete(row) {
+      const confirm = await this.$confirm(
+        `确定要删除评价方式【${row.evaluation}】吗?`,
+        "提示",
+        {
+          type: "warning",
+        }
+      ).catch(() => {});
+      if (confirm !== "confirm") return;
+
+      await deleteCourseEvaluation(row.evaluationId);
+      this.$message.success("删除成功!");
+      this.dataList = this.dataList.filter(
+        (item) => item.evaluationId !== row.evaluationId
+      );
+    },
   },
-  methods: {},
 };
 </script>

+ 24 - 6
src/modules/base/components/course-simple/CourseTargetManage.vue

@@ -3,7 +3,7 @@
     <div class="part-box part-box-pad box-justify">
       <p>请根据《课程教学大纲》中的课程对“毕业要求”进行填写</p>
       <div>
-        <el-button type="success">导入课程知识点</el-button>
+        <el-button type="success" @click="toImport">导入课程知识点</el-button>
         <el-button type="primary" @click="toAdd">新增目标</el-button>
       </div>
     </div>
@@ -47,18 +47,30 @@
       :instance="curRow"
       @modified="getList"
     ></modify-course-target>
+    <!-- ImportFile -->
+    <import-file
+      ref="ImportFile"
+      title="导入课程知识点"
+      :upload-url="uploadUrl"
+      :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 },
+  components: { ModifyCourseTarget, ImportFile },
   props: {
-    instance: {
+    course: {
       type: Object,
       default() {
         return {};
@@ -69,6 +81,9 @@ export default {
     return {
       dataList: [],
       curRow: {},
+      // import
+      uploadUrl: "/api/admin/teach/coure_target/dimension_import",
+      dfilename: "课程知识点导入模板.xlsx",
     };
   },
   mounted() {
@@ -76,15 +91,18 @@ export default {
   },
   methods: {
     async getList() {
-      const res = await courseTargetList(this.instance.courseCode);
+      const res = await courseTargetList(this.course.courseCode);
       this.dataList = res || [];
     },
+    toImport() {
+      this.$refs.ImportFile.open();
+    },
     toAdd() {
-      this.curRow = { courseCode: this.instance.courseCode };
+      this.curRow = { courseCode: this.course.courseCode };
       this.$refs.ModifyCourseTarget.open();
     },
     toEdit(row) {
-      this.curRow = { ...row, courseCode: this.instance.courseCode };
+      this.curRow = { ...row, courseCode: this.course.courseCode };
       this.$refs.ModifyCourseTarget.open();
     },
     async toDelete(row) {

+ 135 - 0
src/modules/base/components/course-simple/ModifyCourseEvaluation.vue

@@ -0,0 +1,135 @@
+<template>
+  <el-dialog
+    class="modify-semester"
+    :visible.sync="modalIsShow"
+    :title="title"
+    top="10vh"
+    width="600px"
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+    append-to-body
+    @open="visibleChange"
+  >
+    <el-form
+      ref="modalFormComp"
+      :model="modalForm"
+      :rules="rules"
+      label-width="100px"
+    >
+      <el-form-item prop="evaluation" label="评价方式:">
+        <el-input
+          v-model.trim="modalForm.evaluation"
+          placeholder="请输入评价方式"
+          clearable
+        ></el-input>
+      </el-form-item>
+      <el-form-item prop="evaluationDesc" label="评价方式描述:">
+        <el-input
+          v-model="modalForm.evaluationDesc"
+          placeholder="请输入评价方式描述"
+          type="textarea"
+          :autosize="{ minRows: 2, maxRows: 6 }"
+          :maxlength="999"
+          resize="none"
+          show-word-limit
+        ></el-input>
+      </el-form-item>
+    </el-form>
+    <div slot="footer">
+      <el-button type="primary" :disabled="isSubmit" @click="submit"
+        >确认</el-button
+      >
+      <el-button @click="cancel">取消</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import { updateCourseEvaluation } from "../../api";
+
+const initModalForm = {
+  evaluationId: null,
+  courseCode: "",
+  evaluation: "",
+  evaluationDesc: "",
+};
+
+export default {
+  name: "modify-course-evaluation",
+  props: {
+    instance: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+  },
+  computed: {
+    isEdit() {
+      return !!this.instance.evaluationId;
+    },
+    title() {
+      return (this.isEdit ? "编辑" : "新增") + "评价方式";
+    },
+  },
+  data() {
+    return {
+      modalIsShow: false,
+      isSubmit: false,
+      modalForm: { ...initModalForm },
+      rules: {
+        evaluation: [
+          {
+            required: true,
+            message: "请输入评价方式",
+            trigger: "change",
+          },
+          {
+            message: "评价方式不能超过30个字",
+            max: 30,
+            trigger: "change",
+          },
+        ],
+        evaluationDesc: [
+          {
+            required: false,
+            max: 999,
+            message: "评价方式描述不能超过999个字",
+            trigger: "change",
+          },
+        ],
+      },
+    };
+  },
+  methods: {
+    initData(val) {
+      this.modalForm = this.$objAssign(initModalForm, val);
+    },
+    visibleChange() {
+      this.initData(this.instance);
+    },
+    cancel() {
+      this.modalIsShow = false;
+    },
+    open() {
+      this.modalIsShow = true;
+    },
+    async submit() {
+      const valid = await this.$refs.modalFormComp.validate().catch(() => {});
+      if (!valid) return;
+
+      if (this.isSubmit) return;
+      this.isSubmit = true;
+      let datas = { ...this.modalForm };
+      const data = await updateCourseEvaluation(datas).catch(() => {});
+      this.isSubmit = false;
+
+      if (!data) return;
+
+      this.$message.success(this.title + "成功!");
+      this.$emit("modified");
+      this.cancel();
+    },
+  },
+};
+</script>

+ 12 - 4
src/modules/base/components/course-simple/ModifyCourseTarget.vue

@@ -5,7 +5,7 @@
       :visible.sync="modalIsShow"
       :title="title"
       top="10vh"
-      width="448px"
+      width="600px"
       :close-on-click-modal="false"
       :close-on-press-escape="false"
       append-to-body
@@ -25,11 +25,18 @@
             clearable
           ></el-input>
         </el-form-item>
-        <el-form-item prop="dimensionIdList" label="课程目标:">
-          <el-button type="text" class="btn-primary" @click="toSelectDimension"
+        <el-form-item prop="dimensionIdList" label="毕业要求指标:">
+          <el-button
+            type="text"
+            class="btn-act-primary"
+            @click="toSelectDimension"
             >选择知识点</el-button
           >
-          <el-table :data="targetValue" :show-header="false">
+          <el-table
+            v-if="targetValue.length"
+            :data="targetValue"
+            :show-header="false"
+          >
             <el-table-column
               prop="dimensionName"
               label="知识点"
@@ -51,6 +58,7 @@
             type="textarea"
             :autosize="{ minRows: 2, maxRows: 6 }"
             :maxlength="999"
+            resize="none"
             show-word-limit
           ></el-input>
         </el-form-item>

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

@@ -3,7 +3,7 @@
     class="select-user-dialog"
     :visible.sync="modalIsShow"
     title="选择知识点"
-    top="10px"
+    top="10vh"
     width="600px"
     :close-on-click-modal="false"
     :close-on-press-escape="false"
@@ -12,7 +12,7 @@
   >
     <el-tree
       ref="treeRef"
-      :data="roleTree"
+      :data="treeData"
       show-checkbox
       check-on-click-node
       node-key="dimensionId"