import React, { useState, useEffect } from "react"; import { useNavigate, useLocation } from "react-router-dom"; import { Logo } from "@/components/icons"; import { siteConfig } from "@/config/site"; interface TabItem { path: string; label: string; icon: React.ReactNode; adminOnly?: boolean; } export default function H5Layout({ children }: { children: React.ReactNode }) { const navigate = useNavigate(); const location = useLocation(); const [isAdmin, setIsAdmin] = useState(false); // Tabbar配置 const tabItems: TabItem[] = [ { path: "/dashboard", label: "首页", icon: ( ), }, { path: "/forward", label: "转发", icon: ( ), }, { path: "/tunnel", label: "隧道", icon: ( ), adminOnly: true, }, { path: "/node", label: "节点", icon: ( ), adminOnly: true, }, { path: "/profile", label: "我的", icon: ( ), }, ]; useEffect(() => { // 兼容处理:如果没有admin字段,根据role_id判断(0为管理员) let adminFlag = localStorage.getItem("admin") === "true"; if (localStorage.getItem("admin") === null) { const roleId = parseInt(localStorage.getItem("role_id") || "1", 10); adminFlag = roleId === 0; // 补充设置admin字段,避免下次再次判断 localStorage.setItem("admin", adminFlag.toString()); } setIsAdmin(adminFlag); }, []); // Tab点击处理 const handleTabClick = (path: string) => { navigate(path); }; // 过滤tab项(根据权限) const filteredTabItems = tabItems.filter( (item) => !item.adminOnly || isAdmin, ); // 路由切换时回到页面顶部,避免上一页的滚动位置遗留 useEffect(() => { try { window.scrollTo({ top: 0, left: 0, behavior: "auto" }); } catch { window.scrollTo(0, 0); } document.body.scrollTop = 0; document.documentElement.scrollTop = 0; }, [location.pathname]); return (
{/* 顶部导航栏 */}

{siteConfig.name}

{/* 主内容区域 */}
{children}
{/* 用于给固定 Tabbar 腾出空间的占位元素 */}
{/* 底部Tabbar */}
); }