diff --git a/src/config/menu.tsx b/src/config/menu.tsx
index 00d5842..c5c13a4 100644
--- a/src/config/menu.tsx
+++ b/src/config/menu.tsx
@@ -50,6 +50,99 @@ export const adminMenuItems: AdminMenuItem[] = [
{ 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
+ })
+}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 { DollarOutlined, CodeOutlined, CloudServerOutlined, RobotOutlined, DashboardOutlined,
+ UserOutlined,
+ BookOutlined,
+ ImportOutlined,
+ SettingOutlined,
+ FileOutlined,
+ SafetyOutlined,
+} from '@ant-design/icons'
+import type { AdminRole } from '@/types/admin'
+import { 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