| 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 GraphDrawerDevp = ({ graphRef, isReady }) => { | 
|   | 
|     const [open, setOpen] = useState(false); | 
|     const [init, setInit] = useState(false); | 
|     const [nodeData, setNodeData] = useState(null); | 
|     const [codeContent, setCodeContent] = useState(null); | 
|     const [staStatus, setStaStatus] = useState([]); | 
|     const [enableStaStatus, setEnableStaStatus] = useState(false); | 
|     const [staHasWorkNo, setStaHasWorkNo] = useState(false); | 
|     const [devpWorkNo, setDevpWorkNo] = useState(null); | 
|     const [workNoJudgement, setWorkNoJudgement] = useState(null); | 
|     const [staJudgementFailExecute, setStaJudgementFailExecute] = useState(false); | 
|     const [writeStaNoStatus, setWriteStaNoStatus] = useState(false); | 
|     const [writeWorkNoStatus, setWriteWorkNoStatus] = useState(false); | 
|     const [writeStaNo, setWriteStaNo] = useState(""); | 
|     const [writeWorkNo, setWriteWorkNo] = useState(""); | 
|     const [staNo, setStaNo] = useState(""); | 
|     const [devpNo, setDevpNo] = useState(""); | 
|   | 
|     const devpOptions = [ | 
|         { | 
|             label: '自动', | 
|             value: 'auto' | 
|         }, | 
|         { | 
|             label: '有物', | 
|             value: 'loading' | 
|         }, | 
|         { | 
|             label: '可入', | 
|             value: 'in' | 
|         }, | 
|         { | 
|             label: '可出', | 
|             value: 'out' | 
|         }, | 
|         { | 
|             label: '工作号', | 
|             value: 'workNo' | 
|         } | 
|     ]; | 
|   | 
|     const staStatusChange = (list) => { | 
|         setStaStatus(list); | 
|         nodeData.data.devpType.staStatus = list; | 
|   | 
|         let hasWorkNo = false; | 
|         list.forEach((item) => { | 
|             if (item == "workNo") { | 
|                 //存在工作号 | 
|                 hasWorkNo = true; | 
|             } | 
|         }) | 
|   | 
|         setStaHasWorkNo(hasWorkNo); | 
|         nodeData.data.devpType.hasWorkNo = hasWorkNo; | 
|     }; | 
|   | 
|     const devpWorkNoChange = (e) => { | 
|         setDevpWorkNo(e.target.value); | 
|         nodeData.data.devpType.devpWorkNo = e.target.value; | 
|     } | 
|   | 
|     const staJudgementFailExecuteChange = (status) => { | 
|         setStaJudgementFailExecute(status); | 
|         nodeData.data.devpType.staJudgementFailExecute = status ? 'execute' : 'stop'; | 
|     } | 
|   | 
|     const writeStaNoStatusChange = (status) => { | 
|         setWriteStaNoStatus(status); | 
|         nodeData.data.devpType.writeStaNoStatus = status; | 
|     } | 
|   | 
|     const writeWorkNoStatusChange = (status) => { | 
|         setWriteWorkNoStatus(status); | 
|         nodeData.data.devpType.writeWorkNoStatus = status; | 
|     } | 
|   | 
|     const enableStaStatusChange = (status) => { | 
|         setEnableStaStatus(status); | 
|         nodeData.data.devpType.enableStaStatus = status; | 
|     } | 
|   | 
|     const workNoJudgementChange = (data) => { | 
|         setWorkNoJudgement(data) | 
|         nodeData.data.devpType.workNoJudgement = data; | 
|     } | 
|   | 
|     const staNoChange = (e) => { | 
|         setStaNo(e.target.value); | 
|         nodeData.data.devpType.staNo = e.target.value; | 
|     } | 
|   | 
|     const showNodeDrawer = (graph, node) => { | 
|         if (node.data.type == "devp") { | 
|             setOpen(true); | 
|             setNodeData(node); | 
|             if (node.data == null) { | 
|                 node.data = initNodeData; | 
|             } | 
|   | 
|             if (node.data.codeContent != null) { | 
|                 setCodeContent(node.data.codeContent); | 
|             } | 
|   | 
|             if (node.data.devpType == null) { | 
|                 node.data.devpType = { | 
|                     devpNo: "",//输送线PLC | 
|                     staNo: "",//站号 | 
|                     enableStaStatus: false,//默认关闭判断站点状态 | 
|                     staStatus: [],//判断站点状态列表 | 
|                     hasWorkNo: false,//是否存在工作号判断 | 
|                     workNoJudgement: '>',//默认判断工作号 大于号 | 
|                     devpWorkNo: 0,//默认工作号 | 
|                     staJudgementFailExecute: false,//判断失败后是否继续执行流程 | 
|                     writeStaNoStatus: false,//是否写入目标站 | 
|                     writeWorkNoStatus: false,//是否写入工作号 | 
|                     writeStaNo: "",//写入目标站数据 | 
|                     writeWorkNo: "",//写入工作号数据 | 
|                 } | 
|             } else { | 
|                 const devpType = node.data.devpType; | 
|                 setDevpNo(devpType.devpNo); | 
|                 setStaNo(devpType.staNo); | 
|                 setEnableStaStatus(devpType.enableStaStatus); | 
|                 setStaStatus(devpType.staStatus); | 
|                 setStaHasWorkNo(devpType.hasWorkNo); | 
|                 setDevpWorkNo(devpType.devpWorkNo); | 
|                 setWorkNoJudgement(devpType.workNoJudgement); | 
|                 setStaJudgementFailExecute(devpType.staJudgementFailExecute); | 
|                 setWriteWorkNoStatus(devpType.writeWorkNoStatus); | 
|                 setWriteStaNoStatus(devpType.writeStaNoStatus); | 
|                 setWriteWorkNo(devpType.writeWorkNo); | 
|                 setWriteStaNo(devpType.writeStaNo); | 
|             } | 
|         } | 
|     }; | 
|   | 
|     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 writeWorkNoChange = (e) => { | 
|         setWriteWorkNo(e.target.value); | 
|         nodeData.data.devpType.writeWorkNo = e.target.value; | 
|     } | 
|   | 
|     const writeStaNoChange = (e) => { | 
|         setWriteStaNo(e.target.value); | 
|         nodeData.data.devpType.writeStaNo = e.target.value; | 
|     } | 
|   | 
|     const devpNoChange = (e) => { | 
|         setDevpNo(e.target.value); | 
|         nodeData.data.devpType.devpNo = e.target.value; | 
|     } | 
|   | 
|     useEffect(() => { | 
|         if (isReady) { | 
|             const graph = graphRef.current; | 
|   | 
|             if (!init) { | 
|                 graph.on("node:dblclick", ({ node }) => { | 
|                     showNodeDrawer(graph, node); | 
|                 }) | 
|                 setInit(true); | 
|             } | 
|         } | 
|     }) | 
|   | 
|     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> | 
|                             输送线PLC: | 
|                             <Input value={devpNo} onChange={devpNoChange} placeholder="输送线PLC" /> | 
|                         </div> | 
|                         <div> | 
|                             站号: | 
|                             <Input value={staNo} onChange={staNoChange} placeholder="站号" /> | 
|                         </div> | 
|                         <div> | 
|                             判断站点状态: | 
|                             <Switch value={enableStaStatus} checkedChildren="开启" unCheckedChildren="关闭" onChange={enableStaStatusChange} /> | 
|                         </div> | 
|                         { | 
|                             enableStaStatus ? | 
|                                 <div> | 
|                                     站点状态: | 
|                                     <CheckboxGroup options={devpOptions} value={staStatus} onChange={staStatusChange} /> | 
|                                 </div> | 
|   | 
|                                 : '' | 
|                         } | 
|   | 
|                         { | 
|                             enableStaStatus && staHasWorkNo ? | 
|                                 <div> | 
|                                     工作号判断: | 
|   | 
|                                     <Input | 
|                                         value={devpWorkNo} | 
|                                         onChange={devpWorkNoChange} | 
|                                         addonBefore={<Select | 
|                                             onChange={workNoJudgementChange} | 
|                                             value={workNoJudgement} | 
|                                             defaultValue=">" | 
|                                             options={[ | 
|                                                 { value: '>', label: '>' }, | 
|                                                 { value: '>=', label: '>=' }, | 
|                                                 { value: '=', label: '=' }, | 
|                                                 { value: '!=', label: '!=' }, | 
|                                                 { value: '<', label: '<' }, | 
|                                                 { value: '<=', label: '<=' }, | 
|                                             ]} | 
|                                         />} placeholder="工作号" /> | 
|                                 </div> | 
|                                 : '' | 
|                         } | 
|   | 
|                         { | 
|                             enableStaStatus ? | 
|                                 <div> | 
|                                     站点判断失败:<Switch value={staJudgementFailExecute} checkedChildren="继续执行" unCheckedChildren="阻止执行" onChange={staJudgementFailExecuteChange} /> | 
|                                 </div> | 
|   | 
|                                 : '' | 
|                         } | 
|   | 
|                         <div> | 
|                             写入工作号:<Switch value={writeWorkNoStatus} checkedChildren="写入" unCheckedChildren="不写入" onChange={writeWorkNoStatusChange} /> | 
|                             { | 
|                                 writeWorkNoStatus ? | 
|                                     <Input | 
|                                         value={writeWorkNo} | 
|                                         onChange={writeWorkNoChange} | 
|                                         placeholder="工作号" /> | 
|                                     : '' | 
|                             } | 
|                         </div> | 
|   | 
|                         <div> | 
|                             写入目标站:<Switch value={writeStaNoStatus} checkedChildren="写入" unCheckedChildren="不写入" onChange={writeStaNoStatusChange} /> | 
|                             { | 
|                                 writeStaNoStatus ? | 
|                                     <Input | 
|                                         value={writeStaNo} | 
|                                         onChange={writeStaNoChange} | 
|                                         placeholder="目标站" /> | 
|                                     : '' | 
|                             } | 
|                         </div> | 
|   | 
|                         {/* <div>可执行代码:</div> | 
|                         <TextArea value={codeContent} onChange={nodeTextAreaChange} rows={10} /> */} | 
|                     </div> | 
|                 </Drawer> | 
|             </> | 
|         ); | 
|     } | 
| } |