From eca8b5481ab1c8bad8d031416a9d106585fa429c Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期二, 19 三月 2024 14:02:19 +0800
Subject: [PATCH] #

---
 zy-asrs-flow/src/pages/asrs/flowGraph/components/edit.jsx   |  109 ++
 zy-asrs-flow/src/pages/asrs/flowGraph/index.jsx             |  373 +++++++++
 zy-asrs-flow/src/components/Flow/Drawer/GraphDrawerCrn.jsx  |    4 
 zy-asrs-flow/src/components/Flow/css/GraphTools.less        |   12 
 zy-asrs-flow/src/components/Flow/GraphDrawer.jsx            |    2 
 zy-asrs-flow/src/services/flow/api.js                       |   33 
 zy-asrs-flow/src/components/Flow/GraphComponent.jsx         | 1376 ---------------------------------
 zy-asrs-flow/src/components/Flow/Drawer/GraphDrawerDevp.jsx |  285 ++++++
 zy-asrs-flow/src/components/Flow/GraphTools.jsx             |  237 ++++
 zy-asrs-flow/src/services/route.js                          |    1 
 10 files changed, 1,033 insertions(+), 1,399 deletions(-)

diff --git a/zy-asrs-flow/src/components/Flow/Drawer/GraphDrawerCrn.jsx b/zy-asrs-flow/src/components/Flow/Drawer/GraphDrawerCrn.jsx
index 1bafa98..eee088c 100644
--- a/zy-asrs-flow/src/components/Flow/Drawer/GraphDrawerCrn.jsx
+++ b/zy-asrs-flow/src/components/Flow/Drawer/GraphDrawerCrn.jsx
@@ -14,13 +14,13 @@
     const [execApi, setExecApi] = useState(null);
 
     const classList = [
-        { value: 'crnClass', label: '鍫嗗灈鏈虹被' },
+        { value: 'CrnThread', label: '鍫嗗灈鏈虹被' },
     ];
 
     const apiList = [
         { value: 'load', label: '鍙栬揣' },
         { value: 'unload', label: '鏀捐揣' },
-        { value: 'load_unload', label: '鍙栨斁璐�' },
+        { value: 'loadAndUnload', label: '鍙栨斁璐�' },
     ];
 
     const showNodeDrawer = (graph, node) => {
diff --git a/zy-asrs-flow/src/components/Flow/Drawer/GraphDrawerDevp.jsx b/zy-asrs-flow/src/components/Flow/Drawer/GraphDrawerDevp.jsx
new file mode 100644
index 0000000..89eb722
--- /dev/null
+++ b/zy-asrs-flow/src/components/Flow/Drawer/GraphDrawerDevp.jsx
@@ -0,0 +1,285 @@
+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>
+            </>
+        );
+    }
+}
\ No newline at end of file
diff --git a/zy-asrs-flow/src/components/Flow/GraphComponent.jsx b/zy-asrs-flow/src/components/Flow/GraphComponent.jsx
index 995e51b..55d909d 100644
--- a/zy-asrs-flow/src/components/Flow/GraphComponent.jsx
+++ b/zy-asrs-flow/src/components/Flow/GraphComponent.jsx
@@ -33,27 +33,27 @@
 
         const graph = ref.current;
 
-        const rect = graph.addNode({
-            x: 60,
-            y: 60,
-            width: 120,
-            height: 40,
-            label: '璁㈠崟绠$悊',
-            ports: commonGraphPorts,
-            attrs: commonGraphAttrs,
-            data: initNodeData,
-        });
+        // 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,
-            data: initNodeData,
-        });
+        // const rect2 = graph.addNode({
+        //     x: 240,
+        //     y: 240,
+        //     width: 120,
+        //     height: 40,
+        //     label: '搴撳瓨绠$悊',
+        //     ports: commonGraphPorts,
+        //     attrs: commonGraphAttrs,
+        //     data: initNodeData,
+        // });
 
         graph.use(
             new Snapline({
@@ -84,1342 +84,6 @@
                 },
             }),
         )
