Explorar o código

fix: 表单验证

ystl_myq hai 7 meses
pai
achega
9fd75e12d2

+ 1 - 1
src/api/templateInfo.ts

@@ -58,7 +58,7 @@ export const getIndexInfo = id => {
     `/templateIndicatorRelation/getInfo/${id}`
   );
 };
-//  根据模板指标关联表主键获取详细信息
+//  根据主键更新模板指标关联表
 export const postUpdate = data => {
   return http.request<templateInfoList>(
     "post",

+ 1 - 1
src/components/ReIcon/src/offlineIcon.ts

@@ -16,4 +16,4 @@ addIcon("ri:information-line", InformationLine);
 // import menuIndex from "@/assets/svg/layers (1).svg?component";
 // import menuIndex from "@/assets/svg/layers (2).svg?component";
 // import menuIndex from "@/assets/svg/layers (3).svg?component";
-// addIcon("menu-index", menuIndex);
+// addIcon("ep:menu-index", menuIndex);

+ 14 - 12
src/views/background/framework/proson/components/addPerson.vue

@@ -14,19 +14,12 @@ const form = reactive({
   jobTitle: "",
   phone: ""
 });
+const formRef = ref();
 const deptTree = ref([]);
 const handleClose = () => {
+  formRef.value.clearValidate(); // 清除验证错误
+  formRef.value.resetFields(); // 重置表单字段
   dialogVisibleAdd.value = !dialogVisibleAdd.value;
-  // ElMessageBox.confirm("确认关闭弹窗吗?")
-  //   .then(() => {
-  //     ElMessage({
-  //       message: "已关闭",
-  //       type: "success"
-  //     });
-  //   })
-  //   .catch(() => {
-  //     // catch error
-  //   });
 };
 const postDeptUserAddApi = async () => {
   const { code, data, msg } = await postDeptUserAdd(form);
@@ -55,7 +48,11 @@ const postListTreeApi = async () => {
 // 添加部门保存
 const saveDepartment = () => {
   console.log("保存");
-  postDeptUserAddApi();
+  formRef.value.validate(valid => {
+    if (valid) {
+      postDeptUserAddApi();
+    }
+  });
 };
 const open = (row, postOrganizationUserPageApi) => {
   Object.assign(form, {
@@ -95,7 +92,12 @@ defineExpose({
 <template>
   <div>
     <el-dialog v-model="dialogVisibleAdd" title="添加成员" width="500">
-      <el-form :model="form" label-width="auto" style="max-width: 600px">
+      <el-form
+        ref="formRef"
+        :model="form"
+        label-width="auto"
+        style="max-width: 600px"
+      >
         <el-form-item
           prop="name"
           label="姓名"

+ 19 - 3
src/views/background/framework/proson/components/changeRole.vue

@@ -4,6 +4,7 @@ import { ElMessageBox, ElMessage } from "element-plus";
 const dialogVisibleAdd = ref(false);
 import { postPageRole } from "@/api/roles";
 import { postAssignmentUser } from "@/api/userSetting";
+const formRef = ref();
 const form = reactive({
   name: "",
   region: "",
@@ -38,12 +39,18 @@ const rolesList = reactive({
   rolesName: ""
 });
 const postAddUserGroupApi = async () => {
-  const { code } = await postAssignmentUser(rolesList.assignmentParams);
+  const { code, msg } = await postAssignmentUser(rolesList.assignmentParams);
   if (code === 200) {
+    dialogVisibleAdd.value = false;
     ElMessage({
       message: "添加成功",
       type: "success"
     });
+  } else {
+    ElMessage({
+      message: msg,
+      type: "error"
+    });
   }
 };
 
@@ -62,7 +69,11 @@ const changeRoles = () => {
 };
 // 添加部门保存
 const saveDepartment = () => {
-  dialogVisibleAdd.value = false;
+  // formRef.value.validate(valid => {
+  //   if (valid) {
+
+  //   }
+  // });
   postAddUserGroupApi();
 };
 const open = (item, user) => {
@@ -90,7 +101,12 @@ defineExpose({
       width="500"
       :before-close="handleClose"
     >
-      <el-form :model="form" label-width="auto" style="max-width: 600px">
+      <el-form
+        ref="formRef"
+        :model="form"
+        label-width="auto"
+        style="max-width: 600px"
+      >
         <el-form-item label="配置角色">
           <el-select
             v-model="form.region"

+ 26 - 15
src/views/background/framework/proson/components/newDepartment.vue

@@ -5,6 +5,7 @@ import { postAddDept, postListTree } from "@/api/department";
 import { postUserList } from "@/api/userSetting";
 import { encryption } from "@/utils/encrypt";
 const dialogVisibleAdd = ref(false);
+const formRef = ref();
 const emit = defineEmits(["handleClick"]);
 const form = reactive({
   deptName: "",
@@ -51,23 +52,28 @@ const postUserListApi = async () => {
 };
 postUserListApi();
 const handleClose = () => {
-  ElMessageBox.confirm("确认关闭弹窗吗?")
-    .then(() => {
-      dialogVisibleAdd.value = !dialogVisibleAdd.value;
-      form.deptName = "";
-      form.deptCode = "";
-      form.leader = "";
-      form.parentCode = "";
-    })
-    .catch(() => {
-      // catch error
-    });
+  formRef.value.clearValidate(); // 清除验证错误
+  formRef.value.resetFields(); // 重置表单字段
+  dialogVisibleAdd.value = !dialogVisibleAdd.value;
+  form.deptName = "";
+  form.deptCode = "";
+  form.leader = "";
+  form.parentCode = "";
+  // ElMessageBox.confirm("确认关闭弹窗吗?")
+  //   .then(() => {})
+  //   .catch(() => {
+  //     // catch error
+  //   });
 };
 // 添加部门保存
 const saveDepartment = () => {
-  dialogVisibleAdd.value = false;
-  postAddDeptApi();
-  emit("handleClick");
+  formRef.value.validate(valid => {
+    if (valid) {
+      dialogVisibleAdd.value = false;
+      postAddDeptApi();
+      emit("handleClick");
+    }
+  });
 };
 const open = node => {
   dialogVisibleAdd.value = true;
@@ -95,7 +101,12 @@ defineExpose({
       width="500"
       :before-close="handleClose"
     >
-      <el-form :model="form" label-width="auto" style="max-width: 600px">
+      <el-form
+        ref="formRef"
+        :model="form"
+        label-width="auto"
+        style="max-width: 600px"
+      >
         <el-form-item
           prop="deptName"
           label="部门名称"

+ 15 - 3
src/views/background/framework/proson/components/personDetailsDrawer.vue

@@ -5,6 +5,7 @@ import { postUpdateUserInfo } from "@/api/userSetting";
 import type { DrawerProps, FormItemProps, FormProps } from "element-plus";
 // const itemLabelPosition = ref<FormItemProps["labelPosition"]>("");
 const drawer = ref(false);
+const formRef = ref();
 const disabledValue = ref(true);
 const postOrganizationUserPage = ref();
 const direction = ref<DrawerProps["direction"]>("rtl");
@@ -28,16 +29,26 @@ const handleClose = (done: () => void) => {
   //   type: "warning"
   // }).then(() => {
   // });
+  formRef.value.clearValidate(); // 清除验证错误
+  formRef.value.resetFields(); // 重置表单字段
   drawer.value = false;
   disabledValue.value = true;
   editShow.value = true;
 };
 function cancelClick() {
-  disabledValue.value = true;
-  editShow.value = true;
+  formRef.value.validate(valid => {
+    if (valid) {
+      disabledValue.value = true;
+      editShow.value = true;
+    }
+  });
 }
 function confirmClick() {
-  postUpdateUserInfoApi();
+  formRef.value.validate(valid => {
+    if (valid) {
+      postUpdateUserInfoApi();
+    }
+  });
 }
 const postUpdateUserInfoApi = async () => {
   const { code, msg } = await postUpdateUserInfo(formLabelAlign);
@@ -89,6 +100,7 @@ const timer = ref("");
       <template #default>
         <div>
           <el-form
+            ref="formRef"
             label-position="top"
             label-width="auto"
             :model="formLabelAlign"

+ 19 - 6
src/views/background/framework/proson/components/prosonEditDrawer.vue

@@ -6,6 +6,7 @@ import { postUpdateDept } from "@/api/department";
 // const itemLabelPosition = ref<FormItemProps["labelPosition"]>("");
 const drawer = ref(false);
 const disabledValue = ref(true);
+const formRef = ref();
 const direction = ref<DrawerProps["direction"]>("rtl");
 const formLabelAlign = reactive({
   deptName: "",
@@ -18,14 +19,20 @@ const handleClose = (done: () => void) => {
   //   type: "warning"
   // }).then(() => {
   // });
+  formRef.value.clearValidate(); // 清除验证错误
+  formRef.value.resetFields(); // 重置表单字段
   drawer.value = false;
   disabledValue.value = true;
   editShow.value = true;
 };
 function cancelClick() {
   // drawer.value = false;
-  disabledValue.value = true;
-  editShow.value = true;
+  formRef.value.validate(valid => {
+    if (valid) {
+      disabledValue.value = true;
+      editShow.value = true;
+    }
+  });
 }
 const postUpdateDeptApi = async () => {
   const res = await postUpdateDept(formLabelAlign);
@@ -37,10 +44,14 @@ const postUpdateDeptApi = async () => {
   }
 };
 function confirmClick() {
-  postUpdateDeptApi();
-  disabledValue.value = true;
-  editShow.value = true;
-  drawer.value = !drawer.value;
+  formRef.value.validate(valid => {
+    if (valid) {
+      postUpdateDeptApi();
+      disabledValue.value = true;
+      editShow.value = true;
+      drawer.value = !drawer.value;
+    }
+  });
 }
 const open = row => {
   // formLabelAlign = row.data;
@@ -77,6 +88,7 @@ const timer = ref("");
       <template #default>
         <div>
           <el-form
+            ref="formRef"
             label-position="top"
             label-width="auto"
             :model="formLabelAlign"
@@ -84,6 +96,7 @@ const timer = ref("");
             <el-form-item
               label="部门名称"
               label-position="top"
+              prop="deptName"
               :rules="[
                 {
                   required: true,

+ 1 - 0
src/views/background/framework/roles/components/addPerson.vue

@@ -5,6 +5,7 @@ import { ElMessageBox, ElMessage } from "element-plus";
 import { postAssignmentUser } from "@/api/userSetting";
 import { treeDept, postListTreeWithUserApi } from "@/api/department";
 const dialogVisibleAdd = ref(false);
+
 const $emit = defineEmits(["handeClick"]);
 const form = reactive({
   sourceCodes: [],

+ 15 - 3
src/views/background/framework/roles/components/addRole.vue

@@ -5,6 +5,7 @@ import { postAddRole, postUpdateRole } from "@/api/roles";
 const emit = defineEmits(["handleClick"]);
 const dialogVisibleAdd = ref(false);
 const dialogTitle = ref("新增");
+const formRef = ref();
 const form = reactive({
   roleName: "",
   roleCode: ""
@@ -23,6 +24,8 @@ const postAddRoleApi = async () => {
   }
 };
 const handleClose = () => {
+  formRef.value.clearValidate(); // 清除验证错误
+  formRef.value.resetFields(); // 重置表单字段
   dialogVisibleAdd.value = !dialogVisibleAdd.value;
   // ElMessageBox.confirm("确认关闭弹窗吗?")
   //   .then(() => {
@@ -37,8 +40,12 @@ const handleClose = () => {
 };
 // 添加部门保存
 const saveDepartment = () => {
-  dialogVisibleAdd.value = false;
-  postAddRoleApi();
+  formRef.value.validate(valid => {
+    if (valid) {
+      dialogVisibleAdd.value = false;
+      postAddRoleApi();
+    }
+  });
 };
 const open = item => {
   console.log(item);
@@ -66,7 +73,12 @@ defineExpose({
       width="500"
       :before-close="handleClose"
     >
-      <el-form :model="form" label-width="auto" style="max-width: 600px">
+      <el-form
+        ref="formRef"
+        :model="form"
+        label-width="auto"
+        style="max-width: 600px"
+      >
         <el-form-item
           prop="roleName"
           label="角色"

+ 13 - 4
src/views/background/framework/users/components/addUsers.vue

@@ -5,6 +5,7 @@ import { postAddUserGroup } from "@/api/userGroup";
 import { postAssignmentUser } from "@/api/userSetting";
 import { postPageRole } from "@/api/roles";
 const dialogVisibleAdd = ref(false);
+const formRef = ref();
 const emit = defineEmits(["handleClick"]);
 const dialogTitle = ref("");
 const dialogForm = ref(false);
@@ -24,25 +25,29 @@ const rolesList = reactive({
   }
 });
 const postAddUserGroupApi = async () => {
-  const { code } =
+  const { code, msg } =
     dialogTitle.value == "新建用户组"
       ? await postAddUserGroup(form)
       : await postAssignmentUser(rolesList.assignmentParams);
   if (code === 200 && dialogTitle.value == "新建用户组") {
     emit("handleClick");
+    dialogVisibleAdd.value = false;
     ElMessage({
       message: "添加成功",
       type: "success"
     });
-  } else {
+  } else if (code == 200) {
+    dialogVisibleAdd.value = false;
     ElMessage({
       message: "添加成功",
       type: "success"
     });
+  } else {
+    ElMessage.error(msg);
   }
 };
 const handleClose = () => {
-  dialogVisibleAdd.value = !dialogVisibleAdd.value;
+  dialogVisibleAdd.value = false;
   // ElMessageBox.confirm("确认关闭弹窗吗?")
   //   .then(() => {
   //     ElMessage({
@@ -72,7 +77,10 @@ const changeRoles = () => {
 
 // 添加部门保存
 const saveDepartment = () => {
-  dialogVisibleAdd.value = false;
+  // formRef.value.validate(valid => {
+  //   if (valid) {
+  //   }
+  // });
   postAddUserGroupApi();
 };
 const open = item => {
@@ -106,6 +114,7 @@ defineExpose({
     >
       <el-form
         v-if="dialogForm"
+        ref="formRef"
         :model="form"
         label-width="auto"
         style="max-width: 600px"

+ 18 - 6
src/views/background/framework/users/components/editPerson.vue

@@ -4,6 +4,7 @@ import { ElMessageBox, ElMessage } from "element-plus";
 import type { DrawerProps, FormItemProps, FormProps } from "element-plus";
 import { postUpdateGroupByCode } from "@/api/userGroup";
 const drawer = ref(false);
+const formRef = ref();
 const emit = defineEmits(["handleClick"]);
 const disabledValue = ref(true);
 const direction = ref<DrawerProps["direction"]>("rtl");
@@ -28,20 +29,30 @@ const handleClose = (done: () => void) => {
   //   type: "warning"
   // }).then(() => {
   // });
+  formRef.value.clearValidate(); // 清除验证错误
+  formRef.value.resetFields(); // 重置表单字段
   drawer.value = false;
   disabledValue.value = true;
   editShow.value = true;
 };
 function cancelClick() {
+  formRef.value.validate(valid => {
+    if (valid) {
+      disabledValue.value = true;
+      editShow.value = true;
+    }
+  });
   // drawer.value = false;
-  disabledValue.value = true;
-  editShow.value = true;
 }
 function confirmClick() {
-  disabledValue.value = true;
-  editShow.value = true;
-  drawer.value = !drawer.value;
-  postUpdateGroupByCodeApi();
+  formRef.value.validate(valid => {
+    if (valid) {
+      disabledValue.value = true;
+      editShow.value = true;
+      drawer.value = !drawer.value;
+      postUpdateGroupByCodeApi();
+    }
+  });
 }
 const open = row => {
   if (row) {
@@ -79,6 +90,7 @@ const timer = ref("");
       <template #default>
         <div>
           <el-form
+            ref="formRef"
             label-position="top"
             label-width="auto"
             :model="formLabelAlign"

+ 8 - 11
src/views/evaluate/children/change/components/editMould.vue

@@ -54,19 +54,12 @@ function confirmClick() {
     }
   });
 }
-const open = (row: any, title: string) => {
+const open = (row: any, title: string, order: number) => {
   dalongTitle.value = title;
   if (title == "新建") {
     Object.assign(formLabelAlign, {
       id: row.id ? row.id : $route.query.id,
-      list: [
-        {
-          id: "",
-          dimName: "",
-          dimWeight: "",
-          mode: ""
-        }
-      ],
+      list: [],
       dimName: "",
       dimWeight: 0,
       mode: 1,
@@ -77,11 +70,15 @@ const open = (row: any, title: string) => {
       showFinalValue: 0,
       showChallengeValue: 0,
       showStartValue: 0,
-      remark: ""
+      remark: "",
+      order: order
     });
   }
   if (title == "编辑") {
-    Object.assign(formLabelAlign, row);
+    Object.assign(formLabelAlign, {
+      ...row,
+      order
+    });
   }
   drawer.value = true;
 };

+ 180 - 96
src/views/evaluate/children/change/components/newAdd.vue

@@ -10,7 +10,7 @@ import two2 from "@/assets/svg/1-1.svg";
 import { useRouter, useRoute } from "vue-router";
 import { Edit } from "@element-plus/icons-vue";
 import { ElMessageBox, ElMessage } from "element-plus";
-import { postAddRelationList } from "@/api/dimension";
+import { postAddRelationList, postUpdateDept } from "@/api/dimension";
 import { useAppStoreHook } from "@/store/modules/app";
 import {
   postAddDimension,
@@ -18,9 +18,20 @@ import {
   getQuotaByDimensionId
 } from "@/api/dimension";
 import editMould from "./editMould.vue";
+import {
+  VueDraggable,
+  useDraggable,
+  type DraggableEvent,
+  type UseDraggableReturn
+} from "vue-draggable-plus";
 import { delQuota } from "@/api/indexDefine";
 import settingIndexDrawer from "./settingIndexDrawer.vue";
-import { postAddTemplate, getInfo, getListBy } from "@/api/templateInfo";
+import {
+  postAddTemplate,
+  getInfo,
+  getListBy,
+  postUpdate
+} from "@/api/templateInfo";
 import importIndex from "./importIndex.vue";
 const router = useRouter();
 const route = useRoute();
@@ -30,6 +41,8 @@ const editDrawer = ref();
 const editDrawerShow = ref(false);
 const titleShow = ref(false);
 
+// 序号
+const order = ref();
 // 指标设置
 const settingIndexDrawerRef = ref();
 const settingIndexDrawerShow = ref(false);
@@ -142,7 +155,8 @@ const addDimension = reactive({
 });
 // 创建考核维度
 const createAdd = () => {
-  editDrawer.value.open(tepNameForm, "新建");
+  order.value = eaxmCard.value.length + 1;
+  editDrawer.value.open(tepNameForm, "新建", order.value);
 };
 const backChange = () => {
   useAppStoreHook().toggleSideBar(true, "打开");
@@ -195,8 +209,8 @@ const deleteRow = row => {
     });
 };
 // 编辑
-const editPen = item => {
-  editDrawer.value.open(item, "编辑");
+const editPen = (item, order) => {
+  editDrawer.value.open(item, "编辑", order);
 };
 // 删除考核维度
 const deletePen = index => {
@@ -254,6 +268,52 @@ const importIndexOne = async row => {
     ElMessage.error(res.msg);
   }
 };
+// 拖拽
+const elDraggable = ref();
+const elDraggableTableData = ref();
+// 更新
+const postUpdateDeptApi = async (id, dimName, order) => {
+  await postUpdateDept({
+    id,
+    dimName,
+    order,
+    tpId: tepNameForm.id
+  });
+};
+const onEnd = (e: DraggableEvent) => {
+  eaxmCard.value.map((item, index) => {
+    postUpdateDeptApi(item.id, item.dimName, index + 1);
+  });
+};
+const onStart = (e: DraggableEvent) => {};
+
+const onUpdate = (e: DraggableEvent) => {};
+// 子表格拖拽
+const postUpdateApi = async (dimId, indId, order) => {
+  await postUpdate({
+    tpId: tepNameForm.id,
+    dimId,
+    indId,
+    order
+  });
+};
+// const { start } = useDraggable(elDraggableTableData, eaxmCard.tableData, {
+//   animation: 150,
+//   ghostClass: "ghost",
+//   onStart() {
+//     // console.log("start");
+//   },
+//   onUpdate(item, index) {
+//     console.log("update", item);
+//     console.log("index", index);
+//   }
+// });
+// const onEndTbl = (item: any, id: any) => {
+//   console.log(item, id);
+//   item.map((item, index) => {
+//     postUpdateApi(id, item.id, index + 1);
+//   });
+// };
 </script>
 
 <template>
@@ -336,99 +396,123 @@ const importIndexOne = async row => {
             >创建考核维度</el-button
           >
         </div>
-        <el-card v-for="(item, index) in eaxmCard" :key="index" class="mb-3">
-          <!-- {{ getQuotaByDimensionIdApi(item.id) }} -->
-          <template #header>
-            <div class="card-header">
-              <span>{{ item.dimName }}({{ item.dimWeight }}%)</span>
-              <div class="float-right mr-7">
-                <el-icon class="mr-3" @click="editPen(item)"
-                  ><EditPen
-                /></el-icon>
-                <el-icon @click="deletePen(item.id)"
-                  ><Delete class="text-red-500"
-                /></el-icon>
+        <VueDraggable
+          ref="elDraggable"
+          v-model="eaxmCard"
+          :animation="150"
+          ghostClass="ghost"
+          class="flex flex-col gap-2 p-4 w-300px h-300px m-auto bg-gray-500/5 rounded"
+          @start="onStart"
+          @update="onUpdate"
+          @end="onEnd"
+        >
+          <el-card v-for="(item, index) in eaxmCard" :key="index" class="mb-3">
+            <template #header>
+              <div class="card-header">
+                <span>{{ item.dimName }}({{ item.dimWeight }}%)</span>
+                <div class="float-right mr-7">
+                  <el-icon class="mr-3" @click="editPen(item, index + 1)"
+                    ><EditPen
+                  /></el-icon>
+                  <el-icon @click="deletePen(item.id)"
+                    ><Delete class="text-red-500"
+                  /></el-icon>
+                </div>
               </div>
-            </div>
-          </template>
-          <el-table :data="item.tableData" style="width: 100%" max-height="250">
-            <el-table-column fixed prop="name" label="指标名称" />
-            <el-table-column
-              v-if="item.showIndicRemark"
-              prop="remark"
-              label="指标说明"
-              width="120"
-            />
-            <el-table-column
-              v-if="item.showScoreRule"
-              prop="scoreRule"
-              label="评价标准"
-              width="300"
-            />
-            <el-table-column
-              v-if="item.showDatasource"
-              prop="stshowDatasourceate"
-              label="数据来源"
-              width="120"
-            />
-            <el-table-column
-              v-if="item.mode"
-              prop="weight"
-              label="权重"
-              width="120"
-            />
-            <el-table-column
-              v-if="item.showTargetValue"
-              prop="targetValue"
-              label="目标值"
-              width="120"
-            />
-            <el-table-column
-              v-if="item.showFinalValue"
-              prop="finalValue"
-              label="完成值"
-              width="120"
-            />
-            <el-table-column
-              v-if="item.showChallengeValue"
-              prop="challengeValue"
-              label="挑战值"
-              width="120"
-            />
-            <el-table-column
-              v-if="item.showStartValue"
-              prop="startValue"
-              label="门槛值"
-              width="120"
-            />
-            <el-table-column fixed="right" label="操作">
-              <template #default="{ row }">
-                <el-icon class="mr-3" @click="settingIndex(row)"
-                  ><Setting
-                /></el-icon>
-                <el-icon @click="deleteRow(row)">
-                  <Delete class="text-red-500" />
-                </el-icon>
-              </template>
-            </el-table-column>
-          </el-table>
-          <template #footer>
-            <el-button
-              type="primary"
-              link
-              class="mr-4"
-              @click="importIndexOne(item)"
-            >
-              添加指标
-            </el-button>
-            <el-button type="primary" link @click="importIndexDialog(item)">
-              导入指标
-            </el-button>
-            <span class="float-right num"
-              >指标权重合计:{{ amountTo(item.tableData) }}</span
+            </template>
+
+            <el-table
+              :data="item.tableData"
+              style="width: 100%"
+              max-height="250"
             >
-          </template>
-        </el-card>
+              <el-table-column
+                ref="elDraggableTableData"
+                fixed
+                prop="name"
+                label="指标名称"
+              >
+                <template #default="{ row }">
+                  <div>{{ row.name }}</div>
+                </template>
+              </el-table-column>
+              <el-table-column
+                v-if="item.showIndicRemark"
+                prop="remark"
+                label="指标说明"
+                width="120"
+              />
+              <el-table-column
+                v-if="item.showScoreRule"
+                prop="scoreRule"
+                label="评价标准"
+                width="300"
+              />
+              <el-table-column
+                v-if="item.showDatasource"
+                prop="stshowDatasourceate"
+                label="数据来源"
+                width="120"
+              />
+              <el-table-column
+                v-if="item.mode"
+                prop="weight"
+                label="权重"
+                width="120"
+              />
+              <el-table-column
+                v-if="item.showTargetValue"
+                prop="targetValue"
+                label="目标值"
+                width="120"
+              />
+              <el-table-column
+                v-if="item.showFinalValue"
+                prop="finalValue"
+                label="完成值"
+                width="120"
+              />
+              <el-table-column
+                v-if="item.showChallengeValue"
+                prop="challengeValue"
+                label="挑战值"
+                width="120"
+              />
+              <el-table-column
+                v-if="item.showStartValue"
+                prop="startValue"
+                label="门槛值"
+                width="120"
+              />
+              <el-table-column fixed="right" label="操作">
+                <template #default="{ row }">
+                  <el-icon class="mr-3" @click="settingIndex(row)"
+                    ><Setting
+                  /></el-icon>
+                  <el-icon @click="deleteRow(row)">
+                    <Delete class="text-red-500" />
+                  </el-icon>
+                </template>
+              </el-table-column>
+            </el-table>
+            <template #footer>
+              <el-button
+                type="primary"
+                link
+                class="mr-4"
+                @click="importIndexOne(item)"
+              >
+                添加指标
+              </el-button>
+              <el-button type="primary" link @click="importIndexDialog(item)">
+                导入指标
+              </el-button>
+              <span class="float-right num"
+                >指标权重合计:{{ amountTo(item.tableData) }}</span
+              >
+            </template>
+          </el-card>
+        </VueDraggable>
       </div>
     </div>
   </div>

+ 14 - 2
src/views/indexDefine/children/components/editDrawer.vue

@@ -11,6 +11,7 @@ import {
 } from "@/api/select";
 import { getStateData, getStateType } from "@/config/tag";
 const emit = defineEmits(["closeEditDialog"]);
+const formRef = ref();
 const drawer = ref(false);
 const disabledShow = ref<any>(true);
 onMounted(() => {
@@ -41,13 +42,19 @@ const handleClose = (done: () => void) => {
     ElMessageBox.confirm("配置项未保存,确认关闭", {
       type: "warning"
     }).then(() => {
+      formRef.value.clearValidate(); // 清除验证错误
+      formRef.value.resetFields(); // 重置表单字段
       disabledShow.value = true;
       drawer.value = false;
     });
   }
 };
 function cancelClick() {
-  disabledShow.value = true;
+  formRef.value.validate(valid => {
+    if (valid) {
+      disabledShow.value = true;
+    }
+  });
 }
 // 确认
 const postUpdateDeptApi = async () => {
@@ -65,7 +72,11 @@ const postUpdateDeptApi = async () => {
   }
 };
 function confirmClick() {
-  postUpdateDeptApi();
+  formRef.value.validate(valid => {
+    if (valid) {
+      postUpdateDeptApi();
+    }
+  });
 }
 const open = row => {
   Object.assign(formLabelAlign, row);
@@ -93,6 +104,7 @@ defineExpose({
       <template #default>
         <div>
           <el-form
+            ref="formRef"
             label-position="top"
             label-width="auto"
             :rules="rules"