浏览代码

feat: 考核模板-组织架构

ystl_myq 7 月之前
父节点
当前提交
01d1c06230

+ 5 - 1
src/api/department.ts

@@ -1,5 +1,5 @@
 import { http } from "@/utils/http";
-
+// 部门
 type addDept = {
   code: number;
   msg: string;
@@ -23,3 +23,7 @@ export const postListTree = () => {
 export const postUpdateDept = data => {
   return http.request<addDept>("post", "/sysDept/updateDept", { data });
 };
+// 部门下新建人员
+export const postDeptUserAdd = data => {
+  return http.request<addDept>("post", "/sysDept/deptUserAdd", { data });
+};

+ 17 - 1
src/api/dimension.ts

@@ -22,9 +22,25 @@ export const getDimensionInfo = (id: number) => {
 };
 // 删除
 export const getDimensionRemove = (id: number) => {
-  return http.request<dimension>("get", `/dimensionInfo/remove/id=${id}`);
+  return http.request<dimension>("get", `/dimensionInfo/remove/${id}`);
 };
 // 更新编辑
 export const postUpdateDept = data => {
   return http.request<dimension>("post", "/dimensionInfo/update", { data });
 };
+// 根据维度id获取指标信息
+export const getQuotaByDimensionId = params => {
+  return http.request<dimensionList>(
+    "get",
+    "/templateIndicatorRelation/getRelationBy",
+    { params }
+  );
+};
+//
+export const postAddRelationList = data => {
+  return http.request<dimensionList>(
+    "post",
+    "/templateIndicatorRelation/addRelation",
+    { data }
+  );
+};

+ 5 - 1
src/api/indexDefine.ts

@@ -8,7 +8,11 @@ type QuotaPage = {
 type QuotaPageList = {
   code: number;
   msg: string;
-  data: Array<any>;
+  data: recordsList;
+};
+type recordsList = {
+  totalRow: number;
+  records: Array<any>;
 };
 // 分页查询
 export const getQuotaPageList = params => {

+ 48 - 0
src/api/manage.ts

@@ -0,0 +1,48 @@
+import { http } from "@/utils/http";
+// 指标列表
+type templateInfo = {
+  code: number;
+  msg: string;
+  data: boolean;
+};
+type templateInfoList = {
+  code: number;
+  msg: string;
+  data: {
+    records: Array<recordsList>;
+    pageNumber: number;
+    pageSize: number;
+    totalPage: number;
+    totalRow: number;
+  };
+};
+type recordsList = {
+  name: string;
+  id: string;
+  cycle: string;
+  cycleValue: string;
+  assessmentType: string;
+  assessmentStatus: string;
+  isDelete: string;
+  extendField: string;
+};
+// 分页查询
+export const getAssessmentPageList = params => {
+  return http.request<templateInfoList>(
+    "get",
+    "/assessment/getAssessmentPageList",
+    {
+      params
+    }
+  );
+};
+// 删除考核信息
+export const getDelAssessment = id => {
+  return http.request<templateInfo>("get", `/assessment/delAssessment/${id}`);
+};
+// 复制考核信息
+export const postCopyAssessment = data => {
+  return http.request<templateInfo>("post", `/assessment/copyAssessment`, {
+    data
+  });
+};

+ 6 - 1
src/api/roles.ts

@@ -8,9 +8,14 @@ type pageRole = {
 type pageRoleList = {
   code: number;
   msg: string;
-  data: Array<any>;
+  data: recordsList;
 };
 
+type recordsList = {
+  records: Array<any>;
+  totalPage: number;
+  totalRow: number;
+};
 export const postPageRole = data => {
   return http.request<pageRoleList>("post", "/sysRole/pageRole", { data });
 };

+ 9 - 6
src/api/templateInfo.ts

@@ -41,10 +41,13 @@ export const getCopyTemplate = params => {
 export const getDeleteTemplate = id => {
   return http.request<templateInfo>("get", `/templateInfo/remove/${id}`);
 };
-// 获取指标
-export const getInfoRelation = id => {
-  return http.request<templateInfo>(
-    "get",
-    `/templateIndicatorRelation/getInfo/id=${id}`
-  );
+// 根据模板id获取维度
+export const getListBy = params => {
+  return http.request<templateInfoList>("get", `/dimensionInfo/getListBy`, {
+    params
+  });
+};
+//  根据维度id获取指标
+export const getInfo = id => {
+  return http.request<templateInfoList>("get", `/dimensionInfo/getInfo/${id}`);
 };

+ 5 - 2
src/api/userGroup.ts

@@ -8,9 +8,12 @@ type addDept = {
 type addDeptList = {
   code: number;
   msg: string;
-  data: Array<any>;
+  data: recordsList;
+};
+type recordsList = {
+  records: Array<any>;
+  totalPage: number;
 };
-
 // 新增用户组
 export const postAddUserGroup = data => {
   return http.request<addDept>("post", "/userGroup/addUserGroup", { data });

+ 29 - 1
src/api/userSetting.ts

@@ -1,4 +1,5 @@
 import { http } from "@/utils/http";
+import { ElMessage } from "element-plus";
 // 用户设置
 type addDept = {
   code: number;
@@ -8,12 +9,22 @@ type addDept = {
 type userList = {
   code: number;
   msg: string;
+  data: recordsList;
+};
+type userPageList = {
+  code: number;
+  msg: string;
   data: Array<any>;
 };
 
+type recordsList = {
+  records: Array<any>;
+  totalPage: number;
+  totalRow: number;
+};
 // 查询用户列表
 export const postUserList = data => {
-  return http.request<userList>("post", "/user/userList", { data });
+  return http.request<userPageList>("post", "/user/userList", { data });
 };
 // 查看不同组织架构下用户
 export const postOrganizationUserPage = data => {
@@ -23,3 +34,20 @@ export const postOrganizationUserPage = data => {
 export const postAssignmentUser = data => {
   return http.request<addDept>("post", "/user/assignmentUser", { data });
 };
+// 删除用户
+export const getDeleteUser = params => {
+  return http.request<addDept>("get", "/user/deleteUser", { params });
+};
+export const getDeleteUserApi = async (userCode, pageList) => {
+  const { msg, code } = await getDeleteUser({ userCode });
+  if (code === 200) {
+    ElMessage.success("删除成功");
+    pageList();
+  } else {
+    ElMessage.error(msg);
+  }
+};
+// 更新当前用户信息
+export const postUpdateUserInfo = data => {
+  return http.request<addDept>("post", "/user/updateUserInfo", { data });
+};

+ 1 - 1
src/components/ELPicker/index.vue

@@ -54,7 +54,7 @@ const quarterValue = ref(false);
 const open = value => {
   console.log(value);
   timeValue.value = "";
-  if (value === "quarter") {
+  if (value === "季度") {
     quarterValue.value = true;
   } else {
     quarterValue.value = false;

+ 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("IF-menu-index", menuIndex);
+// addIcon("menu-index", menuIndex);

+ 63 - 20
src/components/UserPageTable/index.vue

@@ -2,20 +2,29 @@
 defineOptions({
   name: ""
 });
-import { ref, reactive } from "vue";
+import { ref, reactive, onMounted } from "vue";
 import { ElMessageBox, ElMessage } from "element-plus";
 import { Search } from "@element-plus/icons-vue";
 import { postOrganizationUserPage } from "@/api/userSetting";
+import { useRoute } from "vue-router";
+const $route: any = useRoute();
+console.log("111", $route.name);
 const tableData = reactive({
   list: [],
   params: {
     pageNumber: 1,
     pageSize: 10,
     organizationCode: "",
-    organizationType: ""
+    organizationType: "",
+    realName: ""
   },
   total: 0
 });
+// onMounted(() => {
+//   $route.name == "users"
+//     ? (tableData.params.organizationType = "group")
+//     : (tableData.params.organizationType = "dept");
+// });
 const handleNodeClick = (data: any, userType: string) => {
   if (userType == "group") {
     tableData.params.organizationCode = data.groupCode;
@@ -25,14 +34,16 @@ const handleNodeClick = (data: any, userType: string) => {
     tableData.params.organizationType = userType;
   }
   postOrganizationUserPageApi();
-  setTimeout(() => {}, 0);
+  // setTimeout(() => {}, 0);
 };
 const postOrganizationUserPageApi = async () => {
-  const { code, data } = await postOrganizationUserPage(tableData.params);
+  console.log("改变1111", tableData.params);
+  const { code, data, msg } = await postOrganizationUserPage(tableData.params);
   if (code == 200) {
-    console.log("res", data);
     tableData.list = data.records;
-    tableData.total = data.totalPage;
+    tableData.total = data.totalRow;
+  } else {
+    ElMessage.error(msg);
   }
 };
 const handleSizeChange = val => {
@@ -40,11 +51,12 @@ const handleSizeChange = val => {
   postOrganizationUserPageApi();
 };
 const handleCurrentChange = val => {
-  tableData.params.pageSize = val;
+  tableData.params.pageNumber = val;
   postOrganizationUserPageApi();
 };
 defineExpose({
-  handleNodeClick
+  handleNodeClick,
+  postOrganizationUserPageApi
 });
 </script>
 
@@ -52,10 +64,13 @@ defineExpose({
   <div>
     <div class="flex justify-between mb-3">
       <el-input
+        v-model="tableData.params.realName"
         :prefix-icon="Search"
         placeholder="搜索"
         class="mb-2"
         style="max-width: 300px"
+        clearable
+        @change="postOrganizationUserPageApi"
       />
       <slot name="add-button" />
       <!-- <el-button type="primary" @click="AddPerson">添加成员</el-button> -->
@@ -67,7 +82,11 @@ defineExpose({
     >
       <el-table-column prop="realName" label="姓名" />
       <el-table-column prop="hospitalCode" label="工号" />
-      <el-table-column prop="address" label="性别" />
+      <el-table-column
+        v-if="$route.name != 'users'"
+        prop="address"
+        label="性别"
+      />
       <el-table-column prop="address" label="年龄" />
       <el-table-column prop="jobTitle" label="职称" />
       <el-table-column prop="dept" label="部门" />
@@ -89,17 +108,41 @@ defineExpose({
         </template>
       </el-table-column>
     </el-table>
-    <div class="absolute right-0 mr-20 mt-3">
-      <el-pagination
-        v-model:current-page="tableData.params.pageNumber"
-        v-model:page-size="tableData.params.pageSize"
-        :page-sizes="[10, 15, 20, 30]"
-        size="small"
-        layout="total, sizes, prev, pager, next, jumper"
-        :total="tableData.total"
-        @size-change="handleSizeChange"
-        @current-change="handleCurrentChange"
-      />
+    <div>
+      <div class="float-left mt-3 total">共{{ tableData.total }}条数据</div>
+      <div class="absolute right-0 mr-20 mt-3">
+        <!-- <el-pagination
+          v-model:current-page="tableData.params.pageNumber"
+          v-model:page-size="tableData.params.pageSize"
+          :page-sizes="[10, 15, 20, 30]"
+          size="small"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="tableData.total"
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+        /> -->
+        <el-pagination
+          v-model:current-page="tableData.params.pageNumber"
+          v-model:page-size="tableData.params.pageSize"
+          background
+          layout="prev, pager, next"
+          :total="tableData.total"
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+        />
+      </div>
     </div>
   </div>
 </template>
+
+<style scoped>
+.total {
+  font-size: 14px;
+
+  /* font-family: PingFangSC-Regular; */
+  font-weight: 400;
+  line-height: 22px;
+  color: #0009;
+  letter-spacing: 0;
+}
+</style>

+ 7 - 0
src/config/tag.ts

@@ -14,6 +14,13 @@ export const getState = (index: number | string) => {
   };
   return stateDataMap[index] || "未定义状态";
 };
+export const assessmentStatus = (index: number | string) => {
+  const stateDataMap = {
+    0: `进行中`,
+    1: "已完成"
+  };
+  return stateDataMap[index] || "未定义状态";
+};
 export const getStateType = (index: number | string) => {
   switch (index) {
     case 0:

+ 3 - 2
src/router/modules/index.ts

@@ -1,11 +1,12 @@
 // 最简代码,也就是这些字段必须有
 import server from "@/assets/icon-png/menuList/server (1).svg";
-import menuIndex from "@/assets/svg/layers.svg?component";
+// import menuIndex from "@/assets/svg/layers.svg?component";
 export default {
   path: "/IndexDefine",
   meta: {
     title: "指标库",
-    icon: menuIndex,
+    // icon: menuIndex,
+    icon: "menu-index",
     rank: 1
   },
   component: () => import("@/views/indexDefine/children/define.vue"),

+ 91 - 42
src/views/background/framework/proson/components/addPerson.vue

@@ -1,17 +1,20 @@
 <script setup lang="ts">
-import { ref, reactive } from "vue";
+import { ref, reactive, nextTick } from "vue";
 import { ElMessageBox, ElMessage } from "element-plus";
+import { postDeptUserAdd, postListTree } from "@/api/department";
 const dialogVisibleAdd = ref(false);
+const treeSelectRef = ref(null);
+const postOrganizationUserPage = ref(null);
 const form = reactive({
-  name: "",
-  region: "",
-  date1: "",
-  date2: "",
-  delivery: false,
-  type: [],
-  resource: "",
-  desc: ""
+  realName: "",
+  hospitalCode: "",
+  deptName: "",
+  deptCode: "",
+  gender: "",
+  jobTitle: "",
+  phone: ""
 });
+const deptTree = ref([]);
 const handleClose = () => {
   ElMessageBox.confirm("确认关闭弹窗吗?")
     .then(() => {
@@ -25,16 +28,64 @@ const handleClose = () => {
       // catch error
     });
 };
+const postDeptUserAddApi = async () => {
+  const { code, data, msg } = await postDeptUserAdd(form);
+  if (code == 200) {
+    ElMessage({
+      message: "新建成功",
+      type: "success"
+    });
+    postOrganizationUserPage.value();
+    dialogVisibleAdd.value = false;
+  } else {
+    ElMessage({
+      message: msg,
+      type: "error"
+    });
+  }
+};
+// 部门树
+const postListTreeApi = async () => {
+  const { code, data } = await postListTree();
+  if (code == 200) {
+    console.log("data", data);
+    deptTree.value = data;
+  }
+};
 // 添加部门保存
 const saveDepartment = () => {
-  dialogVisibleAdd.value = false;
-  ElMessage({
-    message: "添加成功",
-    type: "success"
+  console.log("保存");
+  postDeptUserAddApi();
+};
+const open = (row, postOrganizationUserPageApi) => {
+  Object.assign(form, {
+    realName: "",
+    hospitalCode: "",
+    deptName: "",
+    deptCode: "",
+    gender: "",
+    jobTitle: "",
+    phone: ""
   });
+  if (row.deptCode) {
+    // console.log("11111", row);
+    form.deptCode = row.deptCode;
+    dialogVisibleAdd.value = true;
+    postOrganizationUserPage.value = postOrganizationUserPageApi;
+    postListTreeApi();
+  } else {
+    ElMessage.warning("请选择部门");
+  }
 };
-const open = () => {
-  dialogVisibleAdd.value = true;
+// 树选择框获取焦点时,展开到对应节点
+const openTreeFocus = async () => {
+  await nextTick(); // 确保组件渲染完成
+  if (form.deptCode && treeSelectRef.value) {
+    const node = treeSelectRef.value.getNode(form.deptCode); // 获取节点
+    if (node) {
+      treeSelectRef.value.setCurrentKey(form.deptCode); // 选中节点
+    }
+  }
 };
 defineExpose({
   open
@@ -43,12 +94,7 @@ defineExpose({
 
 <template>
   <div>
-    <el-dialog
-      v-model="dialogVisibleAdd"
-      title="添加成员"
-      width="500"
-      :before-close="handleClose"
-    >
+    <el-dialog v-model="dialogVisibleAdd" title="添加成员" width="500">
       <el-form :model="form" label-width="auto" style="max-width: 600px">
         <el-form-item
           prop="name"
@@ -61,43 +107,46 @@ defineExpose({
             }
           ]"
         >
-          <el-input v-model="form.name" />
+          <el-input v-model="form.realName" />
         </el-form-item>
         <el-form-item label="工号">
-          <el-input v-model="form.name" />
+          <el-input v-model="form.hospitalCode" />
         </el-form-item>
         <el-form-item label="部门">
-          <el-select
-            v-model="form.region"
-            placeholder="please select your zone"
-          >
-            <el-option label="Zone one" value="shanghai" />
-            <el-option label="Zone two" value="beijing" />
-          </el-select>
+          <el-tree-select
+            ref="treeSelectRef"
+            v-model="form.deptCode"
+            :data="deptTree"
+            :props="{
+              label: 'deptName',
+              value: 'deptCode',
+              children: 'childrenRes'
+            }"
+            filterable
+            check-strictly
+            :render-after-expand="false"
+            style="width: 240px"
+            node-key="deptCode"
+            @focus="openTreeFocus"
+          />
         </el-form-item>
         <el-form-item label="性别">
-          <el-select
-            v-model="form.region"
-            placeholder="please select your zone"
-          >
-            <el-option label="Zone one" value="shanghai" />
-            <el-option label="Zone two" value="beijing" />
+          <el-select v-model="form.gender" placeholder="请选择性别">
+            <el-option label="男" value="女" />
+            <el-option label="女" value="女" />
           </el-select>
         </el-form-item>
         <el-form-item label="年龄">
-          <el-input v-model="form.name" />
+          <el-input />
         </el-form-item>
         <el-form-item label="职称">
-          <el-select
-            v-model="form.region"
-            placeholder="please select your zone"
-          >
+          <el-select v-model="form.jobTitle" placeholder="请选择职称">
             <el-option label="Zone one" value="shanghai" />
             <el-option label="Zone two" value="beijing" />
           </el-select>
         </el-form-item>
         <el-form-item label="手机号">
-          <el-input v-model="form.name" />
+          <el-input v-model="form.phone" />
         </el-form-item>
       </el-form>
       <template #footer>

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

@@ -68,11 +68,10 @@ const saveDepartment = () => {
 const open = (item, user) => {
   dialogVisibleAdd.value = true;
   if (user == "用户") {
-    // console.log("item", item);
+    console.log("item", item);
     rolesList.assignmentParams.targetCodes = [];
-    rolesList.assignmentParams.targetCodes.push(item.data.userCode);
+    rolesList.assignmentParams.targetCodes.push(item.userCode);
   } else {
-    // console.log("item", item);
     rolesList.assignmentParams.targetCodes = [];
     rolesList.assignmentParams.targetCodes.push(item.data.deptCode);
   }

+ 30 - 12
src/views/background/framework/proson/components/personDetailsDrawer.vue

@@ -1,10 +1,12 @@
 <script setup lang="ts">
 import { ref, reactive } from "vue";
 import { ElMessageBox, ElMessage } from "element-plus";
+import { postUpdateUserInfo } from "@/api/userSetting";
 import type { DrawerProps, FormItemProps, FormProps } from "element-plus";
 // const itemLabelPosition = ref<FormItemProps["labelPosition"]>("");
 const drawer = ref(false);
 const disabledValue = ref(true);
+const postOrganizationUserPage = ref();
 const direction = ref<DrawerProps["direction"]>("rtl");
 const formLabelAlign = reactive({
   realName: "",
@@ -35,18 +37,30 @@ function cancelClick() {
   editShow.value = true;
 }
 function confirmClick() {
-  console.log(1111);
-  disabledValue.value = true;
-  editShow.value = true;
-  drawer.value = !drawer.value;
-  ElMessage({
-    message: "保存成功",
-    type: "success"
-  });
+  postUpdateUserInfoApi();
 }
-const open = row => {
+const postUpdateUserInfoApi = async () => {
+  const { code, msg } = await postUpdateUserInfo(formLabelAlign);
+  if (code === 200) {
+    ElMessage({
+      message: "更新成功",
+      type: "success"
+    });
+    disabledValue.value = true;
+    editShow.value = true;
+    drawer.value = !drawer.value;
+    postOrganizationUserPage.value();
+  } else {
+    ElMessage({
+      message: msg,
+      type: "error"
+    });
+  }
+};
+const open = (row, postOrganizationUserPageApi) => {
   drawer.value = true;
   console.log("111", row);
+  postOrganizationUserPage.value = postOrganizationUserPageApi;
   Object.assign(formLabelAlign, row);
   console.log("formLabelAlign", formLabelAlign);
 };
@@ -103,9 +117,13 @@ const timer = ref("");
             <el-form-item label="性别" label-position="top">
               <el-input :disabled="disabledValue" />
             </el-form-item>
-            <el-form-item label="年龄" label-position="top">
-              <el-input :disabled="disabledValue" />
-            </el-form-item>
+            <!-- <el-form-item label="年龄" label-position="top">
+              <el-date-picker
+                type="date"
+                placeholder="请选择出生年月"
+                :disabled="disabledValue"
+              />
+            </el-form-item> -->
             <el-form-item label="职称" label-position="top">
               <el-input
                 v-model="formLabelAlign.jobTitle"

+ 64 - 56
src/views/background/framework/proson/prosonDepartment.vue

@@ -12,8 +12,9 @@ import addPerson from "./components/addPerson.vue";
 import personDetailsDrawer from "./components/personDetailsDrawer.vue";
 import changeRole from "./components/changeRole.vue";
 import { postListTree, postDelDept } from "@/api/department";
-import { postOrganizationUserPage } from "@/api/userSetting";
+import { postOrganizationUserPage, getDeleteUserApi } from "@/api/userSetting";
 import UserPageTable from "@/components/UserPageTable/index.vue";
+import type Node from "element-plus/es/components/tree/src/model/node";
 // 添加部门
 const newDepartmentRef = ref(null);
 const newDepartmentShow = ref(false);
@@ -29,35 +30,17 @@ const personDetailsDrawerShow = ref(false);
 // 配置角色
 const changeRoleRef = ref(null);
 const changeRoleShow = ref(false);
+// 用户搜索
+const realName = ref("");
+const treeRef = ref();
 // table表格
 const UserTable = ref();
 const dataTree = ref([]);
+const deptList = ref({});
 const defaultProps = {
   children: "childrenRes",
   label: "deptName"
 };
-// const tableData = [
-//   {
-//     date: "2016-05-03",
-//     name: "Tom",
-//     address: "No. 189, Grove St, Los Angeles"
-//   },
-//   {
-//     date: "2016-05-02",
-//     name: "Tom",
-//     address: "No. 189, Grove St, Los Angeles"
-//   },
-//   {
-//     date: "2016-05-04",
-//     name: "Tom",
-//     address: "No. 189, Grove St, Los Angeles"
-//   },
-//   {
-//     date: "2016-05-01",
-//     name: "Tom",
-//     address: "No. 189, Grove St, Los Angeles"
-//   }
-// ];
 // 添加部门弹窗
 const addDepartment = () => {
   newDepartmentRef.value.open();
@@ -82,10 +65,10 @@ const deletePerson = row => {
     type: "warning"
   })
     .then(() => {
-      ElMessage({
-        message: "删除成功",
-        type: "success"
-      });
+      getDeleteUserApi(
+        row.userCode,
+        UserTable.value.postOrganizationUserPageApi
+      );
     })
     .catch(() => {
       // catch error
@@ -124,10 +107,19 @@ const deleteDepartment = node => {
 };
 // 添加成员弹窗
 const AddPerson = () => {
-  addPersonDrawerRef.value.open();
+  // postOrganizationUserPageApi
+  console.log("添加成员");
+  addPersonDrawerRef.value.open(
+    deptList.value,
+    UserTable.value.postOrganizationUserPageApi
+  );
 };
+// 编辑
 const personDetails = row => {
-  personDetailsDrawerRef.value.open(row);
+  personDetailsDrawerRef.value.open(
+    row,
+    UserTable.value.postOrganizationUserPageApi
+  );
   // console.log(row);
 };
 const ChangeRole = row => {
@@ -136,7 +128,6 @@ const ChangeRole = row => {
 // 部门配置角色
 const editRoles = row => {
   changeRoleRef.value.open(row);
-  // console.log(row);
 };
 // 人员表格
 const tableData = reactive({
@@ -149,7 +140,7 @@ const tableData = reactive({
   }
 });
 const handleNodeClick = data => {
-  // console.log("UserPageTable", UserTable);
+  Object.assign(deptList.value, data);
   UserTable.value.handleNodeClick(data, "dept");
   // tableData.params.organizationCode = data.deptCode;
   // postOrganizationUserPageApi();
@@ -195,8 +186,14 @@ const handleCurrentChange = val => {
     <changeRole ref="changeRoleRef" v-model="changeRoleShow" />
     <!-- 主体内容 -->
     <div class="box-left">
-      <el-input placeholder="搜索" class="mb-2" :prefix-icon="Search" />
+      <el-input
+        v-model="realName"
+        placeholder="搜索"
+        class="mb-2"
+        :prefix-icon="Search"
+      />
       <el-tree
+        ref="treeRef"
         class="m-2 mr-8"
         style="max-width: 600px"
         :data="dataTree"
@@ -204,33 +201,36 @@ const handleCurrentChange = val => {
         node-key="id"
         default-expand-all
         :expand-on-click-node="false"
+        highlight-current
         @node-click="handleNodeClick"
       >
         <template #default="{ node }">
-          <span>{{ node.label }}</span>
-          <el-dropdown trigger="click">
-            <span>
-              <el-icon><Operation /></el-icon>
-            </span>
-            <template #dropdown>
-              <el-dropdown-menu class="setting">
-                <el-dropdown-item @click="editDepartment(node)">
-                  编辑部门
-                </el-dropdown-item>
-                <el-dropdown-item @click="adddeptChild(node)">
-                  添加子部门
-                </el-dropdown-item>
-                <el-dropdown-item @click="editRoles(node)">
-                  配置角色
-                </el-dropdown-item>
-                <el-dropdown-item>
-                  <el-link type="danger" @click="deleteDepartment(node)"
-                    >删除</el-link
-                  >
-                </el-dropdown-item>
-              </el-dropdown-menu>
-            </template>
-          </el-dropdown>
+          <div class="flex-1 flex justify-between items-center">
+            <span>{{ node.label }}</span>
+            <el-dropdown trigger="click">
+              <span>
+                <el-icon><Operation /></el-icon>
+              </span>
+              <template #dropdown>
+                <el-dropdown-menu class="setting">
+                  <el-dropdown-item @click="editDepartment(node)">
+                    编辑部门
+                  </el-dropdown-item>
+                  <el-dropdown-item @click="adddeptChild(node)">
+                    添加子部门
+                  </el-dropdown-item>
+                  <el-dropdown-item @click="editRoles(node)">
+                    配置角色
+                  </el-dropdown-item>
+                  <el-dropdown-item>
+                    <el-link type="danger" @click="deleteDepartment(node)"
+                      >删除</el-link
+                    >
+                  </el-dropdown-item>
+                </el-dropdown-menu>
+              </template>
+            </el-dropdown>
+          </div>
         </template>
       </el-tree>
       <el-button class="w-full mt-4" type="primary" plain @click="addDepartment"
@@ -287,4 +287,12 @@ const handleCurrentChange = val => {
 //   line-height: 10px;
 //   border: 1px solid red;
 // }
+::v-deep(
+    .el-tree--highlight-current
+      .el-tree-node.is-current
+      > .el-tree-node__content
+  ) {
+  color: #0052d9;
+  background-color: #ecf2fe !important;
+}
 </style>

+ 40 - 34
src/views/background/framework/roles/rolePower.vue

@@ -8,43 +8,19 @@ import { ElMessageBox, ElMessage } from "element-plus";
 import { Search } from "@element-plus/icons-vue";
 import addRole from "./components/addRole.vue";
 import addPerson from "./components/addPerson.vue";
+import { getDeleteUserApi } from "@/api/userSetting";
 import { getMenuList, getMenuListCodeForRole } from "@/api/menu";
 import { postPageRole, postDelRole, postPageUserByRole } from "@/api/roles";
 import pngcaret from "@/assets/icon-png/caret-right-small.svg";
+import UserPageTable from "@/components/UserPageTable/index.vue";
+const UserTable = ref();
 // 新增角色
 const addRoleRef = ref();
 const addRoleShow = ref(false);
 // 新增角色组人员
 const addPersonRef = ref();
 const addPersonShow = ref(false);
-const tableData = ref([
-  {
-    date: "2016-05-03",
-    name: "Tom",
-    address: "No. 189",
-    show: false,
-    show1: true,
-    show2: false
-  },
-  {
-    date: "2016-05-02",
-    name: "Tom",
-    address: "No. 189",
-    show: true
-  },
-  {
-    date: "2016-05-04",
-    name: "Tom",
-    address: "No. 189",
-    show: false
-  },
-  {
-    date: "2016-05-01",
-    name: "Tom",
-    address: "No. 189",
-    show: true
-  }
-]);
+const tableData = ref([]);
 interface Role {
   id?: number;
   roleName: string;
@@ -163,7 +139,6 @@ const AddRolesPerson = () => {
 };
 // 删除角色组成员
 const deltetePerson = item => {
-  console.log(item);
   ElMessageBox.confirm(
     `人员删除后不能恢复,是否确认删除【${item.realName}】吗?`,
     "确认删除人员吗",
@@ -172,10 +147,7 @@ const deltetePerson = item => {
     }
   )
     .then(() => {
-      ElMessage({
-        message: "删除成功",
-        type: "success"
-      });
+      getDeleteUserApi(item.userCode, postPageUserByRoleApi);
     })
     .catch(() => {
       // catch error
@@ -192,11 +164,15 @@ const paramsPageUser = reactive({
   roleCode: "",
   userCodes: []
 });
+const total = ref(0);
 const postPageUserByRoleApi = async () => {
   const { code, data } = await postPageUserByRole(paramsPageUser);
   console.log(data);
   if (code === 200) {
     tableData.value = data.records;
+    if (data.totalRow) {
+      total.value = data.totalRow;
+    }
   }
 };
 // 菜单权限
@@ -214,6 +190,14 @@ const getMenuListCodeForRoleApi = async item => {
   });
   // console.log("菜单", data);
 };
+const handleSizeChange = val => {
+  paramsPageUser.pageSize = val;
+  postPageUserByRoleApi();
+};
+const handleCurrentChange = val => {
+  paramsPageUser.pageNumber = val;
+  postPageUserByRoleApi();
+};
 </script>
 
 <template>
@@ -351,7 +335,6 @@ const getMenuListCodeForRoleApi = async item => {
             <el-table-column prop="jobTitle" label="职称" />
             <el-table-column prop="dept" label="部门" />
             <el-table-column prop="phone" label="手机号" />
-            <!-- <el-table-column prop="address" label="部门" /> -->
             <el-table-column label="操作">
               <template #default="{ row }">
                 <el-dropdown trigger="click" class="mr-2">
@@ -362,6 +345,20 @@ const getMenuListCodeForRoleApi = async item => {
               </template>
             </el-table-column>
           </el-table>
+          <div>
+            <div class="float-left mt-3 total">共{{ total }}条数据</div>
+            <div class="absolute right-0 mr-20 mt-3">
+              <el-pagination
+                v-model:current-page="paramsPageUser.pageNumber"
+                v-model:page-size="paramsPageUser.pageSize"
+                background
+                layout="prev, pager, next"
+                :total="total"
+                @size-change="handleSizeChange"
+                @current-change="handleCurrentChange"
+              />
+            </div>
+          </div>
         </el-tab-pane>
         <el-tab-pane label="权限管理" name="second">
           <el-table :data="tableData" border style="width: 100%">
@@ -407,6 +404,15 @@ const getMenuListCodeForRoleApi = async item => {
   </div>
 </template>
 <style lang="scss" scoped>
+.total {
+  font-size: 14px;
+  // font-family: PingFangSC-Regular;
+  font-weight: 400;
+  line-height: 22px;
+  color: #0009;
+  letter-spacing: 0;
+}
+
 .box-left {
   position: relative;
   width: 25%;

+ 9 - 35
src/views/background/framework/users/index.vue

@@ -12,6 +12,7 @@ import editPerson from "./components/editPerson.vue";
 import { postPageGroup, postDelUserGroup } from "@/api/userGroup";
 import UserPageTable from "@/components/UserPageTable/index.vue";
 import pngcaret from "@/assets/icon-png/caret-right-small.svg";
+import { getDeleteUserApi } from "@/api/userSetting";
 // 新增用户组
 const addUsersRef = ref();
 const addUsersShow = ref(false);
@@ -60,6 +61,7 @@ const load = () => {
 };
 // 用户组分页
 const postPageGroupApi = async () => {
+  console.log("rolesList.params", rolesList.params);
   const { code, data } = await postPageGroup(rolesList.params);
   if (code === 200) {
     rolesList.data = [];
@@ -76,11 +78,9 @@ postPageGroupApi();
 // 查看角色组
 const bgColor = ref(null);
 const lookRoles = item => {
-  console.log("111", item);
   bgColor.value = item.id;
   rolesList.rolesName = item.groupName;
   UserTable.value.handleNodeClick(item, "group");
-  console.log(UserTable.value);
 };
 // 标签选择
 const activeName = ref("first");
@@ -130,7 +130,7 @@ const editUsers = row => {
 // 删除用户
 const deltetePerson = row => {
   ElMessageBox.confirm(
-    `用户删除不能恢复,是否确认删除用户【${row.name}】吗`,
+    `用户删除不能恢复,是否确认删除用户【${row.realName}】吗`,
     "确定删除该用户吗?",
     {
       confirmButtonText: "确定",
@@ -139,10 +139,10 @@ const deltetePerson = row => {
     }
   )
     .then(() => {
-      ElMessage({
-        type: "success",
-        message: "删除成功"
-      });
+      getDeleteUserApi(
+        row.userCode,
+        UserTable.value.postOrganizationUserPageApi
+      );
     })
     .catch(() => {
       ElMessage({
@@ -204,7 +204,7 @@ const deltetePerson = row => {
               class="flex justify-between items-center'"
               @click="lookRoles(item)"
             >
-              <span class="roles-text">{{ item.groupName }}</span>
+              <span class="text-sm">{{ item.groupName }}</span>
             </div>
             <div class="flex justify-between items-center">
               <el-dropdown trigger="click">
@@ -239,32 +239,6 @@ const deltetePerson = row => {
     <!-- <div v-if="rolesList.rolesName" class="box-right"> -->
     <div class="box-right">
       <h3>{{ rolesList.rolesName }}</h3>
-      <!-- <div class="flex justify-between mb-3">
-        <el-input
-          placeholder="搜索医生姓名"
-          class="mb-2"
-          style="max-width: 300px"
-          :prefix-icon="Search"
-        />
-        <el-button type="primary" @click="AddUsersPerson">添加成员</el-button>
-      </div>
-      <el-table :data="tableData" style="width: 100%">
-        <el-table-column prop="date" label="姓名" />
-        <el-table-column prop="name" label="工号" />
-        <el-table-column prop="address" label="性别" />
-        <el-table-column prop="address" label="年龄" />
-        <el-table-column prop="address" label="职称" />
-        <el-table-column prop="address" label="部门" />
-        <el-table-column label="操作">
-          <template #default="{ row }">
-            <el-dropdown trigger="click" class="mr-2">
-              <el-text type="danger" @click="deltetePerson(row)">
-                移除
-              </el-text>
-            </el-dropdown>
-          </template>
-        </el-table-column>
-      </el-table> -->
       <UserPageTable ref="UserTable">
         <template #add-button>
           <el-button type="primary" @click="AddUsersPerson">添加成员</el-button>
@@ -327,7 +301,7 @@ const deltetePerson = row => {
 }
 
 .roles-text {
-  font-size: 14px;
+  font-size: 12px;
   // font-family: PingFangSC-Regular;
   font-weight: 400;
   line-height: 22px;

+ 21 - 0
src/views/draw/children/worker/workerDrak.vue

@@ -9,12 +9,33 @@ import barEcharts from "@/components/echarts/bar.vue";
 import rankTable from "@/components/rankTable/index.vue";
 import personList from "@/components/personList/index.vue";
 import qvanping from "@/assets/rank/qvanping@2x.png";
+import { getPersonDimensionChartsList } from "@/api/draw";
 import type { TabsPaneContext } from "element-plus";
 const router = useRouter();
 const value = ref("");
 const activeName = ref("1");
 // 柱状图
 const barEchartsRef = ref();
+const params = reactive({
+  params: {
+    chartsQueryVo: {
+      assessmentName: "",
+      assessmentId: "",
+      assessmentModelName: "",
+      assessmentModelId: "",
+      assessmentObjectId: "",
+      assessmentObjectName: "",
+      dimId: "",
+      dimensionName: ""
+    }
+  }
+});
+const getPersonDimensionChartsListApi = async () => {
+  const { code, data } = await getPersonDimensionChartsList(params.params);
+  // barEchartsRef.value.setOption(data);
+  console.log("data", data);
+};
+getPersonDimensionChartsListApi();
 // 维度表格
 const personListRef = ref();
 const barEchartsList = reactive({

+ 133 - 66
src/views/evaluate/children/change/components/editMould.vue

@@ -1,13 +1,23 @@
 <script setup lang="ts">
-import { ref, reactive, watch } from "vue";
+import { ref, reactive, watch, computed, onMounted } from "vue";
 import { ElMessageBox, ElMessage } from "element-plus";
-import { postAddDimension, getDimensionRemove } from "@/api/dimension";
+import { useRoute } from "vue-router";
+import {
+  postAddDimension,
+  getDimensionRemove,
+  postUpdateDept
+} from "@/api/dimension";
 import type { DrawerProps, FormItemProps, FormProps } from "element-plus";
 // const itemLabelPosition = ref<FormItemProps["labelPosition"]>("");
 const drawer = ref(false);
+const $route = useRoute();
+const $emit = defineEmits(["handClick"]);
+const dalongTitle = ref("");
 const direction = ref<DrawerProps["direction"]>("rtl");
 const ruleFormRef = ref();
+const dimWeight = ref(false);
 const formLabelAlign = reactive({
+  id: "",
   list: [
     {
       id: "",
@@ -17,7 +27,7 @@ const formLabelAlign = reactive({
     }
   ],
   dimName: "",
-  dimWeight: "",
+  dimWeight: 0,
   mode: 1,
   showIndicRemark: 1,
   showScoreRule: 1,
@@ -28,57 +38,133 @@ const formLabelAlign = reactive({
   showStartValue: 0,
   remark: ""
 });
-watch(
-  () => [
-    formLabelAlign.showIndicRemark,
-    formLabelAlign.showScoreRule,
-    formLabelAlign.showDatasource,
-    formLabelAlign.showTargetValue,
-    formLabelAlign.showFinalValue,
-    formLabelAlign.showChallengeValue,
-    formLabelAlign.showStartValue
-  ],
-  newValues => {
-    formLabelAlign.showIndicRemark = newValues[0] ? 1 : 0;
-    formLabelAlign.showScoreRule = newValues[1] ? 1 : 0;
-    formLabelAlign.showDatasource = newValues[2] ? 1 : 0;
-    formLabelAlign.showTargetValue = newValues[3] ? 1 : 0;
-    formLabelAlign.showFinalValue = newValues[4] ? 1 : 0;
-    formLabelAlign.showChallengeValue = newValues[5] ? 1 : 0;
-    formLabelAlign.showStartValue = newValues[6] ? 1 : 0;
-  }
-);
 const newAddItem = ref();
 const handleClose = (done: () => void) => {
-  // ElMessageBox.confirm("配置项未保存,确认关闭", {
-  //   type: "warning"
-  // }).then(() => {
-  // });
   drawer.value = false;
 };
 function cancelClick() {}
 function confirmClick() {
   ruleFormRef.value.validate((valid: boolean) => {
     if (valid) {
-      postAddDimensionApi();
+      if (dalongTitle.value == "编辑") {
+        postUpdateDeptApi();
+      } else {
+        postAddDimensionApi();
+      }
     }
   });
 }
-const open = row => {
-  if (row) {
-    formLabelAlign.dimName = row.name;
-  } else {
-    formLabelAlign.dimName = "";
+const open = (row: any, title: string) => {
+  dalongTitle.value = title;
+  if (title == "新建") {
+    Object.assign(formLabelAlign, {
+      id: row.id ? row.id : $route.query.id,
+      list: [
+        {
+          id: "",
+          dimName: "",
+          dimWeight: "",
+          mode: ""
+        }
+      ],
+      dimName: "",
+      dimWeight: 0,
+      mode: 1,
+      showIndicRemark: 1,
+      showScoreRule: 1,
+      showDatasource: 0,
+      showTargetValue: 0,
+      showFinalValue: 0,
+      showChallengeValue: 0,
+      showStartValue: 0,
+      remark: ""
+    });
+  }
+  if (title == "编辑") {
+    Object.assign(formLabelAlign, row);
   }
   drawer.value = true;
 };
+// 开关状态
+const showIndicRemarkValue = computed({
+  get: () => formLabelAlign.showIndicRemark === 1,
+  set: value => {
+    formLabelAlign.showIndicRemark = value ? 1 : 0;
+  }
+});
+const showScoreRuleValue = computed({
+  get: () => formLabelAlign.showScoreRule === 1,
+  set: value => {
+    formLabelAlign.showScoreRule = value ? 1 : 0;
+  }
+});
+
+const showDatasourceValue = computed({
+  get: () => formLabelAlign.showDatasource === 1,
+  set: value => {
+    formLabelAlign.showDatasource = value ? 1 : 0;
+  }
+});
+
+const showTargetValueValue = computed({
+  get: () => formLabelAlign.showTargetValue === 1,
+  set: value => {
+    formLabelAlign.showTargetValue = value ? 1 : 0;
+  }
+});
+
+const showFinalValueValue = computed({
+  get: () => formLabelAlign.showFinalValue === 1,
+  set: value => {
+    formLabelAlign.showFinalValue = value ? 1 : 0;
+  }
+});
+
+const showChallengeValueValue = computed({
+  get: () => formLabelAlign.showChallengeValue === 1,
+  set: value => {
+    formLabelAlign.showChallengeValue = value ? 1 : 0;
+  }
+});
+
+const showStartValueValue = computed({
+  get: () => formLabelAlign.showStartValue === 1,
+  set: value => {
+    formLabelAlign.showStartValue = value ? 1 : 0;
+  }
+});
+// 分割————————————————————————————————————————————
+// 新建维度
 const postAddDimensionApi = async () => {
-  const { code, msg } = await postAddDimension(formLabelAlign);
+  let tpId = formLabelAlign.id;
+  let dataList = formLabelAlign;
+  delete dataList.id;
+  let list = { tpId: tpId, ...dataList };
+  console.log("dsafasfafwaw", list);
+  const { code, msg } = await postAddDimension(list);
   if (code === 200) {
     ElMessage({
       message: "添加成功",
       type: "success"
     });
+    $emit("handClick");
+    drawer.value = false;
+  } else {
+    ElMessage({
+      message: msg,
+      type: "error"
+    });
+  }
+};
+// 更新维度
+const postUpdateDeptApi = async () => {
+  const { code, msg } = await postUpdateDept(formLabelAlign);
+  if (code === 200) {
+    ElMessage({
+      message: "更新成功",
+      type: "success"
+    });
+    $emit("handClick");
     drawer.value = false;
   } else {
     ElMessage({
@@ -90,7 +176,6 @@ const postAddDimensionApi = async () => {
 defineExpose({
   open
 });
-const radio1 = ref("1");
 </script>
 
 <template>
@@ -126,8 +211,12 @@ const radio1 = ref("1");
               <el-input v-model="formLabelAlign.dimName" />
             </el-form-item>
             <el-form-item label="维度权重" label-position="top">
-              <el-switch v-model="formLabelAlign.dimWeight" class="mr-4" />
-              <el-input style="max-width: 150px">
+              <el-switch v-model="dimWeight" class="mr-4" />
+              <el-input
+                v-model="formLabelAlign.dimWeight"
+                style="max-width: 150px"
+                :disabled="!dimWeight"
+              >
                 <template #append>%</template>
               </el-input>
             </el-form-item>
@@ -138,57 +227,35 @@ const radio1 = ref("1");
               </el-radio-group>
             </el-form-item>
             <el-form-item label="指标显示字段设置" label-position="top">
-              <!-- <template #default="{ row }"> -->
               <template #default>
                 <div>
                   <div>
                     <el-text type="info">指标说明</el-text>
-                    <el-switch
-                      v-model="formLabelAlign.showIndicRemark"
-                      class="ml-2"
-                    />
+                    <el-switch v-model="showIndicRemarkValue" class="ml-2" />
                   </div>
                   <div>
                     <el-text type="info">评价标准</el-text>
-                    <el-switch
-                      v-model="formLabelAlign.showScoreRule"
-                      class="ml-2"
-                    />
+                    <el-switch v-model="showScoreRuleValue" class="ml-2" />
                   </div>
                   <div>
                     <el-text type="info">数据来源</el-text>
-                    <el-switch
-                      v-model="formLabelAlign.showDatasource"
-                      class="ml-2"
-                    />
+                    <el-switch v-model="showDatasourceValue" class="ml-2" />
                   </div>
                   <div class="ml-3">
                     <el-text type="info">目标值</el-text>
-                    <el-switch
-                      v-model="formLabelAlign.showTargetValue"
-                      class="ml-2"
-                    />
+                    <el-switch v-model="showTargetValueValue" class="ml-2" />
                   </div>
                   <div class="ml-3">
                     <el-text type="info">完成值</el-text>
-                    <el-switch
-                      v-model="formLabelAlign.showFinalValue"
-                      class="ml-2"
-                    />
+                    <el-switch v-model="showFinalValueValue" class="ml-2" />
                   </div>
                   <div class="ml-3">
                     <el-text type="info">挑战值</el-text>
-                    <el-switch
-                      v-model="formLabelAlign.showChallengeValue"
-                      class="ml-2"
-                    />
+                    <el-switch v-model="showChallengeValueValue" class="ml-2" />
                   </div>
                   <div class="ml-3">
                     <el-text type="info">门栏值</el-text>
-                    <el-switch
-                      v-model="formLabelAlign.showStartValue"
-                      class="ml-2"
-                    />
+                    <el-switch v-model="showStartValueValue" class="ml-2" />
                   </div>
                 </div>
               </template>

+ 116 - 62
src/views/evaluate/children/change/components/importIndex.vue

@@ -2,73 +2,101 @@
 import { ref, reactive, computed } from "vue";
 import { ElMessageBox, ElMessage, ElTable } from "element-plus";
 import { Search } from "@element-plus/icons-vue";
-import { textSpanOverlapsWith } from "typescript";
+import { getQuotaPageList } from "@/api/indexDefine";
+import { postAddRelationList } from "@/api/dimension";
+import { getSelectDictListtApi, select } from "@/api/select";
 import { getStateData, getStateType } from "@/config/tag";
 const dialogVisibleAdd = ref(false);
-const handleClose = () => {
-  ElMessageBox.confirm("确认关闭弹窗吗?")
-    .then(() => {
-      dialogVisibleAdd.value = !dialogVisibleAdd.value;
-      ElMessage({
-        message: "已关闭"
-      });
-    })
-    .catch(() => {
-      // catch error
-    });
-};
-const tableData = [
-  {
-    date: "2016-05-04",
-    name: "Aleyna Kutzner",
-    address: "Lohrbergstr",
-    index: 1
-  },
-  {
-    date: "2016-05-03",
-    name: "Helen Jacobi",
-    address: "760 A St",
-    index: 2
-  },
-  {
-    date: "2016-05-02",
-    name: "Brandon Deckert",
-    address: "Arnold-O",
-    index: 0
+const indexParams = reactive({
+  params: {
+    pageNumber: 1,
+    pageSize: 5,
+    categoryName: "",
+    param: ""
   },
-  {
-    date: "2016-05-01",
-    name: "Margie Smith",
-    address: "23618 ",
-    index: 0
+  tableData: [],
+  total: 0,
+  tableIndex: [],
+  Relation: {
+    dimId: "",
+    indId: "",
+    tpId: ""
   }
-];
+});
+const handleClose = () => {
+  dialogVisibleAdd.value = !dialogVisibleAdd.value;
+  // ElMessageBox.confirm("确认关闭弹窗吗?")
+  //   .then(() => {
+  //     ElMessage({
+  //       message: "已关闭"
+  //     });
+  //   })
+  //   .catch(() => {
+  //     // catch error
+  //   });
+};
 // 添加部门保存
 const saveDepartment = () => {
   ElMessageBox.confirm("不保存,更新的信息将会丢失", "需要保存吗?", {
     type: "warning"
   })
-    .then(() => {
-      dialogVisibleAdd.value = false;
-      ElMessage({
-        message: "已保存",
-        type: "success"
+    .then(async () => {
+      indexParams.tableIndex.forEach(async item => {
+        indexParams.Relation.indId = item.id;
+        const { code, msg, data } = await postAddRelationList(
+          indexParams.Relation
+        );
+        if (code === 200) {
+          ElMessage({
+            message: "导入成功",
+            type: "success"
+          });
+        } else {
+          ElMessage.error(msg);
+        }
       });
+      dialogVisibleAdd.value = false;
     })
     .catch(() => {
       // catch error
     });
 };
-const open = () => {
+const open = row => {
+  console.log("item", row);
+  indexParams.Relation.dimId = row.id;
+  indexParams.Relation.tpId = row.tpId;
   dialogVisibleAdd.value = true;
+  getQuotaPageListApi();
+  getSelectDictListtApi();
 };
 // 选中
 const selectedNums = ref(0);
 const handleSelectionChange = selectedRows => {
   // this.selectedRows = selectedRows;
   selectedNums.value = selectedRows.length;
+  indexParams.tableIndex = selectedRows;
   console.log("选中的行:", selectedRows);
 };
+
+const getQuotaPageListApi = async () => {
+  const { code, data, msg } = await getQuotaPageList(indexParams.params);
+  if (code == 200) {
+    indexParams.tableData = data.records;
+    indexParams.total = data.totalRow;
+  } else {
+    ElMessage.error(msg);
+  }
+};
+const handleSizeChange = (val: number) => {
+  // console.log("a4val1111", val);
+  indexParams.params.pageSize = val;
+  getQuotaPageListApi();
+};
+const handleCurrentChange = (val: number) => {
+  // console.log("a4va2222222", val);
+  indexParams.params.pageNumber = val;
+  getQuotaPageListApi();
+};
 defineExpose({
   open
 });
@@ -76,49 +104,75 @@ defineExpose({
 
 <template>
   <div>
-    <el-dialog
-      v-model="dialogVisibleAdd"
-      title="添加成员"
-      width="600"
-      :before-close="handleClose"
-    >
+    <el-dialog v-model="dialogVisibleAdd" title="导入指标" width="744">
       <div class="w-full flex justify-between items-center">
-        <div><el-text>指标分类</el-text></div>
-        <div><el-input placeholder="请输入" :prefix-icon="Search" /></div>
+        <div>
+          <el-text>指标分类</el-text>
+          <el-select
+            v-model="indexParams.params.categoryName"
+            clearable
+            filterable
+            placeholder="请选择"
+            style="width: 200px"
+            class="ml-3"
+            @change="getQuotaPageListApi"
+          >
+            <el-option
+              v-for="(item, index) in select"
+              :key="index"
+              :label="item.dictValue"
+              :value="item.dictValue"
+            />
+          </el-select>
+        </div>
+        <div>
+          <el-input
+            v-model="indexParams.params.param"
+            :prefix-icon="Search"
+            placeholder="请输入"
+            @change="getQuotaPageListApi"
+          />
+        </div>
       </div>
       <el-table
-        :data="tableData"
+        :data="indexParams.tableData"
         style="width: 100%"
         @selection-change="handleSelectionChange"
       >
         <el-table-column type="selection" width="55" />
         <el-table-column label="指标名称">
-          <template #default="scope">{{ scope.row.date }}</template>
+          <template #default="scope">{{ scope.row.name }}</template>
         </el-table-column>
-        <el-table-column property="name" label="指标分类" width="100" />
+        <el-table-column prop="categoryName" label="指标分类" width="100" />
         <el-table-column
-          property="address"
+          property="statue"
           label="状态"
           width="100"
           show-overflow-tooltip
         >
           <template #default="scope">
-            <el-tag :type="getStateType(scope.row.index)">
-              {{ getStateData(scope.row.index) }}
+            <el-tag :type="getStateType(scope.row.statue)">
+              {{ getStateData(scope.row.statue) }}
             </el-tag>
           </template>
         </el-table-column>
-        <el-table-column property="address" label="数据来源" width="120" />
+        <el-table-column property="source" label="数据来源" width="120" />
       </el-table>
-      <div class="w-full flex justify-evenly items-center">
-        <div class="mt-5"><el-text>共111项数据</el-text></div>
-        <div class="ml-10">
+      <div class="w-full flex justify-between items-center">
+        <div class="ml-10 mt-5">
+          <el-text>共{{ indexParams.total }}项数据</el-text>
+        </div>
+        <div class="mr-10">
           <el-pagination
+            v-model:current-page="indexParams.params.pageNumber"
+            v-model:page-size="indexParams.params.pageSize"
             size="small"
             background
             layout="prev, pager, next"
-            :total="50"
+            :total="indexParams.total"
             class="mt-4"
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
           />
         </div>
       </div>

+ 145 - 45
src/views/evaluate/children/change/components/newAdd.vue

@@ -10,10 +10,15 @@ 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 { postAddDimension, getDimensionRemove } from "@/api/dimension";
+import {
+  postAddDimension,
+  getDimensionRemove,
+  getQuotaByDimensionId
+} from "@/api/dimension";
 import editMould from "./editMould.vue";
+import { delQuota } from "@/api/indexDefine";
 import settingIndexDrawer from "./settingIndexDrawer.vue";
-import { postAddTemplate, getInfoRelation } from "@/api/templateInfo";
+import { postAddTemplate, getInfo, getListBy } from "@/api/templateInfo";
 import importIndex from "./importIndex.vue";
 import { useNav } from "@/layout/hooks/useNav";
 const { toggleSideBar } = useNav();
@@ -24,6 +29,7 @@ const active = ref(0);
 const editDrawer = ref();
 const editDrawerShow = ref(false);
 const titleShow = ref(false);
+
 // 指标设置
 const settingIndexDrawerRef = ref();
 const settingIndexDrawerShow = ref(false);
@@ -41,18 +47,23 @@ onMounted(() => {
     tepNameForm.id = route.query.id;
   }
 });
+const tableData = ref([]);
 const tepNameForm = reactive({
   tpName: "",
   id: ""
 });
+// 新建模板
 const postAddTemplateApi = async () => {
   const res = await postAddTemplate({ ...tepNameForm });
+  Object.assign(tepNameForm, {
+    tpName: "",
+    id: ""
+  });
   if (res.code === 200) {
     ElMessage({
       message: "创建成功",
       type: "success"
     });
-    console.log("res", res.data);
     tepNameForm.tpName = res.data.tpName;
     tepNameForm.id = res.data.id;
     titleShow.value = true;
@@ -61,17 +72,53 @@ const postAddTemplateApi = async () => {
   }
 };
 // 考核维度卡片
-const eaxmCard = ref([{ name: "工作量", value: 1 }]);
-// 获取指标信息
-const getInfoRelationApi = async () => {
-  const { code, data, msg } = await getInfoRelation(tepNameForm.id);
-  console.log("data", data);
+const eaxmCard = ref([]);
+// 获取维度
+const getListByApi = async () => {
+  console.log(tepNameForm.id);
+  const { code, data, msg } = await getListBy(tepNameForm.id);
+  Object.assign(tepNameForm, {
+    tpName: "",
+    id: ""
+  });
   if (code === 200) {
     titleShow.value = true;
+    eaxmCard.value = data;
+    eaxmCard.value.forEach(item => {
+      initializeTableData(item);
+    });
   } else {
     ElMessage.error(msg);
   }
 };
+// 获取指标信息
+const paramsIndex = reactive({
+  id: "",
+  tpId: "",
+  dimId: ""
+});
+const getQuotaByDimensionIdApi = async id => {
+  paramsIndex.dimId = id;
+  const { code, data, msg } = await getQuotaByDimensionId(paramsIndex);
+  if (code === 200) {
+    return data;
+  } else {
+    ElMessage.error(msg);
+    return [];
+  }
+};
+const initializeTableData = async item => {
+  item.tableData = await getQuotaByDimensionIdApi(item.id);
+};
+const amountTo = itemList => {
+  let num = 0;
+  if (itemList) {
+    itemList.forEach(item => {
+      num = num + item.weight;
+    });
+    return num;
+  }
+};
 const addDimension = reactive({
   list: [
     {
@@ -95,37 +142,25 @@ const addDimension = reactive({
 });
 // 创建考核维度
 const createAdd = () => {
-  // eaxmCard.value.push({ name: "考核维度", value: eaxmCard.value.length + 1 });
-  // ElMessage({
-  //   type: "success",
-  //   message: "创建成功"
-  // });
-  editDrawer.value.open();
+  editDrawer.value.open(tepNameForm, "新建");
 };
 const backChange = () => {
   toggleSideBar();
   router.back();
 };
-const tableData = ref([
-  {
-    date: "2016-05-01",
-    name: "Tom",
-    state: "California",
-    city: "Los Angeles",
-    address: "No. 189, Grove St, Los Angeles",
-    zip: "CA 90036"
-  }
-]);
 const save = () => {
   formRef.value.validate(valid => {
     if (valid) {
       if (tepNameForm.id) {
-        getInfoRelationApi();
+        getListByApi();
       } else {
         postAddTemplateApi();
       }
     }
   });
+  if (titleShow.value) {
+    router.back();
+  }
 };
 const deleteRow = row => {
   console.log(row);
@@ -138,11 +173,17 @@ const deleteRow = row => {
       type: "warning"
     }
   )
-    .then(() => {
-      ElMessage({
-        type: "success",
-        message: "删除成功"
-      });
+    .then(async () => {
+      const { code, msg } = await delQuota(row.id);
+      if (code === 200) {
+        ElMessage({
+          type: "success",
+          message: "删除成功"
+        });
+        initializeTableData(row.dimId);
+      } else {
+        ElMessage.error(msg);
+      }
     })
     .catch(() => {
       ElMessage({
@@ -153,7 +194,7 @@ const deleteRow = row => {
 };
 // 编辑
 const editPen = item => {
-  editDrawer.value.open(item);
+  editDrawer.value.open(item, "编辑");
 };
 // 删除考核维度
 const deletePen = index => {
@@ -170,6 +211,7 @@ const deletePen = index => {
       // eaxmCard.value.splice(index, 1);
       const { code, msg } = await getDimensionRemove(index);
       if (code === 200) {
+        getListByApi();
         ElMessage({
           type: "success",
           message: "删除成功"
@@ -190,8 +232,7 @@ const settingIndex = row => {
   settingIndexDrawerRef.value.open();
 };
 const importIndexDialog = row => {
-  console.log(row);
-  importIndexRef.value.open();
+  importIndexRef.value.open(row);
 };
 </script>
 
@@ -205,7 +246,11 @@ const importIndexDialog = row => {
       v-model:drawerValue="settingIndexDrawerShow"
     />
     <!-- 新增、编辑模块 -->
-    <editMould ref="editDrawer" v-model:drawerValue="editDrawerShow" />
+    <editMould
+      ref="editDrawer"
+      v-model:drawerValue="editDrawerShow"
+      @handClick="getListByApi"
+    />
     <div class="w-[100%] flex justify-evenly">
       <div class="left-box">
         <el-text class="cursor-pointer" @click="backChange"
@@ -268,27 +313,70 @@ const importIndexDialog = row => {
           >
         </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.name }}(30%)</span>
+              <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(index)"
+                <el-icon @click="deletePen(item.id)"
                   ><Delete class="text-red-500"
                 /></el-icon>
               </div>
             </div>
           </template>
-          <el-table :data="tableData" style="width: 100%" max-height="250">
-            <el-table-column fixed prop="date" label="指标名称" width="150" />
-            <el-table-column prop="name" label="指标说明" width="120" />
-            <el-table-column prop="state" label="评价标准" width="300" />
-            <el-table-column prop="state" label="数据来源" width="120" />
-            <el-table-column prop="city" label="权重" width="120" />
-            <el-table-column prop="name" label="分值" width="120" />
-            <el-table-column prop="zip" label="目标值" width="120" />
+          <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)"
@@ -302,9 +390,12 @@ const importIndexDialog = row => {
           </el-table>
           <template #footer>
             <el-button type="primary" link class="mr-4"> 添加指标 </el-button>
-            <el-button type="primary" link @click="importIndexDialog">
+            <el-button type="primary" link @click="importIndexDialog(item)">
               导入指标
             </el-button>
+            <span class="float-right num"
+              >指标权重合计:{{ amountTo(item.tableData) }}</span
+            >
           </template>
         </el-card>
       </div>
@@ -356,4 +447,13 @@ const importIndexDialog = row => {
   color: #0006;
   letter-spacing: 0;
 }
+
+.num {
+  font-size: 14px;
+  // font-family: PingFangSC-Regular;
+  font-weight: 400;
+  line-height: 22px;
+  color: #0009;
+  letter-spacing: 0;
+}
 </style>

+ 147 - 51
src/views/evaluate/children/change/manage.vue

@@ -3,48 +3,96 @@ defineOptions({
   name: "evaluateChangeManage"
 });
 import { useRouter } from "vue-router";
-import { ref } from "vue";
+import { ref, reactive } from "vue";
 import addExam from "./manage/addExam.vue";
+import { ElMessage, ElMessageBox } from "element-plus";
 import { Search } from "@element-plus/icons-vue";
-
+import dayjs from "dayjs";
+import {
+  getAssessmentPageList,
+  getDelAssessment,
+  postCopyAssessment
+} from "@/api/manage";
+import { assessmentStatus, getStateType } from "@/config/tag";
 const addExamRef = ref();
 const addExamShow = ref(false);
 const router = useRouter();
-const tableData = [
-  {
-    date: "2016-05-03",
-    name: "Tom",
-    address: "No. 189, Grove St, Los Angeles",
-    show: false
-  },
-  {
-    date: "2016-05-02",
-    name: "Tom",
-    address: "No. 189, Grove St, Los Angeles",
-    show: false
-  },
-  {
-    date: "2016-05-04",
-    name: "Tom",
-    address: "No. 189, Grove St, Los Angeles",
-    show: false
-  },
-  {
-    date: "2016-05-01",
-    name: "Tom",
-    address: "No. 189, Grove St, Los Angeles",
-    show: false
-  }
-];
+
 const newAdd = () => {
   addExamRef.value.open();
 };
+const params = reactive({
+  tableData: [],
+  params: {
+    pageNumber: 1,
+    pageSize: 10,
+    name: ""
+  },
+  total: 0
+});
+const getAssessmentPageListApi = async () => {
+  const { code, msg, data } = await getAssessmentPageList(params.params);
+  if (code === 200) {
+    params.tableData = data.records;
+    params.total = data.totalRow;
+  } else {
+    ElMessage.error(msg);
+  }
+};
+getAssessmentPageListApi();
 const handleRowClick = (row: any) => {
-  // router.push({ path: "/evaluate/children/change/mould/manageObject" });
   console.log(row);
 };
-const setEdit = (row: any) => {};
-const setDelete = (row: any) => {};
+const setEdit = (row: any) => {
+  router.push({ path: "/evaluate/children/change/mould/manageObject" });
+};
+// 删除
+const setDelete = (row: any) => {
+  ElMessageBox.confirm("此操作将永久删除该考核, 是否继续?", "提示", {
+    confirmButtonText: "确定",
+    cancelButtonText: "取消",
+    type: "warning"
+  }).then(async () => {
+    const { code, msg } = await getDelAssessment(row.id);
+    if (code === 200) {
+      getAssessmentPageListApi();
+      ElMessage.success("删除成功");
+    } else {
+      ElMessage.error(msg);
+    }
+  });
+};
+const handleCurrentChange = (val: number) => {
+  params.params.pageNumber = val;
+  getAssessmentPageListApi();
+};
+const handleSizeChange = (val: number) => {
+  params.params.pageSize = val;
+  getAssessmentPageListApi();
+};
+// 复制考核
+const dialogVisibleCopy = ref(false);
+const copyTitle = ref("");
+const copyForm = reactive({ name: "" });
+const copyManage = (row: any) => {
+  console.log(row);
+  Object.assign(copyForm, row);
+  copyTitle.value = row.name;
+  dialogVisibleCopy.value = true;
+};
+const handleClose = () => {
+  dialogVisibleCopy.value = false;
+};
+const saveCopy = async () => {
+  const { code, msg } = await postCopyAssessment(copyForm);
+  if (code === 200) {
+    ElMessage.success("复制成功");
+    dialogVisibleCopy.value = false;
+    getAssessmentPageListApi();
+  } else {
+    ElMessage.error(msg);
+  }
+};
 </script>
 
 <template>
@@ -55,9 +103,12 @@ const setDelete = (row: any) => {};
       <div class="flex mt-2">
         <div class="flex mr-2">
           <el-input
+            v-model="params.params.name"
             style="width: 500px"
             placeholder="搜索考核模板"
             :prefix-icon="Search"
+            clearable
+            @change="getAssessmentPageListApi"
           />
         </div>
       </div>
@@ -69,19 +120,31 @@ const setDelete = (row: any) => {};
     </div>
     <div class="mt-8">
       <el-table
-        :data="tableData"
+        :data="params.tableData"
         style="width: 100%"
         max-height="250"
         @row-click="handleRowClick"
       >
-        <el-table-column prop="address" label="考核名称" width="300" fixed />
-        <el-table-column prop="date" label="周期" width="250" />
-        <el-table-column prop="name" label="执行期" width="250" />
-        <el-table-column prop="name" label="考核模板" width="300" />
-        <el-table-column prop="name" label="状态" width="150" />
-        <el-table-column prop="name" label="创建人" width="150" />
-        <el-table-column prop="name" label="更新时间" width="150" />
-        <el-table-column label="操作" width="200" fixed="right">
+        <el-table-column prop="name" label="考核名称" width="300" fixed />
+        <el-table-column prop="cycle" label="周期" />
+        <el-table-column prop="cycleValue" label="执行期" />
+        <el-table-column prop="name" label="考核模板" width="250" />
+        <el-table-column prop="assessmentStatus" label="状态">
+          <template #default="{ row }">
+            <el-tag :type="getStateType(row.assessmentStatus)">
+              {{ assessmentStatus(row.assessmentStatus) }}
+            </el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column prop="createUser" label="创建人" />
+        <el-table-column prop="updateTime" label="更新时间">
+          <template #default="{ row }">
+            <div v-if="row.updateTime">
+              {{ dayjs(row.updateTime).format("YYYY-MM-DD HH:mm:ss") }}
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" width="150" fixed="right">
           <template #default="{ row }">
             <!-- <el-button link :icon="Edit" /> -->
             <el-dropdown trigger="click">
@@ -98,7 +161,9 @@ const setDelete = (row: any) => {};
                   <el-dropdown-item @click="setDelete(row)">
                     <el-text type="danger">删除</el-text>
                   </el-dropdown-item>
-                  <el-dropdown-item> 复制 </el-dropdown-item>
+                  <el-dropdown-item @click="copyManage(row)">
+                    复制
+                  </el-dropdown-item>
                 </el-dropdown-menu>
               </template>
             </el-dropdown>
@@ -106,16 +171,47 @@ const setDelete = (row: any) => {};
         </el-table-column>
       </el-table>
     </div>
-    <div class="float-right mt-8 mr-8">
-      <!-- <el-pagination
-        v-model:current-page="currentPage"
-        v-model:page-size="pageSize"
-        :page-sizes="[10, 15, 20, 30]"
-        layout="total, sizes, prev, pager, next, jumper"
-        :total="400"
-        @size-change="handleSizeChange"
-        @current-change="handleCurrentChange"
-      /> -->
+    <div class="flex justify-between item-center">
+      <div class="float-left mt-5 ml-2 total">共{{ params.total }}条数据</div>
+      <div class="float-right mt-8 mr-8">
+        <el-pagination
+          v-model:current-page="params.params.pageNumber"
+          v-model:page-size="params.params.pageSize"
+          background
+          layout="prev, pager, next"
+          :total="params.total"
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+        />
+      </div>
     </div>
+    <el-dialog
+      v-model="dialogVisibleCopy"
+      :title="'复制来源:' + copyTitle"
+      width="500"
+    >
+      <el-form :model="copyForm" label-width="auto" style="max-width: 600px">
+        <el-form-item label="名称" prop="name">
+          <el-input v-model="copyForm.name" placeholder="请输入" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button @click="handleClose">取消</el-button>
+          <el-button type="primary" @click="saveCopy"> 确认 </el-button>
+        </div>
+      </template>
+    </el-dialog>
   </div>
 </template>
+<style scoped>
+.total {
+  font-size: 14px;
+
+  /* font-family: PingFangSC-Regular; */
+  font-weight: 400;
+  line-height: 22px;
+  color: #0009;
+  letter-spacing: 0;
+}
+</style>

+ 40 - 36
src/views/evaluate/children/change/manage/addExam.vue

@@ -7,7 +7,10 @@ const title = ref<String>("发起考核");
 // 季度 半年
 const ElPickerRef = ref();
 const form = reactive({
-  id: "",
+  name: "",
+  cycle: "",
+  cycleValue: "",
+  assessmentType: null,
   params: {
     id: "",
     tpName: "",
@@ -19,13 +22,13 @@ const form = reactive({
     updateTime: "",
     flowId: ""
   },
-  tpName: "",
-  remark: "",
-  isDelete: "",
-  form1: {
+  assessmentObjectList: {
     left: [{ value: "1" }],
     right: [{ value: "1" }]
-  }
+  },
+  tpName: "",
+  remark: "",
+  isDelete: ""
 });
 const rules = reactive({
   name: [
@@ -63,36 +66,35 @@ const saveDepartment = () => {
 const open = (item: any, index: string) => {
   if (item) {
     title.value = index;
-    console.log(item);
   }
   dialogVisibleAdd.value = true;
 };
 const addNew = () => {
-  form.form1.right.push({ value: "" });
-  form.form1.left.push({ value: "" });
+  form.assessmentObjectList.right.push({ value: "" });
+  form.assessmentObjectList.left.push({ value: "" });
 };
 const deleteItem = (index: any) => {
-  form.form1.left.splice(index, 1);
-  form.form1.right.splice(index, 1);
+  form.assessmentObjectList.left.splice(index, 1);
+  form.assessmentObjectList.right.splice(index, 1);
 };
 // 单选
-const timeType = ref<any>("month");
+const timeType = ref<any>("月度");
 const format = ref<any>("YYYY-MM");
 const handleRegionChange = (value: any) => {
   console.log(value);
-  form.date1 = "";
+  // form.date1 = "";
   timeType.value = value;
   switch (value) {
-    case "year":
+    case "年度":
       format.value = "YYYY";
       break;
-    case "month":
+    case "月度":
       format.value = "YYYY-MM";
       break;
-    case "date":
+    case "日期":
       format.value = "YYYY-MM-DD";
   }
-  if (value === "quarter" || value === "halfYear") {
+  if (value === "季度" || value === "半年") {
     nextTick(() => {
       ElPickerRef.value.open(value);
     });
@@ -121,44 +123,46 @@ defineExpose({
         label-position="top"
       >
         <el-form-item label="考核名称" prop="name">
-          <el-input placeholder="请输入" />
+          <el-input v-model="form.name" placeholder="请输入" />
         </el-form-item>
         <el-form-item label="考核周期">
-          <el-radio-group v-model="form.region" @change="handleRegionChange">
-            <el-radio value="month" size="large">月度</el-radio>
-            <el-radio value="quarter" size="large">季度</el-radio>
-            <el-radio value="halfYear" size="large">半年</el-radio>
-            <el-radio value="year" size="large">年度</el-radio>
-            <el-radio value="date" size="large">日期</el-radio>
+          <el-radio-group v-model="form.cycle" @change="handleRegionChange">
+            <el-radio value="月度" size="large">月度</el-radio>
+            <el-radio value="季度" size="large">季度</el-radio>
+            <el-radio value="半年" size="large">半年</el-radio>
+            <el-radio value="年度" size="large">年度</el-radio>
+            <el-radio value="日期" size="large">日期</el-radio>
           </el-radio-group>
           <el-date-picker
-            v-if="timeType === 'date'"
-            v-model="form.date1"
+            v-if="timeType === '日期'"
+            v-model="form.cycleValue"
             type="daterange"
             range-separator="至"
             start-placeholder="开始时间"
             end-placeholder="结束时间"
           />
           <ElPicker
-            v-else-if="timeType === 'quarter' || timeType === 'halfYear'"
+            v-else-if="timeType === '季度' || timeType === '半年'"
             ref="ElPickerRef"
             v-model="monthTime"
           />
           <el-date-picker
             v-else
-            v-model="form.date1"
-            :type="timeType"
+            v-model="form.cycleValue"
+            type="year"
             placeholder="请选择日期"
             :format="format"
           />
         </el-form-item>
         <el-form-item label="被考核类型">
           <el-select
-            v-model="form.region"
+            v-model="form.assessmentType"
             placeholder="please select your zone"
           >
-            <el-option label="Zone one" value="shanghai" />
-            <el-option label="Zone two" value="beijing" />
+            <el-option label="员工" :value="0" />
+            <el-option label="部门" :value="1" />
+            <el-option label="医疗" :value="2" />
+            <el-option label="部门负责人" :value="3" />
           </el-select>
         </el-form-item>
         <el-form-item
@@ -170,12 +174,12 @@ defineExpose({
             <div class="w-1/3">
               <el-form
                 label-position="top"
-                :model="form.form1"
+                :model="form.assessmentObjectList"
                 :rules="formLeftRules"
               >
                 <el-form-item label="被考核对象" prop="left">
                   <div
-                    v-for="(item, index) in form.form1.left"
+                    v-for="(item, index) in form.assessmentObjectList.left"
                     :key="index"
                     class="w-full mt-1"
                   >
@@ -194,12 +198,12 @@ defineExpose({
             <div class="w-1/2 ml-7">
               <el-form
                 label-position="top"
-                :model="form.form1"
+                :model="form.assessmentObjectList"
                 :rules="formRightRules"
               >
                 <el-form-item label="考核模板" prop="right">
                   <div
-                    v-for="(item, index) in form.form1.right"
+                    v-for="(item, index) in form.assessmentObjectList.right"
                     :key="index"
                     class="w-full flex mt-1"
                   >

+ 25 - 1
src/views/indexDefine/children/define.vue

@@ -305,7 +305,7 @@ const postUpdateDeptApi = async (row, state) => {
           </el-table-column>
         </el-table>
       </div>
-      <div class="float-right mt-8">
+      <!-- <div class="float-right mt-8">
         <el-pagination
           v-model:current-page="params.params.pageNumber"
           v-model:page-size="params.params.pageSize"
@@ -315,12 +315,36 @@ const postUpdateDeptApi = async (row, state) => {
           @size-change="handleSizeChange"
           @current-change="handleCurrentChange"
         />
+      </div> -->
+
+      <div class="flex justify-between item-center">
+        <div class="float-left mt-5 ml-2 total">共{{ params.total }}条数据</div>
+        <div class="float-right mt-5 mr-8">
+          <el-pagination
+            v-model:current-page="params.params.pageNumber"
+            v-model:page-size="params.params.pageSize"
+            background
+            layout="prev, pager, next"
+            :total="params.total"
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+          />
+        </div>
       </div>
     </div>
   </div>
 </template>
 
 <style lang="scss" scoped>
+.total {
+  font-size: 14px;
+  // font-family: PingFangSC-Regular;
+  font-weight: 400;
+  line-height: 22px;
+  color: #0009;
+  letter-spacing: 0;
+}
+
 .header {
   display: flex;
   width: 100%;