"use client"; import { use, useEffect, useState } from "react"; import { Link, useLocale } from "@/i18n/navigation"; import { apiFetch } from "@/app/lib/api-client"; import Footer from "@/app/components/Footer"; interface ContentItem { slug: string; title: string; titleEn?: string; subtitle: string; subtitleEn?: string; description: string; descriptionEn?: string; coverImage: string; mediaUrl: string; chapters?: { title: string; time?: string }[]; relatedProfiles?: string[]; durationMinutes?: number; } interface CityLite { slug: string; name: string; nameEn?: string; icon: string; nomadsNow: number; } export default function VideoPage({ params }: { params: Promise<{ slug: string }> }) { const { slug } = use(params); const locale = useLocale(); const [item, setItem] = useState(null); const [cities, setCities] = useState([]); useEffect(() => { apiFetch<{ item: ContentItem; cities: CityLite[] }>(`/api/content/${slug}`) .then((data) => { setItem(data.item); setCities(data.cities || []); }) .catch(() => setItem(null)); }, [slug]); if (!item) { return
加载中...
; } const title = locale === "zh" ? item.title : item.titleEn || item.title; const subtitle = locale === "zh" ? item.subtitle : item.subtitleEn || item.subtitle; const description = locale === "zh" ? item.description : item.descriptionEn || item.description; return (
← 返回首页

个人访谈 / 现实纪录片

{title}

{subtitle}

{description}

片中城市

{cities.map((city) => ( {city.icon} {locale === "zh" ? city.name : city.nameEn || city.name} · {city.nomadsNow} 人在此 ))}
); }