chore: track root project files and subrepos
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
function buildMenu(menu, menuList, menuIds) {
|
||||
let nextLayer = []
|
||||
for (let i = menu.length - 1; i > -1; i--) {
|
||||
const currentMenu = menu[i]
|
||||
const subMenu = menuList.filter(item => {
|
||||
if (item.parent_id === currentMenu.menu_id) {
|
||||
menuIds.push(item.menu_id)
|
||||
return true
|
||||
}
|
||||
})
|
||||
nextLayer = nextLayer.concat(subMenu)
|
||||
currentMenu.children = subMenu
|
||||
}
|
||||
if (nextLayer.length) {
|
||||
buildMenu(nextLayer, menuList, menuIds)
|
||||
}
|
||||
}
|
||||
|
||||
function getParentIds(menuItem, menuList) {
|
||||
const parentArr = []
|
||||
let currentItem = menuItem
|
||||
while (currentItem && currentItem.parent_id) {
|
||||
parentArr.push(currentItem.parent_id)
|
||||
currentItem = menuList.find(item => item.menu_id === currentItem.parent_id)
|
||||
}
|
||||
return parentArr
|
||||
}
|
||||
|
||||
function buildMenus(menuList, trim = true) {
|
||||
// 保证父子级顺序
|
||||
menuList = menuList.sort(function(a, b) {
|
||||
const parentIdsA = getParentIds(a, menuList)
|
||||
const parentIdsB = getParentIds(b, menuList)
|
||||
if (parentIdsA.includes(b.menu_id)) {
|
||||
return 1
|
||||
}
|
||||
return parentIdsA.length - parentIdsB.length || a.sort - b.sort
|
||||
})
|
||||
// 删除无subMenu且非子节点的菜单项
|
||||
if (trim) {
|
||||
for (let i = menuList.length - 1; i > -1; i--) {
|
||||
const currentMenu = menuList[i]
|
||||
const subMenu = menuList.filter(subMenuItem => subMenuItem.parent_id === currentMenu.menu_id)
|
||||
if (!currentMenu.isLeafNode && !subMenu.length) {
|
||||
menuList.splice(i, 1)
|
||||
}
|
||||
}
|
||||
}
|
||||
const menuIds = []
|
||||
const menu = menuList.filter(item => {
|
||||
if (!item.parent_id) {
|
||||
menuIds.push(item.menu_id)
|
||||
return true
|
||||
}
|
||||
})
|
||||
buildMenu(menu, menuList, menuIds)
|
||||
// 包含所有无效菜单
|
||||
if (!trim && menuIds.length !== menuList.length) {
|
||||
menu.push(...menuList.filter(item => !menuIds.includes(item.menu_id)))
|
||||
}
|
||||
return menu
|
||||
}
|
||||
|
||||
export {
|
||||
buildMenu,
|
||||
buildMenus
|
||||
}
|
||||
Reference in New Issue
Block a user