import type { RouteRecordRaw } from 'vue-router';
|
|
import { computed } from 'vue';
|
|
import { useAccessStore } from '@vben/stores';
|
|
export const QUALITY_MENU_ROUTES = [
|
'MesQcIqc',
|
'MesQcIpqc',
|
'MesQcOqc',
|
'MesQcRqc',
|
] as const;
|
|
export function collectAccessibleRouteNames(routes: RouteRecordRaw[]): Set<string> {
|
const names = new Set<string>();
|
const visit = (items: RouteRecordRaw[]) => {
|
for (const route of items) {
|
if (typeof route.name === 'string') {
|
names.add(route.name);
|
}
|
if (route.children) {
|
visit(route.children);
|
}
|
}
|
};
|
visit(routes);
|
return names;
|
}
|
|
export function useMenuAccess() {
|
const accessStore = useAccessStore();
|
const routeNames = computed(() => collectAccessibleRouteNames(accessStore.accessRoutes));
|
|
function firstAccessibleRoute(names: readonly string[]) {
|
return names.find((name) => routeNames.value.has(name));
|
}
|
|
function hasMenuAccess(names: readonly string[]) {
|
return firstAccessibleRoute(names) !== undefined;
|
}
|
|
return { firstAccessibleRoute, hasMenuAccess };
|
}
|