From ff6a4df623b79cab1d6472e2b70ef82211c09378 Mon Sep 17 00:00:00 2001 From: WangDL Date: Fri, 22 May 2026 16:39:01 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20reorder=20sidebar=20menu=20=E2=80=94=20s?= =?UTF-8?q?ettings=20at=20bottom?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config/menu.tsx | 93 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) 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