@@ -103,6 +103,7 @@ const XFlow: FC<FlowProps> = memo(props => {
103103 const { undo, redo } = useTemporalStore ( ) ;
104104 const isNodeCopyingRef = useRef ( false ) ; // 是否正在进行节点复制
105105 const lastClickedNodeRef = useRef ( false ) ; // 最后一次点击是否是节点
106+ const isPanelRenderingRef = useRef ( false ) ; // 面板是否正在渲染中
106107
107108 useEffect ( ( ) => {
108109 zoomTo ( 0.8 ) ;
@@ -333,11 +334,14 @@ const XFlow: FC<FlowProps> = memo(props => {
333334 onClick = { async e => {
334335 // 记录用户点击了节点
335336 lastClickedNodeRef . current = true ;
337+ // 标记面板开始渲染
338+ isPanelRenderingRef . current = true ;
336339
337340 if ( nodeEditorRef ?. current ?. validateForm ) {
338341 const result = await nodeEditorRef ?. current ?. validateForm ( ) ;
339342 if ( ! result ) {
340343 message . error ( '请检查必填项!' ) ;
344+ isPanelRenderingRef . current = false ;
341345 return ;
342346 }
343347 }
@@ -353,6 +357,10 @@ const XFlow: FC<FlowProps> = memo(props => {
353357 setOpenPanel ( true ) ;
354358 }
355359 setOpenLogPanel ( true ) ;
360+
361+ setTimeout ( ( ) => {
362+ isPanelRenderingRef . current = false ;
363+ } , 1000 ) ; // 给面板一点时间完成渲染
356364 } }
357365 onDelete = { ( ) => {
358366 // 删除节点并关闭弹窗
@@ -437,31 +445,38 @@ const XFlow: FC<FlowProps> = memo(props => {
437445 message . warning ( `${ blockedNodes . map ( n => n . data ?. title || n . id ) . join ( ', ' ) } 节点不允许删除!` ) ;
438446 return false ;
439447 }
440- if ( nodesToDelete ?. length ) {
448+
449+ // 检查是否删除的是当前激活的节点
450+ const hasActiveNode = nodesToDelete . some ( node => node . id === activeNode ?. id ) ;
451+ if ( hasActiveNode ) {
452+ // 立即关闭面板和清除激活状态
441453 setOpenPanel ( false ) ;
454+ setActiveNode ( null ) ;
442455 }
443- return true ;
444- } }
445- onConnect = { onConnect }
446- onNodesChange = { changes => {
447- const removeChanges = changes . filter ( c => c . type === 'remove' ) ;
448- const otherChanges = changes . filter ( c => c . type !== 'remove' ) ;
449- // 处理删除操作:使用与右键菜单相同的 deleteNode 方法
450- if ( removeChanges . length > 0 ) {
451- removeChanges . forEach ( change => {
452- if ( 'id' in change ) {
453- deleteNode ( change . id ) ;
454- // 如果删除的是当前激活的节点,关闭面板
455- if ( change . id === activeNode ?. id ) {
456- setActiveNode ( null ) ;
457- }
458- }
456+
457+ const executeDelete = ( ) => {
458+ nodesToDelete . forEach ( node => {
459+ deleteNode ( node . id ) ;
459460 } ) ;
461+ } ;
462+
463+ // 如果面板正在渲染中,延迟执行删除避免状态冲突
464+ if ( isPanelRenderingRef . current ) {
465+ setTimeout ( ( ) => {
466+ executeDelete ( ) ;
467+ } , 150 ) ;
468+ } else {
469+ // 面板未在渲染,立即执行删除
470+ executeDelete ( ) ;
460471 }
461472
462- // 其他操作使用 ReactFlow 的默认处理
463- if ( otherChanges . length > 0 ) {
464- onNodesChange ( otherChanges ) ;
473+ return false ;
474+ } }
475+ onConnect = { onConnect }
476+ onNodesChange = { changes => {
477+ const nonRemoveChanges = changes . filter ( c => c . type !== 'remove' ) ;
478+ if ( nonRemoveChanges . length > 0 ) {
479+ onNodesChange ( nonRemoveChanges ) ;
465480 }
466481 } }
467482 onEdgesChange = { changes => {
0 commit comments