Selaa lähdekoodia

feat: 权限路由

ystl_myq 7 kuukautta sitten
vanhempi
commit
74b17a5c22
37 muutettua tiedostoa jossa 768 lisäystä ja 340 poistoa
  1. 12 0
      src/api/assessment.ts
  2. 27 0
      src/api/formula.ts
  3. 6 0
      src/api/menu.ts
  4. 17 0
      src/api/templateInfo.ts
  5. 5 3
      src/layout/components/sidebar/mixNav.vue
  6. 2 0
      src/layout/hooks/useNav.ts
  7. 81 34
      src/router/utils.ts
  8. 3 0
      src/routerList/background.ts
  9. 0 0
      src/routerList/draw.ts
  10. 36 0
      src/routerList/error.ts
  11. 5 9
      src/routerList/evaluate.ts
  12. 26 0
      src/routerList/home.ts
  13. 21 0
      src/routerList/import.ts
  14. 2 1
      src/routerList/index.ts
  15. 11 0
      src/routerList/other.ts
  16. 39 0
      src/routerList/password.ts
  17. 30 0
      src/routerList/remaining.ts
  18. 3 0
      src/store/modules/user.ts
  19. 11 11
      src/views/background/framework/proson/components/addPerson.vue
  20. 11 11
      src/views/background/framework/proson/components/changeRole.vue
  21. 7 7
      src/views/background/framework/proson/components/personDetailsDrawer.vue
  22. 7 7
      src/views/background/framework/proson/components/prosonEditDrawer.vue
  23. 51 29
      src/views/background/framework/proson/prosonDepartment.vue
  24. 11 11
      src/views/background/framework/roles/components/addRole.vue
  25. 85 60
      src/views/background/framework/roles/rolePower.vue
  26. 10 10
      src/views/background/framework/users/components/addUsers.vue
  27. 7 7
      src/views/background/framework/users/components/editPerson.vue
  28. 32 16
      src/views/background/framework/users/index.vue
  29. 11 11
      src/views/evaluate/children/change/components/newAdd.vue
  30. 75 49
      src/views/evaluate/children/change/components/settingIndexDrawer.vue
  31. 22 14
      src/views/evaluate/children/change/manage.vue
  32. 22 14
      src/views/evaluate/children/change/mould.vue
  33. 21 13
      src/views/evaluate/children/change/mould/manageObject.vue
  34. 28 2
      src/views/evaluate/children/change/mould/message.vue
  35. 1 1
      src/views/indexDefine/children/components/dialog.vue
  36. 22 12
      src/views/indexDefine/children/define.vue
  37. 8 8
      src/views/login/index.vue

+ 12 - 0
src/api/assessment.ts

@@ -20,6 +20,18 @@ export const postAddAssessmentObject = data => {
     data
   });
 };
