"use client" import { SiteHeader } from "@/components/site-header" import { useFamily } from "@/context/family-context" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { ScrollArea } from "@/components/ui/scroll-area" import { Clock, Map, ArrowRight } from "lucide-react" export default function TimelinePage() { const { treeData, getMember } = useFamily() const members = Object.values(treeData.members) // -- Timeline Logic -- // Flatten events: Births and Deaths const events = members .flatMap((m) => { const evs = [] if (m.birthDate) { evs.push({ date: m.birthDate, year: Number.parseInt(m.birthDate.substring(0, 4)), type: "birth", member: m, }) } if (m.deathDate) { evs.push({ date: m.deathDate, year: Number.parseInt(m.deathDate.substring(0, 4)), type: "death", member: m, }) } return evs }) .sort((a, b) => a.date.localeCompare(b.date)) // -- Migration Logic -- // Find moves between generations (Father -> Child location change) const migrations = members .flatMap((m) => { if (!m.fatherId) return [] const father = getMember(m.fatherId) if (!father) return [] // Check if location exists and is different const loc1 = father.ancestralHome || father.birthPlace const loc2 = m.ancestralHome || m.birthPlace if (loc1 && loc2 && loc1 !== loc2) { return [ { year: m.birthDate ? Number.parseInt(m.birthDate.substring(0, 4)) : null, from: loc1, to: loc2, person: m, father: father, }, ] } return [] }) .sort((a, b) => (a.year || 0) - (b.year || 0)) return (

家族历史 (History)

纵览家族发展的时间脉络与迁徙足迹。

时间轴 (Chronology) 迁徙图 (Migration)
{events.map((event, idx) => (
{/* Dot */}
{/* Year Label (Mobile vs Desktop) */}
{event.year}
{/* Content Card */}
{event.type === "birth" ? "诞生" : "逝世"} {event.date}

{event.member.fullName} ({event.member.generation}世)

{event.type === "birth" ? `出生于 ${event.member.birthPlace || event.member.ancestralHome || "未知地点"}` : `享年 ${event.year - Number.parseInt(event.member.birthDate?.substring(0, 4) || "0")} 岁`}

))} {events.length === 0 && (
暂无时间记录。请完善成员的出生日期信息。
)}
迁徙记录 (Records)
{migrations.map((mig, idx) => (
{mig.year ? `${mig.year}年` : "未知年代"} 第 {mig.person.generation} 世
迁出地
{mig.from}
{mig.father.fullName}
迁入地
{mig.to}
{mig.person.fullName}
))} {migrations.length === 0 && (

暂无迁徙记录。
系统会自动分析父子代之间的籍贯/出生地差异来生成迁徙路径。

)}

地图可视化需要地理编码服务支持。
当前版本仅支持列表展示迁徙路径。

) }