Bläddra i källkod

baseconfi store 改造

zhangjie 3 år sedan
förälder
incheckning
b186bbac49

+ 2 - 2
src/components/ImportFile.vue

@@ -188,14 +188,14 @@ export default {
       };
       };
       this.$emit("upload-error", error);
       this.$emit("upload-error", error);
     },
     },
-    handleSuccess() {
+    handleSuccess(responseData) {
       this.loading = false;
       this.loading = false;
       this.res = {
       this.res = {
         success: true,
         success: true,
         msg: "导入成功!"
         msg: "导入成功!"
       };
       };
-      this.$emit("upload-success", response);
       this.cancel();
       this.cancel();
+      this.$emit("upload-success", responseData);
     },
     },
     handleFormatError() {
     handleFormatError() {
       this.res = {
       this.res = {

+ 6 - 1
src/modules/analysis/api.js

@@ -12,7 +12,7 @@ export const updatePaperDimension = datas => {
   return $post("/api/admin/grade/paper/dimension/save", datas);
   return $post("/api/admin/grade/paper/dimension/save", datas);
 };
 };
 export const paperDimensionExport = datas => {
 export const paperDimensionExport = datas => {
-  return $post("/api/admin/grade/paper/dimension/export", datas, {
+  return $postParam("/api/admin/grade/paper/dimension/export", datas, {
     responseType: "blob"
     responseType: "blob"
   });
   });
 };
 };
@@ -22,6 +22,11 @@ export const paperStructList = datas => {
 export const updatePaperStruct = datas => {
 export const updatePaperStruct = datas => {
   return $post("/api/admin/grade/paper/struct/save", datas);
   return $post("/api/admin/grade/paper/struct/save", datas);
 };
 };
+export const paperStructExport = datas => {
+  return $post("/api/admin/grade/paper/struct/export", datas, {
+    responseType: "blob"
+  });
+};
 export const paperDefineList = datas => {
 export const paperDefineList = datas => {
   return $postParam("/api/admin/grade/paper/paper_define", datas);
   return $postParam("/api/admin/grade/paper/paper_define", datas);
 };
 };

+ 70 - 89
src/modules/analysis/components/ModifyBaseConfig.vue

@@ -31,26 +31,48 @@
     </div>
     </div>
 
 
     <div v-if="dataReady" class="part-box part-box-pad">
     <div v-if="dataReady" class="part-box part-box-pad">
-      <component
-        :is="compName"
-        :configs="configs"
-        @modified="modified"
-      ></component>
+      <component :is="compName" @modified="modified"></component>
     </div>
     </div>
   </el-dialog>
   </el-dialog>
 </template>
 </template>
 
 
 <script>
 <script>
+import { mapState, mapActions, mapMutations } from "vuex";
 import DimensionConfig from "./baseConfig/DimensionConfig.vue";
 import DimensionConfig from "./baseConfig/DimensionConfig.vue";
 import BlueprintConfig from "./baseConfig/BlueprintConfig.vue";
 import BlueprintConfig from "./baseConfig/BlueprintConfig.vue";
 import DiagnoseConfig from "./baseConfig/DiagnoseConfig.vue";
 import DiagnoseConfig from "./baseConfig/DiagnoseConfig.vue";
 import CommentConfig from "./baseConfig/CommentConfig.vue";
 import CommentConfig from "./baseConfig/CommentConfig.vue";
-import {
-  paperDimensionList,
-  paperStructList,
-  paperDefineList,
-  moduleEvaluationList
-} from "../api";
+
+const steps = [
+  {
+    name: "知识/能力维度设置",
+    val: "dimension",
+    disabled: false,
+    status: "process",
+    storeName: "dimensionList"
+  },
+  {
+    name: "命题蓝图设置",
+    val: "blueprint",
+    disabled: false,
+    status: "wait",
+    storeName: "structList"
+  },
+  {
+    name: "诊断规则定义",
+    val: "diagnose",
+    disabled: false,
+    status: "wait",
+    storeName: "defineList"
+  },
+  {
+    name: "评价模型设置",
+    val: "comment",
+    disabled: false,
+    status: "wait",
+    storeName: "evaluationList"
+  }
+];
 
 
 export default {
 export default {
   name: "modify-base-config",
   name: "modify-base-config",
@@ -73,37 +95,17 @@ export default {
       modalIsShow: false,
       modalIsShow: false,
       isSubmit: false,
       isSubmit: false,
       curStep: 0,
       curStep: 0,
-      steps: [
-        {
-          name: "知识/能力维度设置",
-          val: "dimension",
-          disabled: false,
-          status: "process"
-        },
-        {
-          name: "命题蓝图设置",
-          val: "blueprint",
-          disabled: false,
-          status: "wait"
-        },
-        {
-          name: "诊断规则定义",
-          val: "diagnose",
-          disabled: false,
-          status: "wait"
-        },
-        {
-          name: "评价模型设置",
-          val: "comment",
-          disabled: false,
-          status: "wait"
-        }
-      ],
-      configs: {},
+      steps: [],
       dataReady: false
       dataReady: false
     };
     };
   },
   },
   computed: {
   computed: {
+    ...mapState("baseConfigs", [
+      "dimensionList",
+      "structList",
+      "defineList",
+      "evaluationList"
+    ]),
     compName() {
     compName() {
       const stepVal = this.steps[this.curStep].val;
       const stepVal = this.steps[this.curStep].val;
       return `${stepVal}-config`;
       return `${stepVal}-config`;
@@ -113,8 +115,16 @@ export default {
     }
     }
   },
   },
   methods: {
   methods: {
+    ...mapMutations("mapMutations", ["setBaseInfo"]),
+    ...mapActions("baseConfigs", [
+      "fetchDimensionList",
+      "fetchStructList",
+      "fetchDefineList",
+      "fetchEvaluationList"
+    ]),
     async visibleChange() {
     async visibleChange() {
       this.dataReady = false;
       this.dataReady = false;
+      this.setBaseInfo({ ...this.instance });
       await this.getData();
       await this.getData();
       this.dataReady = true;
       this.dataReady = true;
     },
     },
@@ -125,30 +135,31 @@ export default {
       this.modalIsShow = true;
       this.modalIsShow = true;
     },
     },
     async getData() {
     async getData() {
-      const datas = {
-        paperNumber: this.instance.paperNumber,
-        paperType: this.instance.paperType
-      };
       const funcs = [
       const funcs = [
-        paperDimensionList(datas),
-        paperStructList(datas),
-        paperDefineList(datas),
-        moduleEvaluationList(datas)
+        this.fetchDimensionList,
+        this.fetchStructList,
+        this.fetchDefineList,
+        this.fetchEvaluationList
       ];
       ];
       const result = await Promise.all(funcs).catch(() => {});
       const result = await Promise.all(funcs).catch(() => {});
       if (!result) return;
       if (!result) return;
 
 
-      console.log(result);
-
-      result.forEach((item, index) => {
-        if (index === 1) {
+      this.steps = steps.map(step => {
+        let item = { ...step };
+        if (item.val === "blueprint") {
+          const finished = !this[item.storeName].some(
+            elem => !elem.knowledgeDimension || !elem.abilityDimension
+          );
+          if (finished) item.status = "success";
+        } else if (item.val === "diagnose") {
+          if (this[item.storeName]) item.status = "success";
         } else {
         } else {
-          if (item && item.length) this.steps[index].status = "success";
+          if (this[item.storeName] && this[item.storeName].length)
+            item.status = "success";
         }
         }
+        return item;
       });
       });
-      this.steps.forEach(item => {
-        item.disabled = item.status === "wait";
-      });
+
       const nextStep = this.steps.findIndex(item => item.status !== "success");
       const nextStep = this.steps.findIndex(item => item.status !== "success");
       if (
       if (
         nextStep > -1 &&
         nextStep > -1 &&
@@ -159,51 +170,21 @@ export default {
         this.steps[this.curStep].status = "process";
         this.steps[this.curStep].status = "process";
       }
       }
 
 
-      this.configs = {
-        base: this.instance,
-        dimensionList: result[0],
-        structList: result[1],
-        defineList: result[2],
-        evaluationList: result[3]
-      };
+      this.steps.forEach(item => {
+        item.disabled = item.status === "wait";
+      });
     },
     },
     changeStep(ind) {
     changeStep(ind) {
       if (ind === this.curStep) return;
       if (ind === this.curStep) return;
       this.curStep = ind;
       this.curStep = ind;
     },
     },
-    async modified() {
-      const sets = {
-        dimension: {
-          func: paperDimensionList,
-          listName: "dimensionList"
-        },
-        blueprint: {
-          func: paperStructList,
-          listName: "structList"
-        },
-        diagnose: {
-          func: paperDefineList,
-          listName: "defineList"
-        },
-        comment: {
-          func: moduleEvaluationList,
-          listName: "evaluationList"
-        }
-      };
-      const datas = {
-        paperNumber: this.instance.paperNumber,
-        paperType: this.instance.paperType
-      };
-      const stepVal = this.steps[this.curStep].val;
-      const data = await sets[stepVal].func(datas);
-      this.configs[sets[stepVal].listName] = data;
-
+    modified() {
       this.steps[this.curStep].status = "success";
       this.steps[this.curStep].status = "success";
       if (
       if (
         this.curStep !== this.steps.length - 1 &&
         this.curStep !== this.steps.length - 1 &&
         this.steps[this.curStep + 1].status === "wait"
         this.steps[this.curStep + 1].status === "wait"
       ) {
       ) {
-        this.curStep++;
+        this.curStep += 1;
         this.steps[this.curStep].status = "process";
         this.steps[this.curStep].status = "process";
       }
       }
     }
     }

+ 45 - 23
src/modules/analysis/components/baseConfig/BlueprintConfig.vue

@@ -76,8 +76,9 @@
       ref="ImportFile"
       ref="ImportFile"
       title="上传文件"
       title="上传文件"
       :upload-url="uploadUrl"
       :upload-url="uploadUrl"
-      :download-url="downloadUrl"
-      :download-filename="downloadFilename"
+      :upload-data="uploadData"
+      :download-handle="downloadHandle"
+      download-filename="命题蓝图模板"
       :format="['xls', 'xlsx']"
       :format="['xls', 'xlsx']"
       @upload-success="fileUploaded"
       @upload-success="fileUploaded"
     >
     >
@@ -86,20 +87,14 @@
 </template>
 </template>
 
 
 <script>
 <script>
+import { mapState, mapActions } from "vuex";
 import ImportFile from "@/components/ImportFile";
 import ImportFile from "@/components/ImportFile";
-import { updatePaperStruct } from "../../api";
+import { updatePaperStruct, paperStructExport } from "../../api";
+import { downloadByApi } from "@/plugins/download";
 
 
 export default {
 export default {
   name: "blueprint-config",
   name: "blueprint-config",
   components: { ImportFile },
   components: { ImportFile },
-  props: {
-    configs: {
-      type: Object,
-      default() {
-        return {};
-      }
-    }
-  },
   data() {
   data() {
     return {
     return {
       dataList: [],
       dataList: [],
@@ -108,17 +103,21 @@ export default {
       loading: false,
       loading: false,
       // upload
       // upload
       uploadUrl: "/api/admin/grade/paper/struct/import",
       uploadUrl: "/api/admin/grade/paper/struct/import",
-      downloadUrl: "",
-      downloadFilename: ""
+      uploadData: {},
+      downloading: false
     };
     };
   },
   },
+  computed: {
+    ...mapState("baseConfigs", ["dimensionList", "structList", "baseInfo"])
+  },
   created() {
   created() {
+    this.initDimensions();
     this.initData();
     this.initData();
   },
   },
   methods: {
   methods: {
-    initData() {
-      const { dimensionList, structList } = this.configs;
-      this.knowledgeList = dimensionList
+    ...mapActions("baseConfigs", ["fetchStructList"]),
+    initDimensions() {
+      this.knowledgeList = this.dimensionList
         .filter(item => item.dimensionType === "KNOWLEDGE")
         .filter(item => item.dimensionType === "KNOWLEDGE")
         .map(item => {
         .map(item => {
           return {
           return {
@@ -126,8 +125,7 @@ export default {
             code: item.codeSecond
             code: item.codeSecond
           };
           };
         });
         });
-      const knowledgeCodes = this.knowledgeList.map(item => item.code);
-      this.abilityList = dimensionList
+      this.abilityList = this.dimensionList
         .filter(item => item.dimensionType === "ABILITY")
         .filter(item => item.dimensionType === "ABILITY")
         .map(item => {
         .map(item => {
           return {
           return {
@@ -135,8 +133,11 @@ export default {
             code: item.codePrimary
             code: item.codePrimary
           };
           };
         });
         });
+    },
+    initData() {
+      const knowledgeCodes = this.knowledgeList.map(item => item.code);
       const abilityCodes = this.abilityList.map(item => item.code);
       const abilityCodes = this.abilityList.map(item => item.code);
-      this.dataList = structList.map(item => {
+      this.dataList = this.structList.map(item => {
         let nitem = { ...item };
         let nitem = { ...item };
         let knowledgeDimension = (item.knowledgeDimension || "").split(",");
         let knowledgeDimension = (item.knowledgeDimension || "").split(",");
         if (knowledgeDimension.length) {
         if (knowledgeDimension.length) {
@@ -160,7 +161,28 @@ export default {
     toImport() {
     toImport() {
       this.$refs.ImportFile.open();
       this.$refs.ImportFile.open();
     },
     },
-    fileUploaded() {},
+    async downloadHandle() {
+      if (this.downloading) return;
+      this.downloading = true;
+
+      const res = await downloadByApi(() => {
+        return paperStructExport({
+          paperNumber: this.baseInfo.paperNumber,
+          paperType: this.baseInfo.paperType
+        });
+      }).catch(e => {
+        this.$message.error(e || "下载失败,请重新尝试!");
+      });
+      this.downloading = false;
+
+      if (!res) return;
+      this.$message.success("下载成功!");
+    },
+    async fileUploaded() {
+      this.$message.success("导入成功!");
+      await this.fetchStructList();
+      this.initData();
+    },
     checkData() {
     checkData() {
       let errMsg = [];
       let errMsg = [];
       this.dataList.forEach(item => {
       this.dataList.forEach(item => {
@@ -201,9 +223,9 @@ export default {
       });
       });
       const datas = {
       const datas = {
         datasource,
         datasource,
-        paperNumber: this.configs.base.paperNumber,
-        paperName: this.configs.base.paperName,
-        paperType: this.configs.base.paperType
+        paperNumber: this.baseInfo.paperNumber,
+        paperName: this.baseInfo.paperName,
+        paperType: this.baseInfo.paperType
       };
       };
       const data = await updatePaperStruct(datas).catch(() => {});
       const data = await updatePaperStruct(datas).catch(() => {});
       this.loading = false;
       this.loading = false;

+ 1 - 2
src/modules/analysis/components/baseConfig/CommentAbility.vue

@@ -89,8 +89,7 @@ export default {
   data() {
   data() {
     return {
     return {
       dataList: [],
       dataList: [],
-      curRow: {},
-      errorMsg: ""
+      curRow: {}
     };
     };
   },
   },
   mounted() {
   mounted() {

+ 11 - 18
src/modules/analysis/components/baseConfig/CommentConfig.vue

@@ -31,6 +31,7 @@
 </template>
 </template>
 
 
 <script>
 <script>
+import { mapState } from "vuex";
 import CommentKnowledge from "./CommentKnowledge.vue";
 import CommentKnowledge from "./CommentKnowledge.vue";
 import CommentAbility from "./CommentAbility.vue";
 import CommentAbility from "./CommentAbility.vue";
 import { initKnowledgeList, initAbilityList } from "./defaultComment";
 import { initKnowledgeList, initAbilityList } from "./defaultComment";
@@ -39,14 +40,6 @@ import { updateModuleEvaluation } from "../../api";
 export default {
 export default {
   name: "comment-config",
   name: "comment-config",
   components: { CommentKnowledge, CommentAbility },
   components: { CommentKnowledge, CommentAbility },
-  props: {
-    configs: {
-      type: Object,
-      default() {
-        return {};
-      }
-    }
-  },
   data() {
   data() {
     return {
     return {
       curTab: "knowledge",
       curTab: "knowledge",
@@ -67,6 +60,7 @@ export default {
     };
     };
   },
   },
   computed: {
   computed: {
+    ...mapState("baseConfigs", ["evaluationList", "baseInfo"]),
     compName() {
     compName() {
       return `comment-${this.curTab}`;
       return `comment-${this.curTab}`;
     },
     },
@@ -81,12 +75,11 @@ export default {
   },
   },
   methods: {
   methods: {
     initData() {
     initData() {
-      const { evaluationList } = this.configs;
-      this.parseKnowledgeList(evaluationList);
-      this.parseAbilityList(evaluationList);
+      this.parseKnowledgeList();
+      this.parseAbilityList();
     },
     },
-    parseKnowledgeList(evaluationList) {
-      const rateList = evaluationList.filter(
+    parseKnowledgeList() {
+      const rateList = this.evaluationList.filter(
         item => item.moduleType === "KNOWLEDGE"
         item => item.moduleType === "KNOWLEDGE"
       );
       );
       if (rateList.length) {
       if (rateList.length) {
@@ -106,8 +99,8 @@ export default {
         });
         });
       }
       }
     },
     },
-    parseAbilityList(evaluationList) {
-      const rateList = evaluationList.filter(
+    parseAbilityList() {
+      const rateList = this.evaluationList.filter(
         item => item.moduleType === "ABILITY"
         item => item.moduleType === "ABILITY"
       );
       );
       if (rateList.length) {
       if (rateList.length) {
@@ -246,9 +239,9 @@ export default {
       this.loading = true;
       this.loading = true;
       const gradeModuleEvaluationDatasourceList = this.getData();
       const gradeModuleEvaluationDatasourceList = this.getData();
       const data = await updateModuleEvaluation({
       const data = await updateModuleEvaluation({
-        paperNumber: this.configs.base.paperNumber,
-        paperName: this.configs.base.paperName,
-        paperType: this.configs.base.paperType,
+        paperNumber: this.baseInfo.paperNumber,
+        paperName: this.baseInfo.paperName,
+        paperType: this.baseInfo.paperType,
         gradeModuleEvaluationDatasourceList
         gradeModuleEvaluationDatasourceList
       }).catch(() => {});
       }).catch(() => {});
       this.loading = false;
       this.loading = false;

+ 21 - 26
src/modules/analysis/components/baseConfig/DiagnoseConfig.vue

@@ -74,6 +74,7 @@
 </template>
 </template>
 
 
 <script>
 <script>
+import { mapState } from "vuex";
 import ProficiencyEdit from "./ProficiencyEdit.vue";
 import ProficiencyEdit from "./ProficiencyEdit.vue";
 import { updatePaperDefine } from "../../api";
 import { updatePaperDefine } from "../../api";
 
 
@@ -87,14 +88,6 @@ const initModalForm = {
 
 
 export default {
 export default {
   name: "diagnose-config",
   name: "diagnose-config",
-  props: {
-    configs: {
-      type: Object,
-      default() {
-        return {};
-      }
-    }
-  },
   components: { ProficiencyEdit },
   components: { ProficiencyEdit },
   data() {
   data() {
     const isEmpty = num => !num && num !== 0;
     const isEmpty = num => !num && num !== 0;
@@ -168,24 +161,26 @@ export default {
       loading: false
       loading: false
     };
     };
   },
   },
+  computed: {
+    ...mapState("baseConfigs", ["defineList", "baseInfo"])
+  },
   created() {
   created() {
-    const { defineList } = this.configs;
-    if (!defineList) return;
-
-    this.modalForm = this.$objAssign(initModalForm, defineList);
-    this.modalForm.gradeModuleDefineParamList = defineList.gradeModuleKnowledgeDefineParamList.map(
-      item => {
-        return {
-          level: item.level,
-          title: item.define.split(":")[0],
-          startRate: item.min * 100,
-          endRate: item.max * 100
-        };
-      }
-    );
+    this.initData();
   },
   },
   methods: {
   methods: {
-    getList() {},
+    initData() {
+      this.modalForm = this.$objAssign(initModalForm, this.defineList);
+      this.modalForm.gradeModuleDefineParamList = defineList.gradeModuleKnowledgeDefineParamList.map(
+        item => {
+          return {
+            level: item.level,
+            title: item.define.split(":")[0],
+            startRate: item.min * 100,
+            endRate: item.max * 100
+          };
+        }
+      );
+    },
     paramChange(data) {
     paramChange(data) {
       this.modalForm.gradeModuleDefineParamList = data;
       this.modalForm.gradeModuleDefineParamList = data;
       this.$refs.modalFormComp.validateField("gradeModuleDefineParamList");
       this.$refs.modalFormComp.validateField("gradeModuleDefineParamList");
@@ -198,9 +193,9 @@ export default {
       this.loading = true;
       this.loading = true;
       const datas = {
       const datas = {
         ...this.modalForm,
         ...this.modalForm,
-        paperNumber: this.configs.base.paperNumber,
-        paperName: this.configs.base.paperName,
-        paperType: this.configs.base.paperType
+        paperNumber: this.baseInfo.paperNumber,
+        paperName: this.baseInfo.paperName,
+        paperType: this.baseInfo.paperType
       };
       };
       datas.gradeModuleDefineParamList = this.modalForm.gradeModuleDefineParamList.map(
       datas.gradeModuleDefineParamList = this.modalForm.gradeModuleDefineParamList.map(
         item => {
         item => {

+ 34 - 44
src/modules/analysis/components/baseConfig/DimensionAbilityList.vue

@@ -77,50 +77,46 @@
 </template>
 </template>
 
 
 <script>
 <script>
+import { mapState, mapActions, mapMutations } from "vuex";
 import ImportFile from "@/components/ImportFile";
 import ImportFile from "@/components/ImportFile";
 import ModifyAbilityDim from "./ModifyAbilityDim.vue";
 import ModifyAbilityDim from "./ModifyAbilityDim.vue";
+import { paperDimensionExport } from "../../api";
+import { downloadByApi } from "@/plugins/download";
 
 
 export default {
 export default {
   name: "dimension-ability-list",
   name: "dimension-ability-list",
   components: { ImportFile, ModifyAbilityDim },
   components: { ImportFile, ModifyAbilityDim },
-  props: {
-    course: {
-      type: Object,
-      default() {
-        return {};
-      }
-    },
-    datas: {
-      type: Array,
-      default() {
-        return [];
-      }
-    }
-  },
   data() {
   data() {
     return {
     return {
       dataList: [],
       dataList: [],
       curRow: {},
       curRow: {},
       loading: false,
       loading: false,
       // upload
       // upload
-      uploadUrl: "yourUploadPath",
+      uploadUrl: "/api/admin/grade/paper/dimension/import",
       uploadData: {},
       uploadData: {},
       downloading: false
       downloading: false
     };
     };
   },
   },
+  computed: {
+    ...mapState("baseConfigs", ["dimensionList", "baseInfo"])
+  },
   mounted() {
   mounted() {
     this.initData();
     this.initData();
   },
   },
   methods: {
   methods: {
+    ...mapMutations("baseConfigs", ["setDimensionList"]),
+    ...mapActions("baseConfigs", ["fetchDimensionList"]),
     initData() {
     initData() {
-      this.dataList = this.datas.map(item => {
-        return { ...item, id: this.$randomCode() };
-      });
+      this.dataList = this.dimensionList
+        .filter(item => item.dimensionType === "ABILITY")
+        .map(item => {
+          return { ...item, id: this.$randomCode() };
+        });
       this.sortDataList();
       this.sortDataList();
       this.uploadData = {
       this.uploadData = {
-        paperNumber: this.course.paperNumber,
-        paperType: this.course.paperType,
-        paperName: this.course.paperName,
+        paperNumber: this.baseInfo.paperNumber,
+        paperType: this.baseInfo.paperType,
+        paperName: this.baseInfo.paperName,
         dimensionType: "ABILITY"
         dimensionType: "ABILITY"
       };
       };
     },
     },
@@ -133,8 +129,8 @@ export default {
 
 
       const res = await downloadByApi(() => {
       const res = await downloadByApi(() => {
         return paperDimensionExport({
         return paperDimensionExport({
-          courseCode: this.course.courseCode,
-          courseName: this.course.courseName,
+          courseCode: this.baseInfo.courseCode,
+          courseName: this.baseInfo.courseName,
           dimensionType: "ABILITY"
           dimensionType: "ABILITY"
         });
         });
       }).catch(e => {
       }).catch(e => {
@@ -147,27 +143,18 @@ export default {
     },
     },
     async fileUploaded() {
     async fileUploaded() {
       this.$message.success("导入成功!");
       this.$message.success("导入成功!");
-      const data = await paperDimensionList({
-        paperNumber: this.course.paperNumber,
-        paperType: this.course.paperType
-      });
-      this.dataList = data
-        .filter(item => item.dimensionType === "ABILITY")
-        .map(item => {
-          return { ...item, id: this.$randomCode() };
-        });
-      this.sortDataList();
-      this.emitChange();
+      await this.fetchDimensionList();
+      this.initData();
     },
     },
     modified(data) {
     modified(data) {
       if (data.id) {
       if (data.id) {
         const pos = this.dataList.findIndex(item => item.id === data.id);
         const pos = this.dataList.findIndex(item => item.id === data.id);
         this.dataList.splice(pos, 1, data);
         this.dataList.splice(pos, 1, data);
       } else {
       } else {
-        this.dataList.push(data);
-        this.sortDataList();
+        this.dataList.push({ ...data, id: this.$randomCode() });
       }
       }
-      this.emitChange();
+      this.sortDataList();
+      this.updateChange();
     },
     },
     sortDataList() {
     sortDataList() {
       this.dataList.sort((a, b) => {
       this.dataList.sort((a, b) => {
@@ -176,8 +163,8 @@ export default {
     },
     },
     toAdd() {
     toAdd() {
       this.curRow = {
       this.curRow = {
-        courseCode: this.course.courseCode,
-        courseName: this.course.courseName
+        courseCode: this.baseInfo.courseCode,
+        courseName: this.baseInfo.courseName
       };
       };
       this.$refs.ModifyAbilityDim.open();
       this.$refs.ModifyAbilityDim.open();
     },
     },
@@ -187,7 +174,7 @@ export default {
     },
     },
     toDelete({ $index }) {
     toDelete({ $index }) {
       this.dataList.splice($index, 1);
       this.dataList.splice($index, 1);
-      this.emitChange();
+      this.updateChange();
     },
     },
     toUp({ row, $index }) {
     toUp({ row, $index }) {
       const pos = $index;
       const pos = $index;
@@ -197,7 +184,7 @@ export default {
       this.dataList.splice(pos - 1, 0, row);
       this.dataList.splice(pos - 1, 0, row);
       this.dataList[pos].codePrimary = curRowCode;
       this.dataList[pos].codePrimary = curRowCode;
       this.dataList[pos - 1].codePrimary = prevRowCode;
       this.dataList[pos - 1].codePrimary = prevRowCode;
-      this.emitChange();
+      this.updateChange();
     },
     },
     toDown({ row, $index }) {
     toDown({ row, $index }) {
       const pos = $index;
       const pos = $index;
@@ -207,10 +194,13 @@ export default {
       this.dataList.splice(pos, 0, row);
       this.dataList.splice(pos, 0, row);
       this.dataList[pos].codePrimary = curRowCode;
       this.dataList[pos].codePrimary = curRowCode;
       this.dataList[pos + 1].codePrimary = nextRowCode;
       this.dataList[pos + 1].codePrimary = nextRowCode;
-      this.emitChange();
+      this.updateChange();
     },
     },
-    emitChange() {
-      this.$emit("data-change", this.dataList);
+    updateChange() {
+      const abilityList = this.dimensionList.filter(
+        item => item.dimensionType === "ABILITY"
+      );
+      this.setDimensionList([...this.dataList, ...abilityList]);
     }
     }
   }
   }
 };
 };

+ 16 - 46
src/modules/analysis/components/baseConfig/DimensionConfig.vue

@@ -11,12 +11,7 @@
       </el-button>
       </el-button>
     </div>
     </div>
 
 
-    <component
-      :is="compName"
-      :course="configs.base"
-      :datas="curDataList"
-      @data-change="dataChange"
-    ></component>
+    <component :is="compName"></component>
 
 
     <div class="config-footer">
     <div class="config-footer">
       <el-button
       <el-button
@@ -31,6 +26,7 @@
 </template>
 </template>
 
 
 <script>
 <script>
+import { mapState } from "vuex";
 import DimensionKnowledgeList from "./DimensionKnowledgeList.vue";
 import DimensionKnowledgeList from "./DimensionKnowledgeList.vue";
 import DimensionAbilityList from "./DimensionAbilityList.vue";
 import DimensionAbilityList from "./DimensionAbilityList.vue";
 import { updatePaperDimension } from "../../api";
 import { updatePaperDimension } from "../../api";
@@ -38,14 +34,6 @@ import { updatePaperDimension } from "../../api";
 export default {
 export default {
   name: "dimension-config",
   name: "dimension-config",
   components: { DimensionKnowledgeList, DimensionAbilityList },
   components: { DimensionKnowledgeList, DimensionAbilityList },
-  props: {
-    configs: {
-      type: Object,
-      default() {
-        return {};
-      }
-    }
-  },
   data() {
   data() {
     return {
     return {
       curTab: "knowledge",
       curTab: "knowledge",
@@ -59,62 +47,44 @@ export default {
           val: "ability"
           val: "ability"
         }
         }
       ],
       ],
-      loading: false,
-      knowledgeList: [],
-      abilityList: []
+      loading: false
     };
     };
   },
   },
   computed: {
   computed: {
+    ...mapState("baseConfigs", ["dimensionList", "baseInfo"]),
     compName() {
     compName() {
       return `dimension-${this.curTab}-list`;
       return `dimension-${this.curTab}-list`;
-    },
-    curDataList() {
-      return this.curTab === "knowledge"
-        ? this.knowledgeList
-        : this.abilityList;
     }
     }
   },
   },
-  created() {
-    this.initData();
-  },
   methods: {
   methods: {
-    initData() {
-      const { dimensionList } = this.configs;
-      this.knowledgeList = dimensionList.filter(
-        item => item.dimensionType === "KNOWLEDGE"
-      );
-      this.abilityList = dimensionList.filter(
-        item => item.dimensionType === "ABILITY"
-      );
-    },
     selectMenu(tab) {
     selectMenu(tab) {
       this.curTab = tab;
       this.curTab = tab;
     },
     },
-    dataChange(data) {
-      if (this.curTab === "knowledge") {
-        this.knowledgeList = data;
-      } else {
-        this.abilityList = data;
-      }
-    },
     async toSubmit() {
     async toSubmit() {
       if (this.loading) return;
       if (this.loading) return;
       this.loading = true;
       this.loading = true;
 
 
       const defData = {
       const defData = {
-        paperNumber: this.configs.base.paperNumber,
-        paperName: this.configs.base.paperName,
-        paperType: this.configs.base.paperType
+        paperNumber: this.baseInfo.paperNumber,
+        paperName: this.baseInfo.paperName,
+        paperType: this.baseInfo.paperType
       };
       };
+      const knowledgeList = this.dimensionList.filter(
+        item => item.dimensionType === "KNOWLEDGE"
+      );
+      const abilityList = this.dimensionList.filter(
+        item => item.dimensionType === "ABILITY"
+      );
+
       const funcs = [
       const funcs = [
         updatePaperDimension({
         updatePaperDimension({
           ...defData,
           ...defData,
-          datasource: this.knowledgeList,
+          datasource: knowledgeList,
           dimensionType: "KNOWLEDGE"
           dimensionType: "KNOWLEDGE"
         }),
         }),
         updatePaperDimension({
         updatePaperDimension({
           ...defData,
           ...defData,
-          datasource: this.abilityList,
+          datasource: abilityList,
           dimensionType: "ABILITY"
           dimensionType: "ABILITY"
         })
         })
       ];
       ];

+ 48 - 69
src/modules/analysis/components/baseConfig/DimensionKnowledgeList.vue

@@ -43,7 +43,7 @@
             <el-button
             <el-button
               class="btn-primary"
               class="btn-primary"
               type="text"
               type="text"
-              :disabled="loading || scope.row.isFirstSec"
+              :disabled="loading || scope.row.secondInd === 1"
               @click="toUp(scope)"
               @click="toUp(scope)"
               >上移</el-button
               >上移</el-button
             >
             >
@@ -74,38 +74,24 @@
     <modify-knowledge-dim
     <modify-knowledge-dim
       ref="ModifyKnowledgeDim"
       ref="ModifyKnowledgeDim"
       :instance="curRow"
       :instance="curRow"
-      :dict-data="dataDict"
       @modified="modified"
       @modified="modified"
     ></modify-knowledge-dim>
     ></modify-knowledge-dim>
   </div>
   </div>
 </template>
 </template>
 
 
 <script>
 <script>
+import { mapState, mapActions, mapMutations } from "vuex";
 import ImportFile from "@/components/ImportFile";
 import ImportFile from "@/components/ImportFile";
 import ModifyKnowledgeDim from "./ModifyKnowledgeDim.vue";
 import ModifyKnowledgeDim from "./ModifyKnowledgeDim.vue";
-import { paperDimensionExport, paperDimensionList } from "../../api";
+import { paperDimensionExport } from "../../api";
+import { downloadByApi } from "@/plugins/download";
 
 
 export default {
 export default {
   name: "dimension-knowledge-list",
   name: "dimension-knowledge-list",
   components: { ImportFile, ModifyKnowledgeDim },
   components: { ImportFile, ModifyKnowledgeDim },
-  props: {
-    course: {
-      type: Object,
-      default() {
-        return {};
-      }
-    },
-    datas: {
-      type: Array,
-      default() {
-        return [];
-      }
-    }
-  },
   data() {
   data() {
     return {
     return {
       dataList: [],
       dataList: [],
-      dataDict: [],
       curRow: {},
       curRow: {},
       loading: false,
       loading: false,
       // upload
       // upload
@@ -114,40 +100,34 @@ export default {
       downloading: false
       downloading: false
     };
     };
   },
   },
+  computed: {
+    ...mapState("baseConfigs", ["dimensionList", "baseInfo"])
+  },
   mounted() {
   mounted() {
     this.initData();
     this.initData();
   },
   },
   methods: {
   methods: {
+    ...mapMutations("baseConfigs", ["setDimensionList"]),
+    ...mapActions("baseConfigs", ["fetchDimensionList"]),
     initData() {
     initData() {
-      this.dataList = this.datas.map(item => {
-        return { ...item };
-      });
+      this.dataList = this.dimensionList
+        .filter(item => item.dimensionType === "KNOWLEDGE")
+        .map(item => {
+          return {
+            ...item,
+            secondInd: item.codeSecond.substring(1) * 1,
+            isLastSec: false,
+            id: this.$randomCode()
+          };
+        });
       this.sortDataList();
       this.sortDataList();
-      this.getDict();
       this.uploadData = {
       this.uploadData = {
-        paperNumber: this.course.paperNumber,
-        paperType: this.course.paperType,
-        paperName: this.course.paperName,
+        paperNumber: this.baseInfo.paperNumber,
+        paperType: this.baseInfo.paperType,
+        paperName: this.baseInfo.paperName,
         dimensionType: "KNOWLEDGE"
         dimensionType: "KNOWLEDGE"
       };
       };
     },
     },
-    getDict() {
-      let dataDict = {};
-      this.dataList.forEach(item => {
-        if (!dataDict[item.codePrimary]) {
-          dataDict[item.codePrimary] = {
-            name: item.namePrimary,
-            code: item.codePrimary,
-            children: []
-          };
-        }
-        dataDict[item.codePrimary].children.push({
-          name: item.nameSecond,
-          code: item.codeSecond
-        });
-      });
-      this.dataDict = Object.values(dataDict);
-    },
     toImport() {
     toImport() {
       this.$refs.ImportFile.open();
       this.$refs.ImportFile.open();
     },
     },
@@ -157,8 +137,8 @@ export default {
 
 
       const res = await downloadByApi(() => {
       const res = await downloadByApi(() => {
         return paperDimensionExport({
         return paperDimensionExport({
-          courseCode: this.course.courseCode,
-          courseName: this.course.courseName,
+          courseCode: this.baseInfo.courseCode,
+          courseName: this.baseInfo.courseName,
           dimensionType: "KNOWLEDGE"
           dimensionType: "KNOWLEDGE"
         });
         });
       }).catch(e => {
       }).catch(e => {
@@ -171,43 +151,39 @@ export default {
     },
     },
     async fileUploaded() {
     async fileUploaded() {
       this.$message.success("导入成功!");
       this.$message.success("导入成功!");
-      const data = await paperDimensionList({
-        paperNumber: this.course.paperNumber,
-        paperType: this.course.paperType
-      });
-      this.dataList = data
-        .filter(item => item.dimensionType === "KNOWLEDGE")
-        .map(item => {
-          return { ...item, id: this.$randomCode() };
-        });
-      this.sortDataList();
-      this.emitChange();
+      await this.fetchDimensionList();
+      this.initData();
     },
     },
     modified(data) {
     modified(data) {
       if (data.id) {
       if (data.id) {
         const pos = this.dataList.findIndex(item => item.id === data.id);
         const pos = this.dataList.findIndex(item => item.id === data.id);
         this.dataList.splice(pos, 1, data);
         this.dataList.splice(pos, 1, data);
       } else {
       } else {
-        this.dataList.push(data);
-        this.sortDataList();
+        this.dataList.push({
+          ...data,
+          id: this.$randomCode()
+        });
       }
       }
-      this.emitChange();
+      this.sortDataList();
+      this.updateChange();
     },
     },
     sortDataList() {
     sortDataList() {
+      if (!this.dataList.length) return;
       this.dataList.sort((a, b) => {
       this.dataList.sort((a, b) => {
         if (a.codePrimary < b.codePrimary) return -1;
         if (a.codePrimary < b.codePrimary) return -1;
         if (a.codePrimary > b.codePrimary) return 1;
         if (a.codePrimary > b.codePrimary) return 1;
 
 
-        const anoSecond = a.codeSecond.substring(1) * 1;
-        const bnoSecond = b.codeSecond.substring(1) * 1;
-
-        return anoSecond < bnoSecond ? -1 : 1;
+        return a.secondInd < b.secondInd ? -1 : 1;
+      });
+      this.dataList.forEach((item, index) => {
+        const nextItem = this.dataList[index + 1];
+        item.isLastSec = nextItem && nextItem.codePrimary !== item.codePrimary;
       });
       });
     },
     },
     toAdd() {
     toAdd() {
       this.curRow = {
       this.curRow = {
-        courseCode: this.course.courseCode,
-        courseName: this.course.courseName
+        courseCode: this.baseInfo.courseCode,
+        courseName: this.baseInfo.courseName
       };
       };
       this.$refs.ModifyKnowledgeDim.open();
       this.$refs.ModifyKnowledgeDim.open();
     },
     },
@@ -217,7 +193,7 @@ export default {
     },
     },
     toDelete({ $index }) {
     toDelete({ $index }) {
       this.dataList.splice($index, 1);
       this.dataList.splice($index, 1);
-      this.emitChange();
+      this.updateChange();
     },
     },
     toUp({ row, $index }) {
     toUp({ row, $index }) {
       const pos = $index;
       const pos = $index;
@@ -229,7 +205,7 @@ export default {
       this.dataList[pos - 1].codeSecond = `${rowFirstCode}${rowSecondInd - 1}`;
       this.dataList[pos - 1].codeSecond = `${rowFirstCode}${rowSecondInd - 1}`;
       this.dataList[pos].secondInd = rowSecondInd;
       this.dataList[pos].secondInd = rowSecondInd;
       this.dataList[pos].codeSecond = `${rowFirstCode}${rowSecondInd}`;
       this.dataList[pos].codeSecond = `${rowFirstCode}${rowSecondInd}`;
-      this.emitChange();
+      this.updateChange();
     },
     },
     toDown({ row, $index }) {
     toDown({ row, $index }) {
       const pos = $index;
       const pos = $index;
@@ -241,10 +217,13 @@ export default {
       this.dataList[pos + 1].codeSecond = `${rowFirstCode}${rowSecondInd + 1}`;
       this.dataList[pos + 1].codeSecond = `${rowFirstCode}${rowSecondInd + 1}`;
       this.dataList[pos].secondInd = rowSecondInd;
       this.dataList[pos].secondInd = rowSecondInd;
       this.dataList[pos].codeSecond = `${rowFirstCode}${rowSecondInd}`;
       this.dataList[pos].codeSecond = `${rowFirstCode}${rowSecondInd}`;
-      this.emitChange();
+      this.updateChange();
     },
     },
-    emitChange() {
-      this.$emit("data-change", this.dataList);
+    updateChange() {
+      const knowledgeList = this.dimensionList.filter(
+        item => item.dimensionType === "KNOWLEDGE"
+      );
+      this.setDimensionList([...knowledgeList, ...this.dataList]);
     }
     }
   }
   }
 };
 };

+ 1 - 10
src/modules/analysis/components/baseConfig/ModifyAbilityDim.vue

@@ -67,8 +67,6 @@
 </template>
 </template>
 
 
 <script>
 <script>
-import { updatePaperDimension } from "../../api";
-
 const initModalForm = {
 const initModalForm = {
   id: null,
   id: null,
   courseName: "",
   courseName: "",
@@ -202,14 +200,7 @@ export default {
       const valid = await this.$refs.modalFormComp.validate().catch(() => {});
       const valid = await this.$refs.modalFormComp.validate().catch(() => {});
       if (!valid) return;
       if (!valid) return;
 
 
-      if (this.isSubmit) return;
-      this.isSubmit = true;
-      const datas = { ...this.modalForm };
-      const data = await updatePaperDimension(datas).catch(() => {});
-      this.isSubmit = false;
-      if (!data) return;
-
-      this.$emit("confirm", this.modalForm);
+      this.$emit("modified", this.modalForm);
       this.cancel();
       this.cancel();
     }
     }
   }
   }

+ 29 - 15
src/modules/analysis/components/baseConfig/ModifyKnowledgeDim.vue

@@ -83,7 +83,7 @@
 </template>
 </template>
 
 
 <script>
 <script>
-import { updatePaperDimension } from "../../api";
+import { mapState } from "vuex";
 
 
 const initModalForm = {
 const initModalForm = {
   id: null,
   id: null,
@@ -104,15 +104,10 @@ export default {
       default() {
       default() {
         return {};
         return {};
       }
       }
-    },
-    dictData: {
-      type: Array,
-      default() {
-        return [];
-      }
     }
     }
   },
   },
   computed: {
   computed: {
+    ...mapState("baseConfigs", ["dimensionList"]),
     isEdit() {
     isEdit() {
       return !!this.instance.id;
       return !!this.instance.id;
     },
     },
@@ -203,6 +198,7 @@ export default {
       modalIsShow: false,
       modalIsShow: false,
       isSubmit: false,
       isSubmit: false,
       modalForm: {},
       modalForm: {},
+      dictData: [],
       rules: {
       rules: {
         namePrimary: [
         namePrimary: [
           {
           {
@@ -264,6 +260,7 @@ export default {
       this.modalForm = this.$objAssign(initModalForm, val);
       this.modalForm = this.$objAssign(initModalForm, val);
     },
     },
     visibleChange() {
     visibleChange() {
+      this.getDict();
       this.initData(this.instance);
       this.initData(this.instance);
       this.$nextTick(() => {
       this.$nextTick(() => {
         this.$refs.modalFormComp.clearValidate();
         this.$refs.modalFormComp.clearValidate();
@@ -275,6 +272,26 @@ export default {
     open() {
     open() {
       this.modalIsShow = true;
       this.modalIsShow = true;
     },
     },
+    getDict() {
+      let dataDict = {};
+
+      this.dimensionList
+        .filter(item => item.dimensionType === "KNOWLEDGE")
+        .forEach(item => {
+          if (!dataDict[item.codePrimary]) {
+            dataDict[item.codePrimary] = {
+              name: item.namePrimary,
+              code: item.codePrimary,
+              children: []
+            };
+          }
+          dataDict[item.codePrimary].children.push({
+            name: item.nameSecond,
+            code: item.codeSecond
+          });
+        });
+      this.dataDict = Object.values(dataDict);
+    },
     dimValidate() {
     dimValidate() {
       this.$refs.modalFormComp.validateField([
       this.$refs.modalFormComp.validateField([
         "namePrimary",
         "namePrimary",
@@ -287,14 +304,11 @@ export default {
       const valid = await this.$refs.modalFormComp.validate().catch(() => {});
       const valid = await this.$refs.modalFormComp.validate().catch(() => {});
       if (!valid) return;
       if (!valid) return;
 
 
-      if (this.isSubmit) return;
-      this.isSubmit = true;
-      const datas = { ...this.modalForm };
-      const data = await updatePaperDimension(datas).catch(() => {});
-      this.isSubmit = false;
-      if (!data) return;
-
-      this.$emit("confirm", this.modalForm);
+      this.$emit("modified", {
+        ...this.modalForm,
+        isLastSec: false,
+        secondInd: this.modalForm.codeSecond.substring(1) * 1
+      });
       this.cancel();
       this.cancel();
     }
     }
   }
   }

+ 78 - 0
src/modules/analysis/components/baseConfig/baseConfigsStore.js

@@ -0,0 +1,78 @@
+import {
+  paperDimensionList,
+  paperStructList,
+  paperDefineList,
+  moduleEvaluationList
+} from "../../api";
+
+const state = {
+  baseInfo: {},
+  dimensionList: [],
+  structList: [],
+  defineList: {},
+  evaluationList: []
+};
+
+const mutations = {
+  setBaseInfo(state, baseInfo) {
+    state.baseInfo = baseInfo;
+  },
+  setDimensionList(state, dimensionList) {
+    state.dimensionList = dimensionList;
+  },
+  setStructList(state, structList) {
+    state.structList = structList;
+  },
+  setDefineList(state, defineList) {
+    state.defineList = defineList;
+  },
+  setEvaluationList(state, evaluationList) {
+    state.evaluationList = evaluationList;
+  }
+};
+
+const actions = {
+  async fetchDimensionList({ state, commit }) {
+    const datas = {
+      paperNumber: state.baseInfo.paperNumber,
+      paperType: state.baseInfo.paperType
+    };
+    const data = await paperDimensionList(datas).catch(() => {});
+    if (!data) return Promise.reject();
+    commit("setDimensionList", data);
+  },
+  async fetchStructList({ state, commit }) {
+    const datas = {
+      paperNumber: state.baseInfo.paperNumber,
+      paperType: state.baseInfo.paperType
+    };
+    const data = await paperStructList(datas).catch(() => {});
+    if (!data) return Promise.reject();
+    commit("setStructList", data);
+  },
+  async fetchDefineList({ state, commit }) {
+    const datas = {
+      paperNumber: state.baseInfo.paperNumber,
+      paperType: state.baseInfo.paperType
+    };
+    const data = await paperDefineList(datas).catch(() => {});
+    if (!data) return Promise.reject();
+    commit("setDefineList", data);
+  },
+  async fetchEvaluationList({ state, commit }) {
+    const datas = {
+      paperNumber: state.baseInfo.paperNumber,
+      paperType: state.baseInfo.paperType
+    };
+    const data = await moduleEvaluationList(datas).catch(() => {});
+    if (!data) return Promise.reject();
+    commit("setEvaluationList", data);
+  }
+};
+
+export default {
+  namespaced: true,
+  state,
+  mutations,
+  actions
+};

+ 35 - 33
src/store.js

@@ -1,33 +1,35 @@
-import Vue from "vue";
-import Vuex from "vuex";
-
-Vue.use(Vuex);
-
-// TODO:待完善
-const privilegeMapData = window.sessionStorage.getItem("privilegeMap");
-const privilegeMap = privilegeMapData ? JSON.parse(privilegeMapData).value : {};
-
-// modules
-import { card, free } from "./modules/card/store";
-import exam from "./modules/exam/store";
-
-export default new Vuex.Store({
-  state: {
-    user: {},
-    privilegeMap
-  },
-  mutations: {
-    setUser(state, user) {
-      state.user = user;
-    },
-    setPrivilegeMap(state, privilegeMap) {
-      state.privilegeMap = privilegeMap;
-    }
-  },
-  actions: {},
-  modules: {
-    card,
-    free,
-    exam
-  }
-});
+import Vue from "vue";
+import Vuex from "vuex";
+
+Vue.use(Vuex);
+
+// TODO:待完善
+const privilegeMapData = window.sessionStorage.getItem("privilegeMap");
+const privilegeMap = privilegeMapData ? JSON.parse(privilegeMapData).value : {};
+
+// modules
+import { card, free } from "./modules/card/store";
+import exam from "./modules/exam/store";
+import baseConfigs from "./modules/analysis/components/baseConfig/baseConfigsStore";
+
+export default new Vuex.Store({
+  state: {
+    user: {},
+    privilegeMap
+  },
+  mutations: {
+    setUser(state, user) {
+      state.user = user;
+    },
+    setPrivilegeMap(state, privilegeMap) {
+      state.privilegeMap = privilegeMap;
+    }
+  },
+  actions: {},
+  modules: {
+    card,
+    free,
+    exam,
+    baseConfigs
+  }
+});