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