"use client" import Link from "next/link" import { useParams, useRouter } from "next/navigation" import { useFamily } from "@/context/family-context" import { SiteHeader } from "@/components/site-header" import { MemberForm } from "@/components/members/member-form" import { Button } from "@/components/ui/button" import { ArrowLeft, Edit, Trash, Share2, Printer, CircleUser, CircleUserRound, Images, BookOpen } from "lucide-react" import { useState, useEffect } from "react" import type { FamilyMember } from "@/types/family" import { db } from "@/lib/db" import { PhotoGallery } from "@/components/members/photo-gallery" import { StoryManager } from "@/components/members/story-manager" import { useDialog } from "@/components/ui/alert-dialog-custom" export default function MemberProfilePage() { const { id } = useParams() const { getMember, updateMember, deleteMember, treeData } = useFamily() const { showConfirm } = useDialog() const router = useRouter() const [isEditing, setIsEditing] = useState(false) const [avatarBlobUrl, setAvatarBlobUrl] = useState(undefined) const member = getMember(id as string) const allMembers = Object.values(treeData.members) // Load avatar blob if exists useEffect(() => { if (member?.avatarImageId) { db.images.get(member.avatarImageId).then((image) => { if (image) { const url = URL.createObjectURL(image.blob) setAvatarBlobUrl(url) return () => URL.revokeObjectURL(url) } }) } else { setAvatarBlobUrl(undefined) } }, [member?.avatarImageId]) if (!member) { return (

Member not found

) } const handleSave = (updatedMember: FamilyMember) => { updateMember(updatedMember.id, updatedMember) setIsEditing(false) } const handleDelete = async () => { const confirmed = await showConfirm("确定要删除这位成员吗?这将同时删除其关联关系。", "删除成员", "destructive") if (confirmed) { deleteMember(member.id) router.push("/members") } } if (isEditing) { return (

编辑成员: {member.fullName}

setIsEditing(false)} />
) } return (
{/* Header Section */}
{avatarBlobUrl ? ( {member.fullName} ) : ( member.gender === 'FEMALE' ? ( ) : ( ) )}

{member.fullName}

{member.generation}世
{member.courtesyName && (

字:{member.courtesyName}

)} {member.artName && (

号:{member.artName}

)} {member.ancestralHome &&

籍贯:{member.ancestralHome}

}
{member.tags && member.tags.length > 0 && (
{member.tags.map((tag) => ( {tag} ))}
)}
{/* Content Grid */}
{/* Main Biography */}

生平事迹

{member.bio ? (

{member.bio}

) : (

暂无生平记录...

)}
{/* Photo Gallery */} {member.photoIds && member.photoIds.length > 0 && (

照片墙

updateMember(member.id, { photoIds })} readonly={false} />
)} {/* Family Stories */} {member.stories && member.stories.length > 0 && (

家族故事

updateMember(member.id, { stories })} readonly={false} />
)}

家族关系

父亲 (Father)

{member.fatherId ? ( {getMember(member.fatherId)?.fullName || member.fatherId} ) : member.spouseFatherName ? ( {member.spouseFatherName} ) : ( - )}

母亲 (Mother)

{member.motherId ? ( {getMember(member.motherId)?.fullName || member.motherId} ) : member.spouseMotherName ? ( {member.spouseMotherName} ) : ( - )}

配偶 (Spouse)

{member.spouseIds?.length > 0 ? ( member.spouseIds.map((spouseId) => ( {getMember(spouseId)?.fullName || spouseId} )) ) : ( 无记录 )}

子女 (Children)

{member.childrenIds?.length > 0 ? ( member.childrenIds.map((childId) => ( {getMember(childId)?.fullName || childId} )) ) : ( 无记录 )}
{/* Sidebar Info */}

详细信息

出生日期
{member.birthDate || "-"}
{member.deathDate && ( <>
逝世日期
{member.deathDate}
谥号
{member.posthumousName || "-"}
墓地
{member.burialPlace || "-"}
)} {member.generationName && (
字辈
{member.generationName}
)}
{/* 联系方式 */} {(member.phone || member.telephone || member.email || member.address) && (

联系方式

{member.phone && ( )} {member.telephone && ( )} {member.email && ( )} {member.address && (
现居地址
{member.address}
)}
)}
) }