|
|
@@ -12,45 +12,49 @@ export function useMenu(authCode?: string) {
|
|
|
const router = useRouter()
|
|
|
const componentMap = new Map<string, Component>()
|
|
|
|
|
|
- // 过滤菜单
|
|
|
- const filterMenu = (data: Model.UserRoutes[], parentPath = '') => {
|
|
|
- const result: Model.UserRoutes[] = []
|
|
|
- data.forEach((e) => {
|
|
|
- if (!e.hidden && e.authType === AuthType.Menu) {
|
|
|
- const routePath = (parentPath ? parentPath + '/' : '') + e.url
|
|
|
- result.push({
|
|
|
- ...e,
|
|
|
+ /**
|
|
|
+ * 过滤菜单
|
|
|
+ * @returns
|
|
|
+ */
|
|
|
+ const filterMenus = (data: Model.UserRoutes[], parentPath = '') => {
|
|
|
+ return data.reduce<Model.UserRoutes[]>((pre, cur) => {
|
|
|
+ if (!cur.hidden && cur.authType === AuthType.Menu) {
|
|
|
+ const routePath = (parentPath ? parentPath + '/' : '') + cur.url
|
|
|
+ pre.push({
|
|
|
+ ...cur,
|
|
|
url: routePath,
|
|
|
- children: e.children ? filterMenu(e.children, routePath) : [],
|
|
|
+ children: cur.children ? filterMenus(cur.children, routePath) : [],
|
|
|
})
|
|
|
}
|
|
|
- })
|
|
|
- return result
|
|
|
+ return pre
|
|
|
+ }, [])
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 根据 code 查找对应的子菜单
|
|
|
+ * 根据 code 查找对应的子路由
|
|
|
* @returns
|
|
|
*/
|
|
|
- const findChildren = (data: Model.UserRoutes[], code?: string): Model.UserRoutes[] => {
|
|
|
- const routeName = code ?? route.name?.toString()
|
|
|
- for (const item of data) {
|
|
|
- const { code, children } = item
|
|
|
- if (code === routeName) return children ?? []
|
|
|
- if (children) {
|
|
|
- const res = findChildren(children, routeName)
|
|
|
- if (res.length) return res
|
|
|
+ const filterChildrenRoutes = (routeName?: string) => {
|
|
|
+ const findChildren = (data: Model.UserRoutes[]): Model.UserRoutes[] => {
|
|
|
+ for (const item of data) {
|
|
|
+ const { code, children } = item
|
|
|
+ if (code === routeName) return children ?? []
|
|
|
+ if (children) {
|
|
|
+ const res = findChildren(children)
|
|
|
+ if (res.length) return res
|
|
|
+ }
|
|
|
}
|
|
|
+ return []
|
|
|
}
|
|
|
- return []
|
|
|
+ return findChildren(userRoutes.value)
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 获取路由菜单(无限级)
|
|
|
+ * 获取用户菜单(无限级)
|
|
|
* @param level
|
|
|
* @returns
|
|
|
*/
|
|
|
- const getMenus = (level = 0) => {
|
|
|
+ const getUserMenus = (level = 0) => {
|
|
|
// 过滤层级
|
|
|
const filterLevel = (data: Model.UserRoutes[], n: number): Model.UserRoutes[] => {
|
|
|
if (level) {
|
|
|
@@ -58,17 +62,17 @@ export function useMenu(authCode?: string) {
|
|
|
}
|
|
|
return data
|
|
|
}
|
|
|
- return filterMenu(filterLevel(userRoutes.value, level))
|
|
|
+ return filterMenus(filterLevel(userRoutes.value, level))
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 获取路由子菜单
|
|
|
- * @param code
|
|
|
- * @returns
|
|
|
- */
|
|
|
- const getChildrenMenus = (code?: string) => {
|
|
|
- const children = findChildren(userRoutes.value, code)
|
|
|
- return filterMenu(children)
|
|
|
+ * 获取路由子菜单
|
|
|
+ * @param routeName
|
|
|
+ * @returns
|
|
|
+ */
|
|
|
+ const getChildrenMenus = (routeName: string) => {
|
|
|
+ const children = filterChildrenRoutes(routeName)
|
|
|
+ return filterMenus(children)
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -76,8 +80,9 @@ export function useMenu(authCode?: string) {
|
|
|
* @returns
|
|
|
*/
|
|
|
const getHomeUrl = () => {
|
|
|
- const findNode = (tree: Model.UserRoutes[]): string => {
|
|
|
- for (const node of tree) {
|
|
|
+ const menus = getUserMenus()
|
|
|
+ const findNode = (data: Model.UserRoutes[]): string => {
|
|
|
+ for (const node of data) {
|
|
|
if (node.children?.length) {
|
|
|
const res = findNode(node.children)
|
|
|
if (res) return res
|
|
|
@@ -87,7 +92,7 @@ export function useMenu(authCode?: string) {
|
|
|
}
|
|
|
return '/404'
|
|
|
}
|
|
|
- return findNode(getMenus())
|
|
|
+ return findNode(menus)
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -95,7 +100,7 @@ export function useMenu(authCode?: string) {
|
|
|
* @returns
|
|
|
*/
|
|
|
const getAuth = (authType: AuthType) => {
|
|
|
- const children = findChildren(userRoutes.value, authCode)
|
|
|
+ const children = filterChildrenRoutes(authCode)
|
|
|
return children.reduce<Model.UserRoutes[]>((res, cur) => {
|
|
|
if (!cur.hidden && cur.authType === authType) {
|
|
|
if (!componentMap.get(cur.code) && cur.component) {
|
|
|
@@ -153,7 +158,7 @@ export function useMenu(authCode?: string) {
|
|
|
router,
|
|
|
userRoutes,
|
|
|
componentMap,
|
|
|
- getMenus,
|
|
|
+ getUserMenus,
|
|
|
getHomeUrl,
|
|
|
getChildrenMenus,
|
|
|
getAuthButtons,
|