+// 考核详情
+export const getAssessmentDetails = params => {
+  return http.request<addDept>("get", "/assessment/getAssessmentDetails", {
+    params
+  });
+};
+// 考核详情
+export const updateAssessment = data => {
+  return http.request<addDept>("post", "/assessment/updateAssessment", {
+    data
+  });
+};
 // 批量删除被考核人
 export const delAssessmentObject = data => {
   return http.request<addDept>("post", "/assessment/delAssessmentObject", {

+ 27 - 0
src/api/formula.ts

@@ -0,0 +1,27 @@
+import { http } from "@/utils/http";
+// 指标列表
+type templateInfo = {
+  code: number;
+  msg: string;
+  data: boolean;
+};
+// type templateInfoList = {
+//   code: number;
+//   msg: string;
+//   data: Array<any>;
+// };
+// type templateInfoData = {
+//   code: number;
+//   msg: string;
+//   data: addTemplate;
+// };
+// type addTemplate = {
+//   tpName: string;
+//   id: string;
+// };
+// 公式验证
+export const conditionVerify = params => {
+  return http.request<templateInfo>("get", "/assessment/conditionVerify", {
+    params
+  });
+};

+ 6 - 0
src/api/menu.ts

@@ -24,3 +24,9 @@ export const postAddMenuList = data => {
     data
   });
 };
+// 依据菜单code删除
+export const delByCode = params => {
+  return http.request<ResultList>("get", "/sysMenu/delByCode", {
+    params
+  });
+};

+ 17 - 0
src/api/templateInfo.ts

@@ -51,3 +51,20 @@ export const getListBy = params => {
 export const getInfo = id => {
   return http.request<templateInfoList>("get", `/dimensionInfo/getInfo/${id}`);
 };
+//  根据模板指标关联表主键获取详细信息
+export const getIndexInfo = id => {
+  return http.request<templateInfoList>(
+    "get",
+    `/templateIndicatorRelation/getInfo/${id}`
+  );
+};
+//  根据模板指标关联表主键获取详细信息
+export const postUpdate = data => {
+  return http.request<templateInfoList>(
+    "post",
+    `/templateIndicatorRelation/update`,
+    {
+      data
+    }
+  );
+};

+ 5 - 3
src/layout/components/sidebar/mixNav.vue

@@ -46,10 +46,12 @@ function getDefaultActive(routePath) {
     ? route.meta.activePath
     : findRouteByPath(parentRoutes, wholeMenus)?.children[0]?.path;
 }
+const nameData = ref();
 
 onMounted(() => {
   getDefaultActive(route.path);
-  console.log("route.path", usePermissionStoreHook().wholeMenus);
+  nameData.value = localStorage.getItem("userName");
+  // console.log("route.path", usePermissionStoreHook().wholeMenus);
 });
 
 nextTick(() => {
@@ -118,10 +120,10 @@ const changePassword = () => {
         <span class="el-dropdown-link user_text">
           <!-- <img :src="userAvatar" :style="avatarsStyle" /> -->
           <!-- <p v-if="username" class="dark:text-white">{{ username }}</p> -->
-          <p v-if="username" class="icon-img">
+          <p v-if="nameData" class="icon-img">
             <el-icon><Avatar /></el-icon>
           </p>
-          <p class="ml-0.5">{{ username }}</p>
+          <p class="ml-0.5">{{ nameData }}</p>
         </span>
         <template #dropdown>
           <el-dropdown-menu class="logout">

+ 2 - 0
src/layout/hooks/useNav.ts

@@ -38,6 +38,8 @@ export function useNav() {
 
   /** 用户名 */
   const username = computed(() => {
+    // ;
+    console.log("username1111111", localStorage.getItem("username"));
     return useUserStoreHook()?.username;
   });
 

+ 81 - 34
src/router/utils.ts

@@ -6,7 +6,7 @@ import {
   createWebHashHistory
 } from "vue-router";
 import { router } from "./index";
-import { isProxy, toRaw } from "vue";
+import { isProxy, toRaw, ref } from "vue";
 import { useTimeoutFn } from "@vueuse/core";
 import {
   isString,
@@ -23,17 +23,15 @@ import { userKey, type DataInfo } from "@/utils/auth";
 import { useMultiTagsStoreHook } from "@/store/modules/multiTags";
 import { usePermissionStoreHook } from "@/store/modules/permission";
 import { getMenuListForUser } from "@/api/menu";
-// 路由静态 对接接口后需删除-----------------------------
-// 搜索---代码删除-----下面打印代码删除遍历路由的代码
-// import { getMenuList } from "@/api/menu";
-import background from "./modules/background";
-import draw from "./modules/draw";
-import evaluate from "./modules/evaluate";
-import home from "./modules/home";
-import _import from "./modules/import";
-import index from "./modules/index";
-import other from "./modules/other";
-import password from "./modules/password";
+// 路由静态-----------------------------
+import background from "@/routerList/background";
+import draw from "@/routerList/draw";
+import evaluate from "@/routerList/evaluate";
+import home from "@/routerList/home";
+import _import from "@/routerList/import";
+import index from "@/routerList/index";
+import other from "@/routerList/other";
+import password from "@/routerList/password";
 const muenList = [
   background,
   draw,
@@ -44,6 +42,11 @@ const muenList = [
   other,
   password
 ];
+const btnList = ref([]);
+getMenuListForUser().then(({ data }) => {
+  console.log("dataqqqqAAA", data);
+});
+
 // ------------------------------------
 const IFrame = () => import("@/layout/frameView.vue");
 // https://cn.vitejs.dev/guide/features.html#glob-import
@@ -203,7 +206,66 @@ function handleAsyncRoutes(routeList) {
   }
   addPathMatch();
 }
+// 递归函数进行匹配和合并
+let matchAndMerge = (data, menuList) => {
+  return data
+    .map(item => {
+      if (item.menuType == "button") {
+        let btn = {
+          path: item.moduleUrl,
+          name: item.menuName
+        };
+        btnList.value.push(btn);
+      }
+      const matchedMenu = menuList.find(menu => {
+        return menu.path === item.moduleUrl;
+      });
+
+      if (matchedMenu) {
+        // 如果匹配,创建新的合并对象
+        delete matchedMenu.component;
+        // if()
+        const newItem = {
+          ...matchedMenu,
+          children: matchAndMerge(
+            item.childrenRes || [],
+            matchedMenu.children || []
+          )
+        };
+        return newItem; // 返回合并后的项
+      }
+
+      return null; // 没有匹配时返回null
+    })
+    .filter(Boolean); // 过滤掉null值
+};
+// 判断子路由数组是否为空
+let cleanEmptyChildren = routes => {
+  return routes.map(route => {
+    // 递归处理子路由
+    if (route.children && route.children.length > 0) {
+      route.children = cleanEmptyChildren(route.children);
+    } else {
+      delete route.children; // 删除空的 children 属性
+    }
 
+    return route; // 返回处理后的路由
+  });
+};
+// 按钮权限
+function addAuths(menu, data) {
+  for (const item of menu) {
+    // 检查当前菜单项
+    data.forEach(d => {
+      if (d.path === item.path) {
+        item.meta.auths.push(d.name);
+      }
+    });
+    if (item.children) {
+      addAuths(item.children, data);
+    }
+  }
+}
 /** 初始化路由(`new Promise` 写法防止在异步请求中造成无限循环)*/
 function initRouter() {
   if (getConfig()?.CachingAsyncRoutes) {
@@ -217,38 +279,23 @@ function initRouter() {
       });
     } else {
       return new Promise(resolve => {
-        // handleAsyncRoutes(cloneDeep(muenList));
-        // storageLocal().setItem(key, muenList);
-        // resolve(router);
-        // const roleCode = localStorage.getItem("roleCode");
         getMenuListForUser().then(({ data }) => {
-          handleAsyncRoutes(cloneDeep(data));
-          storageLocal().setItem(key, data);
+          let menuDataList = matchAndMerge(data, muenList);
+          addAuths(cleanEmptyChildren(menuDataList), btnList.value);
+          handleAsyncRoutes(cloneDeep(cleanEmptyChildren(menuDataList)));
+          storageLocal().setItem(key, cleanEmptyChildren(menuDataList));
           resolve(router);
-          console.log("data", data);
         });
-        // getAsyncRoutes().then(({ data }) => {
-        //   // console.log("data", data);
-        //   handleAsyncRoutes(cloneDeep(data));
-        //   storageLocal().setItem(key, data);
-        //   resolve(router);
-        // });
       });
     }
   } else {
     return new Promise(resolve => {
-      // getAsyncRoutes().then(({ data }) => {
-      //   handleAsyncRoutes(cloneDeep(data));
-      // resolve(router);
-      // });
-      // const roleCode = localStorage.getItem("roleCode");
       getMenuListForUser().then(({ data }) => {
-        handleAsyncRoutes(cloneDeep(data));
+        let menuDataList = matchAndMerge(data, muenList);
+        addAuths(cleanEmptyChildren(menuDataList), btnList.value);
+        handleAsyncRoutes(cloneDeep(cleanEmptyChildren(menuDataList)));
         resolve(router);
-        console.log("data", data);
       });
-      handleAsyncRoutes(cloneDeep(muenList));
-      resolve(router);
     });
   }
 }

+ 3 - 0
src/router/modules/background.ts → src/routerList/background.ts

@@ -21,6 +21,7 @@ export default {
           name: "prosonDepartment",
           meta: {
             title: "人员与部门",
+            auths: [],
             showParent: true
           },
           component: () =>
@@ -30,6 +31,7 @@ export default {
           path: "/background/framework/roles/rolePower",
           name: "rolePower",
           meta: {
+            auths: [],
             title: "角色与权限",
             showParent: true
           },
@@ -40,6 +42,7 @@ export default {
           path: "/background/framework/users/index",
           name: "users",
           meta: {
+            auths: [],
             title: "用户组",
             showParent: true
           },

+ 0 - 0
src/router/modules/draw.ts → src/routerList/draw.ts


+ 36 - 0
src/routerList/error.ts

@@ -0,0 +1,36 @@
+export default {
+  path: "/error",
+  redirect: "/error/403",
+  meta: {
+    icon: "ri:information-line",
+    showLink: false,
+    title: "异常页面",
+    rank: 9
+  },
+  children: [
+    {
+      path: "/error/403",
+      name: "403",
+      component: () => import("@/views/error/403.vue"),
+      meta: {
+        title: "403"
+      }
+    },
+    {
+      path: "/error/404",
+      name: "404",
+      component: () => import("@/views/error/404.vue"),
+      meta: {
+        title: "404"
+      }
+    },
+    {
+      path: "/error/500",
+      name: "500",
+      component: () => import("@/views/error/500.vue"),
+      meta: {
+        title: "500"
+      }
+    }
+  ]
+} satisfies RouteConfigsTable;

+ 5 - 9
src/router/modules/evaluate.ts → src/routerList/evaluate.ts

@@ -16,6 +16,7 @@ export default {
       path: "/evaluate/children/change",
       name: "evaluateChange",
       meta: {
+        auths: [],
         title: "考核管理",
         icon: server3
       },
@@ -26,6 +27,7 @@ export default {
           component: () =>
             import("@/views/evaluate/children/change/components/newAdd.vue"),
           meta: {
+            auths: [],
             title: "新建模板",
             showLink: false,
             showParent: true
@@ -36,6 +38,7 @@ export default {
           name: "evaluateChangeMould",
           component: () => import("@/views/evaluate/children/change/mould.vue"),
           meta: {
+            auths: [],
             title: "考核模板",
             showParent: true
           }
@@ -46,6 +49,7 @@ export default {
           component: () =>
             import("@/views/evaluate/children/change/manage.vue"),
           meta: {
+            auths: [],
             title: "考核管理",
             showParent: true
           }
@@ -56,19 +60,11 @@ export default {
           component: () =>
             import("@/views/evaluate/children/change/mould/manageObject.vue"),
           meta: {
+            auths: [],
             title: "考核对象",
             showLink: false
           }
         }
-        // {
-        //   path: "/evaluate/children/components/newAdd",
-        //   name: "evaluateNewAdd",
-        //   component: () =>
-        //     import("@/views/evaluate/children/change/components/newAdd.vue"),
-        //   meta: {
-        //     title: "新建模板"
-        //   }
-        // }
       ]
     },
     {

+ 26 - 0
src/routerList/home.ts

@@ -0,0 +1,26 @@
+const { VITE_HIDE_HOME } = import.meta.env;
+const Layout = () => import("@/layout/index.vue");
+
+export default {
+  path: "/",
+  name: "Home",
+  component: Layout,
+  redirect: "/welcome",
+  meta: {
+    icon: "ep:home-filled",
+    title: "首页",
+    showLink: false,
+    rank: 0
+  },
+  children: [
+    {
+      path: "/welcome",
+      name: "Welcome",
+      component: () => import("@/views/welcome/index.vue"),
+      meta: {
+        title: "首页",
+        showLink: VITE_HIDE_HOME === "true" ? false : true
+      }
+    }
+  ]
+} satisfies RouteConfigsTable;

+ 21 - 0
src/routerList/import.ts

@@ -0,0 +1,21 @@
+// 最简代码,也就是这些字段必须有
+export default {
+  path: "/import",
+  meta: {
+    title: ""
+  },
+  children: [
+    {
+      path: "/import/index",
+      name: "importIndex",
+      meta: {
+        title: "批量导入",
+        // title: "",
+        auths: [],
+        icon: "ep:home-filled",
+        showLink: false
+      },
+      component: () => import("@/components/import/index.vue")
+    }
+  ]
+} satisfies RouteConfigsTable;

+ 2 - 1
src/router/modules/index.ts → src/routerList/index.ts

@@ -9,7 +9,7 @@ export default {
     icon: "menu-index",
     rank: 1
   },
-  component: () => import("@/views/indexDefine/children/define.vue"),
+  // component: () => import("@/views/indexDefine/children/define.vue"),
   children: [
     {
       path: "/IndexDefine/index",
@@ -24,6 +24,7 @@ export default {
           name: "IndexDefine",
           component: () => import("@/views/indexDefine/children/define.vue"),
           meta: {
+            auths: [],
             title: "指标定义",
             // 是否继承父菜单显示,默认false
             showParent: true

+ 11 - 0
src/routerList/other.ts

@@ -0,0 +1,11 @@
+// 最简代码,也就是这些字段必须有
+export default {
+  path: "/fullBig",
+  name: "full-big",
+  meta: {
+    title: "维度画像",
+    icon: "ri:list-check",
+    showLink: false
+  },
+  component: () => import("@/components/echarts/big/fullBig.vue")
+} satisfies RouteConfigsTable;

+ 39 - 0
src/routerList/password.ts

@@ -0,0 +1,39 @@
+// 最简代码,也就是这些字段必须有
+import server from "@/assets/icon-png/menuList/server.svg";
+export default {
+  path: "/password",
+  meta: {
+    title: "账号与密码",
+    // 是否在主菜单显示父级路由 仅支持mixNav
+    filterMenu: true
+    // showLink: false
+  },
+  children: [
+    {
+      path: "/password-Change",
+      meta: {
+        title: "修改密码",
+        icon: server
+      },
+      children: [
+        {
+          path: "/password/change",
+          name: "password-change",
+          component: () => import("@/views/password/index.vue"),
+          meta: {
+            title: "修改密码",
+            showParent: true
+          }
+        }
+        // {
+        //   path: "/password/new",
+        //   name: "password-new",
+        //   component: () => import("@/views/password/newPassword.vue"),
+        //   meta: {
+        //     title: "重置密码"
+        //   }
+        // }
+      ]
+    }
+  ]
+} satisfies RouteConfigsTable;

+ 30 - 0
src/routerList/remaining.ts

@@ -0,0 +1,30 @@
+const Layout = () => import("@/layout/index.vue");
+
+export default [
+  {
+    path: "/login",
+    name: "Login",
+    component: () => import("@/views/login/index.vue"),
+    meta: {
+      title: "登录",
+      showLink: false,
+      rank: 101
+    }
+  },
+  {
+    path: "/redirect",
+    component: Layout,
+    meta: {
+      title: "加载中...",
+      showLink: false,
+      rank: 102
+    },
+    children: [
+      {
+        path: "/redirect/:path(.*)",
+        name: "Redirect",
+        component: () => import("@/layout/redirect.vue")
+      }
+    ]
+  }
+] satisfies Array<RouteConfigsTable>;

+ 3 - 0
src/store/modules/user.ts

@@ -9,6 +9,7 @@ import type { UserResult, RefreshTokenResult } from "@/api/user";
 import { useMultiTagsStoreHook } from "@/store/modules/multiTags";
 import { type DataInfo, setToken, removeToken, userKey } from "@/utils/auth";
 
+console.log("111", localStorage.getItem("userName"));
 export const useUserStore = defineStore({
   id: "pure-user",
   state: (): userType => ({
@@ -45,6 +46,7 @@ export const useUserStore = defineStore({
         getLogin(data)
           .then(data => {
             if (data) {
+              // token超时时间
               setToken(data.data);
               resolve(data);
             }
@@ -61,6 +63,7 @@ export const useUserStore = defineStore({
       removeToken();
       useMultiTagsStoreHook().handleTags("equal", [...routerArrays]);
       resetRouter();
+      localStorage.clear();
       router.push("/login");
     },
     /** 刷新`token` */

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

@@ -16,17 +16,17 @@ const form = reactive({
 });
 const deptTree = ref([]);
 const handleClose = () => {
-  ElMessageBox.confirm("确认关闭弹窗吗?")
-    .then(() => {
-      dialogVisibleAdd.value = !dialogVisibleAdd.value;
-      ElMessage({
-        message: "已关闭",
-        type: "success"
-      });
-    })
-    .catch(() => {
-      // catch error
-    });
+  dialogVisibleAdd.value = !dialogVisibleAdd.value;
+  // ElMessageBox.confirm("确认关闭弹窗吗?")
+  //   .then(() => {
+  //     ElMessage({
+  //       message: "已关闭",
+  //       type: "success"
+  //     });
+  //   })
+  //   .catch(() => {
+  //     // catch error
+  //   });
 };
 const postDeptUserAddApi = async () => {
   const { code, data, msg } = await postDeptUserAdd(form);

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

@@ -15,17 +15,17 @@ const form = reactive({
   desc: ""
 });
 const handleClose = () => {
-  ElMessageBox.confirm("确认关闭弹窗吗?")
-    .then(() => {
-      dialogVisibleAdd.value = !dialogVisibleAdd.value;
-      ElMessage({
-        message: "已关闭",
-        type: "success"
-      });
-    })
-    .catch(() => {
-      // catch error
-    });
+  dialogVisibleAdd.value = !dialogVisibleAdd.value;
+  // ElMessageBox.confirm("确认关闭弹窗吗?")
+  //   .then(() => {
+  //     ElMessage({
+  //       message: "已关闭",
+  //       type: "success"
+  //     });
+  //   })
+  //   .catch(() => {
+  //     // catch error
+  //   });
 };
 const rolesList = reactive({
   list: [],

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

@@ -24,13 +24,13 @@ const formLabelAlign = reactive({
   jobTitle: ""
 });
 const handleClose = (done: () => void) => {
-  ElMessageBox.confirm("配置项未保存,确认关闭", {
-    type: "warning"
-  }).then(() => {
-    drawer.value = false;
-    disabledValue.value = true;
-    editShow.value = true;
-  });
+  // ElMessageBox.confirm("配置项未保存,确认关闭", {
+  //   type: "warning"
+  // }).then(() => {
+  // });
+  drawer.value = false;
+  disabledValue.value = true;
+  editShow.value = true;
 };
 function cancelClick() {
   disabledValue.value = true;

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

@@ -14,13 +14,13 @@ const formLabelAlign = reactive({
   leader: ""
 });
 const handleClose = (done: () => void) => {
-  ElMessageBox.confirm("配置项未保存,确认关闭", {
-    type: "warning"
-  }).then(() => {
-    drawer.value = false;
-    disabledValue.value = true;
-    editShow.value = true;
-  });
+  // ElMessageBox.confirm("配置项未保存,确认关闭", {
+  //   type: "warning"
+  // }).then(() => {
+  // });
+  drawer.value = false;
+  disabledValue.value = true;
+  editShow.value = true;
 };
 function cancelClick() {
   // drawer.value = false;

+ 51 - 29
src/views/background/framework/proson/prosonDepartment.vue

@@ -213,51 +213,73 @@ const handleCurrentChange = val => {
               </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>
+                  <Auth :value="['编辑部门']">
+                    <el-dropdown-item @click="editDepartment(node)">
+                      编辑部门
+                    </el-dropdown-item>
+                  </Auth>
+                  <Auth :value="['添加子部门']">
+                    <el-dropdown-item @click="adddeptChild(node)">
+                      添加子部门
+                    </el-dropdown-item>
+                  </Auth>
+                  <Auth :value="['配置角色']">
+                    <el-dropdown-item @click="editRoles(node)">
+                      配置角色
+                    </el-dropdown-item>
+                  </Auth>
+                  <Auth :value="['删除']">
+                    <el-dropdown-item>
+                      <el-link type="danger" @click="deleteDepartment(node)"
+                        >删除</el-link
+                      >
+                    </el-dropdown-item>
+                  </Auth>
                 </el-dropdown-menu>
               </template>
             </el-dropdown>
           </div>
         </template>
       </el-tree>
-      <el-button class="w-full mt-4" type="primary" plain @click="addDepartment"
-        >添加部门</el-button
-      >
+      <Auth :value="['新建部门']">
+        <el-button
+          class="w-full mt-4"
+          type="primary"
+          plain
+          @click="addDepartment"
+          >添加部门</el-button
+        >
+      </Auth>
     </div>
     <div class="box-right">
       <UserPageTable ref="UserTable">
         <template #add-button>
-          <el-button type="primary" @click="AddPerson">新建成员</el-button>
+          <Auth :value="['添加成员']">
+            <el-button type="primary" @click="AddPerson">新建成员</el-button>
+          </Auth>
         </template>
         <template #actions="{ row }">
-          <el-dropdown trigger="click" class="mr-2">
-            <el-icon @click="personDetails(row)"><View /></el-icon>
-          </el-dropdown>
+          <Auth :value="['编辑成员']">
+            <el-dropdown trigger="click" class="mr-2">
+              <el-icon @click="personDetails(row)"><View /></el-icon>
+            </el-dropdown>
+          </Auth>
           <el-dropdown trigger="click">
             <el-icon><Operation /></el-icon>
             <template #dropdown>
               <el-dropdown-menu class="setting">
-                <el-dropdown-item>
-                  <el-link type="danger" @click="deletePerson(row)"
-                    >删除</el-link
-                  >
-                </el-dropdown-item>
-                <el-dropdown-item @click="ChangeRole(row)">
-                  配置角色
-                </el-dropdown-item>
+                <Auth :value="['删除成员']">
+                  <el-dropdown-item>
+                    <el-link type="danger" @click="deletePerson(row)"
+                      >删除</el-link
+                    >
+                  </el-dropdown-item>
+                </Auth>
+                <Auth :value="['配置角色']">
+                  <el-dropdown-item @click="ChangeRole(row)">
+                    配置角色
+                  </el-dropdown-item>
+                </Auth>
               </el-dropdown-menu>
             </template>
           </el-dropdown>

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

@@ -23,17 +23,17 @@ const postAddRoleApi = async () => {
   }
 };
 const handleClose = () => {
-  ElMessageBox.confirm("确认关闭弹窗吗?")
-    .then(() => {
-      dialogVisibleAdd.value = !dialogVisibleAdd.value;
-      ElMessage({
-        message: "已关闭",
-        type: "success"
-      });
-    })
-    .catch(() => {
-      // catch error
-    });
+  dialogVisibleAdd.value = !dialogVisibleAdd.value;
+  // ElMessageBox.confirm("确认关闭弹窗吗?")
+  //   .then(() => {
+  //     ElMessage({
+  //       message: "已关闭",
+  //       type: "success"
+  //     });
+  //   })
+  //   .catch(() => {
+  //     // catch error
+  //   });
 };
 // 添加部门保存
 const saveDepartment = () => {

+ 85 - 60
src/views/background/framework/roles/rolePower.vue

@@ -196,18 +196,29 @@ const getMenuListApi = async () => {
 getMenuListApi();
 // const postAddMenuListApi = async () => {
 //   const { code } = await postAddMenuList({
-//     menuName: "用户组",
+//     menuName: "指标库",
 //     menuType: "menu",
-//     parentCode: "menu340273914200596480",
-//     orderNum: 2,
+//     parentCode: "",
+//     orderNum: 0,
 //     url: "",
-//     moduleUrl: "/background/framework/users/index",
+//     moduleUrl: "/IndexDefine",
 //     icon: "",
 //     remark: "",
 //     menuCode: ""
 //   });
 // };
 // postAddMenuListApi();
+// {
+//     menuName: "新建模板",
+//     menuType: "menu",
+//     parentCode: "menu340271989673566208",
+//     orderNum: 0,
+//     url: "",
+//     moduleUrl: "/evaluate/children/change/components/newAdd",
+//     icon: "",
+//     remark: "",
+//     menuCode: ""
+//   }
 const getMenuListCodeForRoleApi = async item => {
   console.log("item", item);
   const { code, data } = await getMenuListCodeForRole({
@@ -323,14 +334,18 @@ const handleCurrentChange = val => {
                 </span>
                 <template #dropdown>
                   <el-dropdown-menu class="setting">
-                    <el-dropdown-item @click="editRoleName(item)">
-                      编辑名称
-                    </el-dropdown-item>
-                    <el-dropdown-item>
-                      <el-link type="danger" @click="deleteRole(item)"
-                        >删除</el-link
-                      >
-                    </el-dropdown-item>
+                    <Auth :value="['编辑角色']">
+                      <el-dropdown-item @click="editRoleName(item)">
+                        编辑名称
+                      </el-dropdown-item>
+                    </Auth>
+                    <Auth :value="['删除']">
+                      <el-dropdown-item>
+                        <el-link type="danger" @click="deleteRole(item)"
+                          >删除</el-link
+                        >
+                      </el-dropdown-item>
+                    </Auth>
                   </el-dropdown-menu>
                 </template>
               </el-dropdown>
@@ -339,9 +354,11 @@ const handleCurrentChange = val => {
         </div>
       </div>
       <el-divider />
-      <el-button type="primary" class="addRole" plain @click="addRoles()"
-        >新增角色</el-button
-      >
+      <Auth :value="['新建角色']">
+        <el-button type="primary" class="addRole" plain @click="addRoles()"
+          >新增角色</el-button
+        >
+      </Auth>
     </div>
     <!-- <div v-if="rolesList.rolesName" class="box-right"> -->
     <div class="box-right">
@@ -357,9 +374,11 @@ const handleCurrentChange = val => {
               :prefix-icon="Search"
               @change="postPageUserByRoleApi"
             />
-            <el-button type="primary" @click="AddRolesPerson"
-              >添加成员</el-button
-            >
+            <Auth :value="['添加成员']">
+              <el-button type="primary" @click="AddRolesPerson"
+                >添加成员</el-button
+              >
+            </Auth>
           </div>
           <el-table :data="tableData" style="width: 100%">
             <el-table-column prop="realName" label="姓名" />
@@ -370,9 +389,11 @@ const handleCurrentChange = val => {
             <el-table-column label="操作">
               <template #default="{ row }">
                 <el-dropdown trigger="click" class="mr-2">
-                  <el-text type="danger" @click="deltetePerson(row)">
-                    移除
-                  </el-text>
+                  <Auth :value="['移除成员']">
+                    <el-text type="danger" @click="deltetePerson(row)">
+                      移除
+                    </el-text>
+                  </Auth>
                 </el-dropdown>
               </template>
             </el-table-column>
@@ -392,45 +413,49 @@ const handleCurrentChange = val => {
             </div>
           </div>
         </el-tab-pane>
-        <el-tab-pane label="权限管理" name="second">
-          <el-table :data="tableData" border style="width: 100%">
-            <el-table-column prop="date" label="模块">
-              <template #default="{ row }">
-                <div>
-                  <input v-model="row.show" type="checkbox" />{{ row.date }}
-                  <br />
-                  <input v-model="row.show1" type="checkbox" />{{ row.name }}
-                  <br />
-                  <input v-model="row.show2" type="checkbox" />{{ row.address }}
-                </div>
-              </template>
-            </el-table-column>
-            <el-table-column prop="name" label="菜单">
-              <template #default="{ row }">
-                <div>
-                  <input v-model="row.show" type="checkbox" />{{ row.date }}
-                </div>
-                <div>
-                  <input v-model="row.show" type="checkbox" />{{ row.date }}
-                </div>
-              </template>
-            </el-table-column>
-            <el-table-column prop="address" label="全选">
-              <template #default="{ row }">
-                <div>
-                  <input v-model="row.show" type="checkbox" />{{ row.date }}
-                </div>
-              </template>
-            </el-table-column>
-            <el-table-column prop="address" label="权限点">
-              <template #default="{ row }">
-                <div>
-                  <input v-model="row.show" type="checkbox" />{{ row.date }}
-                </div>
-              </template>
-            </el-table-column>
-          </el-table>
-        </el-tab-pane>
+        <Auth :value="['权限管理']">
+          <el-tab-pane label="权限管理" name="second">
+            <el-table :data="tableData" border style="width: 100%">
+              <el-table-column prop="date" label="模块">
+                <template #default="{ row }">
+                  <div>
+                    <input v-model="row.show" type="checkbox" />{{ row.date }}
+                    <br />
+                    <input v-model="row.show1" type="checkbox" />{{ row.name }}
+                    <br />
+                    <input v-model="row.show2" type="checkbox" />{{
+                      row.address
+                    }}
+                  </div>
+                </template>
+              </el-table-column>
+              <el-table-column prop="name" label="菜单">
+                <template #default="{ row }">
+                  <div>
+                    <input v-model="row.show" type="checkbox" />{{ row.date }}
+                  </div>
+                  <div>
+                    <input v-model="row.show" type="checkbox" />{{ row.date }}
+                  </div>
+                </template>
+              </el-table-column>
+              <el-table-column prop="address" label="全选">
+                <template #default="{ row }">
+                  <div>
+                    <input v-model="row.show" type="checkbox" />{{ row.date }}
+                  </div>
+                </template>
+              </el-table-column>
+              <el-table-column prop="address" label="权限点">
+                <template #default="{ row }">
+                  <div>
+                    <input v-model="row.show" type="checkbox" />{{ row.date }}
+                  </div>
+                </template>
+              </el-table-column>
+            </el-table>
+          </el-tab-pane>
+        </Auth>
       </el-tabs>
     </div>
   </div>

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

@@ -42,16 +42,16 @@ const postAddUserGroupApi = async () => {
   }
 };
 const handleClose = () => {
-  ElMessageBox.confirm("确认关闭弹窗吗?")
-    .then(() => {
-      dialogVisibleAdd.value = !dialogVisibleAdd.value;
-      ElMessage({
-        message: "已关闭"
-      });
-    })
-    .catch(() => {
-      // catch error
-    });
+  dialogVisibleAdd.value = !dialogVisibleAdd.value;
+  // ElMessageBox.confirm("确认关闭弹窗吗?")
+  //   .then(() => {
+  //     ElMessage({
+  //       message: "已关闭"
+  //     });
+  //   })
+  //   .catch(() => {
+  //     // catch error
+  //   });
 };
 // 角色数据
 

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

@@ -24,13 +24,13 @@ const postUpdateGroupByCodeApi = async () => {
   }
 };
 const handleClose = (done: () => void) => {
-  ElMessageBox.confirm("配置项未保存,确认关闭", {
-    type: "warning"
-  }).then(() => {
-    drawer.value = false;
-    disabledValue.value = true;
-    editShow.value = true;
-  });
+  // ElMessageBox.confirm("配置项未保存,确认关闭", {
+  //   type: "warning"
+  // }).then(() => {
+  // });
+  drawer.value = false;
+  disabledValue.value = true;
+  editShow.value = true;
 };
 function cancelClick() {
   // drawer.value = false;

+ 32 - 16
src/views/background/framework/users/index.vue

@@ -204,17 +204,23 @@ const deltetePerson = row => {
                 </span>
                 <template #dropdown>
                   <el-dropdown-menu class="setting">
-                    <el-dropdown-item @click="editUsers(item)">
-                      编辑
-                    </el-dropdown-item>
-                    <el-dropdown-item @click="changeUsers(item)">
-                      配置角色
-                    </el-dropdown-item>
-                    <el-dropdown-item>
-                      <el-link type="danger" @click="deleteUsers(item)"
-                        >删除</el-link
-                      >
-                    </el-dropdown-item>
+                    <Auth :value="['编辑']">
+                      <el-dropdown-item @click="editUsers(item)">
+                        编辑
+                      </el-dropdown-item>
+                    </Auth>
+                    <Auth :value="['配置角色']">
+                      <el-dropdown-item @click="changeUsers(item)">
+                        配置角色
+                      </el-dropdown-item>
+                    </Auth>
+                    <Auth :value="['删除']">
+                      <el-dropdown-item>
+                        <el-link type="danger" @click="deleteUsers(item)"
+                          >删除</el-link
+                        >
+                      </el-dropdown-item>
+                    </Auth>
                   </el-dropdown-menu>
                 </template>
               </el-dropdown>
@@ -223,20 +229,30 @@ const deltetePerson = row => {
         </div>
       </div>
       <el-divider />
-      <el-button type="primary" class="addRole" plain @click="addUsersList()"
-        >新增用户组</el-button
-      >
+      <Auth :value="['新建用户组']">
+        <el-button type="primary" class="addRole" plain @click="addUsersList()"
+          >新增用户组</el-button
+        >
+      </Auth>
     </div>
     <!-- <div v-if="rolesList.rolesName" class="box-right"> -->
     <div class="box-right">
       <h3>{{ rolesList.rolesName }}</h3>
       <UserPageTable ref="UserTable">
         <template #add-button>
-          <el-button type="primary" @click="AddUsersPerson">添加成员</el-button>
+          <Auth :value="['添加成员']">
+            <el-button type="primary" @click="AddUsersPerson"
+              >添加成员</el-button
+            >
+          </Auth>
         </template>
         <template #actions="{ row }">
           <el-dropdown trigger="click" class="mr-2">
-            <el-text type="danger" @click="deltetePerson(row)"> 移除 </el-text>
+            <Auth :value="['移出成员']">
+              <el-text type="danger" @click="deltetePerson(row)">
+                移除
+              </el-text>
+            </Auth>
           </el-dropdown>
         </template>
       </UserPageTable>

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

@@ -150,17 +150,18 @@ const backChange = () => {
   router.back();
 };
 const save = () => {
-  formRef.value.validate(valid => {
-    if (valid) {
-      if (tepNameForm.id) {
-        getListByApi();
-      } else {
-        postAddTemplateApi();
-      }
-    }
-  });
   if (titleShow.value) {
     router.back();
+  } else {
+    formRef.value.validate(valid => {
+      if (valid) {
+        if (tepNameForm.id) {
+          getListByApi();
+        } else {
+          postAddTemplateApi();
+        }
+      }
+    });
   }
 };
 const deleteRow = row => {
@@ -229,8 +230,7 @@ const deletePen = index => {
     });
 };
 const settingIndex = row => {
-  console.log(row);
-  settingIndexDrawerRef.value.open();
+  settingIndexDrawerRef.value.open(row);
 };
 const importIndexDialog = row => {
   importIndexRef.value.open(row);

+ 75 - 49
src/views/evaluate/children/change/components/settingIndexDrawer.vue

@@ -2,6 +2,8 @@
 import { ref, reactive } from "vue";
 import { ElMessageBox, ElMessage } from "element-plus";
 import { calculator } from "./evaluate";
+import { getIndexInfo } from "@/api/templateInfo";
+import { conditionVerify } from "@/api/formula";
 import type { DrawerProps, FormItemProps, FormProps } from "element-plus";
 // const itemLabelPosition = ref<FormItemProps["labelPosition"]>("");
 const drawer = ref(false);
@@ -20,18 +22,51 @@ const params = reactive({
   dimId: "",
   indId: "",
   valueInput: "",
-  scoreStandard: "",
+  scoreStandard: 0,
   remark: "",
   scoreRule: "",
   targetValue: "",
   finalValue: "",
+  formulaType: 0,
   challengeValue: "",
   startValue: "",
   datasoure: "",
   weight: "",
   scoreValue: "",
-  formula: ""
+  formula: {
+    noConditionFormula: ""
+  }
 });
+// 详情信息
+const getIndexInfoApi = async id => {
+  const { data, code, msg } = await getIndexInfo(id);
+  // console.log("1111", data);
+  if (code === 200) {
+    Object.assign(params, data);
+    if (isValidJSON(data.formula)) {
+      params.formula = JSON.parse(data.formula);
+    }
+    console.log("params", params);
+  } else {
+    ElMessage.error(msg);
+  }
+};
+const conditionVerifyApi = async () => {
+  let formula = JSON.stringify(params.formula);
+  const { code, msg } = await conditionVerify({
+    formulaType: params.formulaType,
+    formula
+  });
+};
+// 判断是否为json
+function isValidJSON(str) {
+  try {
+    JSON.parse(str);
+    return true; // 如果解析成功,返回true
+  } catch (e) {
+    return false; // 如果解析失败,返回false
+  }
+}
 const handleClose = (done: () => void) => {
   ElMessageBox.confirm("配置项未保存,确认关闭", {
     type: "warning"
@@ -57,31 +92,22 @@ function confirmClick() {
 }
 const open = row => {
   drawer.value = true;
+  // console.log("row", row.id);
+  getIndexInfoApi(row.id);
 };
 const editShow = ref(true);
 defineExpose({
   open
 });
 const timer = ref("");
-// 评分方式------------------------
-const options = [
-  {
-    value: "1",
-    label: "手动输入方式"
-  },
-  {
-    value: "2",
-    label: "公式自动计算"
-  }
-];
 // 公式计算
 const compute = [
   {
-    value: "1",
+    value: 0,
     label: "无公式计算"
   },
   {
-    value: "2",
+    value: 1,
     label: "多公式计算"
   }
 ];
@@ -103,20 +129,25 @@ const rolesList = reactive({
 });
 const lookRoles = item => {
   bgColor.value = item.id;
+  params.formula.noConditionFormula =
+    params.formula.noConditionFormula + item.name;
 };
 // 字符拼接
 const countNumber = (item: string) => {
-  rolesList.value = rolesList.value + item;
+  params.formula.noConditionFormula = params.formula.noConditionFormula + item;
 };
 // 清除
 const remove = () => {
-  if (rolesList.value.length > 0) {
-    rolesList.value = rolesList.value.slice(0, -1);
+  if (params.formula.noConditionFormula.length > 0) {
+    params.formula.noConditionFormula = params.formula.noConditionFormula.slice(
+      0,
+      -1
+    );
   }
 };
 // 清空
 const removeVoid = () => {
-  rolesList.value = "";
+  params.formula.noConditionFormula = "";
 };
 // 计算确认
 const count = item => {
@@ -312,36 +343,25 @@ const addItemDataList = (index: number, itemListValue: string) => {
       </template>
       <template #default>
         <div>
-          <el-form
-            label-position="top"
-            label-width="auto"
-            :model="formLabelAlign"
-          >
+          <el-form label-position="top" label-width="auto" :model="params">
             <el-form-item label="完成值录入人" label-position="top">
-              <el-select v-model="formLabelAlign.grade" placeholder="请选择">
-                <el-option label="考核人" value="0" />
-                <el-option label="上级" value="1" />
-                <el-option label="指定人员" value="2" />
-                <el-option label="考核管理员" value="3" />
-                <el-option label="指标自动采集" value="4" />
+              <el-select v-model="params.valueInput" placeholder="请选择">
+                <el-option label="考核人" :value="0" />
+                <el-option label="上级" :value="1" />
+                <el-option label="指定人员" :value="2" />
+                <el-option label="考核管理员" :value="3" />
+                <el-option label="指标自动采集" :value="4" />
               </el-select>
             </el-form-item>
             <el-form-item label="评分方式" label-position="top">
-              <el-select v-model="formLabelAlign.grade" placeholder="请选择">
-                <el-option
-                  v-for="item in options"
-                  :key="item.value"
-                  :label="item.label"
-                  :value="item.value"
-                />
+              <el-select v-model="params.scoreStandard" placeholder="请选择">
+                <el-option label="手动输入" :value="0" />
+                <el-option label="公式自动计算" :value="1" />
               </el-select>
             </el-form-item>
-            <div v-if="formLabelAlign.grade === '2'">
+            <div v-if="params.scoreStandard === 1">
               <el-form-item label="公式类型" label-position="top">
-                <el-select
-                  v-model="formLabelAlign.compute"
-                  placeholder="请选择"
-                >
+                <el-select v-model="params.formulaType" placeholder="请选择">
                   <el-option
                     v-for="item in compute"
                     :key="item.value"
@@ -351,7 +371,7 @@ const addItemDataList = (index: number, itemListValue: string) => {
                 </el-select>
               </el-form-item>
               <el-form-item
-                v-if="formLabelAlign.compute === '1'"
+                v-if="params.formulaType === 0"
                 label="公式设置"
                 label-position="top"
               >
@@ -359,12 +379,14 @@ const addItemDataList = (index: number, itemListValue: string) => {
                   <div>
                     <el-text>得分 =</el-text>
                     <el-input
-                      v-model="rolesList.num"
+                      v-model="params.scoreValue"
                       class="ml-2 mr-2"
                       style="width: 240px"
                     />
                     <el-text>
-                      <el-button type="primary">公式验证</el-button>
+                      <el-button type="primary" @click="conditionVerifyApi"
+                        >公式验证</el-button
+                      >
                     </el-text>
                   </div>
                   <div
@@ -373,13 +395,13 @@ const addItemDataList = (index: number, itemListValue: string) => {
                   >
                     <div class="w-1/3 h-60 pl-1 bg-white rounded-md">
                       <div class="w-[100%] text-xs mt-2">
-                        <div><el-text type="info">::变量</el-text></div>
+                        <div><el-text type="info">:::变量</el-text></div>
                       </div>
                       <div v-for="item in rolesList.data" :key="item.id">
                         <div
                           :class="[
                             'cursor-pointer text-xs mt-1',
-                            { 'bg-blue-200': bgColor === item.id }
+                            { bgBack: bgColor === item.id }
                           ]"
                           @click="lookRoles(item)"
                         >
@@ -392,7 +414,7 @@ const addItemDataList = (index: number, itemListValue: string) => {
                         <div class="p-1"><el-text>得分 = </el-text></div>
                         <!-- style="height: 95px" -->
                         <el-input
-                          v-model="rolesList.value"
+                          v-model="params.formula.noConditionFormula"
                           :rows="3"
                           disabled
                           type="textarea"
@@ -674,7 +696,7 @@ const addItemDataList = (index: number, itemListValue: string) => {
                               @click="addItemDataList(index, itemList.value)"
                             >
                               <el-icon><Plus /></el-icon>
-                              添加条件
+                              添加条件
                             </el-text>
                           </div>
                         </div>
@@ -717,6 +739,10 @@ const addItemDataList = (index: number, itemListValue: string) => {
   background-color: #409eff;
 }
 
+.bgBack {
+  background-color: #f3f3f3;
+}
+
 .text_border {
   display: flex;
   align-items: center;

+ 22 - 14
src/views/evaluate/children/change/manage.vue

@@ -125,9 +125,11 @@ const saveCopy = async () => {
           </div>
         </div>
         <div class="flex pt-2 mr-6">
-          <el-button type="primary" class="mr-8" @click="newAdd"
-            >发起考核</el-button
-          >
+          <Auth :value="['发起考核']">
+            <el-button type="primary" class="mr-8" @click="newAdd"
+              >发起考核</el-button
+            >
+          </Auth>
         </div>
       </div>
       <div class="mt-8">
@@ -159,23 +161,29 @@ const saveCopy = async () => {
           <el-table-column label="操作" width="150" fixed="right">
             <template #default="{ row }">
               <!-- <el-button link :icon="Edit" /> -->
-              <el-dropdown trigger="click">
-                <span class="el-dropdown-link navbar-bg-hover select-none">
-                  <el-icon @click="setEdit(row)"><Edit /></el-icon>
-                </span>
-              </el-dropdown>
+              <Auth :value="['编辑']">
+                <el-dropdown trigger="click">
+                  <span class="el-dropdown-link navbar-bg-hover select-none">
+                    <el-icon @click="setEdit(row)"><Edit /></el-icon>
+                  </span>
+                </el-dropdown>
+              </Auth>
               <el-dropdown class="ml-2" trigger="click">
                 <span class="el-dropdown-link navbar-bg-hover select-none">
                   <el-icon><More /></el-icon>
                 </span>
                 <template #dropdown>
                   <el-dropdown-menu class="setting">
-                    <el-dropdown-item @click="setDelete(row)">
-                      <el-text type="danger">删除</el-text>
-                    </el-dropdown-item>
-                    <el-dropdown-item @click="copyManage(row)">
-                      复制
-                    </el-dropdown-item>
+                    <Auth :value="['删除']">
+                      <el-dropdown-item @click="setDelete(row)">
+                        <el-text type="danger">删除</el-text>
+                      </el-dropdown-item>
+                    </Auth>
+                    <Auth :value="['复制']">
+                      <el-dropdown-item @click="copyManage(row)">
+                        复制
+                      </el-dropdown-item>
+                    </Auth>
                   </el-dropdown-menu>
                 </template>
               </el-dropdown>

+ 22 - 14
src/views/evaluate/children/change/mould.vue

@@ -124,9 +124,11 @@ const handleCurrentChange = (val: number) => {
         </div>
       </div>
       <div class="flex pt-2 mr-6">
-        <el-button type="primary" class="mr-2" @click="newAdd"
-          >新建考核模板</el-button
-        >
+        <Auth :value="['新建考核模板']">
+          <el-button type="primary" class="mr-2" @click="newAdd"
+            >新建考核模板</el-button
+          >
+        </Auth>
       </div>
     </div>
     <div class="mt-8">
@@ -143,23 +145,29 @@ const handleCurrentChange = (val: number) => {
         <el-table-column label="操作" width="200">
           <template #default="{ row }">
             <!-- <el-button link :icon="Edit" /> -->
-            <el-dropdown trigger="click">
-              <span class="el-dropdown-link navbar-bg-hover select-none">
-                <el-icon @click="setEdit(row)"><Edit /></el-icon>
-              </span>
-            </el-dropdown>
+            <Auth :value="['复制']">
+              <el-dropdown trigger="click">
+                <span class="el-dropdown-link navbar-bg-hover select-none">
+                  <el-icon @click="setEdit(row)"><Edit /></el-icon>
+                </span>
+              </el-dropdown>
+            </Auth>
             <el-dropdown class="ml-2" trigger="click">
               <span class="el-dropdown-link navbar-bg-hover select-none">
                 <el-icon><More /></el-icon>
               </span>
               <template #dropdown>
                 <el-dropdown-menu class="setting">
-                  <el-dropdown-item @click="setDelete(row)">
-                    <el-text type="danger">删除</el-text>
-                  </el-dropdown-item>
-                  <el-dropdown-item @click="setCopy(row)">
-                    复制
-                  </el-dropdown-item>
+                  <Auth :value="['删除']">
+                    <el-dropdown-item @click="setDelete(row)">
+                      <el-text type="danger">删除</el-text>
+                    </el-dropdown-item>
+                  </Auth>
+                  <Auth :value="['复制']">
+                    <el-dropdown-item @click="setCopy(row)">
+                      复制
+                    </el-dropdown-item>
+                  </Auth>
                 </el-dropdown-menu>
               </template>
             </el-dropdown>

+ 21 - 13
src/views/evaluate/children/change/mould/manageObject.vue

@@ -197,9 +197,11 @@ const GoView = row => {
         </div>
       </div>
       <div class="mr-10">
-        <el-button v-if="publishShow" type="primary" @click="publish"
-          >公布考核结果</el-button
-        >
+        <Auth :value="['公布考核结果']">
+          <el-button v-if="publishShow" type="primary" @click="publish"
+            >公布考核结果</el-button
+          >
+        </Auth>
       </div>
     </div>
     <el-tabs v-model="activeName" class="demo-tabs">
@@ -234,12 +236,16 @@ const GoView = row => {
           <div class="mr-10">
             <el-button type="primary" plain>批量调整执行人</el-button>
             <el-button type="primary" plain>批量重置流程</el-button>
-            <el-button type="primary" plain @click="delAssessmentObjectApi">
-              批量删除
-            </el-button>
-            <el-button type="primary" plain @click="dialogVisibleAddShow"
-              >添加被考核人</el-button
-            >
+            <Auth :value="['批量删除']">
+              <el-button type="primary" plain @click="delAssessmentObjectApi">
+                批量删除
+              </el-button>
+            </Auth>
+            <Auth :value="['添加被考核人']">
+              <el-button type="primary" plain @click="dialogVisibleAddShow"
+                >添加被考核人</el-button
+              >
+            </Auth>
           </div>
         </div>
         <el-table
@@ -277,9 +283,11 @@ const GoView = row => {
             <el-input class="ml-2" :prefix-icon="Search" />
           </div>
           <div class="mr-10">
-            <el-button type="primary" plain @click="addsImport"
-              >批量导入</el-button
-            >
+            <Auth :value="['批量导入指标']">
+              <el-button type="primary" plain @click="addsImport"
+                >批量导入</el-button
+              >
+            </Auth>
           </div>
         </div>
       </el-tab-pane>
@@ -287,7 +295,7 @@ const GoView = row => {
         <!--  -->
       </el-tab-pane>
       <el-tab-pane label="基础信息" name="fourth">
-        <messagePerson />
+        <messagePerson :id="messageData.id" />
       </el-tab-pane>
     </el-tabs>
     <!-- 添加被考核人 -->

+ 28 - 2
src/views/evaluate/children/change/mould/message.vue

@@ -2,12 +2,18 @@
 import { ref, reactive, nextTick } from "vue";
 import { ElMessageBox, ElMessage } from "element-plus";
 import { Calendar } from "@element-plus/icons-vue";
+import { getAssessmentDetails } from "@/api/assessment";
 import dayjs from "dayjs";
-import { postAddAssessment } from "@/api/assessment";
+import { postAddAssessment, updateAssessment } from "@/api/assessment";
 import { postListTreeWithUser } from "@/api/department";
 import { getTemplateInfoList } from "@/api/templateInfo";
 import ElPicker from "@/components/ELPicker/index.vue";
 const $emit = defineEmits(["addHandClick"]);
+const $props = defineProps({
+  id: {
+    type: String
+  }
+});
 const dialogVisibleAdd = ref(false);
 const btn = ref(true);
 const btnShow = () => {
@@ -45,7 +51,7 @@ const handleClose = () => {
 };
 // 添加部门保存
 const saveDepartment = async () => {
-  btn.value = true;
+  updateAssessmentApi();
 };
 const addNew = () => {
   form.assessmentObjectList.push({
@@ -168,6 +174,26 @@ function transformData(arr) {
     };
   });
 }
+// 详情
+const getAssessmentDetailsApi = async () => {
+  const { data, code, msg } = await getAssessmentDetails($props.id);
+  if (code === 200) {
+    Object.assign(form, data);
+  } else {
+    ElMessage.error(msg);
+  }
+};
+getAssessmentDetailsApi();
+// 修改
+const updateAssessmentApi = async () => {
+  const { code, msg } = await updateAssessment({ id: $props.id, ...form });
+  if (code === 200) {
+    btn.value = true;
+    ElMessage.success("修改成功");
+  } else {
+    ElMessage.error(msg);
+  }
+};
 </script>
 
 <template>

+ 1 - 1
src/views/indexDefine/children/components/dialog.vue

@@ -63,7 +63,7 @@ const save = () => {
 };
 const open = () => {
   // 打开弹框
-  const form = {
+  form = {
     name: "",
     categoryName: "",
     define: "",

+ 22 - 12
src/views/indexDefine/children/define.vue

@@ -244,10 +244,14 @@ const postUpdateDeptApi = async (row, state) => {
             </div>
           </div>
           <div class="flex pt-2 mr-6">
-            <el-button class="mr-2" @click="GoSizeImport">批量导入</el-button>
-            <el-button type="primary" class="mr-2" @click="newAddIndex"
-              >创建指标</el-button
-            >
+            <Auth :value="['批量导入']">
+              <el-button class="mr-2" @click="GoSizeImport">批量导入</el-button>
+            </Auth>
+            <Auth :value="['创建指标']">
+              <el-button type="primary" class="mr-2" @click="newAddIndex"
+                >创建指标</el-button
+              >
+            </Auth>
           </div>
         </div>
       </div>
@@ -274,20 +278,26 @@ const postUpdateDeptApi = async (row, state) => {
           <el-table-column label="操作">
             <template #default="{ row }">
               <!-- <el-button link :icon="Edit" /> -->
-              <el-dropdown trigger="click">
-                <span class="el-dropdown-link navbar-bg-hover select-none pt-1">
-                  <el-text type="primary" @click="setEdit(row)">编辑</el-text>
-                </span>
-              </el-dropdown>
+              <Auth :value="['编辑']">
+                <el-dropdown trigger="click">
+                  <span
+                    class="el-dropdown-link navbar-bg-hover select-none pt-1"
+                  >
+                    <el-text type="primary" @click="setEdit(row)">编辑</el-text>
+                  </span>
+                </el-dropdown>
+              </Auth>
               <el-dropdown class="ml-2" trigger="click">
                 <span class="el-dropdown-link navbar-bg-hover select-none pt-1">
                   <el-text type="primary">更多</el-text>
                 </span>
                 <template #dropdown>
                   <el-dropdown-menu class="setting">
-                    <el-dropdown-item @click="setDelete(row)">
-                      <el-text type="danger">删除</el-text>
-                    </el-dropdown-item>
+                    <Auth :value="['删除']">
+                      <el-dropdown-item @click="setDelete(row)">
+                        <el-text type="danger">删除</el-text>
+                      </el-dropdown-item>
+                    </Auth>
                     <el-dropdown-item @click="release(row)">
                       发布
                     </el-dropdown-item>

+ 8 - 8
src/views/login/index.vue

@@ -6,12 +6,12 @@ import { loginRules } from "./utils/rule";
 import { useNav } from "@/layout/hooks/useNav";
 import type { FormInstance } from "element-plus";
 import { useLayout } from "@/layout/hooks/useLayout";
-import { useUserStoreHook } from "@/store/modules/user";
 import { initRouter, getTopMenu } from "@/router/utils";
 import { bg, avatar, illustration } from "./utils/static";
 import { useRenderIcon } from "@/components/ReIcon/src/hooks";
 import lockOn from "../../assets/icon-png/lock-on.svg";
 import userPng from "@/assets/icon-png/user.svg";
+import { useUserStoreHook } from "@/store/modules/user";
 import {
   ref,
   reactive,
@@ -41,10 +41,10 @@ dataThemeChange();
 const { title } = useNav();
 
 const ruleForm = reactive({
-  username: "",
-  password: ""
-  // username: "admin",
-  // password: "123456"
+  // username: "",
+  // password: ""
+  username: "admin",
+  password: "123456"
 });
 const handleBlur = () => {
   // @ts-ignore
@@ -72,6 +72,7 @@ const onLogin = async (formEl: FormInstance | undefined) => {
             // @ts-ignore
             localStorage.setItem("userName", res.data.realName);
             //  获取后端路由动态路由逻辑,不可删除
+            // debugger;
             initRouter().then(() => {
               // router.push(getTopMenu(true).path);
               router.push("/");
@@ -79,10 +80,8 @@ const onLogin = async (formEl: FormInstance | undefined) => {
             });
             // router.push("/");
             console.log("登录成功", res);
-            // message("登录成功", { type: "success" });
           } else {
-            // @ts-ignore
-            console.log("登录失败", res.msg);
+            loading.value = false;
             // @ts-ignore
             message(res.msg, { type: "error" });
           }
@@ -90,6 +89,7 @@ const onLogin = async (formEl: FormInstance | undefined) => {
         .catch(err => {
           loading.value = false;
           message(err, { type: "error" });
+          console.log("登录失败", err);
           return fields;
         });
     } else {