115 lines
3.2 KiB
JavaScript
115 lines
3.2 KiB
JavaScript
export const menuTree = [
|
|
{
|
|
id: 'system',
|
|
name: '系统管理',
|
|
path: '/system',
|
|
icon: 'SettingOutlined',
|
|
type: 'menu',
|
|
children: [
|
|
{
|
|
id: 'sys_user',
|
|
name: '用户管理',
|
|
path: '/system/user',
|
|
component: 'system/user/UserList',
|
|
type: 'menu',
|
|
buttons: [
|
|
{ code: 'user:add', name: '新增' },
|
|
{ code: 'user:edit', name: '修改' },
|
|
{ code: 'user:delete', name: '删除' },
|
|
{ code: 'user:lock', name: '锁定' },
|
|
{ code: 'user:unlock', name: '解锁' },
|
|
{ code: 'user:changePwd', name: '密码修改' },
|
|
{ code: 'user:resetPwd', name: '密码重置并发送短信' }
|
|
]
|
|
},
|
|
{
|
|
id: 'sys_role',
|
|
name: '角色管理',
|
|
path: '/system/role',
|
|
component: 'system/role/RoleList',
|
|
type: 'menu',
|
|
buttons: [
|
|
{ code: 'role:add', name: '新增' },
|
|
{ code: 'role:edit', name: '修改' },
|
|
{ code: 'role:delete', name: '删除' }
|
|
]
|
|
},
|
|
{
|
|
id: 'sys_org',
|
|
name: '机构管理',
|
|
path: '/system/org',
|
|
component: 'system/org/OrgList',
|
|
type: 'menu',
|
|
buttons: [
|
|
{ code: 'org:add', name: '新增' },
|
|
{ code: 'org:edit', name: '修改' },
|
|
{ code: 'org:delete', name: '删除' }
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
id: 'base_config',
|
|
name: '基础配置',
|
|
path: '/base-config',
|
|
icon: 'AppstoreOutlined',
|
|
type: 'menu',
|
|
children: [
|
|
{
|
|
id: 'base_channel',
|
|
name: '核心企业管理',
|
|
path: '/base-config/channel',
|
|
component: 'base-config/channel/ChannelList',
|
|
type: 'menu',
|
|
buttons: [
|
|
{ code: 'channel:add', name: '新增' },
|
|
{ code: 'channel:edit', name: '修改' },
|
|
{ code: 'channel:delete', name: '删除' }
|
|
]
|
|
},
|
|
{
|
|
id: 'base_manager',
|
|
name: '客户经理管理',
|
|
path: '/base-config/manager',
|
|
component: 'base-config/manager/ManagerList',
|
|
type: 'menu',
|
|
buttons: [
|
|
{ code: 'manager:add', name: '新增' },
|
|
{ code: 'manager:edit', name: '修改' },
|
|
{ code: 'manager:delete', name: '删除' }
|
|
]
|
|
}
|
|
]
|
|
}
|
|
]
|
|
|
|
export function flattenButtons(tree) {
|
|
const codes = []
|
|
function walk(nodes) {
|
|
for (const n of nodes) {
|
|
if (n.buttons) codes.push(...n.buttons.map((b) => b.code))
|
|
if (n.children) walk(n.children)
|
|
}
|
|
}
|
|
walk(tree)
|
|
return codes
|
|
}
|
|
|
|
// 依据角色勾选的 menuIds 集合裁剪菜单树:保留命中节点及其祖先节点(用于渲染路径),
|
|
// 同时按 buttonCodeSet 过滤每个节点的按钮列表,实现"页面权限+功能权限"双重收敛。
|
|
export function pruneMenuTree(tree, menuIdSet, buttonCodeSet) {
|
|
function walk(nodes) {
|
|
const result = []
|
|
for (const n of nodes) {
|
|
const children = n.children ? walk(n.children) : []
|
|
const selfMatched = menuIdSet.has(n.id)
|
|
if (!selfMatched && children.length === 0) continue
|
|
const buttons = (n.buttons || []).filter((b) => buttonCodeSet.has(b.code))
|
|
result.push({ ...n, children, buttons })
|
|
}
|
|
return result
|
|
}
|
|
return walk(tree)
|
|
}
|
|
|