-
-
-        graph.fromJSON({
-            "cells": [
-                {
-                    "shape": "edge",
-                    "attrs": {
-                        "line": {
-                            "stroke": "#A2B1C3",
-                            "targetMarker": {
-                                "name": "block",
-                                "width": 12,
-                                "height": 8
-                            }
-                        }
-                    },
-                    "id": "2475ea4f-f0e3-4b44-add4-7d4950ddea45",
-                    "zIndex": 0,
-                    "source": {
-                        "cell": "71d8bc90-558f-489f-b432-a03d7af27cdc",
-                        "port": "port2"
-                    },
-                    "target": {
-                        "cell": "c5798537-a8a0-4d79-bd76-a4f663492126",
-                        "port": "port1"
-                    },
-                    "data": {
-                        "codeContent": null,
-                        "root": false,
-                        "isLogic": false,
-                        "logicBool": false,
-                        "searchLogicId": 1,
-                        "searchLogicBool": true,
-                        "searchIndex": 0
-                    },
-                    "labels": [
-                        {
-                            "attrs": {
-                                "label": {
-                                    "text": ""
-                                }
-                            }
-                        }
-                    ]
-                },
-                {
-                    "shape": "edge",
-                    "attrs": {
-                        "line": {
-                            "stroke": "#A2B1C3",
-                            "targetMarker": {
-                                "name": "block",
-                                "width": 12,
-                                "height": 8
-                            }
-                        }
-                    },
-                    "id": "2c3744b4-45ce-44a6-b169-402eaec24174",
-                    "zIndex": 0,
-                    "source": {
-                        "cell": "c5798537-a8a0-4d79-bd76-a4f663492126",
-                        "port": "port2"
-                    },
-                    "target": {
-                        "cell": "3ca188b2-9ffe-4528-ba6e-c1568b6d7fe6",
-                        "port": "port1"
-                    },
-                    "data": {
-                        "codeContent": null,
-                        "root": false,
-                        "isLogic": false,
-                        "logicBool": false,
-                        "searchLogicId": 1,
-                        "searchLogicBool": true,
-                        "searchIndex": 0
-                    },
-                    "labels": [
-                        {
-                            "attrs": {
-                                "label": {
-                                    "text": ""
-                                }
-                            }
-                        }
-                    ]
-                },
-                {
-                    "shape": "edge",
-                    "attrs": {
-                        "line": {
-                            "stroke": "#A2B1C3",
-                            "targetMarker": {
-                                "name": "block",
-                                "width": 12,
-                                "height": 8
-                            }
-                        }
-                    },
-                    "id": "56181ccf-a41c-4cd8-82d6-e2a4bde31ba9",
-                    "zIndex": 0,
-                    "source": {
-                        "cell": "3ca188b2-9ffe-4528-ba6e-c1568b6d7fe6",
-                        "port": "port2"
-                    },
-                    "target": {
-                        "cell": "63db5ce0-b916-44e4-a924-a79b35afe1d1",
-                        "port": "port1"
-                    },
-                    "data": {
-                        "codeContent": null,
-                        "root": false,
-                        "isLogic": false,
-                        "logicBool": true,
-                        "searchLogicId": 1,
-                        "searchLogicBool": true,
-                        "searchIndex": 0
-                    },
-                    "labels": [
-                        {
-                            "attrs": {
-                                "label": {
-                                    "text": "true"
-                                }
-                            }
-                        }
-                    ]
-                },
-                {
-                    "shape": "edge",
-                    "attrs": {
-                        "line": {
-                            "stroke": "#A2B1C3",
-                            "targetMarker": {
-                                "name": "block",
-                                "width": 12,
-                                "height": 8
-                            }
-                        }
-                    },
-                    "id": "73ca24ef-e9d4-4f18-9f06-ca49ac65962a",
-                    "zIndex": 0,
-                    "source": {
-                        "cell": "cc993d9b-ce11-409d-92c6-7208682dcc8b",
-                        "port": "port4"
-                    },
-                    "target": {
-                        "cell": "06d450fc-474e-4b23-b40d-c89fde446b28",
-                        "port": "port3"
-                    },
-                    "data": {
-                        "codeContent": null,
-                        "root": false,
-                        "isLogic": false,
-                        "logicBool": false,
-                        "searchLogicId": 1,
-                        "searchLogicBool": true,
-                        "searchIndex": 0
-                    },
-                    "labels": [
-                        {
-                            "attrs": {
-                                "label": {
-                                    "text": "false"
-                                }
-                            }
-                        }
-                    ]
-                },
-                {
-                    "shape": "edge",
-                    "attrs": {
-                        "line": {
-                            "stroke": "#A2B1C3",
-                            "targetMarker": {
-                                "name": "block",
-                                "width": 12,
-                                "height": 8
-                            }
-                        }
-                    },
-                    "id": "84a3a77c-79e8-4cf8-9bab-a72bbfc77f1d",
-                    "zIndex": 0,
-                    "source": {
-                        "cell": "cc993d9b-ce11-409d-92c6-7208682dcc8b",
-                        "port": "port2"
-                    },
-                    "target": {
-                        "cell": "cd9da0a4-5c2d-4f1b-9c51-403b32f1ad51",
-                        "port": "port1"
-                    },
-                    "data": {
-                        "codeContent": null,
-                        "root": false,
-                        "isLogic": false,
-                        "logicBool": true,
-                        "searchLogicId": 1,
-                        "searchLogicBool": true,
-                        "searchIndex": 0
-                    },
-                    "labels": [
-                        {
-                            "attrs": {
-                                "label": {
-                                    "text": "true"
-                                }
-                            }
-                        }
-                    ]
-                },
-                {
-                    "shape": "edge",
-                    "attrs": {
-                        "line": {
-                            "stroke": "#A2B1C3",
-                            "targetMarker": {
-                                "name": "block",
-                                "width": 12,
-                                "height": 8
-                            }
-                        }
-                    },
-                    "id": "93d65ae7-f170-466a-92ea-f69614002800",
-                    "zIndex": 0,
-                    "source": {
-                        "cell": "c844f3d1-02a3-47d3-bcb9-51027c1deb1c",
-                        "port": "port2"
-                    },
-                    "target": {
-                        "cell": "cc993d9b-ce11-409d-92c6-7208682dcc8b",
-                        "port": "port1"
-                    },
-                    "data": {
-                        "codeContent": null,
-                        "root": false,
-                        "isLogic": false,
-                        "logicBool": false,
-                        "searchLogicId": 1,
-                        "searchLogicBool": true,
-                        "searchIndex": 0
-                    },
-                    "labels": [
-                        {
-                            "attrs": {
-                                "label": {
-                                    "text": ""
-                                }
-                            }
-                        }
-                    ]
-                },
-                {
-                    "shape": "edge",
-                    "attrs": {
-                        "line": {
-                            "stroke": "#A2B1C3",
-                            "targetMarker": {
-                                "name": "block",
-                                "width": 12,
-                                "height": 8
-                            }
-                        }
-                    },
-                    "id": "de85103e-80ac-4c88-92de-5bb1a131788c",
-                    "zIndex": 0,
-                    "source": {
-                        "cell": "63db5ce0-b916-44e4-a924-a79b35afe1d1",
-                        "port": "port2"
-                    },
-                    "target": {
-                        "cell": "c844f3d1-02a3-47d3-bcb9-51027c1deb1c",
-                        "port": "port1"
-                    },
-                    "data": {
-                        "codeContent": null,
-                        "root": false,
-                        "isLogic": false,
-                        "logicBool": false,
-                        "searchLogicId": 1,
-                        "searchLogicBool": true,
-                        "searchIndex": 0
-                    },
-                    "labels": [
-                        {
-                            "attrs": {
-                                "label": {
-                                    "text": ""
-                                }
-                            }
-                        }
-                    ]
-                },
-                {
-                    "position": {
-                        "x": 60,
-                        "y": 60
-                    },
-                    "size": {
-                        "width": 120,
-                        "height": 40
-                    },
-                    "attrs": {
-                        "text": {
-                            "text": "璁㈠崟绠$悊"
-                        },
-                        "body": {
-                            "fill": "#efefef",
-                            "stroke": "#4d4d4d",
-                            "strokeWidth": 2,
-                            "refD": "M 50 0 L 100 50 L 50 100 L 0 50 Z"
-                        }
-                    },
-                    "visible": true,
-                    "shape": "rect",
-                    "id": "a4962b5d-6ef0-4217-bbf8-742652ffc0ee",
-                    "data": {
-                        "codeContent": null,
-                        "root": false,
-                        "isLogic": false,
-                        "logicBool": false,
-                        "searchLogicId": 1,
-                        "searchLogicBool": true,
-                        "searchIndex": 0
-                    },
-                    "zIndex": 1,
-                    "ports": {
-                        "groups": {
-                            "top": {
-                                "position": "top",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            },
-                            "bottom": {
-                                "position": "bottom",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            },
-                            "left": {
-                                "position": "left",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            },
-                            "right": {
-                                "position": "right",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            }
-                        },
-                        "items": [
-                            {
-                                "id": "port1",
-                                "group": "top"
-                            },
-                            {
-                                "id": "port2",
-                                "group": "bottom"
-                            },
-                            {
-                                "id": "port3",
-                                "group": "left"
-                            },
-                            {
-                                "id": "port4",
-                                "group": "right"
-                            }
-                        ]
-                    }
-                },
-                {
-                    "position": {
-                        "x": 260,
-                        "y": 390
-                    },
-                    "size": {
-                        "width": 120,
-                        "height": 40
-                    },
-                    "attrs": {
-                        "text": {
-                            "text": "搴撳瓨绠$悊"
-                        },
-                        "body": {
-                            "fill": "#efefef",
-                            "stroke": "#4d4d4d",
-                            "strokeWidth": 2,
-                            "refD": "M 50 0 L 100 50 L 50 100 L 0 50 Z"
-                        }
-                    },
-                    "visible": true,
-                    "shape": "rect",
-                    "id": "63db5ce0-b916-44e4-a924-a79b35afe1d1",
-                    "data": {
-                        "codeContent": "2222",
-                        "root": false,
-                        "isLogic": false,
-                        "logicBool": false,
-                        "searchLogicId": 1,
-                        "searchLogicBool": true,
-                        "searchIndex": 0
-                    },
-                    "zIndex": 2,
-                    "ports": {
-                        "groups": {
-                            "top": {
-                                "position": "top",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            },
-                            "bottom": {
-                                "position": "bottom",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            },
-                            "left": {
-                                "position": "left",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            },
-                            "right": {
-                                "position": "right",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            }
-                        },
-                        "items": [
-                            {
-                                "id": "port1",
-                                "group": "top"
-                            },
-                            {
-                                "id": "port2",
-                                "group": "bottom"
-                            },
-                            {
-                                "id": "port3",
-                                "group": "left"
-                            },
-                            {
-                                "id": "port4",
-                                "group": "right"
-                            }
-                        ]
-                    }
-                },
-                {
-                    "position": {
-                        "x": 270,
-                        "y": 265
-                    },
-                    "size": {
-                        "width": 100,
-                        "height": 60
-                    },
-                    "attrs": {
-                        "text": {
-                            "text": "閫昏緫鍒ゆ柇1"
-                        },
-                        "body": {
-                            "fill": "#efefef",
-                            "stroke": "#4d4d4d",
-                            "refD": "M 50 0 L 100 50 L 50 100 L 0 50 Z"
-                        }
-                    },
-                    "visible": true,
-                    "shape": "path",
-                    "id": "3ca188b2-9ffe-4528-ba6e-c1568b6d7fe6",
-                    "data": {
-                        "codeContent": "閫昏緫鍒ゆ柇1",
-                        "root": false,
-                        "isLogic": true,
-                        "logicBool": false,
-                        "searchLogicId": 1,
-                        "searchLogicBool": true,
-                        "searchIndex": 0
-                    },
-                    "zIndex": 3,
-                    "ports": {
-                        "groups": {
-                            "top": {
-                                "position": "top",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            },
-                            "bottom": {
-                                "position": "bottom",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            },
-                            "left": {
-                                "position": "left",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            },
-                            "right": {
-                                "position": "right",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            }
-                        },
-                        "items": [
-                            {
-                                "id": "port1",
-                                "group": "top"
-                            },
-                            {
-                                "id": "port2",
-                                "group": "bottom"
-                            },
-                            {
-                                "id": "port3",
-                                "group": "left"
-                            },
-                            {
-                                "id": "port4",
-                                "group": "right"
-                            }
-                        ]
-                    }
-                },
-                {
-                    "position": {
-                        "x": 300,
-                        "y": 30
-                    },
-                    "size": {
-                        "width": 80,
-                        "height": 40
-                    },
-                    "attrs": {
-                        "text": {
-                            "text": "绋嬪簭鍏ュ彛"
-                        },
-                        "body": {
-                            "fill": "#efefef",
-                            "stroke": "#4d4d4d",
-                            "strokeWidth": 2,
-                            "refD": "M 50 0 L 100 50 L 50 100 L 0 50 Z"
-                        }
-                    },
-                    "visible": true,
-                    "shape": "rect",
-                    "id": "71d8bc90-558f-489f-b432-a03d7af27cdc",
-                    "data": {
-                        "codeContent": null,
-                        "root": true,
-                        "isLogic": false,
-                        "logicBool": false,
-                        "searchLogicId": 1,
-                        "searchLogicBool": true,
-                        "searchIndex": 0
-                    },
-                    "zIndex": 4,
-                    "ports": {
-                        "groups": {
-                            "top": {
-                                "position": "top",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            },
-                            "bottom": {
-                                "position": "bottom",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            },
-                            "left": {
-                                "position": "left",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            },
-                            "right": {
-                                "position": "right",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            }
-                        },
-                        "items": [
-                            {
-                                "id": "port1",
-                                "group": "top"
-                            },
-                            {
-                                "id": "port2",
-                                "group": "bottom"
-                            },
-                            {
-                                "id": "port3",
-                                "group": "left"
-                            },
-                            {
-                                "id": "port4",
-                                "group": "right"
-                            }
-                        ]
-                    }
-                },
-                {
-                    "position": {
-                        "x": 300,
-                        "y": 110
-                    },
-                    "size": {
-                        "width": 80,
-                        "height": 40
-                    },
-                    "attrs": {
-                        "text": {
-                            "text": "甯哥敤缁勪欢"
-                        },
-                        "body": {
-                            "fill": "#efefef",
-                            "stroke": "#4d4d4d",
-                            "strokeWidth": 2,
-                            "refD": "M 50 0 L 100 50 L 50 100 L 0 50 Z"
-                        }
-                    },
-                    "visible": true,
-                    "shape": "rect",
-                    "id": "c5798537-a8a0-4d79-bd76-a4f663492126",
-                    "data": {
-                        "codeContent": "1111",
-                        "root": false,
-                        "isLogic": false,
-                        "logicBool": false,
-                        "searchLogicId": 1,
-                        "searchLogicBool": true,
-                        "searchIndex": 0
-                    },
-                    "zIndex": 5,
-                    "ports": {
-                        "groups": {
-                            "top": {
-                                "position": "top",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            },
-                            "bottom": {
-                                "position": "bottom",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            },
-                            "left": {
-                                "position": "left",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            },
-                            "right": {
-                                "position": "right",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            }
-                        },
-                        "items": [
-                            {
-                                "id": "port1",
-                                "group": "top"
-                            },
-                            {
-                                "id": "port2",
-                                "group": "bottom"
-                            },
-                            {
-                                "id": "port3",
-                                "group": "left"
-                            },
-                            {
-                                "id": "port4",
-                                "group": "right"
-                            }
-                        ]
-                    }
-                },
-                {
-                    "position": {
-                        "x": 280,
-                        "y": 511
-                    },
-                    "size": {
-                        "width": 80,
-                        "height": 40
-                    },
-                    "attrs": {
-                        "text": {
-                            "text": "甯哥敤缁勪欢2"
-                        },
-                        "body": {
-                            "fill": "#efefef",
-                            "stroke": "#4d4d4d",
-                            "strokeWidth": 2,
-                            "refD": "M 50 0 L 100 50 L 50 100 L 0 50 Z"
-                        }
-                    },
-                    "visible": true,
-                    "shape": "rect",
-                    "id": "c844f3d1-02a3-47d3-bcb9-51027c1deb1c",
-                    "data": {
-                        "codeContent": "甯哥敤缁勪欢2",
-                        "root": false,
-                        "isLogic": false,
-                        "logicBool": false,
-                        "searchLogicId": 1,
-                        "searchLogicBool": true,
-                        "searchIndex": 0
-                    },
-                    "zIndex": 6,
-                    "ports": {
-                        "groups": {
-                            "top": {
-                                "position": "top",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            },
-                            "bottom": {
-                                "position": "bottom",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            },
-                            "left": {
-                                "position": "left",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            },
-                            "right": {
-                                "position": "right",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            }
-                        },
-                        "items": [
-                            {
-                                "id": "port1",
-                                "group": "top"
-                            },
-                            {
-                                "id": "port2",
-                                "group": "bottom"
-                            },
-                            {
-                                "id": "port3",
-                                "group": "left"
-                            },
-                            {
-                                "id": "port4",
-                                "group": "right"
-                            }
-                        ]
-                    }
-                },
-                {
-                    "position": {
-                        "x": 270,
-                        "y": 620
-                    },
-                    "size": {
-                        "width": 100,
-                        "height": 60
-                    },
-                    "attrs": {
-                        "text": {
-                            "text": "閫昏緫鍒ゆ柇2"
-                        },
-                        "body": {
-                            "fill": "#efefef",
-                            "stroke": "#4d4d4d",
-                            "refD": "M 50 0 L 100 50 L 50 100 L 0 50 Z"
-                        }
-                    },
-                    "visible": true,
-                    "shape": "path",
-                    "id": "cc993d9b-ce11-409d-92c6-7208682dcc8b",
-                    "data": {
-                        "codeContent": "閫昏緫鍒ゆ柇2",
-                        "root": false,
-                        "isLogic": true,
-                        "logicBool": false,
-                        "searchLogicId": 1,
-                        "searchLogicBool": true,
-                        "searchIndex": 0
-                    },
-                    "zIndex": 7,
-                    "ports": {
-                        "groups": {
-                            "top": {
-                                "position": "top",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            },
-                            "bottom": {
-                                "position": "bottom",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            },
-                            "left": {
-                                "position": "left",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            },
-                            "right": {
-                                "position": "right",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            }
-                        },
-                        "items": [
-                            {
-                                "id": "port1",
-                                "group": "top"
-                            },
-                            {
-                                "id": "port2",
-                                "group": "bottom"
-                            },
-                            {
-                                "id": "port3",
-                                "group": "left"
-                            },
-                            {
-                                "id": "port4",
-                                "group": "right"
-                            }
-                        ]
-                    }
-                },
-                {
-                    "position": {
-                        "x": 280,
-                        "y": 781
-                    },
-                    "size": {
-                        "width": 80,
-                        "height": 40
-                    },
-                    "attrs": {
-                        "text": {
-                            "text": "甯哥敤缁勪欢3"
-                        },
-                        "body": {
-                            "fill": "#efefef",
-                            "stroke": "#4d4d4d",
-                            "strokeWidth": 2,
-                            "refD": "M 50 0 L 100 50 L 50 100 L 0 50 Z"
-                        }
-                    },
-                    "visible": true,
-                    "shape": "rect",
-                    "id": "cd9da0a4-5c2d-4f1b-9c51-403b32f1ad51",
-                    "data": {
-                        "codeContent": "甯哥敤缁勪欢3",
-                        "root": false,
-                        "isLogic": false,
-                        "logicBool": false,
-                        "searchLogicId": 1,
-                        "searchLogicBool": true,
-                        "searchIndex": 0
-                    },
-                    "zIndex": 8,
-                    "ports": {
-                        "groups": {
-                            "top": {
-                                "position": "top",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            },
-                            "bottom": {
-                                "position": "bottom",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            },
-                            "left": {
-                                "position": "left",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            },
-                            "right": {
-                                "position": "right",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            }
-                        },
-                        "items": [
-                            {
-                                "id": "port1",
-                                "group": "top"
-                            },
-                            {
-                                "id": "port2",
-                                "group": "bottom"
-                            },
-                            {
-                                "id": "port3",
-                                "group": "left"
-                            },
-                            {
-                                "id": "port4",
-                                "group": "right"
-                            }
-                        ]
-                    }
-                },
-                {
-                    "position": {
-                        "x": 472,
-                        "y": 640
-                    },
-                    "size": {
-                        "width": 80,
-                        "height": 40
-                    },
-                    "attrs": {
-                        "text": {
-                            "text": "甯哥敤缁勪欢4"
-                        },
-                        "body": {
-                            "fill": "#efefef",
-                            "stroke": "#4d4d4d",
-                            "strokeWidth": 2,
-                            "refD": "M 50 0 L 100 50 L 50 100 L 0 50 Z"
-                        }
-                    },
-                    "visible": true,
-                    "shape": "rect",
-                    "id": "06d450fc-474e-4b23-b40d-c89fde446b28",
-                    "data": {
-                        "codeContent": "甯哥敤缁勪欢4",
-                        "root": false,
-                        "isLogic": false,
-                        "logicBool": false,
-                        "searchLogicId": 1,
-                        "searchLogicBool": true,
-                        "searchIndex": 0
-                    },
-                    "zIndex": 9,
-                    "ports": {
-                        "groups": {
-                            "top": {
-                                "position": "top",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            },
-                            "bottom": {
-                                "position": "bottom",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            },
-                            "left": {
-                                "position": "left",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            },
-                            "right": {
-                                "position": "right",
-                                "attrs": {
-                                    "circle": {
-                                        "r": 5,
-                                        "magnet": true,
-                                        "stroke": "#5F95FF",
-                                        "strokeWidth": 1,
-                                        "fill": "#fff",
-                                        "style": {
-                                            "visibility": "hidden"
-                                        }
-                                    }
-                                }
-                            }
-                        },
-                        "items": [
-                            {
-                                "id": "port1",
-                                "group": "top"
-                            },
-                            {
-                                "id": "port2",
-                                "group": "bottom"
-                            },
-                            {
-                                "id": "port3",
-                                "group": "left"
-                            },
-                            {
-                                "id": "port4",
-                                "group": "right"
-                            }
-                        ]
-                    }
-                }
-            ]
-        })
-
 
         props.initHandle();//閫氱煡鐖剁粍浠跺垵濮嬪寲瀹屾垚
         return graph;
