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 Pagination from "@/components/Pagination"; import PostRow from "@/components/PostRow"; import FeaturePost from "@/components/FeaturePost"; 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); const cookie = (await cookies()).toString(); 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 normal = split ? postsData.posts.filter((p) => p.pinned <= 0) : postsData.posts; const feature = split && normal.length > 0 ? normal[0] : null; const rows = feature ? normal.slice(1) : normal; return (
{/* 页头 */}

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

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

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

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

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

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