Files
chat/frontend-admin/src/config/permissions.js
T
2026-08-03 10:00:05 +08:00

170 lines
5.3 KiB
JavaScript

/** 与后端 PermissionCatalog 保持一致:目录 / 菜单 / 按钮 */
export const permissionTree = [
{
code: 'dir:overview',
name: '概览',
type: 'dir',
children: [
{
code: 'menu:dashboard',
name: '数据概览',
type: 'menu',
path: '/dashboard',
icon: 'dashboard',
children: []
}
]
},
{
code: 'dir:org',
name: '组织架构',
type: 'dir',
children: [
{
code: 'menu:users',
name: '用户管理',
type: 'menu',
path: '/users',
icon: 'users',
children: [
{ code: 'btn:user:create', name: '新增用户', type: 'btn' },
{ code: 'btn:user:edit', name: '编辑用户', type: 'btn' },
{ code: 'btn:user:reset_password', name: '重置密码', type: 'btn' },
{ code: 'btn:user:delete', name: '删除用户', type: 'btn' }
]
},
{
code: 'menu:departments',
name: '部门管理',
type: 'menu',
path: '/departments',
icon: 'departments',
children: [
{ code: 'btn:dept:create', name: '新增部门', type: 'btn' },
{ code: 'btn:dept:edit', name: '编辑部门', type: 'btn' },
{ code: 'btn:dept:delete', name: '删除部门', type: 'btn' }
]
},
{
code: 'menu:roles',
name: '角色管理',
type: 'menu',
path: '/roles',
icon: 'roles',
children: [
{ code: 'btn:role:create', name: '新增角色', type: 'btn' },
{ code: 'btn:role:edit', name: '编辑角色', type: 'btn' },
{ code: 'btn:role:delete', name: '删除角色', type: 'btn' }
]
}
]
},
{
code: 'dir:business',
name: '业务数据',
type: 'dir',
children: [
{
code: 'menu:conversations',
name: '会话管理',
type: 'menu',
path: '/conversations',
icon: 'conversations',
children: [
{ code: 'btn:conv:view_all', name: '查看全部会话', type: 'btn' },
{ code: 'btn:conv:view_subordinate', name: '查看下级部门会话', type: 'btn' }
]
},
{
code: 'menu:memberships',
name: '会员等级',
type: 'menu',
path: '/memberships',
icon: 'memberships',
children: [
{ code: 'btn:membership:create', name: '新增会员等级', type: 'btn' },
{ code: 'btn:membership:edit', name: '编辑会员等级', type: 'btn' },
{ code: 'btn:membership:delete', name: '删除会员等级', type: 'btn' }
]
}
]
},
{
code: 'dir:system',
name: '系统管理',
type: 'dir',
children: [
{
code: 'menu:models',
name: 'AI 模型',
type: 'menu',
path: '/models',
icon: 'models',
children: [
{ code: 'btn:model:create', name: '新增模型', type: 'btn' },
{ code: 'btn:model:edit', name: '编辑模型', type: 'btn' },
{ code: 'btn:model:delete', name: '删除模型', type: 'btn' },
{ code: 'btn:model:test', name: '测试连接', type: 'btn' }
]
},
{
code: 'menu:permissions',
name: '权限管理',
type: 'menu',
path: '/permissions',
icon: 'permissions',
children: [
{ code: 'btn:perm:create', name: '新增权限', type: 'btn' },
{ code: 'btn:perm:edit', name: '编辑权限', type: 'btn' },
{ code: 'btn:perm:delete', name: '删除权限', type: 'btn' }
]
},
{
code: 'menu:settings',
name: '系统设置',
type: 'menu',
path: '/settings',
icon: 'settings',
children: [
{ code: 'btn:settings:save', name: '保存设置', type: 'btn' }
]
}
]
}
]
export function emptyPermissions() {
return {
can_access_admin: false,
dirs: [],
menus: [],
buttons: []
}
}
export function flattenMenus(tree = permissionTree) {
const list = []
for (const dir of tree) {
for (const menu of dir.children || []) {
list.push({
...menu,
dir: dir.code,
dirName: dir.name
})
}
}
return list
}
export function summarizePermissionLabels(perms = {}) {
const labels = []
if (perms.can_access_admin) labels.push('后台')
for (const dir of permissionTree) {
if ((perms.dirs || []).includes(dir.code)) labels.push(dir.name)
}
for (const menu of flattenMenus()) {
if ((perms.menus || []).includes(menu.code)) labels.push(menu.name)
}
return labels
}