diff --git a/zy-asrs-flow/src/components/Flow/GraphDrawer.jsx b/zy-asrs-flow/src/components/Flow/GraphDrawer.jsx
index 858b6eb..b07de64 100644
--- a/zy-asrs-flow/src/components/Flow/GraphDrawer.jsx
+++ b/zy-asrs-flow/src/components/Flow/GraphDrawer.jsx
@@ -2,6 +2,7 @@
 import { GraphDrawerNode } from "./Drawer/GraphDrawerNode";
 import { GraphDrawerEdge } from "./Drawer/GraphDrawerEdge";
 import { GraphDrawerCrn } from "./Drawer/GraphDrawerCrn";
+import { GraphDrawerDevp } from "./Drawer/GraphDrawerDevp";
 import './css/GrapDrawer.less';
 
 export const GraphDrawer = ({ graphRef, isReady }) => {
@@ -11,6 +12,7 @@
             <GraphDrawerNode graphRef={graphRef} isReady={isReady} />
             <GraphDrawerEdge graphRef={graphRef} isReady={isReady} />
             <GraphDrawerCrn graphRef={graphRef} isReady={isReady} />
+            <GraphDrawerDevp graphRef={graphRef} isReady={isReady} />
         </>
     );
 }
\ No newline at end of file
diff --git a/zy-asrs-flow/src/components/Flow/GraphTools.jsx b/zy-asrs-flow/src/components/Flow/GraphTools.jsx
index e93b74b..701fdec 100644
--- a/zy-asrs-flow/src/components/Flow/GraphTools.jsx
+++ b/zy-asrs-flow/src/components/Flow/GraphTools.jsx
@@ -1,14 +1,23 @@
 import React, { useRef, useEffect, useState } from "react";
