| import React, { useRef, useEffect, useState } from "react"; | 
| import { Button, Drawer, Input, Switch, Select, Checkbox } from 'antd'; | 
| import { initNodeData } from "../GraphConfig"; | 
|   | 
| const { TextArea } = Input; | 
| const CheckboxGroup = Checkbox.Group; | 
|   | 
| export const GraphDrawerLift = ({ graphRef, isReady }) => { | 
|   | 
|     const [open, setOpen] = useState(false); | 
|     const [init, setInit] = useState(false); | 
|     const [nodeData, setNodeData] = useState(null); | 
|     const [codeContent, setCodeContent] = useState(null); | 
|     const [execClass, setExecClass] = useState(null); | 
|     const [execApi, setExecApi] = useState(null); | 
|     const [liftOper, setLiftOper] = useState([]); | 
|     const [sourceLev, setSourceLev] = useState(null); | 
|     const [targetLev, setTargetLev] = useState(null); | 
|   | 
|     const classList = [ | 
|         { value: 'ShuttleThread', label: '提升机' }, | 
|     ]; | 
|   | 
|     const apiList = [ | 
|         { value: 'load', label: '取货' }, | 
|         { value: 'unload', label: '放货' }, | 
|         { value: 'loadAndUnload', label: '取放货' }, | 
|     ]; | 
|   | 
|     const liftOptions = [ | 
|         { | 
|             label: '无', | 
|             value: 'none' | 
|         }, | 
|         { | 
|             label: '升降', | 
|             value: 'move' | 
|         }, | 
|     ]; | 
|   | 
|     const liftOptions2 = [ | 
|         { | 
|             label: '无', | 
|             value: 'none' | 
|         }, | 
|         { | 
|             label: '穿梭车层', | 
|             value: 'shuttleLev' | 
|         }, | 
|         { | 
|             label: '工作档源库位层', | 
|             value: 'originLev' | 
|         }, | 
|         { | 
|             label: '工作档目标库位层', | 
|             value: 'targetLev' | 
|         }, | 
|     ]; | 
|   | 
|     const sourceLevChange = (event) => { | 
|         setSourceLev(event); | 
|         nodeData.data.liftType.sourceLev = event; | 
|     } | 
|   | 
|     const targetLevChange = (event) => { | 
|         setTargetLev(event); | 
|         nodeData.data.liftType.targetLev = event; | 
|     } | 
|   | 
|     const liftOptionsChange = (event) => { | 
|         setLiftOper(event); | 
|         nodeData.data.liftType.liftOper = event; | 
|     }; | 
|   | 
|     const showNodeDrawer = (graph, node) => { | 
|         if (node.data.type == "lift") { | 
|             setOpen(true); | 
|             setNodeData(node); | 
|             if (node.data == null) { | 
|                 node.data = initNodeData; | 
|             } | 
|   | 
|             if (node.data.codeContent != null) { | 
|                 setCodeContent(node.data.codeContent); | 
|             } | 
|   | 
|             if (node.data.execClass != null) { | 
|                 setExecClass(node.data.execClass); | 
|             } else { | 
|                 setExecClass(null); | 
|             } | 
|   | 
|             if (node.data.execApi != null) { | 
|                 setExecApi(node.data.execApi); | 
|             } else { | 
|                 setExecApi(null); | 
|             } | 
|   | 
|             if (node.data.liftType == null) { | 
|                 node.data.liftType = { | 
|                     liftOper: '',//操作方法 | 
|                 } | 
|             } else { | 
|                 const liftType = node.data.liftType; | 
|                 setLiftOper(liftType.liftOper); | 
|             } | 
|   | 
|         } | 
|     }; | 
|   | 
|     const onNodeClose = (e) => { | 
|         setOpen(false); | 
|         setNodeData(null); | 
|         setCodeContent(null); | 
|     }; | 
|   | 
|     const nodeTextAreaChange = (e) => { | 
|         setCodeContent(e.target.value); | 
|         nodeData.data.codeContent = e.target.value; | 
|     } | 
|   | 
|     const nodeDataInputChange = (e) => { | 
|         nodeData.label = e.target.value; | 
|     } | 
|   | 
|     const classListChange = (e) => { | 
|         setExecClass(e); | 
|         nodeData.data.execClass = e; | 
|     } | 
|   | 
|     const apiListChange = (e) => { | 
|         setExecApi(e); | 
|         nodeData.data.execApi = e; | 
|     } | 
|   | 
|     useEffect(() => { | 
|         if (isReady) { | 
|             const graph = graphRef.current; | 
|   | 
|             if (!init) { | 
|                 graph.on("node:dblclick", ({ node }) => { | 
|                     showNodeDrawer(graph, node); | 
|                 }) | 
|                 setInit(true); | 
|             } | 
|         } | 
|     }, [apiList]) | 
|   | 
|     if (nodeData) { | 
|         return ( | 
|             <> | 
|                 <Drawer title={nodeData.label} onClose={onNodeClose} open={open} size="large"> | 
|                     <div className="graphDrawerContainer"> | 
|                         <div>提升机组件</div> | 
|                         <div>ID:{nodeData.id}</div> | 
|                         <div>组件名:<Input defaultValue={nodeData.label} onChange={nodeDataInputChange} /></div> | 
|                         <div>根节点:<Switch checkedChildren="是" unCheckedChildren="否" checked={nodeData.data.root} /></div> | 
|                         <div> | 
|                             源层: | 
|                             <Select | 
|                                 style={{ width: 240 }} | 
|                                 options={liftOptions2} | 
|                                 value={sourceLev} | 
|                                 onChange={sourceLevChange} | 
|                             /> | 
|                         </div> | 
|                         <div> | 
|                             目标层: | 
|                             <Select | 
|                                 style={{ width: 240 }} | 
|                                 options={liftOptions2} | 
|                                 value={targetLev} | 
|                                 onChange={targetLevChange} | 
|                             /> | 
|                         </div> | 
|                         <div> | 
|                             操作方法: | 
|                             <Select | 
|                                 style={{ width: 240 }} | 
|                                 options={liftOptions} | 
|                                 value={liftOper} | 
|                                 onChange={liftOptionsChange} | 
|                             /> | 
|                         </div> | 
|                         <div> | 
|                             执行类: | 
|                             <Select | 
|                                 style={{ width: 120 }} | 
|                                 options={classList} | 
|                                 onChange={classListChange} | 
|                                 defaultValue={execClass} | 
|                             /> | 
|                         </div> | 
|                         <div> | 
|                             执行接口: | 
|                             <Select | 
|                                 style={{ width: 120 }} | 
|                                 options={apiList} | 
|                                 onChange={apiListChange} | 
|                                 defaultValue={execApi} | 
|                             /> | 
|                         </div> | 
|                         <div>可执行代码:</div> | 
|                         <TextArea value={codeContent} onChange={nodeTextAreaChange} rows={10} /> | 
|                     </div> | 
|                 </Drawer> | 
|             </> | 
|         ); | 
|     } | 
| } |