|  |  | 
 |  |  | import { Clipboard } from '@antv/x6-plugin-clipboard'; | 
 |  |  | import { Stencil } from '@antv/x6-plugin-stencil'; | 
 |  |  | import { History } from '@antv/x6-plugin-history' | 
 |  |  | import { commonGraphPorts, commonGraphAttrs } from "./GraphConfig"; | 
 |  |  |  | 
 |  |  | import { Transform } from '@antv/x6-plugin-transform' | 
 |  |  | import { commonGraphPorts, commonGraphAttrs, initGraphConnecting, initNodeData } from "./GraphConfig"; | 
 |  |  |  | 
 |  |  | export const GraphComponent = React.forwardRef((props, ref) => { | 
 |  |  |     const container = useRef(null); | 
 |  |  | 
 |  |  |     function initGrap() { | 
 |  |  |         ref.current = new Graph({ | 
 |  |  |             container: container.current, | 
 |  |  |             // width: document.documentElement.clientWidth, | 
 |  |  |             // height: document.documentElement.clientHeight, | 
 |  |  |             width: 200, | 
 |  |  |             height: 500, | 
 |  |  |             // grid: 1, | 
 |  |  |             connecting: { | 
 |  |  |                 snap: true, | 
 |  |  |                 createEdge() { | 
 |  |  |                     return new Shape.Edge({ | 
 |  |  |                         attrs: { | 
 |  |  |                             line: { | 
 |  |  |                                 stroke: '#a0a0a0', | 
 |  |  |                                 strokeWidth: 1, | 
 |  |  |                                 targetMarker: { | 
 |  |  |                                     name: 'classic', | 
 |  |  |                                     size: 8, | 
 |  |  |                                 }, | 
 |  |  |                             }, | 
 |  |  |                         }, | 
 |  |  |                     }) | 
 |  |  |                 }, | 
 |  |  |                 connector: 'smooth', | 
 |  |  |                 allowMulti: true, | 
 |  |  |                 allowPort: true, | 
 |  |  |             } | 
 |  |  |             width: document.documentElement.clientWidth, | 
 |  |  |             height: document.documentElement.clientHeight - 100, | 
 |  |  |             // width: 200, | 
 |  |  |             // height: 500, | 
 |  |  |             connecting: initGraphConnecting, | 
 |  |  |         }); | 
 |  |  |  | 
 |  |  |         const graph = ref.current; | 
 |  |  |  | 
 |  |  |         const rect = graph.addNode({ | 
 |  |  |             x: 60, | 
 |  |  |             y: 60, | 
 |  |  |             width: 120, | 
 |  |  |             height: 40, | 
 |  |  |             label: '订单管理', | 
 |  |  |             ports: commonGraphPorts, | 
 |  |  |             attrs: commonGraphAttrs, | 
 |  |  |         }); | 
 |  |  |         // const rect = graph.addNode({ | 
 |  |  |         //     x: 60, | 
 |  |  |         //     y: 60, | 
 |  |  |         //     width: 120, | 
 |  |  |         //     height: 40, | 
 |  |  |         //     label: '订单管理', | 
 |  |  |         //     ports: commonGraphPorts, | 
 |  |  |         //     attrs: commonGraphAttrs, | 
 |  |  |         //     data: initNodeData, | 
 |  |  |         // }); | 
 |  |  |  | 
 |  |  |         const rect2 = graph.addNode({ | 
 |  |  |             x: 240, | 
 |  |  |             y: 240, | 
 |  |  |             width: 120, | 
 |  |  |             height: 40, | 
 |  |  |             label: '库存管理', | 
 |  |  |             ports: commonGraphPorts, | 
 |  |  |             attrs: commonGraphAttrs, | 
 |  |  |         }); | 
 |  |  |         // const rect2 = graph.addNode({ | 
 |  |  |         //     x: 240, | 
 |  |  |         //     y: 240, | 
 |  |  |         //     width: 120, | 
 |  |  |         //     height: 40, | 
 |  |  |         //     label: '库存管理', | 
 |  |  |         //     ports: commonGraphPorts, | 
 |  |  |         //     attrs: commonGraphAttrs, | 
 |  |  |         //     data: initNodeData, | 
 |  |  |         // }); | 
 |  |  |  | 
 |  |  |         graph.use( | 
 |  |  |             new Snapline({ | 
 |  |  | 
 |  |  |             }), | 
 |  |  |         ) | 
 |  |  |  | 
 |  |  |         graph.use( | 
 |  |  |             new Transform({ | 
 |  |  |                 resizing: { | 
 |  |  |                     enabled: true | 
 |  |  |                 }, | 
 |  |  |             }), | 
 |  |  |         ) | 
 |  |  |  | 
 |  |  |         props.initHandle();//通知父组件初始化完成 | 
 |  |  |         return graph; | 
 |  |  |     } | 
 |  |  | 
 |  |  |                 { | 
 |  |  |                     name: 'group1', | 
 |  |  |                     title: '常用组件', | 
 |  |  |                 }, | 
 |  |  |                 { | 
 |  |  |                     name: 'group2', | 
 |  |  |                     title: '逻辑组件' | 
 |  |  |                 } | 
 |  |  |             ], | 
 |  |  |         }) | 
 |  |  |  | 
 |  |  |         stencilContainer.current.appendChild(stencil.container) | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |         const n1Data = JSON.parse(JSON.stringify(initNodeData)) | 
 |  |  |         n1Data.root = true;//设置为根节点 | 
 |  |  |         const n1 = graph.createNode({ | 
 |  |  |             shape: "rect", | 
 |  |  |             width: 80, | 
 |  |  |             height: 40, | 
 |  |  |             label: "默认组件", | 
 |  |  |             label: "程序入口", | 
 |  |  |             attrs: commonGraphAttrs, | 
 |  |  |             ports: commonGraphPorts, | 
 |  |  |             data: n1Data, | 
 |  |  |         }) | 
 |  |  |  | 
 |  |  |         const n2 = graph.createNode({ | 
 |  |  |             shape: "rect", | 
 |  |  |             width: 80, | 
 |  |  |             height: 40, | 
 |  |  |             label: "测试组件", | 
 |  |  |             label: "常用组件", | 
 |  |  |             attrs: commonGraphAttrs, | 
 |  |  |             ports: commonGraphPorts, | 
 |  |  |             data: initNodeData, | 
 |  |  |         }) | 
 |  |  |  | 
 |  |  |         stencil.load([n1, n2], 'group1') | 
 |  |  |         const crnData = JSON.parse(JSON.stringify(initNodeData)) | 
 |  |  |         crnData.type = "crn"; | 
 |  |  |         const crnStencil = graph.createNode({ | 
 |  |  |             shape: "rect", | 
 |  |  |             width: 80, | 
 |  |  |             height: 40, | 
 |  |  |             label: "堆垛机组件", | 
 |  |  |             attrs: commonGraphAttrs, | 
 |  |  |             ports: commonGraphPorts, | 
 |  |  |             data: crnData, | 
 |  |  |         }) | 
 |  |  |  | 
 |  |  |         const shuttleData = JSON.parse(JSON.stringify(initNodeData)) | 
 |  |  |         shuttleData.type = "shuttle"; | 
 |  |  |         const shuttleStencil = graph.createNode({ | 
 |  |  |             shape: "rect", | 
 |  |  |             width: 80, | 
 |  |  |             height: 40, | 
 |  |  |             label: "四向车组件", | 
 |  |  |             attrs: commonGraphAttrs, | 
 |  |  |             ports: commonGraphPorts, | 
 |  |  |             data: shuttleData, | 
 |  |  |         }) | 
 |  |  |  | 
 |  |  |         const liftData = JSON.parse(JSON.stringify(initNodeData)) | 
 |  |  |         liftData.type = "lift"; | 
 |  |  |         const liftStencil = graph.createNode({ | 
 |  |  |             shape: "rect", | 
 |  |  |             width: 80, | 
 |  |  |             height: 40, | 
 |  |  |             label: "提升机组件", | 
 |  |  |             attrs: commonGraphAttrs, | 
 |  |  |             ports: commonGraphPorts, | 
 |  |  |             data: liftData, | 
 |  |  |         }) | 
 |  |  |  | 
 |  |  |         const devpData = JSON.parse(JSON.stringify(initNodeData)) | 
 |  |  |         devpData.type = "devp"; | 
 |  |  |         const devpStencil = graph.createNode({ | 
 |  |  |             shape: "rect", | 
 |  |  |             width: 80, | 
 |  |  |             height: 40, | 
 |  |  |             label: "输送线组件", | 
 |  |  |             attrs: commonGraphAttrs, | 
 |  |  |             ports: commonGraphPorts, | 
 |  |  |             data: devpData, | 
 |  |  |         }) | 
 |  |  |  | 
 |  |  |         const logicStencilData = JSON.parse(JSON.stringify(initNodeData)) | 
 |  |  |         logicStencilData.isLogic = true;//逻辑判断 | 
 |  |  |         const logicStencil = graph.createNode({ | 
 |  |  |             shape: 'path', | 
 |  |  |             width: 100, | 
 |  |  |             height: 60, | 
 |  |  |             // https://www.svgrepo.com/svg/13653/like | 
 |  |  |             path: 'M 50 0 L 100 50 L 50 100 L 0 50 Z', | 
 |  |  |             attrs: commonGraphAttrs, | 
 |  |  |             label: '逻辑判断', | 
 |  |  |             ports: commonGraphPorts, | 
 |  |  |             data: logicStencilData, | 
 |  |  |         }) | 
 |  |  |  | 
 |  |  |         stencil.load([n1, n2, crnStencil, shuttleStencil, liftStencil, devpStencil], 'group1') | 
 |  |  |         stencil.load([logicStencil], 'group2') | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     function initBind(graph) { | 
 |  |  | 
 |  |  |         }) | 
 |  |  |  | 
 |  |  |         graph.bindKey('ctrl+z', () => { | 
 |  |  |             graph.undo() | 
 |  |  |             if (graph.canUndo()) { | 
 |  |  |                 graph.undo() | 
 |  |  |             } | 
 |  |  |             return false | 
 |  |  |         }) | 
 |  |  |  | 
 |  |  |         graph.bindKey('ctrl+y', () => { | 
 |  |  |             graph.redo() | 
 |  |  |             if (graph.canRedo()) { | 
 |  |  |                 graph.redo() | 
 |  |  |             } | 
 |  |  |             return false | 
 |  |  |         }) | 
 |  |  |  | 
 |  |  | 
 |  |  |             }) | 
 |  |  |             return false | 
 |  |  |         }) | 
 |  |  |  | 
 |  |  |         graph.on('node:mouseenter', ({ node }) => { | 
 |  |  |             const ports = document.querySelectorAll(".x6-port-body") | 
 |  |  |             for (let i = 0, len = ports.length; i < len; i += 1) { | 
 |  |  |                 ports[i].style.visibility = 'visible' | 
 |  |  |             } | 
 |  |  |         }) | 
 |  |  |  | 
 |  |  |         graph.on('node:mouseleave', ({ node }) => { | 
 |  |  |             const ports = document.querySelectorAll(".x6-port-body") | 
 |  |  |             for (let i = 0, len = ports.length; i < len; i += 1) { | 
 |  |  |                 ports[i].style.visibility = 'hidden' | 
 |  |  |             } | 
 |  |  |         }) | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     return ( |