From dae39dea7e2874ebe2f17438949255ce8331ecef Mon Sep 17 00:00:00 2001 From: 董国庆 <364620639@qq.com> Date: 星期四, 26 六月 2025 19:30:45 +0800 Subject: [PATCH] 修改权限 --- culture/src/layouts/components/ElMenu/index.vue | 37 ++++++++++++++++++++++++++++++++++++- 1 files changed, 36 insertions(+), 1 deletions(-) diff --git a/culture/src/layouts/components/ElMenu/index.vue b/culture/src/layouts/components/ElMenu/index.vue index 13e7658..b35114d 100644 --- a/culture/src/layouts/components/ElMenu/index.vue +++ b/culture/src/layouts/components/ElMenu/index.vue @@ -18,9 +18,42 @@ <script> import routers from "../../../router"; import MenuItem from "./MenuItem.vue"; +import { mapState } from "vuex"; + +// 递归过滤菜单 +function filterMenusByPrivilege(menus, flatMenus) { + return menus + .filter(menu => { + // 没有 privilege 字段的菜单默认显示,有 privilege 字段的要判断权限 + if (menu.meta && menu.meta.privilege) { + return flatMenus.includes(menu.meta.privilege); + } + return true; + }) + .map(menu => { + // 递归处理 children + if (menu.children && menu.children.length > 0) { + return { + ...menu, + children: filterMenusByPrivilege(menu.children, flatMenus) + }; + } + return menu; + }) + .filter(menu => { + // 过滤掉 children 为空的父级菜单 + if (menu.children && menu.children.length === 0) { + return false; + } + return true; + }); +} export default { components: { MenuItem, + }, + computed: { + ...mapState(["flatMenus"]), }, data() { return { @@ -30,11 +63,13 @@ mounted() { // 获取所有定义的一级菜单和多级菜单 // 过滤掉登录路由和重定向路由,只获取主布局下的路由 - this.routersList = routers.options.routes.filter(route => + const allMenus = routers.options.routes.filter(route => route.path !== '/login' && route.path !== '/' && !route.meta?.hide ); + // 权限过滤 + this.routersList = filterMenusByPrivilege(allMenus, this.flatMenus); }, }; </script> -- Gitblit v1.7.1