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.rhkb.cn/news/255846.html

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

相关文章

vue核心技术(二)

◆ 指令补充 指令修饰符 通过 "." 指明一些指令 后缀&#xff0c;不同 后缀 封装了不同的处理操作 → 简化代码 v-bind 对于样式控制的增强 为了方便开发者进行样式控制&#xff0c; Vue 扩展了 v-bind 的语法&#xff0c;可以针对 class 类名 和 style 行内样式…

Java 将TXT文本文件转换为PDF文件

与TXT文本文件&#xff0c;PDF文件更加专业也更适合传输&#xff0c;常用于正式报告、简历、合同等场合。项目中如果有使用Java将TXT文本文件转为PDF文件的需求&#xff0c;可以查看本文中介绍的免费实现方法。 免费Java PDF库 本文介绍的方法需要用到Free Spire.PDF for Java…

5G技术对物联网的影响

随着数字化转型的加速&#xff0c;5G技术作为通信领域的一次重大革新&#xff0c;正在对物联网&#xff08;IoT&#xff09;产生深远的影响。对于刚入行的朋友们来说&#xff0c;理解5G技术及其对物联网应用的意义&#xff0c;是把握行业发展趋势的关键。 让我们简单了解什么是…

C++ Qt框架开发| 基于Qt框架开发实时成绩显示排序系统(1)

目标&#xff1a;旨在开发一个用户友好的软件工具&#xff0c;用于协助用户基于输入对象的成绩数据进行排序。该工具的特色在于&#xff0c;新输入的数据将以红色高亮显示&#xff0c;从而直观地展现出排序过程中数据变化的每一个步骤。 结果展示&#xff1a; 本程序是一个基于…

blender怎么保存窗口布局,怎么设置默认输出文件夹

进行窗口布局大家都会&#xff0c;按照自己喜好来就行了&#xff0c;设置输出文件夹如图 这些其实都简单。关键问题在于&#xff0c;自己调好了窗口布局&#xff0c;或者设置好了输出文件夹之后&#xff0c;怎么能让blender下次启动的时候呈现出自己设置好的窗口布局&#xff…

React18原理: 再聊Fiber架构下的时间分片

时间分片 react的任务可以被打断&#xff0c;其实就是基于时间分片的人眼最高能识别的帧数不超过30帧&#xff0c;电影的帧数差不多是在24浏览器的帧率一般来说是60帧&#xff0c;也就是每秒60个画面, 平均一个画面大概是16.5毫秒左右浏览器正常的工作流程是运算渲染&#xff…

发廊理发店微信小程序展示下单前端静态模板源码

模板描述&#xff1a;剪发小程序前端源码&#xff0c;一共五个页面&#xff0c;包括店铺、理发师、订单、我的等页面 注&#xff1a;该源码是前端静态模板源码&#xff0c;没有后台和API接口

第二节 zookeeper基础应用与实战

目录 1. Zookeeper命令操作 1.1 Zookeeper 数据模型 1.2 Zookeeper服务端常用命令 1.3 Zookeeper客户端常用命令 1.3.1 基本CRUD 1.3.2 创建临时&顺序节点 2. Zookeeper JavaAPI操作 2.1 Curator介绍 2.2 引入Curator 2.3 建立连接 2.4 添加节点 2.5 修改节点 …

[2024]常用的pip指令

[2024]常用的pip指令 HI&#xff0c;这里是肆十二&#xff0c;好久不见&#xff0c;大家&#xff01; 新年好&#xff01; pip是Python的包管理工具&#xff0c;它可以用来安装、升级、卸载Python包。以下是一些常用的pip指令&#xff1a; 安装包&#xff1a; bash复制代码…

mac电脑安装cocoapods出错,以及安装最新版本ruby方法

macbook安装cocoapods时碰到一个报错&#xff1a;大概率是ruby的版本太低导致的 sudo gem install cocoapods ERROR: Error installing cocoapods: ERROR: Failed to build gem native extension. ... Could not create Makefile due to some reason, probably lack of neces…

