"use client"; import Link from "next/link"; import { useSearchParams } from "next/navigation"; import { PenSquare, Home, LayoutGrid, ShieldCheck } from "lucide-react"; import type { BoardWithCount, User } from "@/lib/api"; import { isStaff } from "@/lib/roles"; import BoardIcon, { boardColor } from "@/components/BoardIcon"; // 首页壳内板块切换:仅替换中栏帖子流,不离开工作台 function boardHref(id: number) { return `/?board=${id}`; } // 板块目录裸面板:只有 j13-module 本体,不含外层 nav / 宽度 / sticky 类, // 供侧栏注册表按管理端配置在任意侧栏渲染。 export function WorkspaceNavPanel({ boards, user, }: { boards: BoardWithCount[]; user?: User | null; }) { const params = useSearchParams(); const activeBoard = Number(params.get("board")) || 0; const showAdmin = !!user && isStaff(user.role); return (

板块目录 {boards.length > 0 ? ( {boards.length} 个 ) : null}

全部讨论 {boards.length > 0 ?
: null} {boards.map((b) => ( {b.name} {b.post_count} 篇 ))}
{showAdmin ? (
管理面板
) : null}
); } // 桌面左栏:整块模块,与右栏 j13-module 对齐 export function WorkspaceNav({ boards, user }: { boards: BoardWithCount[]; user?: User | null }) { return ( // sticky 必须挂在 flex 子项上:父级 items-start 会把内层缩成内容高,失去粘滞行程 ); } // 移动端:发帖入口 + 横向滑动板块条 export function WorkspaceNavMobile({ boards, user, }: { boards: BoardWithCount[]; user: User | null; }) { const params = useSearchParams(); const activeBoard = Number(params.get("board")) || 0; const composePath = activeBoard > 0 ? `/compose?board=${activeBoard}` : "/compose"; const composeHref = user ? composePath : `/login?redirect=${encodeURIComponent(composePath)}`; return (
发帖 全部 {boards.map((b) => ( {b.name} ))}
); }