-import { Button, message, Modal } from 'antd';
+import { Button, message, Modal, Divider, List, Typography, Input, Popconfirm } from 'antd';
+import { DeleteFilled, ApiOutlined } from '@ant-design/icons';
 import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';
 import { solarizedlight } from 'react-syntax-highlighter/dist/esm/styles/prism';
-import { exportDataToServer } from "../../services/flow/api";
+import { exportDataToServer, getFlowList, deleteFlowById, updateFlowStatus, mockRun } from "../../services/flow/api";
 import './css/GraphTools.less'
+import { flow, remove } from "lodash";
 
 export const GraphTools = ({ graphRef, isReady }) => {
 
     const [isModalOpen, setIsModalOpen] = useState(false);
+    const [saveIsModalOpen, setSaveIsModalOpen] = useState(false);
     const [preCode, setPreCode] = useState(null);
+    const [flowListData, setFlowListData] = useState([]);
+    const [currentFlow, setCurrentFlow] = useState(null);
+    const [flowName, setFlowName] = useState(null);
+    const [flowMemo, setFlowMemo] = useState(null);
+
+    let flowId = -1;
 
     const handleOk = () => {
         setIsModalOpen(false);
@@ -16,7 +25,24 @@
 
     const handleCancel = () => {
         setIsModalOpen(false);
+        setSaveIsModalOpen(false);
     };
+
+    const flowNameInputChange = (e) => {
+        setFlowName(e.target.value)
+    }
+
+    const memoInputChange = (e) => {
+        setFlowMemo(e.target.value)
+    }
+
+    const saveData = () => {
+        if (currentFlow == null) {
+            flowId = -1;
+        }
+
+        setSaveIsModalOpen(true);
+    }
 
     //棰勮浠g爜
     const prewCode = () => {
@@ -77,11 +103,26 @@
                 return;
             }
 
+            let id = null;
+            if (currentFlow != null) {
+                id = currentFlow.id;
+            }
+
             let result = sortNodes(rootNode, nodes, graph);
             exportDataToServer({
-                data: result
+                originData: JSON.stringify(data),
+                data: result,
+                name: flowName,
+                memo: flowMemo,
+                id: id
             }).then((res) => {
-                console.log(res);
+                if (res.code == 200) {
+                    message.success('淇濆瓨鎴愬姛');
+                    updateFlowList();
+                } else {
+                    message.warning(res.msg);
+                }
+                setSaveIsModalOpen(false);
             })
         }
     }