【深度学习每日小知识】全景分割

全景分割 全景分割是一项计算机视觉任务&#xff0c;涉及将图像或视频分割成不同的对象及其各自的部分&#xff0c;并用相应的类别标记每个像素。与传统的语义分割相比&#xff0c;它是一种更全面的图像分割方法&#xff0c;传统的语义分割仅将图像划分为类别&#xff0c;而不…

openstack(T版)公有云--Dashboard服务

公有云上OpenStack Train最小化安装_openstack最小化部署-CSDN博客 我的opensatck(T)是参考上面链接去部署完成的&#xff0c;在部署完Dashboard服务后&#xff0c;将要用浏览器访问的时候出现了404 500 Internal Server Error 等各种各样的问题&#xff0c;以下是我排查问题…

编程实例分享,宠物诊所电子处方怎么开,兽医电子处方模板电子版操作教程

编程实例分享&#xff0c;宠物诊所电子处方怎么开&#xff0c;兽医电子处方模板电子版操作教程 一、前言 以下操作教程以 佳易王兽医电子处方软件V16.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、在系统 设置里可以设置打印参数&#x…

英语语法-八大时态

目录 一般现在时 一般过去时 一般将来时 现在进行时 过去进行时 现在完成时 过去完成时 过去将来时 一般现在时 I do my homework at 7.我平时都在7点写作业。 dont和didnt都表示否定&#xff0c;如何区分用法呢&#xff0c;dont表示一般现在时&#xff0c;表示平时也…

从零开始学howtoheap:fastbins的house_of_spirit攻击3

how2heap是由shellphish团队制作的堆利用教程&#xff0c;介绍了多种堆利用技术&#xff0c;后续系列实验我们就通过这个教程来学习。环境可参见从零开始配置pwn环境&#xff1a;从零开始配置pwn环境&#xff1a;从零开始配置pwn环境&#xff1a;优化pwn虚拟机配置支持libc等指…

Linux操作系统下安装消息中间件RabbitMQ_00000

下载 在官网下载Linux版RabbitMQ安装文件。 erlang-21.3-1.el7.x86_64.rpm rabbitmq-server-3.8.8-1.el7.noarch.rpm 安装 1、将文件上传至Linux系统中。 上传到/usr/local/software目录下&#xff08;如果没有software目录&#xff0c;则创建。&#xff09;。 2、安装文件&…

Linux下的socket操作

一、TCP服务端 创建一个TCP服务器的基本操作&#xff1a; 创建一个套接字&#xff08;socket&#xff09;&#xff1a;使用socket函数绑定套接字&#xff08;socket&#xff09;:将套接字绑定到一个特定的IP地址和端口号上&#xff0c;这些信息要用结构体sockaddr_in来保存监…

小游戏和GUI编程(3) | 基于 SFML 的字符阵

小游戏和GUI编程(3) | 基于 SFML 的字符阵 1. 简介 使用 EasyX 图形库时&#xff0c; 官方第一个例子是字符阵。 EasyX 不开源&#xff0c; 也不能跨平台&#xff0c; API 陈旧&#xff0c; API 是 C 而不是 C。 现在使用 SFML 来实现字符阵&#xff0c; 克服 EasyX 的这些问…

MySQL温故篇(一)SQL语句基础

一、SQL语句基础 数据库&#xff08;SQL&#xff09;思维导图_数据库设计思维导图-CSDN博客 1、SQL语言分类 DDL&#xff1a;数据定义语言 DCL&#xff1a;数据控制语言 DML&#xff1a;数据操作语言 DQL&#xff1a;数据的查询语言 2、数据类型 3、字符类型 char(11) &…

蓝桥杯Web应用开发-CSS3 新特性

CSS3 新特性 专栏持续更新中 在前面我们已经学习了元素选择器、id 选择器和类选择器&#xff0c;我们可以通过标签名、id 名、类名给指定元素设置样式。 现在我们继续选择器之旅&#xff0c;学习 CSS3 中新增的三类选择器&#xff0c;分别是&#xff1a; • 属性选择器 • 子…