import type { RouteRecordRaw } from 'vue-router';
|
|
import { computed } from 'vue';
|
|
import { useAccess } from '@vben/access';
|
import { useAccessStore } from '@vben/stores';
|
|
/** 首页常驻,业务数据和入口仍需遵循当前用户的菜单权限。 */
|
export function useHomeAccess() {
|
const accessStore = useAccessStore();
|
const { hasAccessByCodes } = useAccess();
|
|
function canQuery(permission: string) {
|
return hasAccessByCodes([permission, '*:*:*']);
|
}
|
|
function canNavigate(name: string) {
|
function contains(routes: RouteRecordRaw[]): boolean {
|
return routes.some((route) => {
|
if (route.meta?.menuVisibleWithForbidden) return false;
|
return route.name === name || contains(route.children ?? []);
|
});
|
}
|
return contains(accessStore.accessRoutes);
|
}
|
|
const canViewHome = computed(() => canQuery('mes:home:query'));
|
|
return { canNavigate, canQuery, canViewHome };
|
}
|