网络拓扑图

描述:当前是关于Echarts图表中的 示例。
 
            var nodes = [{
        x: '480',
        y: '1000',
        nodeName: '负载均衡1',
        img: 'data-1547633192258-2EYYUDdcd.png',
    }, {
        x: '480',
        y: '890',
        nodeName: 'WEB服务器',
        img: 'data-1547632686885-o5Rfi3tyk.png'
    },
    {
        x: '100',
        y: '750',
        nodeName: '负载均衡2',
        img: 'data-1547633192258-2EYYUDdcd.png',
    },
    {
        x: '350',
        y: '750',
        nodeName: '负载均衡2',
        img: 'data-1547633192258-2EYYUDdcd.png',
        alarm: '发生警告!'
    },
    {
        x: '630',
        y: '750',
        nodeName: '负载均衡2',
        img: 'data-1547633192258-2EYYUDdcd.png',
    },
    {
        x: '850',
        y: '750',
        nodeName: '负载均衡2',
        img: 'data-1547633192258-2EYYUDdcd.png',
    },
    {
        x: '50',
        y: '550',
        nodeName: '查验网站\n微信公众号\n政务网站',
        img: 'data-1547632915872-WZMUphq72.png',
    },
    {
        x: '150',
        y: '550',
        nodeName: '查验网站\n微信公众号\n政务网站',
        img: 'data-1547632915872-WZMUphq72.png',
    },
    {
        x: '300',
        y: '550',
        nodeName: '电子票制作\n及存储中心',
        img: 'data-1547632915872-WZMUphq72.png',
    },
    {
        x: '400',
        y: '550',
        nodeName: '电子票制作\n及存储中心',
        img: 'data-1547632915872-WZMUphq72.png',
    },
    {
        x: '570',
        y: '550',
        nodeName: '票据服务器1\n(在线)',
        img: 'data-1547632915872-WZMUphq72.png',
    },
    {
        x: '670',
        y: '550',
        nodeName: '票据服务器1\n(在线)',
        img: 'data-1547632915872-WZMUphq72.png',
    },
    {
        x: '800',
        y: '550',
        nodeName: '电子制票\n及存储中心',
        img: 'data-1547632915872-WZMUphq72.png',
    },
    {
        x: '900',
        y: '550',
        nodeName: '电子制票\n及存储中心',
        img: 'data-1547632915872-WZMUphq72.png',
    },
    {
        x: '170',
        y: '300',
        nodeName: 'Inceptor1',
        img: 'data-1547632915872-WZMUphq72.png',
    },
    {
        x: '270',
        y: '300',
        nodeName: 'Inceptor2',
        img: 'data-1547632915872-WZMUphq72.png',
    },
    {
        x: '700',
        y: '300',
        nodeName: '票据Oracle\n数据库服务器',
        img: 'data-1547632915872-WZMUphq72.png',
    },
    {
        x: '800',
        y: '300',
        nodeName: '票据Oracle\n数据库服务器',
        img: 'data-1547632915872-WZMUphq72.png',
    }
]
var charts = {
    nodes: [],
    linesData: [{
        remark: 'WEB服务器-->左边数起第1个负载均衡',
        coords: [
            [470, 890],
            [100, 890],
            [100, 780]

        ]
    },{
        remark: 'WEB服务器-->左边数起第3个负载均衡',
        coords: [
            [510, 890],
            [620, 890],
            [620, 780]

        ]
    },{
        remark: 'WEB服务器-->左边数起第4个负载均衡',
        coords: [
            [510, 890],
            [840, 890],
            [840, 780]

        ]
    },{
        remark: '左边数起第1个负载均衡-->查验网站微信公众号政务网站1',
        coords: [
            [100, 723],
            [50, 580]

        ]
    },{
        remark: '左边数起第1个负载均衡-->查验网站微信公众号政务网站2',
        coords: [
            [100, 723],
            [150, 580]

        ]
    },{
        remark: '左边数起第2个负载均衡-->电子票制作及存储中心1',
        coords: [
            [350, 723],
            [300, 580]
        ],
        lineStyle: {
            normal: {
                color: '#DC143C'
            }
        },
        effect: {
            color: '#DC143C'
        }
    },{
        remark: '左边数起第2个负载均衡-->电子票制作及存储中心2',
        coords: [
            [350, 723],
            [400, 580]

        ],
        lineStyle: {
            normal: {
                color: '#DC143C'
            }
        },
        effect: {
            color: '#DC143C'
        }
    },{
        remark: '左边数起第3个负载均衡-->票据服务器1',
        coords: [
            [630, 723],
            [570, 580]

        ]
    },{
        remark: '左边数起第3个负载均衡-->票据服务器2',
        coords: [
            [630, 723],
            [670, 580]

        ]
    },{
        remark: '左边数起第4个负载均衡-->电子制票及存储中心1',
        coords: [
            [850, 723],
            [800, 580]

        ]
    },{
        remark: '左边数起第4个负载均衡-->电子制票及存储中心2',
        coords: [
            [850, 723],
            [900, 580]

        ]
    },{
        remark: '查验网站-->Inceptor1',
        coords: [
            [100, 450],
            [100, 300],
            [160, 300]

        ]
    },{
        remark: '电子票制作及存储中心-->Inceptor2',
        coords: [
            [350, 450],
            [350, 300],
            [280, 300]

        ]
    },{
        remark: '票据服务器-->票据Oracle数据库服务器',
        coords: [
            [620, 450],
            [620, 300],
            [690, 300]

        ]
    },{
        remark: '电子制票及储存中心-->票据Oracle数据库服务器',
        coords: [
            [850, 450],
            [850, 300],
            [810, 300]

        ]
    }]
}
for (var j = 0; j < nodes.length; j++) {
    var x = parseInt(nodes[j].x)
    var y = parseInt(nodes[j].y)
    var node = {
        nodeName: nodes[j].nodeName,
        value: [x, y],
        symbolSize: 50,
        alarm: nodes[j].alarm,
        symbol: 'image:///asset/get/s/' + nodes[j].img,
        itemStyle: {
            normal: {
                color: '#12b5d0',
            }
        }
    }
    charts.nodes.push(node)
}

