import Link from "next/link"; import type { Metadata } from "next"; import { cookies } from "next/headers"; import { PenSquare, SearchX, MessagesSquare, Check, ArrowRight } from "lucide-react"; import { fetchPosts, fetchBoards } from "@/lib/api"; import { authCookieHeader } from "@/lib/cookies"; import Pagination from "@/components/Pagination"; import PostRow from "@/components/PostRow"; import PinnedPosts from "@/components/PinnedPosts"; export const metadata: Metadata = { title: "姜十三论坛 · 技术讨论社区", description: "姜十三论坛,分享技术、讨论问题、交流心得的社区", }; interface HomePageProps { searchParams: Promise<{ q?: string; page?: string }>; } export default async function HomePage({ searchParams }: HomePageProps) { const { q, page: pageStr } = await searchParams; const keyword = q?.trim() || ""; const page = Math.max(1, parseInt(pageStr || "1", 10) || 1); // 仅转发最小化的 access cookie 供后端填充 liked 状态(不携带 refresh 等) const cookie = authCookieHeader(await cookies()); const [postsData, boardsData] = await Promise.all([ fetchPosts(page, 20, undefined, "latest", keyword, cookie), fetchBoards(), ]); // 第一页且非搜索时:管理员置顶独立成区,其余进入普通列表 const split = page === 1 && !keyword; const pinned = split ? postsData.posts.filter((p) => p.pinned > 0) : []; const rows = split ? postsData.posts.filter((p) => p.pinned <= 0) : postsData.posts; return (
{/* 页头 */}

{keyword ? ( <> 搜索“{keyword}” ) : ( "最新讨论" )}

{keyword ? `共找到 ${postsData.total} 篇相关帖子` : `共 ${postsData.total} 篇帖子 · ${boardsData.boards.length} 个板块,欢迎加入讨论`}

写新帖
{/* 主列 */}
{rows.length > 0 ? ( <>
{keyword ? "搜索结果" : "全部讨论"} 共 {postsData.total} 篇
{rows.map((post) => ( ))} ) : (
{keyword ? : }

{keyword ? "没有找到相关帖子" : "还没有帖子"}

{keyword ? `换个关键词试试,或者发起“${keyword}”相关的话题` : "成为第一个发起讨论的人吧"}

{keyword ? (
清除搜索 发起这个话题
) : ( 写新帖 )}
)}
{/* 侧栏 */}
); }