ystl_myq 2 месяцев назад
Родитель
Сommit
23219106a8

+ 31 - 27
src/components/import/index.vue

@@ -22,7 +22,6 @@ onMounted(() => {
   // assessmentType
   Object.assign(query.value, route.query);
   assessmentType.value = Number(query.value.assessmentType);
-  console.log("111", query.value);
 });
 const uploadFile = () => {};
 const tableHeaders = ref<any>([]);
@@ -43,6 +42,7 @@ const handleUploadChange = async (file: File) => {
   if (data.code == 200) {
     uploadShow.value = false; // 隐藏上传区域,显示数据表
     tableData.value = data.data;
+    ElMessage.success("导入成功");
     // reader.onload = e => {
     //   const data = new Uint8Array(e.target?.result as ArrayBuffer);
     //   const workbook = XLSX.read(data, { type: "array" }); // 读取 Excel 文件
@@ -233,17 +233,21 @@ const backupUrl3 =
           >
             <el-table-column fixed label="工号" prop="hospitalCode" />
             <el-table-column label="人员" prop="realName" />
-            <el-table-column label="考核模板" prop="tpName" />
-            <el-table-column label="指标名称" prop="quotaName" />
-            <el-table-column label="完成值" prop="finalValue" />
-            <el-table-column label="得分" prop="score" />
-            <el-table-column label="目标值" prop="score" />
-            <el-table-column label="上期完成值" prop="score" />
-            <el-table-column label="上上期完成值" prop="score" />
-            <el-table-column label="增幅" prop="score" />
-            <el-table-column label="降幅" prop="score" />
-            <el-table-column label="门槛值" prop="score" />
-            <el-table-column label="挑战值" prop="score" />
+            <el-table-column label="考核模板" prop="tpName" width="120" />
+            <el-table-column label="指标名称" prop="quotaName" width="120" />
+            <el-table-column label="完成值" prop="finalValue" width="120" />
+            <el-table-column label="得分" prop="score" width="120" />
+            <el-table-column label="目标值" prop="targetValue" width="120" />
+            <el-table-column label="上期完成值" prop="upperValue" width="120" />
+            <el-table-column
+              label="上上期完成值"
+              prop="agupperValue"
+              width="120"
+            />
+            <el-table-column label="增幅" prop="addValue" width="120" />
+            <el-table-column label="降幅" prop="decValue" width="120" />
+            <el-table-column label="门槛值" prop="startValue" width="120" />
+            <el-table-column label="挑战值" prop="challengeValue" width="120" />
           </el-table>
           <el-table
             v-if="query.assessmentType == 1"
@@ -258,13 +262,13 @@ const backupUrl3 =
             <el-table-column label="指标名称" prop="quotaName" />
             <el-table-column label="完成值" prop="finalValue" />
             <el-table-column label="得分" prop="score" />
-            <el-table-column label="目标值" prop="score" />
-            <el-table-column label="上期完成值" prop="score" />
-            <el-table-column label="上上期完成值" prop="score" />
-            <el-table-column label="增幅" prop="score" />
-            <el-table-column label="降幅" prop="score" />
-            <el-table-column label="门槛值" prop="score" />
-            <el-table-column label="挑战值" prop="score" />
+            <el-table-column label="目标值" prop="targetValue" />
+            <el-table-column label="上期完成值" prop="upperValue" />
+            <el-table-column label="上上期完成值" prop="agupperValue" />
+            <el-table-column label="增幅" prop="addValue" />
+            <el-table-column label="降幅" prop="decValue" />
+            <el-table-column label="门槛值" prop="startValue" />
+            <el-table-column label="挑战值" prop="challengeValue" />
           </el-table>
           <el-table
             v-if="query.assessmentType == 2"
@@ -277,15 +281,15 @@ const backupUrl3 =
             <el-table-column label="用户组编号" prop="hospitalCode" />
             <el-table-column label="考核模板" prop="tpName" />
             <el-table-column label="指标名称" prop="quotaName" />
-            <el-table-column label="完成值" prop="finalValue" />
+            <el-table-column label="完成值" prop="finalValue" width="120" />
             <el-table-column label="得分" prop="score" />
-            <el-table-column label="目标值" prop="score" />
-            <el-table-column label="上期完成值" prop="score" />
-            <el-table-column label="上上期完成值" prop="score" />
-            <el-table-column label="增幅" prop="score" />
-            <el-table-column label="降幅" prop="score" />
-            <el-table-column label="门槛值" prop="score" />
-            <el-table-column label="挑战值" prop="score" />
+            <el-table-column label="目标值" prop="targetValue" />
+            <el-table-column label="上期完成值" prop="upperValue" />
+            <el-table-column label="上上期完成值" prop="agupperValue" />
+            <el-table-column label="增幅" prop="addValue" />
+            <el-table-column label="降幅" prop="decValue" />
+            <el-table-column label="门槛值" prop="startValue" />
+            <el-table-column label="挑战值" prop="challengeValue" />
           </el-table>
         </div>
         <div class="float-right">

+ 495 - 27
src/views/evaluate/children/change/mould/manageObject.vue

@@ -12,7 +12,8 @@ import {
   updateAssessmentQuotaDetails,
   alterFinishValue,
   automaticCollection,
-  setTableHeader
+  setTableHeader,
+  getAssessmentDetails
 } from "@/api/assessment";
 import { getTemplateInfoList } from "@/api/templateInfo";
 import { useRouter } from "vue-router";
@@ -116,7 +117,7 @@ const convertDepartmentDataRecursive = data => {
   });
 };
 const dpetTree = ref([]);
