// /* // * @Author: RenXiaoDong // * @Date: 2025-06-19 01:45:53 // */ // import type { RouteRecordRaw, RouteRecordNormalized } from 'vue-router'; // import { useRouter } from 'vue-router'; // import { useSidebarStore } from '@/stores/modules/side-bar'; // export default function useMenuTree() { // const router = useRouter(); // const appRoutes = router.options?.routes ?? []; // const sidebarStore = useSidebarStore(); // const appRoute = computed(() => { // const _filterRoutes = appRoutes.filter((v) => v.meta?.id === sidebarStore.activeMenuKey); // return _filterRoutes; // }); // const menuTree = computed(() => { // const copyRouter = cloneDeep(appRoute.value) as RouteRecordNormalized[]; // copyRouter.sort((a: RouteRecordNormalized, b: RouteRecordNormalized) => { // return (a.meta.order || 0) - (b.meta.order || 0); // }); // function travel(_routes: RouteRecordRaw[], layer: number) { // if (!_routes) return null; // const collector: any = _routes.map((element) => { // // leaf node // if (element.meta?.hideChildrenInMenu || !element.children) { // element.children = []; // return element; // } // // route filter hideInMenu true // element.children = element.children.filter((x) => x.meta?.hideInMenu !== true); // // Associated child node // const subItem = travel(element.children, layer + 1); // if (subItem.length) { // element.children = subItem; // return element; // } // // the else logic // if (layer > 1) { // element.children = subItem; // return element; // } // if (element.meta?.hideInMenu === false) { // return element; // } // return null; // }); // return collector.filter(Boolean); // } // return travel(copyRouter, 0); // }); // return { // menuTree, // }; // }