diff --git a/src/config/menu.tsx b/src/config/menu.tsx index f458e84..432f3f8 100644 --- a/src/config/menu.tsx +++ b/src/config/menu.tsx @@ -1,7 +1,7 @@ -import type React from 'react' -import { DashboardOutlined, RobotOutlined, UserOutlined, DollarOutlined, BookOutlined, ImportOutlined, FileOutlined, SafetyOutlined, CodeOutlined, CloudServerOutlined, SettingOutlined } +import type React from 'react' +import { DashboardOutlined, RobotOutlined, UserOutlined, DollarOutlined, BookOutlined, ImportOutlined, FileOutlined, SafetyOutlined, CodeOutlined, CloudServerOutlined, SettingOutlined } from '@ant-design/icons' import type { AdminRole } from '@/types/admin' -import { SettingOutlined, CloudServerOutlined, CodeOutlined, SafetyOutlined, FileOutlined, ImportOutlined, BookOutlined, DollarOutlined, UserOutlined, RobotOutlined, DashboardOutlined, hasRole } from '@/constants/roles' +import { hasRole } from '@/constants/roles' export interface AdminMenuItem { path: string @@ -14,134 +14,28 @@ export interface AdminMenuItem { export const adminMenuItems: AdminMenuItem[] = [ { path: '/', name: '总览', icon: }, { path: '/assistant', name: '任务助理', icon: }, - { - path: '/users', - name: '用户管理', - icon: , - requiredRole: 'ADMIN', - children: [ - { path: '/users/admins', name: '管理员', requiredRole: 'SUPER_ADMIN' }, - { path: '/users/members', name: '普通用户' }, - ], - }, + { path: '/users', name: '用户管理', icon: , children: [ + { path: '/users/admins', name: '管理员', requiredRole: 'SUPER_ADMIN' }, + { path: '/users/members', name: '普通用户' }, + ]}, { path: '/membership', name: '会员与额度', icon: , requiredRole: 'ADMIN' }, - { - path: '/knowledge', - name: '知识库管理', - icon: , - children: [ - { path: '/knowledge/bases', name: '知识库列表' }, - { path: '/knowledge/sources', name: '知识源列表' }, - ], - }, + { path: '/knowledge', name: '知识库管理', icon: , children: [ + { path: '/knowledge/bases', name: '知识库列表' }, + { path: '/knowledge/sources', name: '知识源列表' }, + ]}, { path: '/imports', name: '文档导入', icon: }, { path: '/files', name: '文件与 COS', icon: }, - { path: '/settings', name: '系统配置', icon: , requiredRole: 'ADMIN' }, + { path: '/audit', name: '审计日志', icon: , requiredRole: 'ADMIN' }, { path: '/billing', name: 'API 用量', icon: , requiredRole: 'SUPER_ADMIN' }, { path: '/git', name: '代码仓库', icon: }, { path: '/servers', name: '服务器运维', icon: , requiredRole: 'SUPER_ADMIN' }, - { path: '/audit', name: '审计日志', icon: , requiredRole: 'ADMIN' }, + { path: '/settings', name: '系统配置', icon: , requiredRole: 'ADMIN' }, ] export function filterMenuByRole(items: AdminMenuItem[], role?: AdminRole): AdminMenuItem[] { - if (!role) return [] - return items - .filter((item) => !item.requiredRole || hasRole(role, item.requiredRole)) - .map((item) => ({ - ...item, - children: item.children ? filterMenuByRole(item.children, role) : undefined, - })) - .filter((item) => { - if (item.children && item.children.length === 0) return false - return true - }) -}export const menuItems: AdminMenuItem[] = [ - { path: '/', name: '总览', icon: }, - { path: '/assistant', name: '任务助理', icon: }, - { - path: '/users', name: '用户管理', icon: , - children: [ - { path: '/users/admins', name: '管理员', requiredRole: 'SUPER_ADMIN' }, - { path: '/users/members', name: '普通用户' }, - ], - }, - { path: '/membership', name: '会员与额度', icon: , requiredRole: 'ADMIN' }, - { - path: '/knowledge', name: '知识库管理', icon: , - children: [ - { path: '/knowledge/bases', name: '知识库列表' }, - { path: '/knowledge/sources', name: '知识源列表' }, - ], - }, - { path: '/imports', name: '文档导入', icon: }, - { path: '/files', name: '文件与 COS', icon: }, - { path: '/audit', name: '审计日志', icon: , requiredRole: 'ADMIN' }, - { path: '/billing', name: 'API 用量', icon: , requiredRole: 'SUPER_ADMIN' }, - { path: '/git', name: '代码仓库', icon: }, - { path: '/servers', name: '服务器运维', icon: , requiredRole: 'SUPER_ADMIN' }, - { path: '/settings', name: '系统配置', icon: , requiredRole: 'ADMIN' }, -];import type React from 'react' -import { SettingOutlined, CloudServerOutlined, CodeOutlined, SafetyOutlined, FileOutlined, ImportOutlined, BookOutlined, DollarOutlined, UserOutlined, RobotOutlined, DashboardOutlined, DollarOutlined, CodeOutlined, CloudServerOutlined, RobotOutlined, DashboardOutlined, - UserOutlined, - BookOutlined, - ImportOutlined, - SettingOutlined, - FileOutlined, - SafetyOutlined, -} , DashboardOutlined } , RobotOutlined } , UserOutlined } , DollarOutlined } , BookOutlined } , ImportOutlined } , FileOutlined } , SafetyOutlined } , CodeOutlined } , CloudServerOutlined } , SettingOutlined } from '@ant-design/icons' -import type { AdminRole } from '@/types/admin' -import { SettingOutlined, CloudServerOutlined, CodeOutlined, SafetyOutlined, FileOutlined, ImportOutlined, BookOutlined, DollarOutlined, UserOutlined, RobotOutlined, DashboardOutlined, hasRole } from '@/constants/roles' - -export interface AdminMenuItem { - path: string - name: string - icon?: React.ReactNode - requiredRole?: AdminRole - children?: AdminMenuItem[] -} - -export const adminMenuItems: AdminMenuItem[] = [ - { path: '/', name: '总览', icon: }, - { path: '/assistant', name: '任务助理', icon: }, - { - path: '/users', - name: '用户管理', - icon: , - requiredRole: 'ADMIN', - children: [ - { path: '/users/admins', name: '管理员', requiredRole: 'SUPER_ADMIN' }, - { path: '/users/members', name: '普通用户' }, - ], - }, - { path: '/membership', name: '会员与额度', icon: , requiredRole: 'ADMIN' }, - { - path: '/knowledge', - name: '知识库管理', - icon: , - children: [ - { path: '/knowledge/bases', name: '知识库列表' }, - { path: '/knowledge/sources', name: '知识源列表' }, - ], - }, - { path: '/imports', name: '文档导入', icon: }, - { path: '/files', name: '文件与 COS', icon: }, - { path: '/settings', name: '系统配置', icon: , requiredRole: 'ADMIN' }, - { path: '/billing', name: 'API 用量', icon: , requiredRole: 'SUPER_ADMIN' }, - { path: '/git', name: '代码仓库', icon: }, - { path: '/servers', name: '服务器运维', icon: , requiredRole: 'SUPER_ADMIN' }, - { path: '/audit', name: '审计日志', icon: , requiredRole: 'ADMIN' }, -] - -export function filterMenuByRole(items: AdminMenuItem[], role?: AdminRole): AdminMenuItem[] { - if (!role) return [] - return items - .filter((item) => !item.requiredRole || hasRole(role, item.requiredRole)) - .map((item) => ({ - ...item, - children: item.children ? filterMenuByRole(item.children, role) : undefined, - })) - .filter((item) => { - if (item.children && item.children.length === 0) return false - return true - }) + return items.filter(item => { + if (item.requiredRole && role && !hasRole(role, item.requiredRole)) return false + if (item.children) item.children = filterMenuByRole(item.children, role) + return true + }) }