import { useState } from 'react'; import { NavLink, useLocation } from 'react-router-dom'; import { cn } from '@/lib/utils'; import { useThemeStore, useMenuStore } from '@/store'; import { LayoutDashboard, Server, Cloud, Rocket, Bell, CheckSquare, PlayCircle, Settings, ChevronDown, ChevronRight, Terminal, Cpu, Database, FileCode, Shield, Users, Menu, X, Network, CloudCog, Globe, MapPin, Key, Brain, FileTerminal, Activity, BarChart3, GitBranch, Monitor, Bot, AlertTriangle, } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { ScrollArea } from '@/components/ui/scroll-area'; interface MenuItem { id: string; name: string; icon: React.ElementType; path?: string; children?: MenuItem[]; } const menuItems: MenuItem[] = [ { id: 'dashboard', name: '仪表盘', icon: LayoutDashboard, path: '/' }, { id: 'assets', name: '资产管理', icon: Server, children: [ { id: 'servers', name: '服务器管理', icon: Database, path: '/servers' }, { id: 'cloud-accounts', name: '云账号管理', icon: Key, path: '/cloud-accounts' }, { id: 'domains', name: '域名管理', icon: Globe, path: '/domains' }, { id: 'regions', name: '区域管理', icon: MapPin, path: '/regions' }, { id: 'platforms', name: '云平台', icon: CloudCog, path: '/platforms' }, { id: 'cloud-billing', name: '云账单', icon: BarChart3, path: '/cloud-billing' }, { id: 'agent-monitor', name: 'Agent监控', icon: Activity, path: '/agent-monitor' }, ], }, { id: 'k8s', name: 'Kubernetes', icon: Cloud, children: [ { id: 'clusters', name: '集群列表', icon: Cloud, path: '/clusters' }, { id: 'nodes', name: '节点管理', icon: Cpu, path: '/nodes' }, { id: 'workloads', name: '工作负载', icon: Database, path: '/workloads' }, { id: 'topology', name: '架构拓扑', icon: Network, path: '/topology' }, ], }, { id: 'deploy', name: '应用发布', icon: Rocket, children: [ { id: 'pipelines', name: '流水线管理', icon: GitBranch, path: '/pipelines' }, { id: 'releases', name: '发布管理', icon: Rocket, path: '/releases' }, ], }, { id: 'monitor', name: '监控告警', icon: Bell, children: [ { id: 'metrics', name: '指标监控', icon: Cpu, path: '/metrics' }, { id: 'alert-center', name: '告警中心', icon: Bell, path: '/alert-center' }, { id: 'trace', name: '链路追踪', icon: GitBranch, path: '/trace' }, { id: 'grafana', name: '监控大屏', icon: Monitor, path: '/grafana' }, { id: 'agent-alerts', name: 'Agent告警', icon: AlertTriangle, path: '/agent-alerts' }, ], }, { id: 'automation', name: '自动化运维', icon: PlayCircle, children: [ { id: 'cronjobs', name: '定时任务', icon: PlayCircle, path: '/cronjobs' }, { id: 'scripts', name: '脚本库', icon: FileCode, path: '/scripts' }, { id: 'ansible', name: 'Ansible', icon: FileTerminal, path: '/ansible' }, ], }, { id: 'aiops', name: 'AIOps智能', icon: Brain, children: [ { id: 'ai-assistant', name: '智能助手', icon: Bot, path: '/ai-assistant' }, { id: 'ai-alert-analyzer', name: '告警分析', icon: AlertTriangle, path: '/ai-alert-analyzer' }, { id: 'ai-predictive', name: '容量预测', icon: BarChart3, path: '/ai-predictive' }, ], }, { id: 'approval', name: '资源申请', icon: CheckSquare, path: '/approval' }, { id: 'system', name: '系统管理', icon: Settings, children: [ { id: 'users', name: '用户管理', icon: Users, path: '/users' }, { id: 'roles', name: '角色权限', icon: Shield, path: '/roles' }, { id: 'logs-audit', name: '操作审计', icon: FileCode, path: '/logs-audit' }, { id: 'terminal-audit', name: '终端审计', icon: Terminal, path: '/terminal-audit' }, { id: 'settings', name: '系统设置', icon: Settings, path: '/settings' }, ], }, ]; function MenuItemComponent({ item, depth = 0 }: { item: MenuItem; depth?: number }) { const location = useLocation(); const { openMenus, toggleMenu, activeMenu, setActiveMenu } = useMenuStore(); const { sidebarCollapsed } = useThemeStore(); const hasChildren = item.children && item.children.length > 0; const isOpen = openMenus.includes(item.id); const isActive = item.path === location.pathname || activeMenu === item.id; const handleClick = () => { if (hasChildren) { toggleMenu(item.id); } else if (item.path) { setActiveMenu(item.id); } }; if (sidebarCollapsed && depth === 0) { return (