"use client" import { useRouter, useSearchParams } 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 { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs" import { ArrowLeft, UserPlus } from "lucide-react" import type { FamilyMember } from "@/types/family" import { useMemo, useEffect, useState } from "react" import { useSession } from "next-auth/react" export default function NewMemberPage() { const router = useRouter() const searchParams = useSearchParams() const { addMember, treeData, getMember } = useFamily() const { data: session, status } = useSession() const [activeTab, setActiveTab] = useState("basic") // 未登录时重定向到登录页 useEffect(() => { if (status === 'unauthenticated') { router.push('/auth/signin') } }, [status, router]) const existingMembers = Object.values(treeData.members) const isFirstMember = existingMembers.length === 0 // 从URL参数获取预填信息 const initialData = useMemo(() => { const fatherId = searchParams.get('fatherId') const motherId = searchParams.get('motherId') const spouseId = searchParams.get('spouseId') const childId = searchParams.get('childId') const generation = searchParams.get('generation') const gender = searchParams.get('gender') if (!fatherId && !motherId && !spouseId && !childId && !generation && !gender) return undefined const data: Partial = {} // 处理父母信息 if (fatherId) { data.fatherId = fatherId } if (motherId) { data.motherId = motherId } // 如果只有父亲没有母亲,尝试自动获取母亲(父亲的配偶) if (fatherId && !motherId) { const father = getMember(fatherId) console.log('Looking for mother (father\'s spouse):', { fatherId, father, spouseIds: father?.spouseIds }) if (father?.spouseIds && father.spouseIds.length > 0) { data.motherId = father.spouseIds[0] console.log('Found mother:', data.motherId) } } // 如果只有母亲没有父亲,尝试自动获取父亲(母亲的配偶) if (motherId && !fatherId) { const mother = getMember(motherId) console.log('Looking for father (mother\'s spouse):', { motherId, mother, spouseIds: mother?.spouseIds }) if (mother?.spouseIds && mother.spouseIds.length > 0) { data.fatherId = mother.spouseIds[0] console.log('Found father:', data.fatherId) } } // 处理配偶信息 if (spouseId) { data.spouseIds = [spouseId] } // 处理子女信息 const childrenIds = searchParams.getAll('childrenIds') if (childrenIds.length > 0) { data.childrenIds = childrenIds } else if (childId) { data.childrenIds = [childId] } // 处理世代 if (generation) { data.generation = parseInt(generation) } // 处理性别 if (gender) { data.gender = gender.toUpperCase() as 'MALE' | 'FEMALE' } return data }, [searchParams, getMember]) // 检测添加成员的类型 const memberType = useMemo(() => { const fatherId = searchParams.get('fatherId') const motherId = searchParams.get('motherId') const spouseId = searchParams.get('spouseId') const childId = searchParams.get('childId') const childrenIds = searchParams.getAll('childrenIds') if (isFirstMember) return '始祖' if (fatherId || motherId) return '子女' if (spouseId) return '配偶' if (childId || childrenIds.length > 0) return '父母' return '成员' }, [searchParams, isFirstMember]) const handleSave = async (newMember: FamilyMember) => { try { // 如果是第一个成员,自动设置为始祖 const memberData = isFirstMember ? { ...newMember, generation: 1, isFounder: true, createdAt: new Date().toISOString(), updatedAt: new Date().toISOString(), } : { ...newMember, createdAt: new Date().toISOString(), updatedAt: new Date().toISOString(), } await addMember(memberData) // 跳转到成员列表页,保留treeId参数 const params = new URLSearchParams(window.location.search) router.push(`/members?${params.toString()}`) } catch (error) { console.error('添加成员失败:', error) alert('添加成员失败: ' + (error as Error).message) } } return (
{/* 固定头部区域 */}
{/* 返回按钮 */}
{/* Header Section */}
{isFirstMember ? ( 👑 ) : ( )}

{isFirstMember && 👑} {isFirstMember ? '添加家族始祖' : `添加家族${memberType}`}

{isFirstMember && ( 始祖 · 1世 )}

{isFirstMember ? '请认真填写始祖信息,这将是家族历史的起点' : `填写${memberType}信息,完善家族树`}

{/* Tab 导航栏 */} 基本信息 家庭关系 详细资料 照片故事 {/* 始祖特殊提示框 */} {isFirstMember && (
👑

立家族之根基

此为家族树之始祖第一世传人。
血脉由此而始,世系因此而传。

)}
{/* Tab 内容区域 - 可滚动 */}
router.back()} isFounder={isFirstMember} hideTabs={true} activeTab={activeTab} />
) }