import { prisma } from "@/lib/db"; import { AddonCard } from "@/components/public/AddonCard"; import Link from "next/link"; import { Package, Search, ChevronLeft, ChevronRight } from "lucide-react"; const categoryLabels: Record = { general: "通用", gameplay: "游戏玩法", ui: "界面增强", combat: "战斗", raid: "团队副本", pvp: "PvP", tradeskill: "专业技能", utility: "实用工具", }; export const metadata = { title: "插件列表 - Nanami", description: "浏览和下载 Turtle WoW 插件", }; export const revalidate = 30; const PAGE_SIZE = 12; export default async function AddonsPage({ searchParams, }: { searchParams: Promise<{ category?: string; search?: string; page?: string }>; }) { const { category, search, page: pageStr } = await searchParams; const page = Math.max(1, parseInt(pageStr || "1", 10) || 1); const where: Record = { published: true }; if (category) where.category = category; if (search) { where.OR = [ { name: { contains: search, mode: "insensitive" } }, { summary: { contains: search, mode: "insensitive" } }, ]; } const [addons, total, categories] = await Promise.all([ prisma.addon.findMany({ where, include: { releases: { where: { isLatest: true }, select: { version: true }, }, }, orderBy: { totalDownloads: "desc" }, skip: (page - 1) * PAGE_SIZE, take: PAGE_SIZE, }), prisma.addon.count({ where }), prisma.addon.groupBy({ by: ["category"], where: { published: true }, _count: { id: true }, }), ]); const totalPages = Math.ceil(total / PAGE_SIZE); const buildHref = (p: number) => { const params = new URLSearchParams(); if (category) params.set("category", category); if (search) params.set("search", search); if (p > 1) params.set("page", String(p)); const qs = params.toString(); return `/addons${qs ? `?${qs}` : ""}`; }; return (

插件列表

浏览和下载 World of Warcraft 插件

{/* Category Filter */}
全部 {categories.map((cat) => ( {categoryLabels[cat.category] || cat.category} ({cat._count.id}) ))}
{/* Addon Grid */} {addons.length > 0 ? ( <>
{addons.map((addon) => ( ))}
{/* Pagination */} {totalPages > 1 && (
{page > 1 ? ( ) : ( )} {Array.from({ length: totalPages }, (_, i) => i + 1).map((p) => ( {p} ))} {page < totalPages ? ( ) : ( )}
)} ) : (

{search ? `没有找到"${search}"相关的插件` : "暂无插件"}

{search ? "尝试更换关键词搜索" : "稍后再来查看吧"}

)}
); }