@@ -369,47 +410,158 @@
         return values;
     }
 
-    const getChildren = (node, nodes, graph) => {
-        const connectedEdges = graph.getConnectedEdges(node);
-        const children = [];
-
-        connectedEdges.forEach((edge) => {
-            nodes.forEach((item) => {
-                if (item.id === edge.target.cell && item.id != node.id) {
-                    children.push(item);
-                }
-            })
-        });
-
-        return children;
-    }
-
-    const getDescendants = (node, nodes, graph) => {
-        const descendants = [];
-        const stack = [node];
-
-        let count = 0;
-        while (stack.length > 0) {
-            const current = stack.pop();
-            descendants.push(current);
-
-            const children = getChildren(current, nodes, graph);
-            stack.push(...children);
+    const setFlowActive = () => {
+        if (currentFlow == null) {
+            message.warning("璇烽�夋嫨瑕佹縺娲讳娇鐢ㄧ殑娴佺▼鍥撅紒");
+            return;
         }
 
-        return descendants;
+        const status = currentFlow.status == 1 ? 0 : 1;
+        updateFlowStatus(currentFlow.id, status).then((res) => {
+            if (res.code == 200) {
+                message.success(status == 1 ? "婵�娲绘垚鍔�" : "宸插彇娑堟縺娲�");
+                currentFlow.status = status;
+            } else {
+                message.warning(res.msg);
+            }
+            updateFlowList();
+        })
     }
+
+    const removeFlow = () => {
+        if (currentFlow == null) {
+            message.warning("璇烽�夋嫨瑕佸垹闄ょ殑娴佺▼鍥撅紒");
+            return;
+        }
+
+        deleteFlowById(currentFlow.id).then((res) => {
+            if (res.code == 200) {
+                message.success("鍒犻櫎鎴愬姛");
+            } else {
+                message.warning(res.msg);
+            }
+            updateFlowList();
+        })
+    }
+
+    const updateFlowList = () => {
+        getFlowList().then((res) => {
+            setFlowListData(res.data);
+        })
+    }
+
+    const createNewBlank = () => {
+        const graph = graphRef.current;
+        if (graph) {
+            graph.clearCells();
+            setCurrentFlow(null);
+            setFlowName(null);
+            setFlowMemo(null);
+        }
+    }
+
+    const switchFlowBlank = (flow) => {
+        const graph = graphRef.current;
+        if (graph) {
+            graph.fromJSON(JSON.parse(flow.originData));
+            setCurrentFlow(flow)
+            setFlowName(flow.name);
+            setFlowMemo(flow.memo);
+        }
+    }
+
+    const testRun = () => {//妯℃嫙杩愯
+        if (currentFlow == null) {
+            message.warning("璇烽�夋嫨娴佺▼鍥�");
+            return;
+        }
+
+        mockRun(currentFlow.id).then((res) => {
+            if (res.code == 200) {
+                message.success("杩愯鎴愬姛");
+            } else {
+                message.warning(res.msg);
+            }
+        })
+    }
+
+    useEffect(() => {
+        updateFlowList();
+    }, [])
 
     return (
         <>
-            <div className="container">
-                <Button type="primary" onClick={exportData}>
-                    瀵煎嚭鏁版嵁
-                </Button>
+            <div>
+                <div className="container">
+                    <div className="containerButton">
+                        <Button type="primary" onClick={createNewBlank}>
+                            鏂板缓
+                        </Button>
+                    </div>
 
-                <Button type="primary" onClick={prewCode}>
-                    棰勮浠g爜
-                </Button>
+                    <div className="containerButton">
+                        <Button type="primary" onClick={saveData}>
+                            淇濆瓨
+                        </Button>
+                    </div>
+
+                    <div className="containerButton">
+                        <Button type="primary" onClick={setFlowActive}>
+                            婵�娲讳娇鐢�
+                        </Button>
+                    </div>
+
+                    <div className="containerButton">
+                        <Button type="primary" onClick={prewCode}>
+                            棰勮浠g爜
+                        </Button>
+                    </div>
+
+                    <div className="containerButton">
+                        <Button type="primary" onClick={testRun}>
+                            妯℃嫙杩愯
+                        </Button>
+                    </div>
+                </div>
+
+                <div className="flowList">
+                    <List
+                        header={
+                            <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
+                                <div><Typography.Text mark>[鏁版嵁]</Typography.Text> 娴佺▼鍥惧垪琛�</div>
+                                <div>
+                                    <Button type="primary" size="small" onClick={updateFlowList}>
+                                        鍒锋柊
+                                    </Button>
+
+                                    <Popconfirm
+                                        title="鍒犻櫎娴佺▼鍥�"
+                                        description="纭鍒犻櫎锛�"
+                                        okText="鍒犻櫎"
+                                        cancelText="鍙栨秷"
+                                        onConfirm={removeFlow}
+                                    >
+                                        <Button style={{ marginLeft: '5px' }} type="primary" danger size="small">
+                                            <DeleteFilled />
+                                        </Button>
+                                    </Popconfirm>
+
+                                </div>
+                            </div>
+                        }
+                        dataSource={flowListData}
+                        renderItem={(item) => (
+                            <List.Item>
+                                <Button type={currentFlow != null && item.id == currentFlow.id ? 'primary' : 'dashed'} style={{ width: '100%' }} onClick={() => switchFlowBlank(item)}>
+                                    <div style={{ display: 'flex', justifyContent: 'space-between' }}>
+                                        <div>{item.name}</div>
+                                        {item.status == 1 ? <div><ApiOutlined /></div> : ''}
+                                    </div>
+                                </Button>
+                            </List.Item>
+                        )}
+                    />
+                </div>
             </div>
 
             <Modal title="棰勮浠g爜" open={isModalOpen} onOk={handleOk} onCancel={handleCancel}>
@@ -417,6 +569,15 @@
                     {preCode}
                 </SyntaxHighlighter>
             </Modal>
+
+            <Modal title="淇濆瓨娴佺▼鍥�" open={saveIsModalOpen} onOk={exportData} onCancel={handleCancel}>
+                <div style={{ marginTop: '10px' }}>
+                    <Input placeholder="娴佺▼鍥惧悕绉�" value={flowName} onChange={flowNameInputChange} />
+                </div>
+                <div style={{ marginTop: '10px' }}>
+                    <Input placeholder="澶囨敞" value={flowMemo} onChange={memoInputChange} />
+                </div>
+            </Modal>
         </>
     );
 }
\ No newline at end of file
diff --git a/zy-asrs-flow/src/components/Flow/css/GraphTools.less b/zy-asrs-flow/src/components/Flow/css/GraphTools.less
index 7502c89..6df5aa7 100644
--- a/zy-asrs-flow/src/components/Flow/css/GraphTools.less
+++ b/zy-asrs-flow/src/components/Flow/css/GraphTools.less
@@ -1,6 +1,16 @@
 .container {
-    width: 200px;
+    width: 240px;
     display: flex;
     justify-content: space-around;
     margin-top: 10px;
+    flex-wrap: wrap;
+}
+
+.container .containerButton {
+    width: 100px;
+    margin-top: 10px;
+}
+
+.flowList {
+    padding: 10px;
 }
\ No newline at end of file
diff --git a/zy-asrs-flow/src/pages/asrs/flowGraph/components/edit.jsx b/zy-asrs-flow/src/pages/asrs/flowGraph/components/edit.jsx
new file mode 100644
index 0000000..16d2b15
--- /dev/null
+++ b/zy-asrs-flow/src/pages/asrs/flowGraph/components/edit.jsx
@@ -0,0 +1,109 @@
+import React, { useState, useRef, useEffect } from 'react';
+import {
+    ProForm,
+    ProFormDigit,
+    ProFormText,
+    ProFormSelect,
+    ProFormDateTimePicker
+} from '@ant-design/pro-components';
+import { Form, Modal } from 'antd';
+import { FormattedMessage, useIntl } from '@umijs/max';
+import moment from 'moment';
+import Http from '@/utils/http';
+
+const Edit = (props) => {
+    const intl = useIntl();
+    const [form] = Form.useForm();
+    const { } = props;
+
+    useEffect(() => {
+        form.resetFields();
+        form.setFieldsValue({
+            ...props.values
+        })
+    }, [form, props])
+
+    const handleCancel = () => {
+        props.onCancel();
+    };
+
+    const handleOk = () => {
+        form.submit();
+    }
+
+    const handleFinish = async (values) => {
+        props.onSubmit({ ...values });
+    }
+
+    return (
+        <>
+            <Modal
+                title={
+                    Object.keys(props.values).length > 0
+                        ? intl.formatMessage({ id: 'page.edit', defaultMessage: '缂栬緫' })
+                        : intl.formatMessage({ id: 'page.add', defaultMessage: '娣诲姞' })
+                }
+                width={640}
+                forceRender
+                destroyOnClose
+                open={props.open}
+                onCancel={handleCancel}
+                onOk={handleOk}
+            >
+                <ProForm
+                    form={form}
+                    submitter={false}
+                    onFinish={handleFinish}
+                    layout="horizontal"
+                    grid={true}
+                >
+                    <ProFormDigit
+                        name="id"
+                        disabled
+                        hidden={true}
+                    />
+                    <ProForm.Group>
+                        <ProFormText
+                            name="originData"
+                            label="鍘熷鏁版嵁"
+                            colProps={{ md: 12, xl: 12 }}
+                        />
+                        <ProFormText
+                            name="processData"
+                            label="澶勭悊鍚庣殑鏁版嵁"
+                            colProps={{ md: 12, xl: 12 }}
+                        />
+                    </ProForm.Group>
+                    <ProForm.Group>
+                        <ProFormDateTimePicker
+                            name="createTime"
+                            label=""
+                            colProps={{ md: 12, xl: 12 }}
+                            transform={(value) => moment(value).toISOString()}
+                        />
+                        <ProFormDateTimePicker
+                            name="updateTime"
+                            label=""
+                            colProps={{ md: 12, xl: 12 }}
+                            transform={(value) => moment(value).toISOString()}
+                        />
+                    </ProForm.Group>
+                    <ProForm.Group>
+                        <ProFormSelect
+                            name="status"
+                            label="鏄惁鍚敤"
+                            colProps={{ md: 12, xl: 12 }}
+                            options={[
+                                { label: '鍚�', value: 0 },
+                                { label: '鏄�', value: 1 },
+                            ]}
+                        />
+                    </ProForm.Group>
+
+                </ProForm>
+            </Modal>
+        </>
+    )
+}
+
+export default Edit;
diff --git a/zy-asrs-flow/src/pages/asrs/flowGraph/index.jsx b/zy-asrs-flow/src/pages/asrs/flowGraph/index.jsx
new file mode 100644
index 0000000..1fd2f1d
--- /dev/null
+++ b/zy-asrs-flow/src/pages/asrs/flowGraph/index.jsx
@@ -0,0 +1,373 @@
+
+import React, { useState, useRef, useEffect } from 'react';
+import { Button, message, Modal, Tag  } from 'antd';
+import {
+    FooterToolbar,
+    PageContainer,
+    ProTable,
+    LightFilter,
+} from '@ant-design/pro-components';
+import { FormattedMessage, useIntl } from '@umijs/max';
+import { PlusOutlined, ExportOutlined } from '@ant-design/icons';
+import Http from '@/utils/http';
+import Edit from './components/edit'
+import { TextFilter, SelectFilter, DatetimeRangeFilter, LinkFilter } from '@/components/TableSearch'
+import { statusMap } from '@/utils/enum-util'
+import { repairBug } from '@/utils/common-util';
+
+const TABLE_KEY = 'pro-table-flowGraph';
+
+const handleSave = async (val, intl) => {
+    const hide = message.loading(intl.formatMessage({ id: 'page.adding', defaultMessage: '姝e湪娣诲姞' }));
+    try {
+        const resp = await Http.doPost('api/flowGraph/save', val);
+        if (resp.code === 200) {
+            message.success(intl.formatMessage({ id: 'page.add.success', defaultMessage: '娣诲姞鎴愬姛' }));
+            return true;
+        } else {
+            message.error(resp.msg);
+            return false;
+        }
+    } catch (error) {
+        message.error(intl.formatMessage({ id: 'page.add.fail', defaultMessage: '娣诲姞澶辫触璇烽噸璇曪紒' }));
+        return false;
+    } finally {
+        hide();
+    }
+};
+
+const handleUpdate = async (val, intl) => {
+    const hide = message.loading(intl.formatMessage({ id: 'page.updating', defaultMessage: '姝e湪鏇存柊' }));
+    try {
+        const resp = await Http.doPost('api/flowGraph/update', val);
+        if (resp.code === 200) {
+            message.success(intl.formatMessage({ id: 'page.update.success', defaultMessage: '鏇存柊鎴愬姛' }));
+            return true;
+        } else {
+            message.error(resp.msg);
+            return false;
+        }
+    } catch (error) {
+        message.error(intl.formatMessage({ id: 'page.update.fail', defaultMessage: '鏇存柊澶辫触璇烽噸璇曪紒' }));
+        return false;
+    } finally {
+        hide();
+    }
+};
+
+const handleRemove = async (rows, intl) => {
+    if (!rows) return true;
+    const hide = message.loading(intl.formatMessage({ id: 'page.deleting', defaultMessage: '姝e湪鍒犻櫎' }));
+    try {
+        const resp = await Http.doPost('api/flowGraph/remove/' + rows.map((row) => row.id).join(','));
+        if (resp.code === 200) {
+            message.success(intl.formatMessage({ id: 'page.delete.success', defaultMessage: '鍒犻櫎鎴愬姛' }));
+            return true;
+        } else {
+            message.error(resp.msg);
+            return false;
+        }
+    } catch (error) {
+        message.error(intl.formatMessage({ id: 'page.delete.fail', defaultMessage: '鍒犻櫎澶辫触锛岃閲嶈瘯锛�' }));
+        return false;
+    } finally {
+        hide();
+    }
+};
+
+const handleExport = async (intl) => {
+    const hide = message.loading(intl.formatMessage({ id: 'page.exporting', defaultMessage: '姝e湪瀵煎嚭' }));
+    try {
+        const resp = await Http.doPostBlob('api/flowGraph/export');
+        const blob = new Blob([resp], { type: 'application/vnd.ms-excel' });
+        window.location.href = window.URL.createObjectURL(blob);
+        message.success(intl.formatMessage({ id: 'page.export.success', defaultMessage: '瀵煎嚭鎴愬姛' }));
+        return true;
+    } catch (error) {
+        message.error(intl.formatMessage({ id: 'page.export.fail', defaultMessage: '瀵煎嚭澶辫触锛岃閲嶈瘯' }));
+        return false;
+    } finally {
+        hide();
+    }
+};
+
+
+const Main = () => {
+    const intl = useIntl();
+    const formTableRef = useRef();
+    const actionRef = useRef();
+    const [selectedRows, setSelectedRows] = useState([]);
+    const [modalVisible, setModalVisible] = useState(false);
+    const [currentRow, setCurrentRow] = useState();
+    const [searchParam, setSearchParam] = useState({});
+
+    useEffect(() => {
+
+    }, []);
+
+    const columns = [
+        {
+            title: intl.formatMessage({
+                id: 'page.table.no',
+                defaultMessage: 'No'
+            }),
+            dataIndex: 'index',
+            valueType: 'indexBorder',
+            width: 48,
+        },
+        {
+            title: '鍘熷鏁版嵁',
+            dataIndex: 'originData',
+            valueType: 'text',
+            hidden: false,
+            width: 140,
+            filterDropdown: (props) => <TextFilter
+                name='originData'
+                {...props}
+                actionRef={actionRef}
+                setSearchParam={setSearchParam}
+            />,
+        },
+        {
+            title: '澶勭悊鍚庣殑鏁版嵁',
+            dataIndex: 'processData',
+            valueType: 'text',
+            hidden: false,
+            width: 140,
+            filterDropdown: (props) => <TextFilter
+                name='processData'
+                {...props}
+                actionRef={actionRef}
+                setSearchParam={setSearchParam}
+            />,
+        },
+        {
+            title: '',
+            dataIndex: 'createTime$',
+            valueType: 'text',
+            hidden: false,
+            width: 140,
+            filterDropdown: (props) => <DatetimeRangeFilter
+                name='createTime'
+                {...props}
+                actionRef={actionRef}
+                setSearchParam={setSearchParam}
+            />,
+        },
+        {
+            title: '',
+            dataIndex: 'updateTime$',
+            valueType: 'text',
+            hidden: false,
+            width: 140,
+            filterDropdown: (props) => <DatetimeRangeFilter
+                name='updateTime'
+                {...props}
+                actionRef={actionRef}
+                setSearchParam={setSearchParam}
+            />,
+        },
+        {
+            title: '鏄惁鍚敤',
+            dataIndex: 'status$',
+            valueType: 'text',
+            hidden: false,
+            width: 140,
+            filterDropdown: (props) => <SelectFilter
+                name='status'
+                {...props}
+                actionRef={actionRef}
+                setSearchParam={setSearchParam}
+                data={[
+                    { label: '鍚�', value: 0 },
+                    { label: '鏄�', value: 1 },
+                ]}
+            />,
+        },
+
+        {
+            title: '鎿嶄綔',
+            dataIndex: 'option',
+            width: 140,
+            valueType: 'option',
+            render: (_, record) => [
+                <Button
+                    type="link"
+                    key="edit"
+                    onClick={() => {
+                        setModalVisible(true);
+                        setCurrentRow(record);
+                    }}
+                >
+                    <FormattedMessage id='page.edit' defaultMessage='缂栬緫' />
+                </Button>,
+                <Button
+                    type="link"
+                    danger
+                    key="batchRemove"
+                    onClick={async () => {
+                        Modal.confirm({
+                            title: intl.formatMessage({ id: 'page.delete', defaultMessage: '鍒犻櫎' }),
+                            content: intl.formatMessage({ id: 'page.delete.confirm', defaultMessage: '纭畾鍒犻櫎璇ラ」鍚楋紵' }),
+                            onOk: async () => {
+                                const success = await handleRemove([record], intl);
+                                if (success) {
+                                    if (actionRef.current) {
+                                        actionRef.current.reload();
+                                    }
+                                }
+                            },
+                        });
+                    }}
+                >
+                    <FormattedMessage id='page.delete' defaultMessage='鍒犻櫎' />
+                </Button>,
+            ],
+        },
+    ];
+
+    return (
+        <PageContainer
+            header={{
+                breadcrumb: {},
+            }}
+        >
+            <div style={{ width: '100%', float: 'right' }}>
+                <ProTable
+                    key="flowGraph"
+                    rowKey="id"
+                    actionRef={actionRef}
+                    formRef={formTableRef}
+                    columns={columns}
+                    cardBordered
+                    scroll={{ x: 1300 }}
+                    dateFormatter="string"
+                    pagination={{ pageSize: 16 }}
+                    search={false}
+                    toolbar={{
+                        search: {
+                            onSearch: (value) => {
+                                setSearchParam(prevState => ({
+                                    ...prevState,
+                                    condition: value
+                                }));
+                                actionRef.current?.reload();
+                            },
+                        },
+                        filter: (
+                            <LightFilter
+                                onValuesChange={(val) => {
+                                }}
+                            >
+                            </LightFilter>
+                        ),
+                        actions: [
+                            <Button
+                                type="primary"
+                                key="save"
+                                onClick={async () => {
+                                    setModalVisible(true)
+                                }}
+                            >
+                                <PlusOutlined />
+                                <FormattedMessage id='page.add' defaultMessage='娣诲姞' />
+                            </Button>,
+                            <Button
+                                key="export"
+                                onClick={async () => {
+                                    handleExport(intl);
+                                }}
+                            >
+                                <ExportOutlined />
+                                <FormattedMessage id='page.export' defaultMessage='瀵煎嚭' />
+                            </Button>,
+                        ],
+                    }}
+                    request={(params, sorter, filter) =>
+                        Http.doPostPromise('/api/flowGraph/page', { ...params, ...searchParam }, (res) => {
+                            return {
+                                data: res.data.records,
+                                total: res.data.total,
+                                success: true,
+                            }
+                        })
+                    }
+                    rowSelection={{
+                        onChange: (ids, rows) => {
+                            setSelectedRows(rows);
+                        }
+                    }}
+                    columnsState={{
+                        persistenceKey: TABLE_KEY,
+                        persistenceType: 'localStorage',
+                        defaultValue: {
+                            // memo: { show: repairBug(TABLE_KEY, 'memo', false) },
+                            option: { fixed: 'right', disable: true },
+                        },
+                        onChange(value) {
+                        },
+                    }}
+                />
+            </div>
+
+            {selectedRows?.length > 0 && (
+                <FooterToolbar
+                    extra={
+                        <div>
+                            <a style={{ fontWeight: 600 }}>{selectedRows.length}</a>
+                            <FormattedMessage id='page.selected' defaultMessage=' 椤瑰凡閫夋嫨' />
+                        </div>
+                    }
+                >
+                    <Button
+                        key="remove"
+                        danger
+                        onClick={async () => {
+                            Modal.confirm({
+                                title: intl.formatMessage({ id: 'page.delete', defaultMessage: '鍒犻櫎' }),
+                                content: intl.formatMessage({ id: 'page.delete.confirm', defaultMessage: '纭畾鍒犻櫎璇ラ」鍚楋紵' }),
+                                onOk: async () => {
+                                    const success = await handleRemove(selectedRows, intl);
+                                    if (success) {
+                                        setSelectedRows([]);
+                                        actionRef.current?.reloadAndRest?.();
+                                    }
+                                },
+                            });
+                        }}
+                    >
+                        <FormattedMessage id='page.delete.batch' defaultMessage='鎵归噺鍒犻櫎' />
+                    </Button>
+                </FooterToolbar>
+            )}
+
+            <Edit
+                open={modalVisible}
+                values={currentRow || {}}
+                onCancel={
+                    () => {
+                        setModalVisible(false);
+                        setCurrentRow(undefined);
+                    }
+                }
+                onSubmit={async (values) => {
+                    let ok = false;
+                    if (values.id) {
+                        ok = await handleUpdate({ ...values }, intl)
+                    } else {
+                        ok = await handleSave({ ...values }, intl)
+                    }
+                    if (ok) {
+                        setModalVisible(false);
+                        setCurrentRow(undefined);
+                        if (actionRef.current) {
+                            actionRef.current.reload();
+                        }
+                    }
+                }}
+            />
+        </PageContainer>
+    );
+};
+
+export default Main;
diff --git a/zy-asrs-flow/src/services/flow/api.js b/zy-asrs-flow/src/services/flow/api.js
index cf227e5..6690955 100644
--- a/zy-asrs-flow/src/services/flow/api.js
+++ b/zy-asrs-flow/src/services/flow/api.js
@@ -2,8 +2,39 @@
 import React from 'react';
 
 export function exportDataToServer(data) {
-    return request('/flow/analysisExportData', {
+    return request('/api/flow/analysisExportData', {
         data: data,
         method: 'POST'
     });
+}
+
+export function getFlowList() {
+    return request('/api/flowGraph/list', {
+        method: 'POST'
+    })
+}
+
+export function deleteFlowById(id) {
+    return request('/api/flowGraph/remove/' + [id], {
+        method: 'POST'
+    })
+}
+
+export function updateFlowStatus(id, status) {
+    return request('/api/flowGraph/updateFlowStatus', {
+        method: 'POST',
+        data: {
+            id: id,
+            status: status
+        }
+    })
+}
+
+export function mockRun(id) {//妯℃嫙杩愯
+    return request('/api/flow/mockRun', {
+        method: 'POST',
+        data: {
+            id: id
+        }
+    })
 }
\ No newline at end of file
diff --git a/zy-asrs-flow/src/services/route.js b/zy-asrs-flow/src/services/route.js
index 979bb36..0b5a631 100644
--- a/zy-asrs-flow/src/services/route.js
+++ b/zy-asrs-flow/src/services/route.js
@@ -26,7 +26,6 @@
 
 export async function getRoutersInfo() {
     return getRouters().then((res) => {
-        console.log(res);
         if (res.code === 200) {
             // return res.data;
             const routersInfo = convertCompatRouters(res.data);

--
Gitblit v1.9.1