import { useMemo, useState } from "react"; import { ClipboardList, Headset, Home, List, LogOut } from "lucide-react"; import { clearToken, logoutAdmin } from "@/api"; import { ToastStack } from "@/components/admin/ToastStack"; import { Button } from "@/components/ui/button"; import { ConciergePage } from "@/pages/structure/ConciergePage"; import { HomePage } from "@/pages/structure/HomePage"; import { WanfaPage } from "@/pages/structure/WanfaPage"; import { LeadsPage } from "@/pages/leads/LeadsPage"; import type { Tab, Toast } from "@/types/admin"; const sidebarGroups: { id: string; label: string; items: { id: Tab; label: string; icon: typeof Home; description: string }[]; }[] = [ { id: "frontend", label: "前台页面", items: [ { id: "home", label: "首页", icon: Home, description: "" }, { id: "play", label: "玩法", icon: List, description: "" }, { id: "butler", label: "管家", icon: Headset, description: "" }, { id: "leads", label: "需求线索", icon: ClipboardList, description: "" }, ], }, ]; const tabs = sidebarGroups.flatMap((group) => group.items); export function AdminShell({ onLogout }: { onLogout: () => void }) { const [activeTab, setActiveTab] = useState("home"); const [toasts, setToasts] = useState([]); const activeMeta = useMemo( () => tabs.find((tab) => tab.id === activeTab), [activeTab], ); const activeLabel = activeMeta?.label ?? ""; const activeDescription = activeMeta?.description ?? ""; const activeTopbarDescription = [ activeDescription, "结构化维护", "内存开发模式", ] .filter(Boolean) .join(" · "); const notify = (toast: Omit) => { const id = `toast-${Date.now()}-${Math.random().toString(16).slice(2)}`; setToasts((items) => [...items, { ...toast, id }]); window.setTimeout(() => { setToasts((items) => items.filter((item) => item.id !== id)); }, 4200); }; const logout = () => { void logoutAdmin().finally(() => { clearToken(); onLogout(); }); }; return (
{activeLabel} {activeTopbarDescription}
{activeTab === "home" ? ( ) : activeTab === "play" ? ( ) : activeTab === "butler" ? ( ) : activeTab === "leads" ? ( ) : null}
setToasts((items) => items.filter((item) => item.id !== id)) } />
); }