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