import { NavLink, Outlet, useLocation, useNavigate, Navigate } from "react-router-dom"; import { QrCode, Package, ArrowLeft, LayoutDashboard, Smartphone, GitBranch, LogOut, User, Users, BarChart3, Table2 } from "lucide-react"; import { useAuth } from "../../contexts/AuthContext"; const MENU = [ { title: "全局概览", path: "/admin/dashboard", icon: LayoutDashboard, description: "生产数据总览 · 产品 + 任务统计", }, { title: "产品管理", path: "/admin/products", icon: Package, description: "创建产品 · 生成二维码 · 打印标签", }, { title: "任务全景", path: "/admin/tasks", icon: GitBranch, description: "身份证查任务树 · 裂变/返工可视化", }, { title: "人员看板", path: "/admin/people", icon: Users, description: "按负责人查看在制品设备分布", }, { title: "效能分析", path: "/admin/analytics", icon: BarChart3, description: "人员效能 / 设备流转 ECharts 可视化", }, { title: "WIP 分布矩阵", path: "/admin/matrix", icon: Table2, description: "规格型号 × 人员/工序 在制品透视表", }, ]; export default function AdminLayout() { const location = useLocation(); const navigate = useNavigate(); const { user, logout, isAuthenticated, loading } = useAuth(); // 认证加载中 if (loading) { return (
); } // 未登录 → 跳转登录页 if (!isAuthenticated) { return ; } function handleLogout() { logout(); navigate("/admin/login", { replace: true }); } return (
{/* 侧边栏 */}
管理端 / {MENU.find((m) => location.pathname.startsWith(m.path))?.title ?? "页面"}
{/* 用户信息 + 登出 */}
{user?.display_name ?? user?.username ?? "—"}
); }