Răsfoiți Sursa

接触配置调整

zhangjie 3 ani în urmă
părinte
comite
b5e4a5c4ce

+ 13 - 6
src/assets/styles/home.scss

@@ -180,7 +180,10 @@
   color: #fff;
   padding-left: 220px;
   background-color: $--color-text-dark;
-  overflow: hidden;
+
+  display: flex;
+  align-items: stretch;
+  justify-content: space-between;
 
   .menu-list {
     li {
@@ -214,14 +217,18 @@
     }
   }
   .head-menu {
-    float: left;
+    flex-grow: 1;
+    overflow-y: hidden;
+    overflow-x: auto;
+
+    ul {
+      white-space: nowrap;
+    }
   }
   .head-user {
-    float: right;
     padding-right: 10px;
-    li {
-      padding: 10px;
-    }
+    flex-grow: 0;
+    flex-shrink: 0;
     .menu-item-account {
       white-space: nowrap;
       padding: 10px;

+ 84 - 83
src/modules/admin/views/SystemRoleManage.vue

@@ -1,83 +1,84 @@
-<template>
-  <div class="role-manage">
-    <div class="part-box part-box-pad part-box-flex">
-      <div></div>
-      <el-button
-        type="primary"
-        icon="el-icon-circle-plus-outline"
-        @click="toAdd"
-        >添加角色</el-button
-      >
-    </div>
-    <div class="part-box part-box-pad">
-      <el-table ref="TableList" :data="roles">
-        <el-table-column
-          type="index"
-          label="序号"
-          width="70"
-          :index="indexMethod"
-        ></el-table-column>
-        <el-table-column prop="name" label="角色名称"></el-table-column>
-        <el-table-column class-name="action-column" label="操作" width="120px">
-          <template slot-scope="scope">
-            <el-button
-              class="btn-primary"
-              type="text"
-              @click="toEdit(scope.row)"
-              >编辑</el-button
-            >
-          </template>
-        </el-table-column>
-      </el-table>
-    </div>
-    <!-- ModifySystemRole -->
-    <modify-system-role
-      ref="ModifySystemRole"
-      :instance="curRole"
-      @modified="getList"
-    ></modify-system-role>
-  </div>
-</template>
-
-<script>
-import { ABLE_TYPE } from "@/constants/enumerate";
-import { userRoleListPage } from "../api";
-import ModifySystemRole from "../components/ModifySystemRole";
-
-export default {
-  name: "role-manage",
-  components: {
-    ModifySystemRole
-  },
-  data() {
-    return {
-      roles: [],
-      curRole: {},
-      ABLE_TYPE,
-      ROLE_TYPE: {}
-    };
-  },
-  created() {
-    this.toPage(1);
-  },
-  methods: {
-    async getList() {
-      const data = await userRoleListPage();
-      this.roles = data || [];
-      this.roles = this.roles.filter(item => item.type !== "ADMIN");
-    },
-    toPage(page) {
-      this.current = page;
-      this.getList();
-    },
-    toEdit(row) {
-      this.curRole = row;
-      this.$refs.ModifySystemRole.open();
-    },
-    toAdd() {
-      this.curRole = {};
-      this.$refs.ModifySystemRole.open();
-    }
-  }
-};
-</script>
+<template>
+  <div class="role-manage">
+    <div class="part-box part-box-pad part-box-flex">
+      <div></div>
+      <el-button
+        type="primary"
+        icon="el-icon-circle-plus-outline"
+        @click="toAdd"
+        >添加角色</el-button
+      >
+    </div>
+    <div class="part-box part-box-pad">
+      <el-table ref="TableList" :data="roles">
+        <el-table-column
+          type="index"
+          label="序号"
+          width="70"
+          :index="indexMethod"
+        ></el-table-column>
+        <el-table-column prop="name" label="角色名称"></el-table-column>
+        <el-table-column class-name="action-column" label="操作" width="120px">
+          <template slot-scope="scope">
+            <el-button
+              v-if="!scope.row.defaultRole"
+              class="btn-primary"
+              type="text"
+              @click="toEdit(scope.row)"
+              >编辑</el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+    </div>
+    <!-- ModifySystemRole -->
+    <modify-system-role
+      ref="ModifySystemRole"
+      :instance="curRole"
+      @modified="getList"
+    ></modify-system-role>
+  </div>
+</template>
+
+<script>
+import { ABLE_TYPE } from "@/constants/enumerate";
+import { userRoleListPage } from "../api";
+import ModifySystemRole from "../components/ModifySystemRole";
+
+export default {
+  name: "role-manage",
+  components: {
+    ModifySystemRole
+  },
+  data() {
+    return {
+      roles: [],
+      curRole: {},
+      ABLE_TYPE,
+      ROLE_TYPE: {}
+    };
+  },
+  created() {
+    this.toPage(1);
+  },
+  methods: {
+    async getList() {
+      const data = await userRoleListPage();
+      this.roles = data || [];
+      this.roles = this.roles.filter(item => item.type !== "ADMIN");
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    },
+    toEdit(row) {
+      this.curRole = row;
+      this.$refs.ModifySystemRole.open();
+    },
+    toAdd() {
+      this.curRole = {};
+      this.$refs.ModifySystemRole.open();
+    }
+  }
+};
+</script>

+ 14 - 9
src/modules/analysis/components/ModifyBaseConfig.vue

@@ -49,28 +49,32 @@ const steps = [
     val: "dimension",
     disabled: false,
     status: "process",
-    storeName: "dimensionList"
+    storeName: "dimensionList",
+    fetchFunc: "fetchDimensionList"
   },
   {
     name: "命题蓝图设置",
     val: "blueprint",
     disabled: false,
     status: "wait",
-    storeName: "structList"
+    storeName: "structList",
+    fetchFunc: "fetchStructList"
   },
   {
     name: "诊断规则定义",
     val: "diagnose",
     disabled: false,
     status: "wait",
-    storeName: "defineList"
+    storeName: "defineList",
+    fetchFunc: "fetchDefineList"
   },
   {
     name: "评价模型设置",
     val: "comment",
     disabled: false,
     status: "wait",
-    storeName: "evaluationList"
+    storeName: "evaluationList",
+    fetchFunc: "fetchEvaluationList"
   }
 ];
 
@@ -115,7 +119,7 @@ export default {
     }
   },
   methods: {
-    ...mapMutations("mapMutations", ["setBaseInfo"]),
+    ...mapMutations("baseConfigs", ["setBaseInfo"]),
     ...mapActions("baseConfigs", [
       "fetchDimensionList",
       "fetchStructList",
@@ -136,10 +140,10 @@ export default {
     },
     async getData() {
       const funcs = [
-        this.fetchDimensionList,
-        this.fetchStructList,
-        this.fetchDefineList,
-        this.fetchEvaluationList
+        this.fetchDimensionList(),
+        this.fetchStructList(),
+        this.fetchDefineList(),
+        this.fetchEvaluationList()
       ];
       const result = await Promise.all(funcs).catch(() => {});
       if (!result) return;
@@ -179,6 +183,7 @@ export default {
       this.curStep = ind;
     },
     modified() {
+      this[this.steps[this.curStep].fetchFunc]();
       this.steps[this.curStep].status = "success";
       if (
         this.curStep !== this.steps.length - 1 &&

+ 1 - 1
src/modules/analysis/components/baseConfig/BlueprintConfig.vue

@@ -13,7 +13,7 @@
         </el-table-column>
         <el-table-column prop="smallQuestionNumber" label="小题号" width="80">
         </el-table-column>
-        <el-table-column prop="bigTopicName" label="题目类型" width="80">
+        <el-table-column prop="bigTopicName" label="题目类型" width="100">
         </el-table-column>
         <el-table-column prop="fullScore" label="题目满分" width="80">
         </el-table-column>

+ 5 - 5
src/modules/analysis/components/baseConfig/CommentAbility.vue

@@ -6,16 +6,16 @@
         label="等级"
         width="60"
       ></el-table-column>
-      <el-table-column label="划分规划" width="300">
+      <el-table-column label="划分规划" width="310">
         <div
           slot-scope="scope"
           :class="[
             'rate-input',
-            { 'rate-input-offset-left': scope.$index === 0 }
+            { 'rate-input-offset-left': scope.$index === dataList.length - 1 }
           ]"
         >
           <el-input-number
-            v-if="scope.$index !== 0"
+            v-if="scope.$index !== dataList.length - 1"
             v-model="scope.row.startRate"
             placeholder="请输入"
             :min="0"
@@ -26,9 +26,9 @@
             :controls="false"
             @change="rateChange"
           ></el-input-number>
-          <span v-if="scope.$index !== 0">≤</span>
+          <span v-if="scope.$index !== dataList.length - 1">≤</span>
           <span>百分位等级TOP</span>
-          <span></span>
+          <span></span>
           <el-input-number
             v-model="scope.row.endRate"
             placeholder="请输入"

+ 1 - 1
src/modules/analysis/components/baseConfig/CommentKnowledge.vue

@@ -28,7 +28,7 @@
           ></el-input-number>
           <span v-if="scope.$index !== dataList.length - 1">≤</span>
           <span>个人得分率</span>
-          <span v-if="scope.$index !== 0"></span>
+          <span v-if="scope.$index !== 0"></span>
           <el-input-number
             v-if="scope.$index !== 0"
             v-model="scope.row.endRate"

+ 1 - 1
src/modules/analysis/components/baseConfig/DiagnoseConfig.vue

@@ -170,7 +170,7 @@ export default {
   methods: {
     initData() {
       this.modalForm = this.$objAssign(initModalForm, this.defineList);
-      this.modalForm.gradeModuleDefineParamList = defineList.gradeModuleKnowledgeDefineParamList.map(
+      this.modalForm.gradeModuleDefineParamList = this.defineList.gradeModuleKnowledgeDefineParamList.map(
         item => {
           return {
             level: item.level,

+ 11 - 8
src/modules/analysis/components/baseConfig/DimensionAbilityList.vue

@@ -11,7 +11,7 @@
         <el-table-column prop="courseName" label="课程名称"> </el-table-column>
         <el-table-column prop="namePrimary" label="一级能力维度">
         </el-table-column>
-        <el-table-column prop="codePrimary" label="一级维度编号">
+        <el-table-column prop="codePrimary" label="一级维度编号" width="110">
         </el-table-column>
         <el-table-column prop="interpretation" label="一级维度术语解释">
         </el-table-column>
@@ -39,14 +39,14 @@
             <el-button
               class="btn-primary"
               type="text"
-              :disabled="loading || scope.row.isFirstSec"
+              :disabled="loading || scope.$index === 0"
               @click="toUp(scope)"
               >上移</el-button
             >
             <el-button
               class="btn-primary"
               type="text"
-              :disabled="loading || scope.row.isLastSec"
+              :disabled="loading || scope.$index === dataListLastInd"
               @click="toDown(scope)"
               >下移</el-button
             >
@@ -98,7 +98,10 @@ export default {
     };
   },
   computed: {
-    ...mapState("baseConfigs", ["dimensionList", "baseInfo"])
+    ...mapState("baseConfigs", ["dimensionList", "baseInfo"]),
+    dataListLastInd() {
+      return this.dataList.length - 1;
+    }
   },
   mounted() {
     this.initData();
@@ -191,16 +194,16 @@ export default {
       const curRowCode = row.codePrimary;
       const nextRowCode = this.dataList[$index + 1].codePrimary;
       this.dataList.splice(pos, 1);
-      this.dataList.splice(pos, 0, row);
+      this.dataList.splice(pos + 1, 0, row);
       this.dataList[pos].codePrimary = curRowCode;
       this.dataList[pos + 1].codePrimary = nextRowCode;
       this.updateChange();
     },
     updateChange() {
-      const abilityList = this.dimensionList.filter(
-        item => item.dimensionType === "ABILITY"
+      const knowledgeList = this.dimensionList.filter(
+        item => item.dimensionType === "KNOWLEDGE"
       );
-      this.setDimensionList([...this.dataList, ...abilityList]);
+      this.setDimensionList([...knowledgeList, ...this.dataList]);
     }
   }
 };

+ 10 - 6
src/modules/analysis/components/baseConfig/DimensionKnowledgeList.vue

@@ -11,11 +11,11 @@
         <el-table-column prop="courseName" label="课程名称"> </el-table-column>
         <el-table-column prop="namePrimary" label="一级知识维度">
         </el-table-column>
-        <el-table-column prop="codePrimary" label="一级维度编号">
+        <el-table-column prop="codePrimary" label="一级维度编号" width="110">
         </el-table-column>
         <el-table-column prop="nameSecond" label="二级知识维度">
         </el-table-column>
-        <el-table-column prop="codeSecond" label="二级维度编号">
+        <el-table-column prop="codeSecond" label="二级维度编号" width="110">
         </el-table-column>
         <el-table-column prop="interpretation" label="一级维度术语解释">
         </el-table-column>
@@ -179,6 +179,7 @@ export default {
         const nextItem = this.dataList[index + 1];
         item.isLastSec = nextItem && nextItem.codePrimary !== item.codePrimary;
       });
+      this.dataList[this.dataList.length - 1].isLastSec = true;
     },
     toAdd() {
       this.curRow = {
@@ -193,6 +194,7 @@ export default {
     },
     toDelete({ $index }) {
       this.dataList.splice($index, 1);
+      this.sortDataList();
       this.updateChange();
     },
     toUp({ row, $index }) {
@@ -205,6 +207,7 @@ export default {
       this.dataList[pos - 1].codeSecond = `${rowFirstCode}${rowSecondInd - 1}`;
       this.dataList[pos].secondInd = rowSecondInd;
       this.dataList[pos].codeSecond = `${rowFirstCode}${rowSecondInd}`;
+      this.sortDataList();
       this.updateChange();
     },
     toDown({ row, $index }) {
@@ -212,18 +215,19 @@ export default {
       const rowSecondInd = row.secondInd;
       const rowFirstCode = row.codePrimary;
       this.dataList.splice(pos, 1);
-      this.dataList.splice(pos, 0, row);
+      this.dataList.splice(pos + 1, 0, row);
       this.dataList[pos + 1].secondInd = rowSecondInd + 1;
       this.dataList[pos + 1].codeSecond = `${rowFirstCode}${rowSecondInd + 1}`;
       this.dataList[pos].secondInd = rowSecondInd;
       this.dataList[pos].codeSecond = `${rowFirstCode}${rowSecondInd}`;
+      this.sortDataList();
       this.updateChange();
     },
     updateChange() {
-      const knowledgeList = this.dimensionList.filter(
-        item => item.dimensionType === "KNOWLEDGE"
+      const abilityList = this.dimensionList.filter(
+        item => item.dimensionType === "ABILITY"
       );
-      this.setDimensionList([...knowledgeList, ...this.dataList]);
+      this.setDimensionList([...this.dataList, ...abilityList]);
     }
   }
 };

+ 47 - 48
src/modules/analysis/components/baseConfig/ModifyAbilityDim.vue

@@ -10,53 +10,51 @@
     append-to-body
     @opened="visibleChange"
   >
-    <div class="part-box part-box-pad part-box-border">
-      <el-form
-        ref="modalFormComp"
-        :model="modalForm"
-        :rules="rules"
-        label-width="140px"
-      >
-        <el-form-item prop="courseCode" label="课程代码:" required>
-          <el-input
-            v-model.trim="modalForm.courseCode"
-            placeholder="请输入课程代码"
-            readonly
-          ></el-input>
-        </el-form-item>
-        <el-form-item prop="courseName" label="课程名称:" required>
-          <el-input
-            v-model.trim="modalForm.courseName"
-            placeholder="请输入课程名称"
-            readonly
-          ></el-input>
-        </el-form-item>
-        <el-form-item prop="namePrimary" label="一级能力维度:">
-          <el-input
-            v-model.trim="modalForm.namePrimary"
-            placeholder="请输入一级能力维度"
-            clearable
-            @change="dimValidate"
-          ></el-input>
-        </el-form-item>
-        <el-form-item prop="codePrimary" label="一级维度编号:">
-          <el-input
-            v-model.trim="modalForm.codePrimary"
-            placeholder="请输入一级维度编号"
-            clearable
-            @change="dimValidate"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="一级维度术语解释:">
-          <el-input
-            v-model.trim="modalForm.interpretation"
-            type="textarea"
-            :autosize="{ minRows: 1, maxRows: 5 }"
-            placeholder="请输入一级维度术语解释"
-          ></el-input>
-        </el-form-item>
-      </el-form>
-    </div>
+    <el-form
+      ref="modalFormComp"
+      :model="modalForm"
+      :rules="rules"
+      label-width="140px"
+    >
+      <el-form-item prop="courseCode" label="课程代码:" required>
+        <el-input
+          v-model.trim="modalForm.courseCode"
+          placeholder="请输入课程代码"
+          readonly
+        ></el-input>
+      </el-form-item>
+      <el-form-item prop="courseName" label="课程名称:" required>
+        <el-input
+          v-model.trim="modalForm.courseName"
+          placeholder="请输入课程名称"
+          readonly
+        ></el-input>
+      </el-form-item>
+      <el-form-item prop="namePrimary" label="一级能力维度:">
+        <el-input
+          v-model.trim="modalForm.namePrimary"
+          placeholder="请输入一级能力维度"
+          clearable
+          @change="dimValidate"
+        ></el-input>
+      </el-form-item>
+      <el-form-item prop="codePrimary" label="一级维度编号:">
+        <el-input
+          v-model.trim="modalForm.codePrimary"
+          placeholder="请输入一级维度编号"
+          clearable
+          @change="dimValidate"
+        ></el-input>
+      </el-form-item>
+      <el-form-item label="一级维度术语解释:">
+        <el-input
+          v-model.trim="modalForm.interpretation"
+          type="textarea"
+          :autosize="{ minRows: 2, maxRows: 5 }"
+          placeholder="请输入一级维度术语解释"
+        ></el-input>
+      </el-form-item>
+    </el-form>
     <div slot="footer">
       <el-button type="primary" :disabled="isSubmit" @click="submit"
         >确认</el-button
@@ -73,7 +71,8 @@ const initModalForm = {
   courseCode: "",
   namePrimary: "",
   codePrimary: "",
-  interpretation: ""
+  interpretation: "",
+  dimensionType: "ABILITY"
 };
 
 export default {

+ 152 - 94
src/modules/analysis/components/baseConfig/ModifyKnowledgeDim.vue

@@ -10,69 +10,67 @@
     append-to-body
     @opened="visibleChange"
   >
-    <div class="part-box part-box-pad part-box-border">
-      <el-form
-        ref="modalFormComp"
-        :model="modalForm"
-        :rules="rules"
-        label-width="140px"
-      >
-        <el-form-item prop="courseCode" label="课程代码:" required>
-          <el-input
-            v-model.trim="modalForm.courseCode"
-            placeholder="请输入课程代码"
-            readonly
-          ></el-input>
-        </el-form-item>
-        <el-form-item prop="courseName" label="课程名称:" required>
-          <el-input
-            v-model.trim="modalForm.courseName"
-            placeholder="请输入课程名称"
-            readonly
-          ></el-input>
-        </el-form-item>
-        <el-form-item prop="namePrimary" label="一级知识维度:">
-          <el-input
-            v-model.trim="modalForm.namePrimary"
-            placeholder="请输入一级知识维度"
-            clearable
-            @change="dimValidate"
-          ></el-input>
-        </el-form-item>
-        <el-form-item prop="codePrimary" label="一级维度编号:">
-          <el-input
-            v-model.trim="modalForm.codePrimary"
-            placeholder="请输入一级维度编号"
-            clearable
-            @change="dimValidate"
-          ></el-input>
-        </el-form-item>
-        <el-form-item prop="nameSecond" label="二级知识维度:">
-          <el-input
-            v-model.trim="modalForm.nameSecond"
-            placeholder="请输入二级知识维度"
-            clearable
-            @change="dimValidate"
-          ></el-input>
-        </el-form-item>
-        <el-form-item prop="codeSecond" label="二级维度编号:">
-          <el-input
-            v-model.trim="modalForm.codeSecond"
-            placeholder="请输入二级维度编号"
-            clearable
-            @change="dimValidate"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="一级维度术语解释:">
-          <el-input
-            v-model.trim="modalForm.interpretation"
-            type="textarea"
-            :autosize="{ minRows: 1, maxRows: 5 }"
-            placeholder="请输入一级维度术语解释"
-          ></el-input>
-        </el-form-item>
-      </el-form>
-    </div>
+    <el-form
+      ref="modalFormComp"
+      :model="modalForm"
+      :rules="rules"
+      label-width="140px"
+    >
+      <el-form-item prop="courseCode" label="课程代码:" required>
+        <el-input
+          v-model.trim="modalForm.courseCode"
+          placeholder="请输入课程代码"
+          readonly
+        ></el-input>
+      </el-form-item>
+      <el-form-item prop="courseName" label="课程名称:" required>
+        <el-input
+          v-model.trim="modalForm.courseName"
+          placeholder="请输入课程名称"
+          readonly
+        ></el-input>
+      </el-form-item>
+      <el-form-item prop="namePrimary" label="一级知识维度:">
+        <el-input
+          v-model.trim="modalForm.namePrimary"
+          placeholder="请输入一级知识维度"
+          clearable
+          @change="dimValidate"
+        ></el-input>
+      </el-form-item>
+      <el-form-item prop="codePrimary" label="一级维度编号:">
+        <el-input
+          v-model.trim="modalForm.codePrimary"
+          placeholder="请输入一级维度编号"
+          clearable
+          @change="dimValidate"
+        ></el-input>
+      </el-form-item>
+      <el-form-item prop="nameSecond" label="二级知识维度:">
+        <el-input
+          v-model.trim="modalForm.nameSecond"
+          placeholder="请输入二级知识维度"
+          clearable
+          @change="dimValidate"
+        ></el-input>
+      </el-form-item>
+      <el-form-item prop="codeSecond" label="二级维度编号:">
+        <el-input
+          v-model.trim="modalForm.codeSecond"
+          placeholder="请输入二级维度编号"
+          clearable
+          @change="dimValidate"
+        ></el-input>
+      </el-form-item>
+      <el-form-item label="一级维度术语解释:">
+        <el-input
+          v-model.trim="modalForm.interpretation"
+          type="textarea"
+          :autosize="{ minRows: 2, maxRows: 5 }"
+          placeholder="请输入一级维度术语解释"
+        ></el-input>
+      </el-form-item>
+    </el-form>
     <div slot="footer">
       <el-button type="primary" :disabled="isSubmit" @click="submit"
         >确认</el-button
@@ -93,7 +91,8 @@ const initModalForm = {
   codePrimary: "",
   nameSecond: "",
   codeSecond: "",
-  interpretation: ""
+  interpretation: "",
+  dimensionType: "KNOWLEDGE"
 };
 
 export default {
@@ -116,14 +115,14 @@ export default {
     }
   },
   data() {
-    const firstNameValidator = (rule, value, callback) => {
+    const namePrimaryValidator = (rule, value, callback) => {
       if (!this.modalForm.codePrimary || !value) return callback();
 
       let existFirstDim = this.dictData.find(
         item => item.code === this.modalForm.codePrimary
       );
       if (existFirstDim) {
-        if (existFirstDim.namePrimary !== value)
+        if (existFirstDim.name !== value)
           return callback(new Error("一级知识维度错误"));
       } else {
         existFirstDim = this.dictData.find(item => item.name === value);
@@ -133,7 +132,7 @@ export default {
       callback();
     };
 
-    const secondNameValidator = (rule, value, callback) => {
+    const nameSecondValidator = (rule, value, callback) => {
       if (
         !this.modalForm.codeSecond ||
         !value ||
@@ -142,32 +141,82 @@ export default {
       )
         return callback();
 
-      let existFirstDim = this.dictData.find(
-        item => item.code === this.modalForm.codePrimary
-      );
-      if (existFirstDim) {
-        let existSecondDim = existFirstDim.children.find(
-          item => item.code === this.modalForm.codeSecond
+      const addValidator = () => {
+        let existFirstDim = this.dictData.find(
+          item => item.code === this.modalForm.codePrimary
         );
-        if (existSecondDim) {
-          return callback();
+        if (existFirstDim) {
+          let existSecondDim = existFirstDim.children.find(
+            item => item.code === this.modalForm.codeSecond
+          );
+
+          if (existSecondDim) {
+            return callback();
+          } else {
+            existSecondDim = existFirstDim.children.find(
+              item => item.name === value
+            );
+            if (existSecondDim)
+              return callback(new Error("二级知识维度已存在"));
+          }
         } else {
-          existSecondDim = existFirstDim.children.find(
-            item => item.name === value
+          const secondDimExist = this.dictData.some(item =>
+            item.children.some(elem => elem.name === value)
           );
-          if (existSecondDim) return callback(new Error("二级知识维度已存在"));
+          if (secondDimExist) return callback(new Error("二级知识维度已存在"));
         }
-      } else {
-        const secondDimExist = this.dictData.some(item =>
-          item.children.some(elem => elem.name === value)
+
+        return callback();
+      };
+
+      const editValidator = () => {
+        let existFirstDim = this.dictData.find(
+          item => item.code === this.modalForm.codePrimary
         );
-        if (secondDimExist) return callback(new Error("二级知识维度已存在"));
-      }
+        if (existFirstDim) {
+          let existSecondDim = existFirstDim.children.find(
+            item => item.code === this.modalForm.codeSecond
+          );
 
-      callback();
+          if (existSecondDim) {
+            if (
+              existSecondDim.code === this.instance.codeSecond &&
+              existSecondDim.name !== value
+            ) {
+              return callback(new Error("二级知识维度错误"));
+            }
+            if (
+              existSecondDim.code !== this.instance.codeSecond &&
+              existSecondDim.name === value
+            ) {
+              return callback(new Error("二级知识维度已存在"));
+            }
+
+            return callback();
+          } else {
+            existSecondDim = existFirstDim.children.find(
+              item =>
+                item.name === value && item.name !== this.instance.nameSecond
+            );
+            if (existSecondDim)
+              return callback(new Error("二级知识维度已存在"));
+          }
+        } else {
+          const secondDimExist = this.dictData.some(item =>
+            item.children.some(
+              elem =>
+                elem.name === value && elem.name !== this.instance.nameSecond
+            )
+          );
+          if (secondDimExist) return callback(new Error("二级知识维度已存在"));
+        }
+        return callback();
+      };
+
+      return this.isEdit ? editValidator() : addValidator();
     };
 
-    const secondCodeValidator = (rule, value, callback) => {
+    const codeSecondValidator = (rule, value, callback) => {
       if (
         !this.modalForm.codeSecond ||
         !value ||
@@ -188,7 +237,16 @@ export default {
         let existSecondDim = existFirstDim.children.find(
           item => item.code === this.modalForm.codeSecond
         );
-        if (existSecondDim) return callback(new Error("二级维度编号已存在"));
+        if (this.isEdit) {
+          if (
+            existSecondDim &&
+            existSecondDim.code !== this.instance.codeSecond
+          ) {
+            return callback(new Error("二级维度编号已存在"));
+          }
+        } else {
+          if (existSecondDim) return callback(new Error("二级维度编号已存在"));
+        }
       }
 
       callback();
@@ -212,7 +270,7 @@ export default {
             trigger: "change"
           },
           {
-            validator: firstNameValidator,
+            validator: namePrimaryValidator,
             trigger: "change"
           }
         ],
@@ -236,7 +294,7 @@ export default {
             trigger: "change"
           },
           {
-            validator: secondNameValidator,
+            validator: nameSecondValidator,
             trigger: "change"
           }
         ],
@@ -248,7 +306,7 @@ export default {
             trigger: "change"
           },
           {
-            validator: secondCodeValidator,
+            validator: codeSecondValidator,
             trigger: "change"
           }
         ]
@@ -273,24 +331,24 @@ export default {
       this.modalIsShow = true;
     },
     getDict() {
-      let dataDict = {};
+      let dictData = {};
 
       this.dimensionList
         .filter(item => item.dimensionType === "KNOWLEDGE")
         .forEach(item => {
-          if (!dataDict[item.codePrimary]) {
-            dataDict[item.codePrimary] = {
+          if (!dictData[item.codePrimary]) {
+            dictData[item.codePrimary] = {
               name: item.namePrimary,
               code: item.codePrimary,
               children: []
             };
           }
-          dataDict[item.codePrimary].children.push({
+          dictData[item.codePrimary].children.push({
             name: item.nameSecond,
             code: item.codeSecond
           });
         });
-      this.dataDict = Object.values(dataDict);
+      this.dictData = Object.values(dictData);
     },
     dimValidate() {
       this.$refs.modalFormComp.validateField([

+ 1 - 1
src/modules/analysis/components/baseConfig/ProficiencyEdit.vue

@@ -26,7 +26,7 @@
           ></el-input-number>
           <span v-if="ind !== modalForm.length - 1">≤</span>
           <span>个人得分率</span>
-          <span v-if="ind !== 0"></span>
+          <span v-if="ind !== 0"></span>
           <el-input-number
             v-if="ind !== 0"
             v-model="item.endRate"