This commit is contained in:
freedakgmail
2025-12-21 17:32:33 +08:00
parent cffdd75e96
commit 5c8c70097c
190 changed files with 2746 additions and 893 deletions
+52 -2
View File
@@ -19,9 +19,9 @@ interface FamilyContextType {
treeData: FamilyTreeData
currentTree: FamilyTreeInfo | null
getMember: (id: string) => FamilyMember | undefined
addMember: (member: FamilyMember) => Promise<void>
addMember: (member: FamilyMember) => Promise<{ member: FamilyMember; message?: string }>
updateMember: (id: string, updates: Partial<FamilyMember>) => Promise<void>
deleteMember: (id: string) => Promise<void>
deleteMember: (id: string) => Promise<{ success: boolean; message?: string; newRootMemberId?: string }>
searchResults: FamilyMember[]
searchMembers: (query: string) => void
loadData: (data: FamilyTreeData) => Promise<void>
@@ -212,6 +212,28 @@ function FamilyProviderInner({ children }: { children: React.ReactNode }) {
const data = await response.json()
// 如果发生了代数重新计算,需要重新加载所有成员数据
if (data.generationRecalculated) {
const membersResponse = await fetch(`/api/trees/${currentTree.id}/members`)
if (membersResponse.ok) {
const membersData = await membersResponse.json()
const membersMap: Record<string, FamilyMember> = {}
membersData.members.forEach((m: FamilyMember) => {
membersMap[m.id] = m
})
setTreeData(prev => ({
rootId: membersData.rootId || prev.rootId,
members: membersMap,
}))
// 返回提示信息
return {
member: data.member,
message: `已成功添加成员。由于给始祖添加了父母,全族代数已自动调整(+${data.generationOffset}代)。`
}
}
}
// 更新本地状态
setTreeData(prev => ({
...prev,
@@ -220,6 +242,8 @@ function FamilyProviderInner({ children }: { children: React.ReactNode }) {
[data.member.id]: data.member,
},
}))
return { member: data.member }
}, [currentTree?.id])
const updateMember = useCallback(async (id: string, updates: Partial<FamilyMember>) => {
@@ -291,6 +315,30 @@ function FamilyProviderInner({ children }: { children: React.ReactNode }) {
throw new Error(error.error || '删除成员失败')
}
const data = await response.json()
// 如果发生了代数重新计算,需要重新加载所有成员数据
if (data.generationRecalculated) {
const membersResponse = await fetch(`/api/trees/${currentTree.id}/members`)
if (membersResponse.ok) {
const membersData = await membersResponse.json()
const membersMap: Record<string, FamilyMember> = {}
membersData.members.forEach((m: FamilyMember) => {
membersMap[m.id] = m
})
setTreeData(prev => ({
rootId: membersData.rootId || prev.rootId,
members: membersMap,
}))
return {
success: true,
message: `已成功删除成员。由于删除了始祖,全族代数已自动调整(-1代)。`,
newRootMemberId: data.newRootMemberId
}
}
}
// 更新本地状态
setTreeData(prev => {
const newMembers = { ...prev.members }
@@ -300,6 +348,8 @@ function FamilyProviderInner({ children }: { children: React.ReactNode }) {
members: newMembers,
}
})
return { success: true }
}, [currentTree?.id])
const loadData = useCallback(async (data: FamilyTreeData) => {