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,
};
};