0.8.0.0
This commit is contained in:
@@ -9,6 +9,8 @@ import type { FamilyMember } from "@/types/family"
|
||||
import jsPDF from "jspdf"
|
||||
import { useRouter } from "next/navigation"
|
||||
import { useFamily } from "@/context/family-context"
|
||||
import { GenerationWarningDialog } from "@/components/tree/generation-warning-dialog"
|
||||
import { shouldShowGenerationWarning } from "@/lib/generation-utils"
|
||||
|
||||
// 全局类型声明
|
||||
declare global {
|
||||
@@ -99,6 +101,10 @@ const D3OrgChartFlowComponent = forwardRef<D3OrgChartRef, D3OrgChartFlowProps>(
|
||||
const [contextMenuPosition, setContextMenuPosition] = useState({ x: 0, y: 0 })
|
||||
const router = useRouter()
|
||||
const { currentTree } = useFamily()
|
||||
|
||||
// 代数重新计算警告对话框状态
|
||||
const [showWarningDialog, setShowWarningDialog] = useState(false)
|
||||
const [pendingAddMember, setPendingAddMember] = useState<{ type: 'father' | 'mother', member: FamilyMember } | null>(null)
|
||||
|
||||
// 构建新增成员的 URL
|
||||
const buildAddUrl = (type: 'father' | 'mother' | 'spouse' | 'child', member: FamilyMember) => {
|
||||
@@ -111,7 +117,8 @@ const D3OrgChartFlowComponent = forwardRef<D3OrgChartRef, D3OrgChartFlowProps>(
|
||||
case 'father':
|
||||
params.set('childId', member.id)
|
||||
params.set('gender', 'MALE')
|
||||
params.set('generation', (member.generation - 1).toString())
|
||||
// 如果是第1代成员,新父母的世代也设为1(后端会重新计算所有成员世代)
|
||||
params.set('generation', member.generation === 1 ? '1' : (member.generation - 1).toString())
|
||||
// 如果已有母亲,设为配偶
|
||||
if (member.motherId) {
|
||||
params.set('spouseId', member.motherId)
|
||||
@@ -120,7 +127,8 @@ const D3OrgChartFlowComponent = forwardRef<D3OrgChartRef, D3OrgChartFlowProps>(
|
||||
case 'mother':
|
||||
params.set('childId', member.id)
|
||||
params.set('gender', 'FEMALE')
|
||||
params.set('generation', (member.generation - 1).toString())
|
||||
// 如果是第1代成员,新父母的世代也设为1(后端会重新计算所有成员世代)
|
||||
params.set('generation', member.generation === 1 ? '1' : (member.generation - 1).toString())
|
||||
// 如果已有父亲,设为配偶
|
||||
if (member.fatherId) {
|
||||
params.set('spouseId', member.fatherId)
|
||||
@@ -163,6 +171,13 @@ const D3OrgChartFlowComponent = forwardRef<D3OrgChartRef, D3OrgChartFlowProps>(
|
||||
}
|
||||
|
||||
const handleAddMember = (type: 'father' | 'mother' | 'spouse' | 'child', member: FamilyMember) => {
|
||||
// 检查是否需要显示代数重新计算警告
|
||||
if ((type === 'father' || type === 'mother') && shouldShowGenerationWarning(member, type)) {
|
||||
setPendingAddMember({ type, member })
|
||||
setShowWarningDialog(true)
|
||||
return
|
||||
}
|
||||
|
||||
const url = buildAddUrl(type, member)
|
||||
console.log('D3 handleAddMember called:', type, url)
|
||||
// 使用 setTimeout 延迟跳转,确保菜单关闭后再执行
|
||||
@@ -171,6 +186,18 @@ const D3OrgChartFlowComponent = forwardRef<D3OrgChartRef, D3OrgChartFlowProps>(
|
||||
window.location.href = url
|
||||
}, 100)
|
||||
}
|
||||
|
||||
// 确认添加父母后的处理
|
||||
const handleConfirmAddParent = () => {
|
||||
if (pendingAddMember) {
|
||||
const url = buildAddUrl(pendingAddMember.type, pendingAddMember.member)
|
||||
console.log('Confirmed add parent, navigating to:', url)
|
||||
setTimeout(() => {
|
||||
window.location.href = url
|
||||
}, 100)
|
||||
setPendingAddMember(null)
|
||||
}
|
||||
}
|
||||
|
||||
// 判断可以添加的关系
|
||||
const canAddFather = (member: FamilyMember) => !member.fatherId
|
||||
@@ -277,7 +304,7 @@ const D3OrgChartFlowComponent = forwardRef<D3OrgChartRef, D3OrgChartFlowProps>(
|
||||
spouseCount: spouses.length,
|
||||
hasChildren: Object.values(members).some(m => m.fatherId === member.id || m.motherId === member.id),
|
||||
ageText: ageText,
|
||||
isFounder: member.isFounder === true
|
||||
isFounder: member.id === rootId // 使用 rootId 判断始祖
|
||||
})
|
||||
|
||||
// 添加子节点到队列
|
||||
@@ -1022,6 +1049,17 @@ const D3OrgChartFlowComponent = forwardRef<D3OrgChartRef, D3OrgChartFlowProps>(
|
||||
onClick={() => setContextMenuNode(null)}
|
||||
/>
|
||||
)}
|
||||
|
||||
{/* 代数重新计算警告对话框 */}
|
||||
{pendingAddMember && (
|
||||
<GenerationWarningDialog
|
||||
open={showWarningDialog}
|
||||
onOpenChange={setShowWarningDialog}
|
||||
memberName={pendingAddMember.member.fullName}
|
||||
relationType={pendingAddMember.type}
|
||||
onConfirm={handleConfirmAddParent}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user