zoukankan      html  css  js  c++  java
  • 利用 Antv X6 绘制审批流程(单向流转)

    Antv X6官网:https://x6.antv.vision/zh/docs/tutorial/about

    首先展示一下效果:

     这是只是做了一个简单的demo,具体项目的需求就看个人怎么使用,下面附上demo的全部代码:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <script src="x6.js"></script>
            <title>X6流程图</title>
            <style type="text/css">
                #container {
                    width: 100%;
                    height: calc(100vh);
                }
                @keyframes ant-line {
                            to {
                                stroke-dashoffset: -1000;
                            }
                        }
            </style>
        </head>
        <body>
            <div id="container" style="position: fixed;"></div>
        </body>
    
        <script type=" text/javascript">
            const male = 'images/1.png'
    
            X6.Graph.registerNode(
                'org-node', {
                     180,
                    height: 60,
                    markup: [{
                            tagName: 'rect',
                            selector: 'body',
                        },
                        {
                            tagName: 'image',
                            selector: 'avatar',
                        },
                        {
                            tagName: 'text',
                            selector: 'rank',
                        },
                        {
                            tagName: 'text',
                            selector: 'name',
                        },
                    ],
                    attrs: {
                        body: {
                            refWidth: '100%',
                            refHeight: '100%',
                            fill: '#FFFFFF',
                            stroke: '#000000',
                            strokeWidth: 2,
                            rx: 10,
                            ry: 10,
                            pointerEvents: 'visiblePainted',
                        },
                        avatar: {
                             48,
                            height: 48,
                            refX: 8,
                            refY: 6,
                        },
                        rank: {
                            refX: 0.9,
                            refY: 0.2,
                            fontFamily: 'Courier New',
                            fontSize: 14,
                            textAnchor: 'end',
                            //textDecoration: 'underline',
                        },
                        name: {
                            refX: 0.9,
                            refY: 0.6,
                            fontFamily: 'Courier New',
                            fontSize: 14,
                            fontWeight: '800',
                            textAnchor: 'end',
                        },
                    },
                },
                true,
            )
            const graph = new X6.Graph({
                container: document.getElementById('container'),
                grid: {
                    size: 20, //网格大小
                    visible: true, //是否开启网格画布
                    type: 'dot', // 'dot' | 'fixedDot' | 'mesh'|     //网格样式
                    args: {
                        color: '#75664D', // 网格线/点颜色  
                        thickness: 1, // 网格线宽度/网格点大小
                    },
                },
                //对齐线是移动节点排版的辅助工具
                snapline: true,
                connecting: {
                    snap: true,
                    highlight: true,
                },
            })
    
            function member(x, y, rank, name, image, background, textColor) {
                return graph.addNode({
                     180, // Number,可选,节点大小的 width 值
                    height: 60, // Number,可选,节点大小的 height 值
                    x:x,
                    y:y,
                    shape: 'org-node',
                    attrs: {
                        body: {
                            fill: background,
                            stroke: 'none',
                        },
                        avatar: {
                            opacity: 0.7,
                            'xlink:href': image,
                        },
                        rank: {
                            text: rank,
                            fill: '#000',
                            wordSpacing: '-5px',
                            letterSpacing: 0,
                        },
                        name: {
                            text: name,
                            fill: '#000',
                            fontSize: 13,
                            fontFamily: 'Arial',
                            letterSpacing: 0,
                        },
                    },
                })
            }
            const node1 = member(200, 160, '张三', '已审批(同意)', male, 'green');
            const node2 = member(460, 160, '王五', '已审批(驳回)', male, 'yellow');
            const node3 = member(720, 160, '李四', '正在审批中', male, 'red');
            const node4 = member(980, 160, '王麻子', '未审批', male, '#f2f2f2');
            const edge1 = new X6.Shape.Edge({
                id: 'edge1',
                source: node1,
                target: node2,
                router: {
                    name: 'er',
                    args: {
                          offset: 'center',
                        },
                },
                attrs: {
                    line: {
                        stroke: '#000',
                        strokeDasharray: 5,
                                    targetMarker: 'classic',
                                    style: {
                                        animation: 'ant-line 30s infinite linear',
                                    },   
                    },
                },
            })
            const edge2 = new X6.Shape.Edge({
                id: 'edge2',
                source: node2,
                target: node3,
                router: {
                    name: 'er',
                    args: {
                          offset: 'center',
                          
                        },
                },
                attrs: {
                    line: {
                        stroke: '#000',
                        strokeDasharray: 5,
                                    targetMarker: 'classic',
                                    style: {
                                        animation: 'ant-line 30s infinite linear',
                                    },   
                    },
                },
            })
            const edge3 = new X6.Shape.Edge({
                id: 'edge3',
                source: node3,
                target: node4,
                router: {
                    name: 'er',
                    args: {
                          offset: 'center',
                        },
                },
                attrs: {
                    line: {
                        stroke: '#000',
                        strokeDasharray: 5,
                                    targetMarker: 'classic',
                                    style: {
                                        animation: 'ant-line 30s infinite linear',
                                    },   
                    },
                },
            })
            graph.addEdge(edge1)
            graph.addEdge(edge2)
            graph.addEdge(edge3)
        </script>
    </html>

    节点之间的动画属性=》

    <style>

    @keyframes ant-line {
    to {
    stroke-dashoffset: -1000;
    }
    }

    </style>

     js下载链接: https://pan.baidu.com/s/1YSezUqOTqdPkBCDTfA7Rpg 提取码: 976p 

  • 相关阅读:
    01_3_创建一个Action
    01_2_Namespace命名空间
    01_1_Socket实现
    03_2_JAVA中的面向对象与内存解析
    01_1_Struts环境搭建
    Zabbix通过Orabbix监控Oracle数据库
    Zabbix通过JMX方式监控java中间件
    nginx启用status状态页
    zabbix数据库分表的实现
    配置sudo记录日志
  • 原文地址:https://www.cnblogs.com/xiong950413/p/14869755.html
Copyright © 2011-2022 走看看