@@ -153,12 +153,20 @@ const XFlow: FC<FlowProps> = memo(props => {
153153 const targetClassList = targetElement ?. classList ;
154154
155155 if ( isNodeCopyEvent && selectedNode ?. id ) {
156+ const nodeType = selectedNode ?. data ?. _nodeType ;
157+ if ( isString ( nodeType ) && nodeType ) {
158+ const nodeConfig = settingMap [ nodeType ] ;
159+ if ( nodeConfig ?. disabledShortcutCopy ) {
160+ message . warning (
161+ `${ selectedNode . data ?. title || selectedNode . id } 节点不允许复制`
162+ ) ;
163+ return ;
164+ }
165+ }
156166 // 复制节点
157167 e . preventDefault ( ) ;
158168 copyNode ( selectedNode . id ) ;
159169 }
160-
161-
162170 } else if ( ( e . key === 'v' || e . key === 'V' ) && ( e . ctrlKey || e . metaKey ) ) {
163171 const { copyNodes } = storeApi . getState ( ) ;
164172 if ( copyNodes ?. length > 0 ) {
@@ -282,7 +290,7 @@ const XFlow: FC<FlowProps> = memo(props => {
282290 }
283291 setOpenLogPanel ( true ) ;
284292 } }
285- onDelete = { ( ) => {
293+ onDelete = { ( ) => {
286294 // 删除节点并关闭弹窗
287295 setActiveNode ( null ) ;
288296 } }
@@ -357,7 +365,7 @@ const XFlow: FC<FlowProps> = memo(props => {
357365 } ,
358366 deletable : deletable , //默认连线属性受此项控制
359367 } }
360- onBeforeDelete = { async ( elements ) => {
368+ onBeforeDelete = { async elements => {
361369 if ( readOnly ) {
362370 return false ;
363371 }
@@ -369,10 +377,14 @@ const XFlow: FC<FlowProps> = memo(props => {
369377 : false ;
370378 } ) ;
371379 if ( blockedNodes ?. length > 0 ) {
372- message . warning ( `${ blockedNodes . map ( n => n . data ?. title || n . id ) . join ( ', ' ) } 节点不允许删除!` ) ;
380+ message . warning (
381+ `${ blockedNodes
382+ . map ( n => n . data ?. title || n . id )
383+ . join ( ', ' ) } 节点不允许删除!`
384+ ) ;
373385 return false ;
374386 }
375- return true
387+ return true ;
376388 } }
377389 onConnect = { onConnect }
378390 onNodesChange = { changes => {
@@ -398,24 +410,24 @@ const XFlow: FC<FlowProps> = memo(props => {
398410 } ) ;
399411 } }
400412 onEdgeMouseEnter = { ( _ , edge : any ) => {
401- if ( ! edge . style . stroke || edge . style . stroke === '#c9c9c9' ) {
413+ if ( ! edge . style . stroke || edge . style . stroke === '#c9c9c9' ) {
402414 getUpdateEdgeConfig ( edge , '#2970ff' ) ;
403415 }
404416 } }
405417 onEdgeMouseLeave = { ( _ , edge ) => {
406- if ( [ '#2970ff' , " #c9c9c9" ] . includes ( edge . style . stroke ) ) {
418+ if ( [ '#2970ff' , ' #c9c9c9' ] . includes ( edge . style . stroke ) ) {
407419 getUpdateEdgeConfig ( edge , '#c9c9c9' ) ;
408420 }
409421 } }
410422 onNodesDelete = { ( ) => {
411- setActiveNode ( null ) ;
423+ setActiveNode ( null ) ;
412424 } }
413425 onNodeClick = { ( event , node ) => {
414426 onNodeClick && onNodeClick ( event , node ) ;
415427 } }
416428 deleteKeyCode = { globalConfig ?. deleteKeyCode }
417- onEdgeClick = { ( event , edge ) => {
418- onEdgeClick && onEdgeClick ( event , edge )
429+ onEdgeClick = { ( event , edge ) => {
430+ onEdgeClick && onEdgeClick ( event , edge ) ;
419431 } }
420432 >
421433 < CandidateNode />
0 commit comments