-onMounted(() => {
+onMounted(async () => {
   Object.assign(messageData.value, $props.message);
   console.log("传递的值", $props.message);
   switch (messageData.value.assessmentType) {
@@ -137,9 +138,9 @@ onMounted(() => {
   initParams.objParams.assessmentId = $props.message.id;
   initParams.indexParams.assessmentId = $props.message.id;
   state.tableType = $props.message.assessmentType;
-  getAssessmentQuotaDetailsApi();
-  getTemplateInfoListApi();
-  getAssessmentObjectDetailsApi();
+  await getAssessmentQuotaDetailsApi();
+  await getTemplateInfoListApi();
+  await getAssessmentObjectDetailsApi();
 });
 const treeDeptList = ref([]);
 const assessmentTypeApi = async value => {
@@ -179,6 +180,7 @@ const getAssessmentQuotaDetailsApi = async () => {
     initParams.Indexlist = res.data.records;
     initParams.total1 = res.data.totalRow;
     alterFinishValueApi();
+    getAssessmentDetailsApi(); // 获取考核指标详情表头信息
   }
 };
 // 考核模板
@@ -453,9 +455,10 @@ const updateAssessmentQuotaDetailsApi = async row => {
     assessmentId: null
   });
   if (code === 200) {
-    getAssessmentQuotaDetailsApi();
     ElMessage.success("修改成功");
+    getAssessmentQuotaDetailsApi();
   } else {
+    getAssessmentQuotaDetailsApi();
     // 这里code不等于200调用了保存信息无法探寻到
     // ElMessage.error(msg);
   }
@@ -465,12 +468,21 @@ const editConfig = ref({
   trigger: "click",
   mode: "cell",
   showStatus: true,
-  beforeEditMethod({ row }) {
-    console.log("编辑123212132", row);
-    if (row.valueInput == 4 || row.valueInput == "4") {
-      return false;
-    } else {
+  beforeEditMethod({ row, column }) {
+    console.log("编辑123212132", column.title);
+    // 完成值 挑战值 门槛值 增幅 降幅 上期完成值 上上期完成值 得分
+    if (
+      column.title == "目标值" ||
+      column.title == "挑战值" ||
+      column.title == "门槛值"
+    ) {
       return true;
+    } else {
+      if (row.valueInput == 4 || row.valueInput == "4") {
+        return false;
+      } else {
+        return true;
+      }
     }
   }
 });
@@ -484,6 +496,11 @@ const editVxe = reactive({
   assessmentModelId: null,
   id: null,
   dimId: null,
+  addValue: null,
+  decValue: null,
+  challengeValue: null,
+  upperValue: null,
+  agupperValue: null,
   assessmentId: null
 });
 // 编辑前面
@@ -499,6 +516,11 @@ const hangdleOpenClick = row => {
     score: null,
     assessmentObjectId: null,
     assessmentModelId: null,
+    addValue: null,
+    decValue: null,
+    challengeValue: null,
+    upperValue: null,
+    agupperValue: null,
     id: null,
     dimId: null,
     assessmentId: null
@@ -510,6 +532,7 @@ const editClosedEvent = row => {
   // { row, column, newValue, oldValue }
   const $table = tableVxeRef.value;
   if ($table) {
+    console.log(1433223, row.row);
     editVxe.relationId = row.row?.relationId;
     editVxe.assessmentModelId = row.row?.assessmentModelId;
     editVxe.assessmentObjectId = row.row?.assessmentObjectId;
@@ -523,8 +546,15 @@ const editClosedEvent = row => {
         // 判断是否id相同
         if (editVxe.score != row.row?.score) {
           // if (row.row?.id != editVxe.id) {
-          editVxe.score = row.row?.score;
+          editVxe.score = convertToNumberIfPercentage(row.row?.score);
           editVxe.finalValue = null;
+          editVxe.challengeValue = null;
+          editVxe.startValue = null;
+          editVxe.addValue = null;
+          editVxe.decValue = null;
+          editVxe.upperValue = null;
+          editVxe.targetValue = null;
+          editVxe.agupperValue = null;
           updateAssessmentQuotaDetailsApi(editVxe);
           // }
         }
@@ -534,13 +564,142 @@ const editClosedEvent = row => {
       if (row.row?.finalValue) {
         // if (row.row?.id != editVxe.id) {
         if (editVxe.finalValue != row.row?.finalValue) {
-          editVxe.finalValue = row.row?.finalValue;
+          editVxe.finalValue = convertToNumberIfPercentage(row.row?.finalValue);
+          editVxe.score = null;
+          editVxe.challengeValue = null;
+          editVxe.startValue = null;
+          editVxe.addValue = null;
+          editVxe.decValue = null;
+          editVxe.upperValue = null;
+          editVxe.targetValue = null;
+          editVxe.agupperValue = null;
+          updateAssessmentQuotaDetailsApi(editVxe);
+        }
+        // }
+      }
+    }
+    if (row.column.title == "挑战值") {
+      if (row.row?.challengeValue) {
+        // if (row.row?.id != editVxe.id) {
+        if (editVxe.challengeValue != row.row?.challengeValue) {
+          editVxe.challengeValue = convertToNumberIfPercentage(
+            row.row?.challengeValue
+          );
+          editVxe.score = null;
+          editVxe.finalValue = null;
+          editVxe.startValue = null;
+          editVxe.addValue = null;
+          editVxe.decValue = null;
+          editVxe.upperValue = null;
+          editVxe.targetValue = null;
+          editVxe.agupperValue = null;
+          updateAssessmentQuotaDetailsApi(editVxe);
+        }
+        // }
+      }
+    }
+    if (row.column.title == "门槛值") {
+      if (row.row?.startValue) {
+        // if (row.row?.id != editVxe.id) {
+        if (editVxe.startValue != row.row?.startValue) {
+          editVxe.startValue = convertToNumberIfPercentage(row.row?.startValue);
           editVxe.score = null;
+          editVxe.finalValue = null;
+          editVxe.challengeValue = null;
+          editVxe.addValue = null;
+          editVxe.decValue = null;
+          editVxe.upperValue = null;
+          editVxe.targetValue = null;
+          editVxe.agupperValue = null;
           updateAssessmentQuotaDetailsApi(editVxe);
         }
         // }
       }
     }
+    if (row.column.title == "增幅") {
+      if (row.row?.addValue) {
+        if (editVxe.addValue != row.row?.addValue) {
+          editVxe.addValue = convertToNumberIfPercentage(row.row?.addValue);
+          editVxe.startValue = null;
+          editVxe.score = null;
+          editVxe.finalValue = null;
+          editVxe.challengeValue = null;
+          editVxe.decValue = null;
+          editVxe.upperValue = null;
+          editVxe.targetValue = null;
+          editVxe.agupperValue = null;
+          updateAssessmentQuotaDetailsApi(editVxe);
+        }
+      }
+    }
+    if (row.column.title == "降幅") {
+      if (row.row?.decValue) {
+        if (editVxe.decValue != row.row?.decValue) {
+          editVxe.decValue = convertToNumberIfPercentage(row.row?.decValue);
+          editVxe.startValue = null;
+          editVxe.score = null;
+          editVxe.finalValue = null;
+          editVxe.challengeValue = null;
+          editVxe.addValue = null;
+          editVxe.upperValue = null;
+          editVxe.agupperValue = null;
+          editVxe.targetValue = null;
+          updateAssessmentQuotaDetailsApi(editVxe);
+        }
+      }
+    }
+    if (row.column.title == "上期完成值") {
+      if (row.row?.upperValue) {
+        if (editVxe.upperValue != row.row?.upperValue) {
+          editVxe.upperValue = convertToNumberIfPercentage(row.row?.upperValue);
+          editVxe.startValue = null;
+          editVxe.score = null;
+          editVxe.finalValue = null;
+          editVxe.challengeValue = null;
+          editVxe.addValue = null;
+          editVxe.decValue = null;
+          editVxe.agupperValue = null;
+          editVxe.targetValue = null;
+          updateAssessmentQuotaDetailsApi(editVxe);
+        }
+      }
+    }
+    if (row.column.title == "上上期完成值") {
+      if (row.row?.agupperValue) {
+        if (editVxe.agupperValue != row.row?.agupperValue) {
+          editVxe.agupperValue = convertToNumberIfPercentage(
+            row.row?.agupperValue
+          );
+          editVxe.startValue = null;
+          editVxe.score = null;
+          editVxe.finalValue = null;
+          editVxe.challengeValue = null;
+          editVxe.addValue = null;
+          editVxe.decValue = null;
+          editVxe.upperValue = null;
+          editVxe.targetValue = null;
+          updateAssessmentQuotaDetailsApi(editVxe);
+        }
+      }
+    }
+    if (row.column.title == "目标值") {
+      if (row.row?.targetValue) {
+        if (editVxe.targetValue != row.row?.targetValue) {
+          editVxe.targetValue = convertToNumberIfPercentage(
+            row.row?.targetValue
+          );
+          editVxe.startValue = null;
+          editVxe.agupperValue = null;
+          editVxe.score = null;
+          editVxe.finalValue = null;
+          editVxe.challengeValue = null;
+          editVxe.addValue = null;
+          editVxe.decValue = null;
+          editVxe.upperValue = null;
+          updateAssessmentQuotaDetailsApi(editVxe);
+        }
+      }
+    }
   }
 };
 
@@ -610,6 +769,15 @@ const assessmentHeader = reactive({
   showUpperValue: 0,
   showAgupperValue: 0
 });
+const showAssessmentHeader = reactive({
+  showTargetValue: 1,
+  showChallengeValue: 0,
+  showStartValue: 0,
+  showAddValue: 0,
+  showDecValue: 0,
+  showUpperValue: 0,
+  showAgupperValue: 0
+});
 // 开关状态
 // 目标值
 const showTargetValueSwitch = computed({
@@ -672,11 +840,216 @@ const setTableHeaderApi = async () => {
   const { code, msg } = await setTableHeader(assessmentHeader);
   if (code === 200) {
     getAssessmentQuotaDetailsApi();
+    let aa = JSON.parse(JSON.stringify(assessmentHeader));
+    Object.assign(showAssessmentHeader, aa);
     ElMessage.success("表头设置成功");
   } else {
     ElMessage.error(msg);
   }
 };
+watch(assessmentHeader, (newVal, oldVal) => {
+  console.log(newVal, oldVal);
+});
+const getAssessmentDetailsApi = async () => {
+  const { code, data } = await getAssessmentDetails({
+    id: messageData.value.id
+  });
+  if (code == 200) {
+    assessmentHeader.showTargetValue = data.showTargetValue;
+    assessmentHeader.showChallengeValue = data.showChallengeValue;
+    assessmentHeader.showStartValue = data.showStartValue;
+    assessmentHeader.showAddValue = data.showAddValue;
+    assessmentHeader.showDecValue = data.showDecValue;
+    assessmentHeader.showUpperValue = data.showUpperValue;
+    assessmentHeader.showAgupperValue = data.showAgupperValue;
+    let aa = JSON.parse(JSON.stringify(assessmentHeader));
+    Object.assign(showAssessmentHeader, aa);
+  }
+};
+// 判断是否为百分数
+function convertToNumberIfPercentage(value) {
+  // 判断是否为字符串,并且是否包含百分号
+  if (typeof value === "string" && value.trim().endsWith("%")) {
+    // 去掉百分号并将剩余的部分转换为数字
+    const numberValue = parseFloat(value.slice(0, -1));
+
+    // 如果转换后的值是有效的数字,返回数字形式
+    if (!isNaN(numberValue)) {
+      return numberValue / 100; // 转换为小数
+    } else {
+      return value; // 如果无法转换为有效数字,返回原值
+    }
+  }
+  // 如果不是百分数,直接返回原值
+  return value;
+}
+// 数据校验
+const validRules = ref({
+  finalValue: [
+    {
+      validator: ({ cellValue }) => {
+        const numberPattern = /^[0-9]+(\.[0-9]+)?$/; // 匹配数字或小数
+        const decimalPattern = /^\d+(\.\d+)?$/; // 匹配小数
+        const percentagePattern = /^([0-9]{1,2}|100)(\.[0-9]{1,2})?%$/; // 匹配百分数
+        if (
+          numberPattern.test(cellValue) ||
+          decimalPattern.test(cellValue) ||
+          percentagePattern.test(cellValue)
+        ) {
+          return; // 校验通过
+        } else {
+          cellValue = "";
+          return new Error("格式错误,请输入一个有效的数字、小数或百分数"); // 校验不通过
+        }
+      }
+    }
+  ],
+  targetValue: [
+    {
+      validator: ({ cellValue }) => {
+        const numberPattern = /^[0-9]+(\.[0-9]+)?$/; // 匹配数字或小数
+        const decimalPattern = /^\d+(\.\d+)?$/; // 匹配小数
+        const percentagePattern = /^([0-9]{1,2}|100)(\.[0-9]{1,2})?%$/; // 匹配百分数
+        if (
+          numberPattern.test(cellValue) ||
+          decimalPattern.test(cellValue) ||
+          percentagePattern.test(cellValue)
+        ) {
+          return; // 校验通过
+        } else {
+          cellValue = "";
+          return new Error("格式错误,请输入一个有效的数字、小数或百分数"); // 校验不通过
+        }
+      }
+    }
+  ],
+  challengeValue: [
+    {
+      validator: ({ cellValue }) => {
+        const numberPattern = /^[0-9]+(\.[0-9]+)?$/; // 匹配数字或小数
+        const decimalPattern = /^\d+(\.\d+)?$/; // 匹配小数
+        const percentagePattern = /^([0-9]{1,2}|100)(\.[0-9]{1,2})?%$/; // 匹配百分数
+        if (
+          numberPattern.test(cellValue) ||
+          decimalPattern.test(cellValue) ||
+          percentagePattern.test(cellValue)
+        ) {
+          return; // 校验通过
+        } else {
+          return new Error("格式错误,请输入一个有效的数字、小数或百分数"); // 校验不通过
+        }
+      }
+    }
+  ],
+  startValue: [
+    {
+      validator: ({ cellValue }) => {
+        const numberPattern = /^[0-9]+(\.[0-9]+)?$/; // 匹配数字或小数
+        const decimalPattern = /^\d+(\.\d+)?$/; // 匹配小数
+        const percentagePattern = /^([0-9]{1,2}|100)(\.[0-9]{1,2})?%$/; // 匹配百分数
+        if (
+          numberPattern.test(cellValue) ||
+          decimalPattern.test(cellValue) ||
+          percentagePattern.test(cellValue)
+        ) {
+          return; // 校验通过
+        } else {
+          return new Error("格式错误,请输入一个有效的数字、小数或百分数"); // 校验不通过
+        }
+      }
+    }
+  ],
+  addValue: [
+    {
+      validator: ({ cellValue }) => {
+        const numberPattern = /^[0-9]+(\.[0-9]+)?$/; // 匹配数字或小数
+        const decimalPattern = /^\d+(\.\d+)?$/; // 匹配小数
+        const percentagePattern = /^([0-9]{1,2}|100)(\.[0-9]{1,2})?%$/; // 匹配百分数
+        if (
+          numberPattern.test(cellValue) ||
+          decimalPattern.test(cellValue) ||
+          percentagePattern.test(cellValue)
+        ) {
+          return; // 校验通过
+        } else {
+          return new Error("格式错误,请输入一个有效的数字、小数或百分数"); // 校验不通过
+        }
+      }
+    }
+  ],
+  decValue: [
+    {
+      validator: ({ cellValue }) => {
+        const numberPattern = /^[0-9]+(\.[0-9]+)?$/; // 匹配数字或小数
+        const decimalPattern = /^\d+(\.\d+)?$/; // 匹配小数
+        const percentagePattern = /^([0-9]{1,2}|100)(\.[0-9]{1,2})?%$/; // 匹配百分数
+        if (
+          numberPattern.test(cellValue) ||
+          decimalPattern.test(cellValue) ||
+          percentagePattern.test(cellValue)
+        ) {
+          return; // 校验通过
+        } else {
+          return new Error("格式错误,请输入一个有效的数字、小数或百分数"); // 校验不通过
+        }
+      }
+    }
+  ],
+  upperValue: [
+    {
+      validator: ({ cellValue }) => {
+        const numberPattern = /^[0-9]+(\.[0-9]+)?$/; // 匹配数字或小数
+        const decimalPattern = /^\d+(\.\d+)?$/; // 匹配小数
+        const percentagePattern = /^([0-9]{1,2}|100)(\.[0-9]{1,2})?%$/; // 匹配百分数
+        if (
+          numberPattern.test(cellValue) ||
+          decimalPattern.test(cellValue) ||
+          percentagePattern.test(cellValue)
+        ) {
+          return; // 校验通过
+        } else {
+          return new Error("格式错误,请输入一个有效的数字、小数或百分数"); // 校验不通过
+        }
+      }
+    }
+  ],
+  agupperValue: [
+    {
+      validator: ({ cellValue }) => {
+        const numberPattern = /^[0-9]+(\.[0-9]+)?$/; // 匹配数字或小数
+        const decimalPattern = /^\d+(\.\d+)?$/; // 匹配小数
+        const percentagePattern = /^([0-9]{1,2}|100)(\.[0-9]{1,2})?%$/; // 匹配百分数
+        if (
+          numberPattern.test(cellValue) ||
+          decimalPattern.test(cellValue) ||
+          percentagePattern.test(cellValue)
+        ) {
+          return; // 校验通过
+        } else {
+          return new Error("格式错误,请输入一个有效的数字、小数或百分数"); // 校验不通过
+        }
+      }
+    }
+  ],
+  score: [
+    {
+      validator: ({ cellValue }) => {
+        const numberPattern = /^[0-9]+(\.[0-9]+)?$/; // 匹配数字或小数
+        const decimalPattern = /^\d+(\.\d+)?$/; // 匹配小数
+        const percentagePattern = /^([0-9]{1,2}|100)(\.[0-9]{1,2})?%$/; // 匹配百分数
+        if (
+          numberPattern.test(cellValue) ||
+          decimalPattern.test(cellValue) ||
+          percentagePattern.test(cellValue)
+        ) {
+          return;
+        } else {
+          return new Error("格式错误,请输入一个有效的数字、小数或百分数"); // 校验不通过
+        }
+      }
+    }
+  ]
+});
 </script>
 
 <template>
@@ -823,7 +1196,22 @@ const setTableHeaderApi = async () => {
       <el-tab-pane label="考核指标" name="second">
         <div class="w-full flex items-center justify-between">
           <div class="w-1/2 flex items-center justify-between">
-            <el-text class="w-1/5">考核模板</el-text>
+            <!-- <el-text class="w-1/5">考核模板</el-text> -->
+            <el-select
+              v-model="initParams.indexParams.modelName"
+              placeholder="请选择考核模板"
+              filterable
+              clearable
+              style="width: 400px"
+              @change="getAssessmentQuotaDetailsApi"
+            >
+              <el-option
+                v-for="itemTmp in initParams.tmpList"
+                :key="itemTmp.id"
+                :label="itemTmp.assessmentModelName"
+                :value="itemTmp.assessmentModelName"
+              />
+            </el-select>
             <el-input
               v-model="initParams.indexParams.userName"
               class="ml-1"
@@ -860,6 +1248,7 @@ const setTableHeaderApi = async () => {
           show-overflow
           keep-source
           :edit-config="editConfig"
+          :edit-rules="validRules"
           :data="initParams.Indexlist"
           @edit-closed="editClosedEvent"
           @selection-change="changeSelection"
@@ -925,37 +1314,116 @@ const setTableHeaderApi = async () => {
           <vxe-column field="name" fixed title="指标名称" width="180" />
           <vxe-column field="scoreRule" fixed title="评价标准" width="180" />
           <vxe-column field="source" fixed title="数据来源" width="180" />
-          <vxe-column field="targetValue" fixed title="目标值" width="180" />
-          <!-- <vxe-column
+          <vxe-column
+            v-if="showAssessmentHeader.showTargetValue"
+            field="targetValue"
+            fixed
+            title="目标值"
+            :edit-render="{
+              name: 'input'
+            }"
+            width="180"
+          />
+          <vxe-column
             field="finalValue"
             fixed
             title="完成值"
-            :edit-render="{ name: 'input' }"
+            :edit-render="{
+              name: 'input'
+            }"
             width="180"
           >
             <template #default="{ row }">
               <div @click="hangdleOpenClick(row)">
-                {{ row.finalValue }}
+                {{ convertToNumberIfPercentage(row.finalValue) }}
               </div>
             </template>
           </vxe-column>
           <vxe-column
-            field="score"
+            v-if="showAssessmentHeader.showChallengeValue"
+            field="challengeValue"
             fixed
-            title="得分"
-            :edit-render="{ name: 'input' }"
+            title="挑战值"
+            :edit-render="{
+              name: 'input'
+            }"
             width="180"
           >
             <template #default="{ row }">
               <div @click="hangdleOpenClick(row)">
-                {{ row.score }}
+                {{ row.challengeValue }}
               </div>
             </template>
-          </vxe-column> -->
+          </vxe-column>
           <vxe-column
-            field="finalValue"
+            v-if="showAssessmentHeader.showStartValue"
+            field="startValue"
             fixed
-            title="完成值"
+            title="门槛值"
+            :edit-render="{
+              name: 'input'
+            }"
+            width="180"
+          >
+            <template #default="{ row }">
+              <div @click="hangdleOpenClick(row)">
+                {{ row.startValue }}
+              </div>
+            </template>
+          </vxe-column>
+          <vxe-column
+            v-if="showAssessmentHeader.showAddValue"
+            field="addValue"
+            fixed
+            title="增幅"
+            :edit-render="{
+              name: 'input'
+            }"
+            width="180"
+          >
+            <template #default="{ row }">
+              <div @click="hangdleOpenClick(row)">
+                {{ row.addValue }}
+              </div>
+            </template>
+          </vxe-column>
+          <vxe-column
+            v-if="showAssessmentHeader.showDecValue"
+            field="decValue"
+            fixed
+            title="降幅"
+            :edit-render="{
+              name: 'input'
+            }"
+            width="180"
+          >
+            <template #default="{ row }">
+              <div @click="hangdleOpenClick(row)">
+                {{ row.decValue }}
+              </div>
+            </template>
+          </vxe-column>
+          <vxe-column
+            v-if="showAssessmentHeader.showUpperValue"
+            field="upperValue"
+            fixed
+            title="上期完成值"
+            :edit-render="{
+              name: 'input'
+            }"
+            width="180"
+          >
+            <template #default="{ row }">
+              <div @click="hangdleOpenClick(row)">
+                {{ row.upperValue }}
+              </div>
+            </template>
+          </vxe-column>
+          <vxe-column
+            v-if="showAssessmentHeader.showAgupperValue"
+            field="agupperValue"
+            fixed
+            title="上上期完成值"
             :edit-render="{
               name: 'input'
             }"
@@ -963,7 +1431,7 @@ const setTableHeaderApi = async () => {
           >
             <template #default="{ row }">
               <div @click="hangdleOpenClick(row)">
-                {{ row.finalValue }}
+                {{ row.agupperValue }}
               </div>
             </template>
           </vxe-column>
@@ -988,7 +1456,7 @@ const setTableHeaderApi = async () => {
               {{ dayjs(row.updateTime).format("YYYY-MM-DD HH:mm:ss") }}
             </template>
           </vxe-column>
-          <vxe-column field="" title="操作1" fixed="right" width="180">
+          <vxe-column field="" title="操作" fixed="right" width="180">
             <template #header>
               操作
               <!-- 在表头操作后面添加图标 -->

+ 35 - 23
src/views/evaluate/children/change/mould/message.vue

@@ -250,14 +250,16 @@ const getAssessmentDetailsApi = async () => {
     // 用于存储每个 `assessmentModelId` 的组
     let modelIdMap = {};
     // 遍历数据,将数据按 `assessmentModelId` 分组
-    form.assessmentObjectList.forEach(item => {
-      const modelId = item.assessmentModelId;
-      // 如果该 modelId 已存在,则将数据加入对应的组
-      if (!modelIdMap[modelId]) {
-        modelIdMap[modelId] = [];
-      }
-      modelIdMap[modelId].push(item);
-    });
+    if (form.assessmentObjectList && form.assessmentObjectList.length > 0) {
+      form.assessmentObjectList.forEach(item => {
+        const modelId = item.assessmentModelId;
+        // 如果该 modelId 已存在,则将数据加入对应的组
+        if (!modelIdMap[modelId]) {
+          modelIdMap[modelId] = [];
+        }
+        modelIdMap[modelId].push(item);
+      });
+    }
     // 将分组后的数据转为二维数组
     for (let modelId in modelIdMap) {
       groupedData.push(modelIdMap[modelId]);
@@ -265,16 +267,18 @@ const getAssessmentDetailsApi = async () => {
     // 打印结果
     console.log(groupedData);
     assessmentObjectList.value = groupedData;
-    form.assessmentObjectList.map(item => {
-      // assessmentObjectList.value.push({
-      //   assessmentObjectId: item.assessmentObjectId,
-      //   assessmentObjectName: item.assessmentObjectName
-      // });
-      assessmentModelList.value.push({
-        assessmentModelId: item.assessmentModelId,
-        assessmentModelName: item.assessmentModelName
+    if (form.assessmentModelList && form.assessmentModelList.length > 0) {
+      form.assessmentObjectList.map(item => {
+        // assessmentObjectList.value.push({
+        //   assessmentObjectId: item.assessmentObjectId,
+        //   assessmentObjectName: item.assessmentObjectName
+        // });
+        assessmentModelList.value.push({
+          assessmentModelId: item.assessmentModelId,
+          assessmentModelName: item.assessmentModelName
+        });
       });
-    });
+    }
     // assessmentObjectList.value = Array.from(
     //   new Map(
     //     assessmentObjectList.value.map(item => [item.assessmentObjectId, item])
@@ -285,9 +289,11 @@ const getAssessmentDetailsApi = async () => {
         assessmentModelList.value.map(item => [item.assessmentModelId, item])
       ).values()
     );
-    form.assessmentObjectList.map(item => {
-      optionValue.value.push(item.assessmentObjectId);
-    });
+    if (form.assessmentObjectList) {
+      form.assessmentObjectList.map(item => {
+        optionValue.value.push(item.assessmentObjectId);
+      });
+    }
 
     if (form.assessmentType === 1) {
       postListTreeWithUserApi();
@@ -528,9 +534,15 @@ onMounted(() => {
   font-size: 12px;
 
   div {
-    overflow: hidden; /* 隐藏超出的部分 */
-    text-overflow: ellipsis; /* 显示省略号 */
-    white-space: nowrap; /* 防止文本换行 */
+    overflow: hidden;
+
+    /* 隐藏超出的部分 */
+    text-overflow: ellipsis;
+
+    /* 显示省略号 */
+    white-space: nowrap;
+
+    /* 防止文本换行 */
     div {
       font-weight: 500;
       border: 1px solid gray;