import { useState } from 'react'; import { Layout, Menu, Dropdown, Badge, Space, Avatar, Button, DatePicker } from 'antd'; import { useNavigate, Outlet, useLocation } from 'react-router-dom'; import { useQuery } from '@tanstack/react-query'; import { IconMenu2, IconBell, IconUser, IconLogout, } from '@tabler/icons-react'; import dayjs from 'dayjs'; import { menuApi, MenuResp } from '@/api/menu'; import { authApi } from '@/api/auth'; import { useAuthStore } from '@/stores/auth'; const { Header, Sider, Content } = Layout; function toMenuItems(menus: MenuResp[]): any[] { return menus.map((m) => ({ key: m.menuPath ?? m.menuCode, label: m.menuName, children: m.children?.length ? toMenuItems(m.children) : undefined, })); } export default function MainLayout() { const navigate = useNavigate(); const location = useLocation(); const auth = useAuthStore(); const [collapsed, setCollapsed] = useState(false); const [settleMonth, setSettleMonth] = useState(dayjs()); const { data: menus = [] } = useQuery({ queryKey: ['menu', 'my'], queryFn: menuApi.myMenus, }); const handleLogout = async () => { try { await authApi.logout(); } catch { /* ignore */ } localStorage.removeItem('accessToken'); localStorage.removeItem('refreshToken'); auth.clear(); navigate('/login'); }; return (
navigate(String(key))} style={{ borderRight: 0, height: '100%', paddingTop: 8 }} />
); }