vue2 eCharts实现自定义节点图标 graph关系图

先展示最后效果图

在查阅eCharts官网的配置项手册会发现提供了自定义节点图标的方法:

代码如下,可直接复制:

(注释已标记)

 <div class="container"><div class="title"><span class="circle"></span><span>网络健康状态拓扑图</span></div><div class="chart" ref="chart"></div></div>
import * as echarts from "echarts";
import platform from "@/assets/img/vedio/platform.png"
import platform1 from "@/assets/img/vedio/platform1.png"
import device from "@/assets/img/vedio/device.png"
export default {data() {return {chart: null,chartData: [],symbolWidth:160,  //节点图片的宽度symbolHeight:97,  //节点图片的高度linksData:[],   //节点之间的连接关系};},methods: {initChart() {let chartsData = {nodes: [],};for (var j = 0; j < this.chartData.length; j++) {const { x, y, nodeName, iconPath,name } = this.chartData[j];var node = {nodeName,value: [x, y],symbolSize: [this.symbolWidth,this.symbolHeight],symbol: "image://" + iconPath,   //自定义节点的图标itemStyle: {color: "orange",},name:name};chartsData.nodes.push(node);}this.chart = echarts.init(this.$refs.chart);this.chart.setOption({grid:{left:0,right:0,top:0,bottom:0},xAxis: {min: 0,max: this.$refs.chart.clientWidth,show: false,type: "value",},yAxis: {min: 0,max: this.$refs.chart.clientHeight,show: false,type: "value",},series: [{type: "graph",  //指定图表类型为关系图coordinateSystem: "cartesian2d",label: {show: true,position: "bottom",color: "#5D5D5D",formatter: function(item) {return item.data.nodeName;},},data: chartsData.nodes,  //图表数据links: this.linksData   //各个节点指向关系},],});},setData1(arr,obj,level){level++if(!obj['level' + level]){obj['level' + level] = []}obj['level' + level] = obj['level' + level].concat(arr)arr.map((item)=>{if(item.children && item.children.length != 0){this.setData1(item.children,obj,level)}if(item.parentId){let isPush = truethis.linksData.map((item1)=>{if(item1.source === item.id && item1.target === item.parentId){isPush = false}})if(isPush){this.linksData.push({source: item.id,   //当前节点target: item.parentId,  //连接的目标节点lineStyle: {  //连接线的样式width: 4,color: item.isOnLine?"#04D036":"#FF3C3C",}})}}})return obj},setData(obj,arr1,width,height){ //根据类型不同显示不同的节点图片let keys = Object.keys(obj)keys.map((parent,level)=>{obj[parent].map((item,index)=>{let iconPath;if(item.type === 1){iconPath = platform}else if(item.type === 2){iconPath = platform1}else if(item.type === 3){iconPath = device}let width1 = (width / obj[parent].length)width1 = (width1 / 2) + index * width1let height1 = (height / keys.length)height1 = (height1 - this.symbolHeight) * (level + 1)height1 = height - height1if(level === 0){height1 = height - this.symbolHeight}if(level === keys.length - 1){height1 = 50 + this.symbolHeight}arr1.push({iconPath:iconPath,// iconPath:'',nodeName:item.name,x:width1,y:height1,name:item.id})})})return arr1},},mounted() {let data = [{name:"平台",type:1,id:"n1",children:[{id:"n11",parentId:"n1",isOnLine:true,name:"平台1",type:2,children:[{id:"n111",parentId:"n11",isOnLine:true,name:"设备1",type:3,children:[]},{id:"n112",parentId:"n11",isOnLine:true,name:"平台11",type:2,children:[]},]},{id:"n12",parentId:"n1",isOnLine:true,name:"平台2",type:2,children:[{id:"n121",parentId:"n12",isOnLine:true,name:"设备2",type:3,children:[]},{id:"n122",parentId:"n12",isOnLine:true,name:"平台22",type:2,children:[]},]},{id:"n13",parentId:"n1",isOnLine:false,name:"平台3",type:2,children:[{id:"n131",parentId:"n13",isOnLine:false,name:"设备3",type:3,children:[]},{id:"n132",parentId:"n13",isOnLine:false,name:"平台33",type:2,children:[]},]},{id:"n14",parentId:"n1",isOnLine:false,name:"平台4",type:2,children:[{id:"n141",parentId:"n14",isOnLine:true,name:"设备4",type:3,children:[]},{id:"n142",parentId:"n14",isOnLine:true,name:"平台44",type:2,children:[]},]},]},]let chartObj = this.$refs.chartdata = this.setData1(data,{},-1)let data1 = this.setData(data,[],chartObj.clientWidth,chartObj.clientHeight,-1)this.chartData = data1this.initChart();},
};
.container {width: 100%;height: 100%;background: #ffffff;border-radius: 0.06rem;padding: 0.24rem;position: relative;background-image: url(~@/assets/img/vedio/background.png);background-size: cover;.title{position: absolute;top: 20px;left: 20px;display: flex;align-items: center;.circle{width: 8px;height: 8px;background: #1D39C4;border: 1px solid #B4C0DA;margin-right: 5px;}}.chart {width: 100%;height: 100%;border-radius: 0.06rem;border: 0.01rem solid #ffffff;}
}

如有问题欢迎留言!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/455402.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nginx+flask+Gunicorn反代理服务拿不到真实IP的解决

背景 本人在宝塔linux环境&#xff0c;要部署flask的简单后端并且用Ngnix反代理&#xff0c;用Gunicorn框架部署。&#xff08;o(╥﹏╥)o中间磕磕绊绊总算部署上去了&#xff0c;需要了解Gunicorn怎么部署的朋友&#xff0c;评论区留言&#xff0c;我加补一篇介绍&#xff09;…

Web课程学习笔记--CSS选择器的分类

CSS 选择器的分类 基本规则 通过 CSS 可以向文档中的一组元素类型应用某些规则 利用 CSS&#xff0c;可以创建易于修改和编辑的规则&#xff0c;且能很容易地将其应用到定义的所有文本元素 规则结构 每个规则都有两个基本部分&#xff1a;选择器和声明块&#xff1b;声明块由一…

YUM | 起源 | 发展 | 运行逻辑

介绍 YUM&#xff08;Yellowdog Updater, Modified&#xff09;起源于 Red Hat Linux 发行版 up2date 工具。 最初&#xff0c;up2date 是由 Red Hat 公司提供的用于管理系统更新的工具。然而&#xff0c;社区逐渐对 up2date 出现一些不满&#xff0c;主要是由于其使用体验和…

5.0 ZooKeeper 数据模型 znode 结构详解

数据模型 在 zookeeper 中&#xff0c;可以说 zookeeper 中的所有存储的数据是由 znode 组成的&#xff0c;节点也称为 znode&#xff0c;并以 key/value 形式存储数据。 整体结构类似于 linux 文件系统的模式以树形结构存储。其中根路径以 / 开头。 进入 zookeeper 安装的 …

实践:微服务版本升级步骤以及maven仓库相关概念

进行微服务开发的时候&#xff0c;上层服务依赖于下层的服务的api&#xff0c;比如适配属于上层服务&#xff0c;用户属于下层服务。 例子: 上层服务 <!--订单管理微服务api依赖--> <dependency><groupId>com.jn.server</groupId><artifactId>…

【翻译】Processing安卓模式的安装使用及打包发布(内含中文版截图)

原文链接在下面的每一章的最前面。 原文有三篇&#xff0c;译者不知道贴哪篇了&#xff0c;这篇干脆标了原创。。 译者声明&#xff1a;本文原文来自于GNU协议支持下的项目&#xff0c;具备开源二改授权&#xff0c;可翻译后公开。 文章目录 Install&#xff08;安装&#xff0…

使用PDFBox实现pdf转其他图片格式

最近在做一个小项目&#xff0c;项目中有一个功能要把pdf格式的图片转换为其它格式&#xff0c;接下来看看用pdfbox来如何实现吧。 首先导入pdfbox相关依赖&#xff1a; <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</a…

假期刷题打卡--Day24

1、MT1198阶乘差 求1!-2!-3!-…-n! 格式 输入格式&#xff1a; 输入为整型 输出格式&#xff1a; 输出为整型 样例 1 输入&#xff1a; 5输出&#xff1a; -151 分析过程 看到这个题目的时候&#xff0c;感觉这个题目出现的没有必要&#xff0c;就和前面阶乘和一样的…

7.0 Zookeeper 客户端基础命令使用

zookeeper 命令用于在 zookeeper 服务上执行操作。 首先执行命令&#xff0c;打开新的 session 会话&#xff0c;进入终端。 $ sh zkCli.sh 下面开始讲解基本常用命令使用&#xff0c;其中 acl 权限内容在后面章节详细阐述。 ls 命令 ls 命令用于查看某个路径下目录列表。…

前端JavaScript篇之如何判断一个对象是否属于某个类?

目录 如何判断一个对象是否属于某个类&#xff1f; 如何判断一个对象是否属于某个类&#xff1f; 要判断一个对象是否属于某个类&#xff0c;我们可以使用以下几种方法&#xff1a; 使用instanceof运算符&#xff1a; instanceof运算符用于检查一个对象是否是某个类的实例。它…

[设计模式Java实现附plantuml源码~结构型]实现对象的复用——享元模式

前言&#xff1a; 为什么之前写过Golang 版的设计模式&#xff0c;还在重新写Java 版&#xff1f; 答&#xff1a;因为对于我而言&#xff0c;当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言&#xff0c;更适合用于学习设计模式。 为什么类图要附上uml 因为很…

我在项目中使用Redis的几个场景

目录 缓存 会话存储 分布式锁 消息队列 位统计 计数器 排行榜 缓存 缓存的目的是为了提高系统响应速度、减少数据库等资源的压力&#xff0c;redis作为键值对形式的内存数 据库&#xff0c;可以提供非常快速的读取速度&#xff0c;使得它成为存储热点数据或频繁访问数…