import { memo, useEffect, useState } from "react"; import { Button, Drawer, Menu, Popover } from "antd"; import { CloseOutlined, MenuOutlined, SettingOutlined, } from "@ant-design/icons"; import { ClipboardList, Sparkles, X } from "lucide-react"; import { menuItems } from "@/pages/Layout/menu"; import { NavLink, useLocation, useNavigate } from "react-router"; import TaskUpload from "./TaskUpload"; import SettingsPage from "../SettingsPage/SettingsPage"; import { useAppSelector, useAppDispatch } from "@/store/hooks"; import { showSettings, hideSettings } from "@/store/slices/settingsSlice"; const AsiderAndHeaderLayout = () => { const { pathname } = useLocation(); const navigate = useNavigate(); const [activeItem, setActiveItem] = useState(""); const [sidebarOpen, setSidebarOpen] = useState(true); const [taskCenterVisible, setTaskCenterVisible] = useState(false); const settingVisible = useAppSelector((state) => state.settings.visible); const dispatch = useAppDispatch(); // Initialize active item based on current pathname const initActiveItem = () => { for (let index = 0; index < menuItems.length; index++) { const element = menuItems[index]; if (element.children) { element.children.forEach((subItem) => { if (pathname.includes(subItem.id)) { setActiveItem(subItem.id); return; } }); } else if (pathname.includes(element.id)) { setActiveItem(element.id); return; } } console.log(pathname); }; useEffect(() => { initActiveItem(); }, [pathname]); useEffect(() => { const handleShowTaskPopover = (event: CustomEvent) => { const { show } = event.detail; setTaskCenterVisible(show); }; window.addEventListener( "show:task-popover", handleShowTaskPopover as EventListener ); return () => { window.removeEventListener( "show:task-popover", handleShowTaskPopover as EventListener ); }; }, []); return (
{/* Header */}
{sidebarOpen && ( logo )} setSidebarOpen(!sidebarOpen)} > {sidebarOpen ? : }
{/* Navigation */}
({ key: item.id, label: item.title, icon: item.icon ? : null, children: item.children ? item.children.map((subItem) => ({ key: subItem.id, label: subItem.title, icon: subItem.icon ? ( ) : null, })) : undefined, }))} selectedKeys={[activeItem]} defaultOpenKeys={["synthesis"]} onClick={({ key }) => { setActiveItem(key); navigate(`/data/${key}`); }} />
{/* Footer */}
{sidebarOpen ? (

任务中心

setTaskCenterVisible(false)} className="cursor-pointer w-4 h-4 text-gray-500 hover:text-gray-900" />
} open={taskCenterVisible} content={} trigger="click" destroyOnHidden={false} >
) : (
} trigger="click" destroyOnHidden={false} >
)}
dispatch(hideSettings())} bodyStyle={{ padding: 0 }} destroyOnHidden={true} > {/* 添加遮罩层,点击外部区域时关闭 */} {taskCenterVisible && (
{ setTaskCenterVisible(false); }} /> )}
); }; export default memo(AsiderAndHeaderLayout);