let routerList = [
{
name: '1',
path: '/1',
children: [
{
name: '1-1',
path: '/1-1',
isHidden: true,
rule: ['b', 'd'],
children: [
{
name: '1-1-1',
path: '/1-1-1',
}
]
}
]
},
{
name: '2',
path: '/2',
children: [
{
name: '1-1',
path: '/2-1',
rule: ['b', 'd'],
children: [
{
name: '1-1-1',
path: '/1-1-1',
isHidden: true,
}
]
}
]
},
{
path: '/404'
}
]
let userRole = [{ auth: 'a' }, { auth: 'b' }, { auth: 'c' }]
// 如果没有属性值或者为空就返回false了
let judge = function (obj, attr) {
if (!Object.hasOwn(obj, attr)) {
return false
} else if (!obj[attr] && obj[attr] != 0) {
return false
} else {
return true
}
}
// 判断有么有权限
let judgeRule = function (ruleList, selfRule) {
let result = false
for (let x = 0; x < ruleList.length; x++) {
for (let y = 0; y < selfRule.length; y++) {
if (ruleList[x].auth === selfRule[y]) {
result = true
break
}
}
}
return result
}
let fn = function (data) {
let result = []
data.forEach((item) => {
if (judge(item, 'name') && (!judge(item, 'isHidden') || !item.isHidden) && (!judge(item, 'rule') || judgeRule(userRole, item.rule))) {
// 可以渲染 有name 没隐藏 有权限交集或者是没有权限要求
if (judge(item, 'children') && item.children.length > 0) {
let x = fn(item.children)
if(x.length > 0){
result.push({ label: item.name, key: item.path, children: x })
} else {
result.push({ label: item.name, key: item.path })
}
} else {
result.push({ label: item.name, key: item.path })
}
}
})
return result
}
console.log(fn(routerList))
console