option = {
    backgroundColor: "#0B1321",
    xAxis: {
        min: 0,
        max: 1000,
        show: false,
        type: 'value'
    },
    yAxis: {
        min: 0,
        max: 1000,
        show: false,
        type: 'value'
    },
    series: [{
        type: 'graph',
        coordinateSystem: 'cartesian2d',
        label: {
            normal: {
                show: true,
                position: 'bottom',
                color: '#00FFFF'
            }
        },
        itemStyle: {
            normal: {
                label: {
                    show: true,
                    formatter: function(item) {
                        return item.data.nodeName
                    }
                }
            }
        },
        data: charts.nodes,
    }, {
        type: 'lines',
        polyline: true,
        coordinateSystem: 'cartesian2d',
        lineStyle: {
            normal: {
                width: 2,
                color: '#175064',
                curveness: 0.3
            }
        },
        effect: {
            show: true,
            trailLength: 0.1,
            symbol: 'arrow',
            color: '#00FFFF',
            symbolSize: 8
        },
        data: charts.linesData
    }]
};
//用于告警的动态效果
setInterval(() => {
    var dataI = []
    for (var n = 0; n < nodes.length; n++) {
        var alarm = nodes[n].alarm
        if (alarm) {
            option.series[0].data[n].symbolSize = 60
            option.series[0].data[n].label = {
                normal: {
                    color: '#DC143C'
                }
            }
            option.series[0].itemStyle.normal.label.formatter = function(item) {
                if (item.data.alarm) {
                    return item.data.nodeName + '\n[ ' + item.data.alarm + ' ]'
                } else {
                    return item.data.nodeName
                }
            }
            dataI.push(n)
        }
    }
    myChart.setOption(option)
    setTimeout(() => {
        for (var m = 0; m < dataI.length; m++) {
            option.series[0].data[dataI[m]].symbolSize = 50
            option.series[0].data[dataI[m]].label = {
                normal: {
                    color: '#00FFFF'
                }
            }
            option.series[0].itemStyle.normal.label.formatter = function(item) {
                return item.data.nodeName
            }
        }
        myChart.setOption(option)
    }, 500)
}, 1000)