import { LOCALES } from "@/i18n/routing"; import { constructMetadata } from "@/lib/metadata"; import { getWorkShop, getWorkShops } from "@/lib/workshop"; import { WorkShop } from "@/types/workShop"; import { Metadata } from "next"; import { Locale } from "next-intl"; // 强制静态渲染 export const dynamic = "force-static"; // 固定 Params 类型为普通对象(Next.js 原生传参无异步) type Params = { locale: string; slug: string; }; type MetadataProps = { params: Params; }; export async function generateMetadata({ params, }: MetadataProps): Promise { const { locale, slug } = await params; const workShop = await getWorkShop(locale, slug); console.log(workShop); console.log(workShop?.slug); if (!workShop) { return constructMetadata({ title: "404 - 车间不存在", description: "请求的车间页面未找到", noIndex: true, locale: locale as Locale, path: `/workshop/${slug}`, canonicalUrl: `/workshop/${slug}`, }); } return constructMetadata({ title: workShop.title, description: workShop.desc, locale: locale as Locale, path: `/workshop/${slug}`, canonicalUrl: `/workshop/${slug}`, }); } // 页面主组件 - 仅保留字段展示+修复 Hydration 错误 export default async function WorkshopDetailPage({ params }: { params: Params }) { // 🔴 核心修复1:移除不必要的 await(params 是同步对象) const { locale, slug } = await params; const workShop = await getWorkShop(locale, slug); if (!workShop) return null; // 兜底处理:避免字段为空导致属性不匹配 const coverSrc = workShop.cover || ""; const coverAlt = workShop.title || "车间封面"; const workshopDesc = workShop.desc || "暂无车间描述"; return (
{/* 封面图区域 - 🔴 修复布局属性不一致 */}
{coverAlt}
{/* 标题+描述区域 */}

{workShop.title}

{workshopDesc}

{workShop.images?.length > 0 && (

车间图片

{workShop.images.map((img, index) => { const stableKey = `workshop-${slug}-img-${index}-${img.slice(-8)}`; const imgAlt = `${workShop.title}-图片${index + 1}`; return (
{imgAlt}
); })}
)}
); } export async function generateStaticParams() { try { const defaultLocale = LOCALES[0]; const workShops: WorkShop[] = await getWorkShops(defaultLocale); return LOCALES.flatMap((locale) => workShops.map((workShop) => ({ locale, slug: workShop.slug as string, })) ); } catch (error) { console.error("生成产品静态参数失败:", error); return []; } }