This commit is contained in:
freedakgmail
2025-11-23 00:49:16 +08:00
parent c033e46782
commit 626d7dddde
184 changed files with 321926 additions and 2720 deletions
+47 -11
View File
@@ -138,7 +138,7 @@ export default function TimelinePage() {
}
return evs
})
.sort((a, b) => a.date.localeCompare(b.date))
.sort((a, b) => b.date.localeCompare(a.date)) // 倒序排列:最新的在上面
// -- Migration Logic --
// Find moves between generations (Father -> Child location change)
@@ -329,31 +329,67 @@ export default function TimelinePage() {
</div>
{/* Content Card */}
<div className="bg-card rounded-lg px-4 py-2 transition-all hover:bg-accent/5">
<div className="flex items-center gap-4 flex-wrap">
<div className="bg-card rounded-lg px-4 py-2 transition-all hover:bg-accent/5 border border-border/50">
<div className="flex items-center gap-2 flex-wrap text-sm">
<span
className={`text-xs px-2 py-0.5 rounded-full flex-shrink-0 ${event.type === "birth" ? "bg-primary/10 text-primary" : "bg-neutral-100 text-neutral-500"
}`}
>
{event.type === "birth" ? "诞生" : "逝世"}
</span>
<span className="font-serif font-bold text-base">{event.member.fullName}</span>
<span className="text-sm text-muted-foreground">{event.member.generation}</span>
<span className="font-serif font-bold">{event.member.fullName}</span>
<span className={`text-xs px-1.5 py-0.5 rounded ${event.member.gender === "male" ? "bg-blue-100 text-blue-700" : "bg-pink-100 text-pink-700"}`}>
{event.member.gender === "male" ? "男" : "女"}
</span>
<span className="text-xs text-muted-foreground">{event.member.generation}</span>
{/* 父母信息 */}
{event.member.fatherId && (
<span className="text-xs px-1.5 py-0.5 rounded bg-orange-50 text-orange-700 border border-orange-200">
:{getMember(event.member.fatherId)?.fullName || "未知"}
</span>
)}
{event.member.motherId && (
<span className="text-xs px-1.5 py-0.5 rounded bg-orange-50 text-orange-700 border border-orange-200">
:{getMember(event.member.motherId)?.fullName || "未知"}
</span>
)}
{/* 配偶信息 */}
{event.member.spouseIds && event.member.spouseIds.length > 0 && (
<span className="text-xs px-1.5 py-0.5 rounded bg-purple-50 text-purple-700 border border-purple-200">
:{getMember(event.member.spouseIds[0])?.fullName || "未知"}
</span>
)}
{/* 子女信息 */}
{event.member.childrenIds && event.member.childrenIds.length > 0 && (
<span className="text-xs px-1.5 py-0.5 rounded bg-green-50 text-green-700 border border-green-200">
:{event.member.childrenIds.length}
</span>
)}
{/* 出生地信息 */}
{event.type === "birth" && (event.member.birthPlace || event.member.ancestralHome) && (
<span className="text-sm text-muted-foreground">
{event.member.birthPlace || event.member.ancestralHome}
<span className="text-xs text-muted-foreground">
📍{event.member.birthPlace || event.member.ancestralHome}
</span>
)}
{/* 享年 */}
{event.type === "death" && event.member.birthDate && (
<span className="text-sm text-muted-foreground">
{event.year - Number.parseInt(event.member.birthDate.substring(0, 4))}
<span className="text-xs text-muted-foreground">
{event.year - Number.parseInt(event.member.birthDate.substring(0, 4))}
</span>
)}
{/* 葬地 */}
{event.type === "death" && event.member.burialPlace && (
<span className="text-sm text-muted-foreground">
{event.member.burialPlace}
<span className="text-xs text-muted-foreground">
{event.member.burialPlace}
</span>
)}
<span className="text-xs text-muted-foreground font-mono ml-auto">{event.date}</span>
</div>
</div>