zoukankan      html  css  js  c++  java
  • vue+go.js:实现流程图

    转载自:https://www.cnblogs.com/sexintercourse/p/12456291.html

    第一步:引入package.json引入gojs依赖包-- "gojs": "^2.0.3", (npm install gojs --save)

    第二步:运行下述代码

    复制代码
    <template>
        <div id="wrap">
            <div id="chart-wrap">
                <div id="chart-palette"></div>
                <div id="chart-diagram"></div>
            </div>
            <button @click="onSubmit"></button>
        </div>
        </div>
    </template>
    <script>
        import go from 'gojs'
        const MAKE = go.GraphObject.make;
        export default {
            data() {
                return {}
            },
            mounted() {
                var mySelf = this;
                mySelf.myDiagram = MAKE(go.Diagram, "chart-diagram", {
                    initialContentAlignment: go.Spot.Center, // 居中显示
                    "undoManager.isEnabled": true, // 支持 Ctrl-Z 和 Ctrl-Y 操作
                    "toolManager.hoverDelay": 100, //tooltip提示显示延时
                    "toolManager.toolTipDuration": 10000, //tooltip持续显示时间
                    //isReadOnly:true,//只读
                    "grid.visible": true, //显示网格
                    allowMove: true, //允许拖动
                    // allowDragOut:true,
                    allowDelete: true,
                    allowCopy: true,
                    allowClipboard: true,
                    "toolManager.mouseWheelBehavior": go.ToolManager.WheelZoom, //有鼠标滚轮事件放大和缩小,而不是向上和向下滚动
                    layout: MAKE(go.TreeLayout, {
                        angle: 0,
                        layerSpacing: 35
                    })
                }); //构建gojs对象
                console.log(mySelf.myDiagram);
                mySelf.myDiagram.addDiagramListener("ObjectSingleClicked", function(e) {
                    debugger
                    console.log(e.subject.part);
     
                });
     
                mySelf.myDiagram.addDiagramListener("BackgroundSingleClicked", function(e) {
                    debugger
                    console.log("Double-clicked at" + e.diagram.lastInput.documentPoint);
                });
     
                mySelf.myDiagram.addDiagramListener("ClipboardPasted", function(e) {
                    debugger
                    console.log("Pasted" + e.diagram.selection.count + "parts");
                });
     
                mySelf.myDiagram.linkTemplate = MAKE(go.Link, {
                        curve: go.Link.Bezier
                    }, // 贝塞尔曲线
                    {
                        routing: go.Link.Orthogonal,
                        corner: 15
                    },
                    MAKE(go.Shape, {
                        strokeWidth: 2,
                        stroke: "#F60"
                    }),
                    MAKE(go.Shape, {
                        toArrow: "Standard",
                        fill: "red",
                        stroke: "blue"
                    }), //箭头
                    MAKE(go.TextBlock, {
                            margin: 20,
                            stroke: "blue",
                            font: "14px sans-serif",
                             50,
                            wrap: go.TextBlock.WrapDesiredSize
                        },
                        new go.Binding("text", "linktext")), {
                        toolTip: MAKE(go.Adornment, "Auto",
                            MAKE(go.Shape, {
                                fill: "#FFFFCC"
                            }),
                            MAKE(go.TextBlock, {
                                margin: 4
                            }, new go.Binding("text", "name1"))
                        ) // end of Adornment
                    }
                );
                let myModel = MAKE(go.GraphLinksModel); //也可以创建link model;需要配置myModel.linkDataArray 如下
                myModel.nodeDataArray = [];
                myModel.linkDataArray = [];
     
                var lightText = "whitesmoke";
                mySelf.myDiagram.nodeTemplateMap.add(
                    "Next",
                    MAKE(
                        go.Node,
                        "Spot",
                        // nodeStyle(),
                        MAKE( //声明创建一个新的面板对象,自定义方式可参考mySelf.myDiagram.nodeTemplate
                            go.Panel, //表明需要创建一个panel面板对象
                            "Auto", //页面布局为自动
                            MAKE( //声明构建一个圆角矩形
                                go.Shape,
                                "RoundedRectangle", {
                                    fill: "#44CCFF",
                                    stroke: '#FFF',
                                    strokeWidth: 1,
                                    angle: 0
                                },
                                new go.Binding("figure", "figure") //声明并创建一个新的图形
                            ),
                            MAKE( //声明一个可编辑文本域
                                go.TextBlock, {
                                    font: "12pt Helvetica, Arial, sans-serif",
                                    stroke: lightText,
                                     125,
                                    maxSize: new go.Size(360, NaN),
                                    wrap: go.TextBlock.WrapFit, //文本域换行
                                    editable: true, //是否可编辑
                                    margin: 12,
                                    wrap: go.TextBlock.WrapDesiredSize
                                },
                                new go.Binding("text").makeTwoWay()
                            )
                        ),
                        // four named ports, one on each side:
                        makePort("T", go.Spot.Top, false, true),
                        makePort("L", go.Spot.Left, true, true),
                        makePort("R", go.Spot.Right, true, true),
                        makePort("B", go.Spot.Bottom, true, false)
                    )
                );
     
                //Node连接线
                function makePort(name, spot, output, input) {
                    return MAKE(go.Shape, "Circle", {
                        fill: "transparent",
                        stroke: null, // this is changed to "white" in the showPorts function
                        desiredSize: new go.Size(10, 10),
                        alignment: spot,
                        alignmentFocus: spot, // align the port on the main Shape
                        portId: name, // declare this object to be a "port"
                        fromSpot: spot,
                        toSpot: spot, // declare where links may connect at this port
                        fromLinkable: output,
                        toLinkable: input, // declare whether the user may draw links to/from here
                        cursor: "pointer" // show a different cursor to indicate potential link point
                    });
                };
                mySelf.myDiagram.model = myModel;
                mySelf.init();
            },
            methods: {
                onSubmit() {
     
                },
                init() {
                    var mySelf = this;
                    window.myPalette = MAKE(
                        go.Palette,
                        "chart-palette", // must name or refer to the DIV HTML element
                        {
                            scrollsPageOnFocus: false,
                            nodeTemplateMap: mySelf.myDiagram.nodeTemplateMap, // share the templates used by myDiagram
                            model: new go.GraphLinksModel([
                                // specify the contents of the Palette
                                {
                                    category: "Next",
                                    text: "新规则"
                                }
                            ])
                        }
                    );
                },
            }
        }
    </script>
    <style lang="less" scoped>
        #form-wrap {
            padding: 20px 40px;
            // background-color: white;
            border: solid 1px rgb(244, 244, 244);
        }
     
        #submit {
             102px;
            height: 40px;
            float: right;
            margin: 20px 5px 16px 0;
        }
     
        #chart-wrap {
             100%;
            display: flex;
            justify-content: space-between;
            margin-bottom: 22px;
     
            #chart-palette {
                 180px;
                margin-right: 30px;
                background-color: white;
                border: solid 1px rgb(244, 244, 244);
            }
     
            #chart-diagram {
                flex-grow: 1;
                height: 720px;
                background-color: white;
                border: solid 1px rgb(244, 244, 244);
            }
        }
     
        #lateEntry {
            clear: both;
            background-color: rgb(255, 255, 255);
            border: solid 1px rgb(244, 244, 244);
     
            >span {
                display: inline-block;
                height: 50px;
                font-size: 16px;
                line-height: 50px;
                text-indent: 30px;
                letter-spacing: 0.8px;
                text-align: left;
                color: rgb(35, 35, 35);
                // border-bottom: 1px solid rgb(234, 234, 234);
            }
        }
    </style>
    复制代码

    第三步:去水印

    在哪个文件中找到破解的文件。 

    在node_modulesgojs eleasego.js 下进行破解

    1. 在文件中搜索7eba17a4ca3b1a8346,找到类似a.$q=b.V[Za("7eba17a4ca3b1a8346")][Za("78a118b7")](b.V,yk,4,4);这样结构的代码
    2. 将其注释,替换成a.$q=function(){return true;};
    3. 直接npm install可以在module里寻找go.js文件,需修改的代码一般在769行

    ------拓展:相关构建gojs流程图时的某些参数及相关配置使用方式

    复制代码
    ====================-构建gojs流程面板
    import go from  'gojs'
    const MAKE = go.GraphObject.make;
    mySelf.myDiagram = MAKE(go.Diagram, "mygoChart", {
        initialContentAlignment: go.Spot.Center, // 居中显示
        "undoManager.isEnabled": true, // 支持 Ctrl-Z 和 Ctrl-Y 操作
        "toolManager.hoverDelay": 100, //tooltip提示显示延时
        "toolManager.toolTipDuration": 10000, //tooltip持续显示时间
        //isReadOnly:true,//只读
        "grid.visible": true, //显示网格
        allowMove: true, //允许拖动
        // allowDragOut:true,
        allowDelete: true,//允许删除
        allowCopy: true,//允许复制
        allowClipboard: false,//允许剪切
        "toolManager.mouseWheelBehavior": go.ToolManager.WheelZoom, //有鼠标滚轮事件放大和缩小,而不是向上和向下滚动
        layout: MAKE(go.TreeLayout, {//创建布局,示例为树
            angle: 0,    //角度
            layerSpacing: 35 //层间距
        })
    }); //构建gojs对象
    ====================-
    mySelf.myDiagram.nodeTemplateMap.add(: //声明左侧Node工具栏Tools
            "Next", // 关键参数,需要与init初始化时window.myPalette中model对象配置的category保持一致
             MAKE(
                go.Node, //
                "Spot",
                // nodeStyle(),
                MAKE(//声明创建一个新的面板对象,自定义方式可参考mySelf.myDiagram.nodeTemplate
                    go.Panel, //表明需要创建一个panel面板对象
                    "Auto",      //页面布局为自动
                    MAKE(     //声明构建一个圆角矩形
                        go.Shape,
                        "RoundedRectangle", {
                            fill: "rgb(54, 128, 181)", //内填充颜色
                            stroke: null  //外边框颜色
                        },
                        new go.Binding("figure", "figure") //声明并创建一个新的图形
                    ),
                    MAKE(    //声明一个可编辑文本域
                        go.TextBlock, {
                            font: "11pt Helvetica, Arial, sans-serif",
                            stroke: lightText,
                            margin: 8,
                            maxSize: new go.Size(160, NaN),
                            wrap: go.TextBlock.WrapFit, //文本域换行
                            editable: true    //是否可编辑
                        },
                        new go.Binding("text").makeTwoWay()
                    )
                ),
                makePort("T", go.Spot.Top, false, true),//创建Top顶端可延申链接点
                makePort("L", go.Spot.Left, true, true),//创建Left左端可延申链接点
                makePort("R", go.Spot.Right, true, true),//创建Righ右端可延申链接点
                makePort("B", go.Spot.Bottom, true, false)//创建Buttom底端可延申链接点
            )
        );
    ====================-自定义流程图流程节点相关配置
    mySelf.myDiagram.nodeTemplate : 自定义流程图节点
        -> MAKE(go.Node,//声明创建的是node对象
            new go.Binding("location", "loc", go.Point.parse),//创建节点并设定节点的初始位置
            MAKE(go.Shape, "RoundedRectangle", {//构建节点的形状,示例为圆角矩形
                fill: "#44CCFF",//模块内填充颜色
                stroke: 'green',//外填充颜色(可理解为margin,也可以当成外边框颜色来理解)
                strokeWidth: 2,//外边框(填充)宽度
                angle: 0//模块形状的偏移量(角度)
           }),
           "Auto", //设置并定义节点模块内容布局走向:Vertical(垂直),Auto(自动),Horizontal(水平)
           { background: "#44CCFF" },//将Node背景底色渲染为蓝色
           MAKE(go.Picture,//构建Node区域图像类内容
                { source:"../assets/img/01.png",margin: 10,  50, height: 50, background: "red" },//基本参数设置
           new go.Binding("source")),//*Picture.source参数值与模型数据中的"source"字段绑定
           MAKE(go.TextBlock,//构建Node区域文本类内容
             "Default Text",  // 初始化默认文本
             // 文字周围的空隙, 大号字体, 白色笔画:
             { margin: 12, stroke: "white", font: "bold 16px sans-serif",
                75,
                wrap: go.TextBlock.WrapDesiredSize
             },
           new go.Binding("text", "name1")), // name1为linktext为nodeDataArray对象中的参数
           {
               mouseEnter: function(e, node, prev) {
                   console.log('mouseEnter');//鼠标点击事件
               },
               mouseLeave: function(e, node, prev) {
                   mySelf.detailShow = false;//鼠标移开事件
               },
           },
           MAKE(go.Panel, "Horizontal", {//创建并设置node内模板:实现Node块内的控件布局
                   padding: 5
           },
    ====================-自定义流程图连接线相关配置
    mySelf.myDiagram.linkTemplate:自定义流程图连接线
        -> { curve: go.Link.Bezier } : 设置并定义连接线曲线样式,示例为贝塞尔曲线
        -> MAKE(go.Shape, {
                strokeWidth: 2, //连接线宽(厚)度
                stroke: "#F60"//连接线笔画默认(未选中)颜色
            }) : 设置并定义连接线宽度及颜色
        -> MAKE(go.Shape, {
                toArrow: "Standard",//箭头样式,示例为标准
                fill: "#000",//箭头的填充颜色(内填充,可以理解为padding)
                stroke: null//连接线笔画默认(未选中)颜色,(外填充,可以理解为margin)
            }), //设置并定义箭头样式
        --> MAKE(go.TextBlock, { //文本块创建器
                    margin: 20,//外边距,默认单位为px
                    stroke: "blue",//字体颜色
                    font: "14px sans-serif",//字体样式
                    50,//内容宽度
                    wrap: go.TextBlock.WrapDesiredSize//样式包装器
                },
                new go.Binding("text", "linktext")), { //创建并绑定显示的文本域信息,linktext为nodeDataArray对象中的参数
                toolTip: MAKE(go.Adornment, "Auto",
                        MAKE(go.Shape, {
                            fill: "#FFFFCC",//悬浮提示框内填充颜色
                        }),
                        MAKE(go.TextBlock, {
                            margin: 4 // 外边距
                        }, new go.Binding("text", "name1")) //创建并绑定显示的文本域信息,name1为nodeDataArray对象中的参数
                    ) :设置并定义鼠标悬浮提示信息样式
                } : 设置并定义连接线指示及指针悬浮提示内容
    =================-渲染数据相关配置
    --> let myModel = MAKE(go.Model);//无连接线模型渲染
        let myModel = MAKE(go.GraphLinksModel);//指定连接(适用于复杂业务);需要配置myModel.linkDataArray
        let myModel = MAKE(go.TreeModel); //使用Tree树图模型渲染
    --> myModel.nodeDataArray = [{},{},{}] : 流程节点数据(对象数组)
    --> myModel.linkDataArray = [ {from:"1",to:"2"}, {from:"1",to:"2"}……] : 流程链接指示数组,用于构建各个node节点间的数据关系,需要使用go.GraphLinksModel
    --> mySelf.myDiagram.model = myModel; 需渲染数据赋值
    复制代码
  • 相关阅读:
    UVa 116 单向TSP(多段图最短路)
    POJ 1328 Radar Installation(贪心)
    POJ 1260 Pearls
    POJ 1836 Alignment
    POJ 3267 The Cow Lexicon
    UVa 1620 懒惰的苏珊(逆序数)
    POJ 1018 Communication System(DP)
    UVa 1347 旅行
    UVa 437 巴比伦塔
    UVa 1025 城市里的间谍
  • 原文地址:https://www.cnblogs.com/xxzb/p/13345950.html
Copyright © 2011-2022 走看看