"use client"; import Link from "next/link"; import { usePathname } from "next/navigation"; import type { LucideIcon } from "lucide-react"; import { LayoutDashboard, Users, Megaphone, Palette, ShieldCheck, ArrowLeft, } from "lucide-react"; import type { User } from "@/lib/api"; import Avatar from "@/components/Avatar"; // 后台导航项:exact 为精确匹配(仪表盘 /admin),其余按路径前缀匹配 const NAV_ITEMS: { href: string; label: string; icon: LucideIcon; exact?: boolean }[] = [ { href: "/admin", label: "仪表盘", icon: LayoutDashboard, exact: true }, { href: "/admin/users", label: "用户管理", icon: Users }, { href: "/admin/announcements", label: "公告管理", icon: Megaphone }, { href: "/admin/appearance", label: "外观设置", icon: Palette }, ]; function isActive(pathname: string, href: string, exact?: boolean) { return exact ? pathname === href : pathname === href || pathname.startsWith(`${href}/`); } /** * 桌面端后台侧边栏:品牌头 + 分组导航 + 返回站点 + 管理员身份卡。 * 选中态复用全站导航语言(--nav-active-bg 淡底 + accent 文字), * 与 j13-bcard / 顶部 pill 保持一致。 */ export function AdminSidebar({ user }: { user: User }) { const pathname = usePathname(); return (
{/* 品牌头 */}
管理面板 J13 ADMIN
{/* 导航 */} {/* 返回前台 */}
返回站点
{/* 管理员身份卡 */}

{user.nickname}

@{user.username}

管理员
); } /** * 移动端后台导航:横向滚动 pill,吸附在全站 Header 下方, * 窄屏下保持与桌面侧栏同等的切换能力且不占垂直空间。 */ export function AdminNavMobile() { const pathname = usePathname(); return (
); }