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>
|
</>
|
);
|
}
|
}
|