From f09a8a0083fdc5a50ce699426bec8dc90bfc3e9c Mon Sep 17 00:00:00 2001 From: lcw <1878680531@qq.com> Date: Thu, 16 Apr 2026 15:44:42 +0800 Subject: [PATCH] lcw --- src/api/user-manage.js | 4 +- src/layout/components/SideBar/SideBarMenu.vue | 84 ++++++++++++++----- .../role-list/conponents/PrivilegesDialog.vue | 51 +++++------ .../systemConfig/role-list/index.vue | 10 ++- .../user-list/components/roles.vue | 43 ++++++---- vue.config.js | 4 +- 6 files changed, 124 insertions(+), 72 deletions(-) diff --git a/src/api/user-manage.js b/src/api/user-manage.js index 203014e..5ff0c46 100644 --- a/src/api/user-manage.js +++ b/src/api/user-manage.js @@ -620,7 +620,7 @@ export const idCardNoLogin = (data) => { method: "POST", data }); -} +}; // 通过身份证号获取会话信息 export const getSessionForSfzh = (params) => { return request({ @@ -636,7 +636,7 @@ export const idCardNoLoginPcs = (data) => { method: "POST", data }); -} +}; // 通过身份证号获取会话信息 export const getSessionForSfzhPcs = (params) => { return request({ diff --git a/src/layout/components/SideBar/SideBarMenu.vue b/src/layout/components/SideBar/SideBarMenu.vue index 8e857aa..c3cb4d9 100644 --- a/src/layout/components/SideBar/SideBarMenu.vue +++ b/src/layout/components/SideBar/SideBarMenu.vue @@ -1,8 +1,19 @@ @@ -11,27 +22,62 @@ import { computed } from "vue"; import { useRouter, useRoute } from "vue-router"; import { useStore } from "vuex"; import { filterRoutes, generateMenus } from "@/utils/route"; +import { getItem } from "@/utils/storage"; import SideBarItem from "./SideBarItem.vue"; const store = useStore(); const router = useRouter(); +const EXCLUDE_NAMES = [ + "warningLists", + "behaviorWarnings", + "identityWarnings", + "combinedWarnings", + "DeploymentAreas", + "mpvPeos", + "myControls" +]; +const filterRoutesByMenusPermission = (routes, menusSet) => { + return routes.reduce((result, route) => { + const children = Array.isArray(route.children) + ? filterRoutesByMenusPermission(route.children, menusSet) + : []; + const routeName = route.name ? `${route.name}` : ""; + const selfMatched = routeName && menusSet.has(routeName); + if (selfMatched || children.length > 0) { + result.push({ ...route, children }); + } + return result; + }, []); +}; const routes = computed(() => { const fRoutes = filterRoutes(router.getRoutes()); + const data = fRoutes.filter((item) => !EXCLUDE_NAMES.includes(item.name)); + const menusPermission = getItem("menusPermission"); + console.log(JSON.parse(localStorage.getItem("menusPermission"))); + console.log( + router.getRoutes().map((r) => ({ name: r.name, path: r.path })), + "xxx" + ); + // menusPermission 里存的 name + router + .getRoutes() + .filter((r) => r.path === "/") + .map((r) => ({ + name: r.name, + path: r.path, + children: r.children?.map((c) => ({ name: c.name, path: c.path })) + })); + console.log(JSON.parse(localStorage.getItem("menusPermission"))); + const menusSet = new Set( + Array.isArray(menusPermission) + ? menusPermission.map((item) => `${item}`) + : [] + ); + console.log(menusSet); - const data = fRoutes.filter(item => { - if (item.name != "warningLists" - && item.name != "behaviorWarnings" - && item.name != "identityWarnings" - && item.name != "combinedWarnings" - && item.name != "DeploymentAreas" - && item.name != "mpvPeos" - && item.name != "myControls") { - return item; - } - } - ) - console.log(data); - - return generateMenus(data); + const permissionFiltered = menusSet.size + ? filterRoutesByMenusPermission(data, menusSet) + : data; + return generateMenus(permissionFiltered); }); if (!store.getters.token) { router.push("/login"); diff --git a/src/views/backOfficeSystem/systemConfig/role-list/conponents/PrivilegesDialog.vue b/src/views/backOfficeSystem/systemConfig/role-list/conponents/PrivilegesDialog.vue index 2c7b06f..a6d4257 100644 --- a/src/views/backOfficeSystem/systemConfig/role-list/conponents/PrivilegesDialog.vue +++ b/src/views/backOfficeSystem/systemConfig/role-list/conponents/PrivilegesDialog.vue @@ -15,10 +15,9 @@ node-key="id" show-checkbox default-expand-all - :check-strictly="true" - @check="checkeTree" - /> - + :check-strictly="false" + @check="handleCheck" + />