import { useEffect, useState } from "react"; import { Link, Navigate, Outlet, useLocation, useNavigate } from "react-router-dom"; import { useTranslation } from "react-i18next"; import { Button, Dropdown, Layout, Menu, Tooltip, theme, type ButtonProps, type MenuProps } from "antd"; import { Languages as LanguagesIcon, LogOut as LogOutIcon, Home as HomeIcon, Menu as MenuIcon, Server as ServerIcon, Settings as SettingsIcon, ShieldCheck as ShieldCheckIcon, Sun as SunIcon, Workflow as WorkflowIcon, } from "lucide-react"; import Version from "@/components/certimate/Version"; import { getPocketBase } from "@/repository/pocketbase"; import { ConfigProvider } from "@/providers/config"; const ConsoleLayout = () => { const location = useLocation(); const navigate = useNavigate(); const { t } = useTranslation(); const { token: themeToken } = theme.useToken(); const menuItems: Required["items"] = [ { key: "/", icon: , label: t("dashboard.page.title"), onClick: () => navigate("/"), }, { key: "/workflows", icon: , label: t("workflow.page.title"), onClick: () => navigate("/workflows"), }, { key: "/certificates", icon: , label: t("certificate.page.title"), onClick: () => navigate("/certificates"), }, { key: "/accesses", icon: , label: t("access.page.title"), onClick: () => navigate("/accesses"), }, ]; const [menuSelectedKey, setMenuSelectedKey] = useState(); const getActiveMenuItem = () => { const item = menuItems.find((item) => item!.key === location.pathname) ?? menuItems.find((item) => item!.key !== "/" && location.pathname.startsWith(item!.key as string)); return item; }; useEffect(() => { const item = getActiveMenuItem(); if (item) { setMenuSelectedKey(item.key as string); } else { setMenuSelectedKey(undefined); } }, [location.pathname]); useEffect(() => { if (menuSelectedKey && menuSelectedKey !== getActiveMenuItem()?.key) { navigate(menuSelectedKey); } }, [menuSelectedKey]); // TODO: 响应式侧边栏菜单 const handleLogoutClick = () => { auth.clear(); navigate("/login"); }; const handleSettingsClick = () => { navigate("/settings/account"); }; const auth = getPocketBase().authStore; if (!auth.isValid || !auth.isAdmin) { return ; } return ( <>
Certimate
{ setMenuSelectedKey(key); }} />
{/*
); }; const ThemeToggleButton = ({ size }: { size?: ButtonProps["size"] }) => { // TODO: 主题切换 const items: Required["items"] = []; return (