From 5c1e0a47eea514f59f697133fe8a01bcbf6f7a78 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 15 十月 2026 10:31:28 +0800
Subject: [PATCH] refactor(首页): 展示模块跟随菜单权限自动隐藏

---
 src/utils/use-home-access.ts |   54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 54 insertions(+), 0 deletions(-)

diff --git a/src/utils/use-home-access.ts b/src/utils/use-home-access.ts
new file mode 100644
index 0000000..5a578be
--- /dev/null
+++ b/src/utils/use-home-access.ts
@@ -0,0 +1,54 @@
+import type { RouteRecordRaw } from 'vue-router';
+
+import { useAccess } from '@vben/access';
+import { useAccessStore, useUserStore } from '@vben/stores';
+
+/** 棣栭〉甯搁┗锛屼笟鍔℃暟鎹拰鍏ュ彛浠嶉渶閬靛惊褰撳墠鐢ㄦ埛鐨勮彍鍗曟潈闄愩�� */
+export function useHomeAccess() {
+  const accessStore = useAccessStore();
+  const userStore = useUserStore();
+  const { hasAccessByCodes } = useAccess();
+
+  /**
+   * 鎺ュ彛鏉冮檺锛氭病鏈夊搴旀潈闄愮爜灏卞彇涓嶅埌鏁帮紝璇锋眰浼氱洿鎺� 403锛屾墍浠ュ彇鏁板墠鍏堥棶涓�鍙ャ��
+   *
+   * 鍚庣 `@ss.hasPermission` 瀵硅秴绠℃槸鐩存帴鏀捐鐨勶紙涓嶇湅鏉冮檺鐮侊級锛屽墠绔繖閲屼繚鎸佷竴鑷达紝
+   * 鍚﹀垯瓒呯浼氬洜涓烘潈闄愮爜娌″湪鑿滃崟閲岄厤鑰屽皯鐪嬪埌鍗$墖銆�
+   */
+  function canQuery(permission: string) {
+    return (
+      userStore.userRoles.includes('super_admin') ||
+      hasAccessByCodes([permission, '*:*:*'])
+    );
+  }
+
+  /**
+   * 璇ヨ彍鍗曞褰撳墠鐢ㄦ埛鏄惁銆屽紑鐫�銆嶁�斺�� 鐢ㄤ簬棣栭〉妯″潡寮�鍏炽��
+   *
+   * 鍚庣鑿滃崟 `visible = 0` 浼氳鍓嶇杞垚璺敱鐨� `meta.hideInMenu`锛岃繖绫昏矾鐢变粛鐒舵敞鍐屽湪
+   * router 閲岋紙椤甸潰鍙互鐩存帴璁块棶锛夛紝鍙槸鏁存5瀛愭爲涓嶄細鍑虹幇鍦ㄤ晶杈规爮銆傛墍浠ュ垽鏂�岃繖涓ā鍧楁湁
+   * 娌℃湁寮�銆嶄笉鑳藉彧鐪嬭矾鐢辨槸鍚﹀瓨鍦紝杩樿鐪嬪畠鍜屽畠鐨勬瘡涓�绾х鍏堟槸鍚﹀彲瑙併��
+   *
+   * @param name 璺敱 name锛屽嵆鍚庣鑿滃崟鐨� component_name
+   */
+  function canSeeMenu(name: string) {
+    function find(
+      routes: RouteRecordRaw[],
+      ancestorHidden: boolean,
+    ): boolean | undefined {
+      for (const route of routes) {
+        const hidden =
+          ancestorHidden ||
+          route.meta?.hideInMenu === true ||
+          route.meta?.menuVisibleWithForbidden === true;
+        if (route.name === name) return !hidden;
+        const found = find(route.children ?? [], hidden);
+        if (found !== undefined) return found;
+      }
+      return undefined;
+    }
+    return find(accessStore.accessRoutes, false) === true;
+  }
+
+  return { canQuery, canSeeMenu };
+}

--
Gitblit v1.9.3