import React, { useRef, useEffect, useState } from "react";
|
import { Button, Drawer, Input, Switch, Select } from 'antd';
|
import { initNodeData } from "../GraphConfig";
|
|
const { TextArea } = Input;
|
|
export const GraphDrawerCrn = ({ 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 classList = [
|
{ value: 'crnClass', label: '堆垛机类' },
|
];
|
|
const apiList = [
|
{ value: 'load', label: '取货' },
|
{ value: 'unload', label: '放货' },
|
{ value: 'load_unload', label: '取放货' },
|
];
|
|
const showNodeDrawer = (graph, node) => {
|
if (node.data.type == "crn") {
|
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);
|
}
|
}
|
};
|
|
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: 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>
|
</>
|
);
|
}
|
}
|