56 lines
1.9 KiB
Markdown
56 lines
1.9 KiB
Markdown
# 世代重新计算修复说明
|
||
|
||
## 问题描述
|
||
给始祖(第1代成员)添加父母后,始祖及其所有后代的世代没有自动+1。
|
||
|
||
## 根本原因
|
||
在 `app/api/trees/[treeId]/members/route.ts` 的 POST 处理器中,代数重新计算的触发条件有问题:
|
||
|
||
```typescript
|
||
// 原来的逻辑
|
||
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. **检测是否给第1代成员添加父母**:
|
||
- 检查新成员的 `childrenIds` 中是否包含第1代成员
|
||
- 如果是,设置 `isAddingParentToFounder = true`
|
||
|
||
2. **触发代数重新计算**:
|
||
- 当 `isAddingParentToFounder && minGeneration === 1` 时
|
||
- 设置 `needRecalculate = true` 和 `generationOffset = 1`
|
||
|
||
3. **执行重新计算**:
|
||
- 将所有现有成员的代数+1(排除新创建的父母)
|
||
- 新父母保持代数为1,成为新的始祖
|
||
- 更新家族树的 `rootMemberId` 为新父母
|
||
|
||
## 修改的文件
|
||
- `app/api/trees/[treeId]/members/route.ts`
|
||
|
||
## 测试建议
|
||
1. 创建一个家族树,添加第1代成员(始祖)
|
||
2. 给始祖添加子女(第2代)
|
||
3. 给始祖添加父亲或母亲
|
||
4. 验证:
|
||
- 新父母的代数为1
|
||
- 原始祖的代数变为2
|
||
- 所有后代的代数都+1
|
||
- 家族树的 rootMemberId 更新为新父母
|
||
|
||
## 相关功能
|
||
- 前端已有代数重新计算警告对话框(GenerationWarningDialog)
|
||
- 警告会在添加父母到第1代成员时显示
|
||
- 用户确认后,后端会自动执行代数重新计算
|