"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; minutes?: number }[]; durationMinutes?: number; } interface CityLite { slug: string; name: string; nameEn?: string; icon: string; costPerMonth: number; internetSpeed: number; } export default function EbookPage({ 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}

电子书

{title}

{subtitle}

{description}

目录

{(item.chapters || []).map((chapter, index) => (
{index + 1}. {chapter.title} {chapter.minutes || 8} min
))}
下载电子书 用城市数据规划路线 返回首页

书中关联城市

{cities.map((city) => (
{city.icon}

{locale === "zh" ? city.name : city.nameEn || city.name}

¥{city.costPerMonth}/月 · {city.internetSpeed}Mbps

))}
); }