fix: rewrite menu — clean reorder
All checks were successful
Deploy Admin Frontend / build-and-deploy (push) Successful in 8s

This commit is contained in:
WangDL 2026-05-22 16:41:10 +08:00
parent cfb45dcbe2
commit a53dfc184d

View File

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