"use client" import type { FamilyMember } from "@/types/family" import { cn } from "@/lib/utils" import { useAvatarCache } from "@/hooks/use-avatar-cache" import { CircleUser, CircleUserRound, Heart } from "lucide-react" interface FamilyNodeProps { member: FamilyMember spouse?: FamilyMember spouses?: FamilyMember[] isRoot?: boolean onSelect?: (member: FamilyMember) => void isHighlighted?: boolean relationMode?: boolean isSelected?: boolean } // 格式化日期显示(只显示年份) function formatYear(dateString?: string): string { if (!dateString) return '' const year = dateString.split('-')[0] return year } // 计算年龄 function calculateAge(birthDate?: string, deathDate?: string): number | null { if (!birthDate) return null const birth = new Date(birthDate) const end = deathDate ? new Date(deathDate) : new Date() let age = end.getFullYear() - birth.getFullYear() const monthDiff = end.getMonth() - birth.getMonth() if (monthDiff < 0 || (monthDiff === 0 && end.getDate() < birth.getDate())) { age-- } return age } // 单个人员卡片组件 function PersonCard({ member, isRoot, isSpouse, onSelect, isHighlighted, relationMode, isSelected }: { member: FamilyMember; isRoot?: boolean; isSpouse?: boolean; onSelect?: (member: FamilyMember) => void; isHighlighted?: boolean; relationMode?: boolean; isSelected?: boolean }) { const { avatarUrl: avatarBlobUrl } = useAvatarCache(member?.avatarImageId) const birthYear = formatYear(member.birthDate) const deathYear = formatYear(member.deathDate) const age = calculateAge(member.birthDate, member.deathDate) const lifeSpan = birthYear ? deathYear ? `${birthYear}-${deathYear}` : `${birthYear}-` : '' const ageText = age !== null ? member.deathDate ? `享年${age}岁` : `${age}岁` : '' return (