import React from 'react'; import { useNavigate } from 'react-router'; import { useAuth } from './hooks/AuthProvider'; import { Users, Settings, LogOut, File, MapPin, MessageSquare, Building, User, ClipboardList, Monitor, DollarSign, CreditCard, Search, } from 'lucide-react'; export interface MenuItem { key: string; label: string; icon?: React.ReactNode; children?: MenuItem[]; path?: string; permission?: string; onClick?: () => void; } /** * 菜单搜索 Hook * 封装菜单搜索相关逻辑 */ export const useMenuSearch = (menuItems: MenuItem[]) => { const [searchText, setSearchText] = React.useState(''); // 过滤菜单项 const filteredMenuItems = React.useMemo(() => { if (!searchText) return menuItems; const filterItems = (items: MenuItem[]): MenuItem[] => { return items .map(item => { // 克隆对象避免修改原数据 const newItem = { ...item }; if (newItem.children) { newItem.children = filterItems(newItem.children); } return newItem; }) .filter(item => { // 保留匹配项或其子项匹配的项 const match = item.label.toLowerCase().includes(searchText.toLowerCase()); if (match) return true; if (item.children?.length) return true; return false; }); }; return filterItems(menuItems); }, [menuItems, searchText]); // 清除搜索 const clearSearch = () => { setSearchText(''); }; return { searchText, setSearchText, filteredMenuItems, clearSearch }; }; export const useMenu = () => { const navigate = useNavigate(); const { logout: handleLogout } = useAuth(); const [collapsed, setCollapsed] = React.useState(false); // 基础菜单项配置 const menuItems: MenuItem[] = [ // { // key: 'dashboard', // label: '控制台', // icon: , // path: '/admin/dashboard' // }, { key: 'users', label: '用户管理', icon: , path: '/admin/users', permission: 'user:manage' }, { key: 'files', label: '文件管理', icon: , path: '/admin/files', permission: 'file:manage' }, // { // key: 'analytics', // label: '数据分析', // icon: , // path: '/admin/analytics', // permission: 'analytics:view' // }, // { // key: 'agents', // label: '代理商管理', // icon: , // path: '/admin/agents', // permission: 'agent:manage' // }, { key: 'areas', label: '区域管理', icon: , path: '/admin/areas', permission: 'area:manage' }, { key: 'bank-names', label: '银行名称管理', icon: , path: '/admin/bank-names', permission: 'bank-name:manage' }, { key: 'channels', label: '渠道管理', icon: , path: '/admin/channels', permission: 'channel:manage' }, { key: 'companies', label: '公司管理', icon: , path: '/admin/companies', permission: 'company:manage' }, { key: 'disabilities', label: '残疾人管理', icon: , path: '/admin/disabilities', permission: 'disability:manage' }, { key: 'disability-company-query', label: '残疾人企业查询', icon: , path: '/admin/disability-person-company-query', permission: 'disability:manage' }, { key: 'orders', label: '订单管理', icon: , path: '/admin/orders', permission: 'order:manage' }, { key: 'platforms', label: '平台管理', icon: , path: '/admin/platforms', permission: 'platform:manage' }, { key: 'salaries', label: '薪资管理', icon: , path: '/admin/salaries', permission: 'salary:manage' }, // { // key: 'cards', // label: '卡券管理', // icon: , // permission: 'card:manage', // children: [ // { // key: 'user-cards', // label: '用户卡管理', // path: '/admin/user-cards', // permission: 'card:manage' // }, // { // key: 'user-card-balance-records', // label: '余额记录', // path: '/admin/user-card-balance-records', // permission: 'card:manage' // } // ] // }, ]; // 用户菜单项 const userMenuItems = [ // { // key: 'profile', // label: '个人资料', // icon: , // onClick: () => navigate('/admin/profile') // }, // { // key: 'settings', // label: '账户设置', // icon: , // onClick: () => navigate('/admin/account-settings') // }, // { // type: 'separator', // key: 'divider', // }, { key: 'logout', label: '退出登录', icon: , onClick: () => handleLogout() } ]; // 处理菜单点击 const handleMenuClick = (item: MenuItem) => { if (item.path) { navigate(item.path); } if (item.onClick) { item.onClick(); } }; return { menuItems, userMenuItems, collapsed, setCollapsed, handleMenuClick, }; };