1.9 KiB
1.9 KiB
世代重新计算修复说明
问题描述
给始祖(第1代成员)添加父母后,始祖及其所有后代的世代没有自动+1。
根本原因
在 app/api/trees/[treeId]/members/route.ts 的 POST 处理器中,代数重新计算的触发条件有问题:
// 原来的逻辑
if (minGeneration !== null && data.generation < minGeneration) {
needRecalculate = true
generationOffset = minGeneration - data.generation
}
当给第1代成员添加父母时:
- 新父母的
generation设置为 1(我们之前修复的) - 当前最小代数
minGeneration也是 1 - 条件
data.generation < minGeneration为 false(1 不小于 1) - 因此不会触发代数重新计算
解决方案
添加额外的检查逻辑,专门处理"给第1代成员添加父母"的情况:
-
检测是否给第1代成员添加父母:
- 检查新成员的
childrenIds中是否包含第1代成员 - 如果是,设置
isAddingParentToFounder = true
- 检查新成员的
-
触发代数重新计算:
- 当
isAddingParentToFounder && minGeneration === 1时 - 设置
needRecalculate = true和generationOffset = 1
- 当
-
执行重新计算:
- 将所有现有成员的代数+1(排除新创建的父母)
- 新父母保持代数为1,成为新的始祖
- 更新家族树的
rootMemberId为新父母
修改的文件
app/api/trees/[treeId]/members/route.ts
测试建议
- 创建一个家族树,添加第1代成员(始祖)
- 给始祖添加子女(第2代)
- 给始祖添加父亲或母亲
- 验证:
- 新父母的代数为1
- 原始祖的代数变为2
- 所有后代的代数都+1
- 家族树的 rootMemberId 更新为新父母
相关功能
- 前端已有代数重新计算警告对话框(GenerationWarningDialog)
- 警告会在添加父母到第1代成员时显示
- 用户确认后,后端会自动执行代数重新计算