123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- import { isNull } from './index'
- import { privateRoutes } from '@/router/private-routes'
- /**
- * 所有子集路由
- * @param {*}
- * @returns
- */
- export const getChildrenRoutes = (routes) => {
- const result = []
- routes.forEach((item) => {
- if (item.children && item.children.length > 0) {
- result.push(...item.children)
- }
- })
- return result
- }
- /**
- * 处理脱离层级的路由
- * @param {*}
- * @returns
- */
- export const filterRoutes = (routes) => {
- // 所有子集路由
- const childrenRoutes = getChildrenRoutes(routes)
- // 根据子集路由查重
- return routes.filter((route) => {
- // 根据route 在 childrenRoutes 中进行查重 把所有路由表剔除
- return !childrenRoutes.find((childrenRoute) => {
- return childrenRoute.path === route.path
- })
- })
- }
- /**
- * 根据routes 数据 返回对应的 menu 规则的数据
- * @param {*}
- * @returns 返回对应的 menu 规则的数据
- */
- export const generteMenus = (routes, basePath = '') => {
- const result = []
- // 不满足 meta && meta.title 的数据去除
- routes.forEach((item) => {
- // item 不存在children && 不存在meta 直接 return
- if (isNull(item.children) && isNull(item.meta)) return
- // 判断是否是子路由 子路由直接 return 下面处理
- if (item.path.split('/').length > 2) return
- // 添加第一级路由
- let route = {
- ...item,
- children: []
- }
- result.push(route)
- })
- // 给子路由匹配上 一级路由
- result.forEach((key) => {
- routes.forEach((item) => {
- if (key.path === item.path) {
- return
- } else if (key.path === `/${item.path.split('/')[1]}`) {
- key.children.push(item)
- }
- })
- })
- return result
- }
- export const changeSortMenus = (tree) => {
- if (!tree || !Array.isArray(tree)) return []
- function customSort(n1, n2) {
- const { sort: sort1 = Number.MAX_SAFE_INTEGER } = n1.sort || {}
- const { sort: sort2 = Number.MAX_SAFE_INTEGER } = n2.sort || {}
- return sort1 - sort2
- }
- tree.sort(customSort)
- tree.forEach((n) => {
- if (n.children && Array.isArray(n.children) && n.children.length > 0) {
- n.children = changeSortMenus(n.children)
- }
- })
- return tree
- }
- export const getMenusData = () => {
- const result = []
- let uniqueArr = {}
- privateRoutes.forEach((item) => {
- if (!uniqueArr[item.meta.title]) {
- uniqueArr[item.meta.title] = true
- let obj = {
- label: item.meta.title,
- id: item.name,
- path: item.path,
- sort: item.sort,
- children: []
- }
- result.push(obj)
- }
- })
- privateRoutes.forEach((n) => {
- result.forEach((i) => {
- if (i.path == n.path) {
- let obj = { parentSymbol: i.id, label: n.children[0].meta.title, id: n.name, sort: n.children[0].sort }
- i.children.push(obj)
- }
- })
- })
- return result
- }
- export const flatMenus = (router) => {
- const arr = []
- router.sort((a, b) => a.sort - b.sort)
- const f = (router) => {
- router.sort((a, b) => a.sort - b.sort)
- router.forEach((r) => {
- if (r.children && r.children.length > 0) {
- f(r.children)
- } else {
- arr.push(r.id)
- }
- })
- }
- f(router)
- return arr
- }
|