Echarts实现流程图关系图拓扑图

news2024/11/14 23:50:15

实现如下,可以横着排竖着排都可以

 

 1.先写个div做画布

ref值随意,但是一点要写

  <div style="height: 400px;" ref="echartdom"></div>

2.下载echarts

我这边下载的是 "echarts": "^4.9.0",最新版应该也可以实现这个

npm install echarts

3.主要代码如下

1.id为唯一值,也是links下的source和target线头指向目标,如果name就是1,2,3的话可以删掉id值,这样就有点名也可以连线了

2.name就是点的名字

3.type用来判断用哪张图片

4.data=[[],[],[]],这个是层级,第一个[]就是第一层

5.link顾名思义,用来连线的

6.图片引入方面我写了三种引入方式,根据自己项目来,image://固定别删

import echarts from 'echarts';
export default {
    data() {
        return {
        };
    },
    mounted() {
        this.echarsquery();
    },
    methods: {
        echarsquery() {
            const echart = echarts.init(this.$refs.echartdom);
            let data = [
                [{ id: '分析指标',name:"点位1", type: '0' }],
                [{ id: '1', name:"点位1",type: '0' }],
                [
                    { id: '2', name:"点位2", type: '0' },
                    { id: '3', name:"点位3", type: '0' },
                    { id: '4', name:"点位4", type: '0' },
                    { id: '5', name:"点位5", type: '0' }
                ],
                [
                    { id: '6', name:"点位6", type: '0' },

                    { id: '7', name:"点位7", type: '0' },
                    { id: '8', name:"点位8", type: '0' },
                    { id: '9', name:"点位9", type: '1' }
                ],
                [{ name: '10', type: '0' }]
            ];
            let l = 5;
            let series = [];
            data.forEach((item, i) => {
                const s = item.length; // segment 段数
                const base = Math.round((l * 100) / (s + 1));//值越小画布越宽,线越长
                item.forEach((item1, j) => {
                    item1.x = base * (j + 1);//水平还是垂直排列只需要把xy的顺序切换就行
                    item1.y = 100 + 150 * i;
                    if (i == 0) {
                        item1.symbolSize = 160;
                    }
                    series.push(item1);
                });
            });
            console.log(series, '段数');
            let option = {
                backgroundColor: '#000',//画布背景颜色
                grid: {
                    top:20,
                    containLabel: true
                },
                series: [
                    {
                        type: 'graph',
                        layout: 'none',
                        symbolSize: 40,
                        symbol: (v, params) => {
                            // 根据type判断图片
                            if (params.data.type == 1) {
                                return `image://${require('@/assets/img/img.jpg')}`; 
                            }
                            if (params.dataIndex) {
                                return "image://https://ts1.cn.mm.bing.net/th/id/R-C.8d3bd79b3c79c29c28b77d95dc949a20?rik=CItp4J1WJ6zj%2fA&riu=http%3a%2f%2fb157.photo.store.qq.com%2fpsb%3f%2f0cfe0398-1051-44f5-ba2e-d27742b52ab5%2fRKDHie6uwkitUT7FIf2QzqPjG9Bper2nreXpvaMZwiU!%2fb%2fdA2To12oGQAA%26bo%3dWAKQAe0!%26su%3d0267982465%26rf%3d2-9&ehk=tuB%2bS5A0mAkWrAMiP6tavVwtLw2s0bCNvNmxGcwVqUM%3d&risl=&pid=ImgRaw&r=0";
                            } else {
                                return `image://${this.first}`;//base64编码png图片,太长了就不展示了
                            }
                        },
                        roam: false,
                        lineStyle: {
                            color: '#ffeb00',
                            type: 'dashed', //虚线
                            dashOffset: 5
                        },
                        label: {
                            normal: {
                                show: true,
                                position: 'top', //'inside',
                                textStyle: {
                                    fontSize: 10,
                                    color: '#d3ecf3'
                                    // padding:[-20, 0, 20, 0]
                                }
                            }
                        },
                        focusNodeAdjacency: true,
                        edgeSymbol: ['', 'arrow'],
                        edgeSymbol: ['circle', 'arrow'],
                        edgeSymbolSize: [2, 10], //箭头的大小
                        data: series,
                        links: [
                            {
                                source: '1', //点位
                                target: '分析指标' //箭头指向目标
                            },
                            {
                                source: '1', //点位
                                target: '2' //目标
                            },
                            {
                                source: '1', //点位
                                target: '3' //目标
                            },
                            {
                                source: '1', //点位
                                target: '4' //目标
                            },
                            {
                                source: '1', //点位
                                target: '5' //目标
                            },
                            {
                                source: '2', //点位
                                target: '6' //目标
                            },
                            {
                                source: '3', //点位
                                target: '7' //目标
                            },
                            {
                                source: '4', //点位
                                target: '8' //目标
                            },
                            {
                                source: '5', //点位
                                target: '9' //目标
                            },
                            {
                                source: '6', //点位
                                target: '10' //目标
                            },
                            {
                                source: '7', //点位
                                target: '10' //目标
                            },
                            {
                                source: '8', //点位
                                target: '10' //目标
                            },
                            {
                                source: '9', //点位
                                target: '10' //目标
                            },
                        ]
                    }
                ]
            };
            echart.setOption(option);
        }
}}

文章到此结束,希望对你有所帮助~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

奢侈品回收APP系统开发功能有哪些?

奢侈品售卖回收APP系统开发功能有哪些&#xff1f; 1.回收品牌分类&#xff1a;奢侈品回收APP平台可以将支持回收鉴定的奢侈品品牌及商品进行分类展示&#xff0c;方便用户查看自己的想要出售的是不是平台支持的商品。 2.商品在线检索&#xff1a;客户可以直接按…

STM32F4_红外遥控

目录 1. 红外遥控简介 2. NEC协议 3. 硬件设计 4. 实验程序详解 4.1 main.c 4.2 Remote.c 4.3 Remote.h 1. 红外遥控简介 红外遥控是一种无线、非接触的控制技术。具有抗干扰能力强&#xff0c;信息传输可靠&#xff0c;功耗低&#xff0c;成本低&#xff0c;易实现等优…

深入理解Redis的AOF和RDB持久化机制

Redis的AOF&#xff08;Append-Only File&#xff09;和RDB&#xff08;Redis Database&#xff09;是两种常见的持久化机制&#xff0c;用于将内存中的数据保存到磁盘上&#xff0c;确保数据在Redis重新启动时的持久性。本文将深入介绍AOF和RDB的原理和使用&#xff0c;帮助读…

HQChart实战教程65-自定义手机端分时图tooltip显示数据

HQChart实战教程65-自定义手机端分时图tooltip显示数据 手机端分时图tooltip步骤1. 配置手机端tooltip2. 替换k线tooltip格式化输出函数2. 格式化输出函数说明HQChart插件源码地址完整的demo源码手机端分时图tooltip hqchart手机端内置一个tooltip,显示手势所在K线的信息。默认…

邮件打开率低?来看看这几招提高邮件打开率!

什么是邮件打开率&#xff1f; 邮件打开率&#xff1a;简单来讲就是收件人打开的邮件数占发送邮件总数的百分比。 我们要做的就是如何吸引收件人打开邮件&#xff0c;那可以从以下几个方面来考虑&#xff1a; 1、邮件标题 邮件标题直接向收件人表达了这封邮件是关于什么的&am…

CSS样式优先级怎样划分?【CSS优先级规则】

定义CSS样式时&#xff0c;经常出现两个或更多样式规则应用在同一元素上的情况。此时CSS就会根据样式规则的权重&#xff0c;优先显示权重最高的样式。CSS优先级指的就是CSS样式规则的权重。在网页制作中&#xff0c;CSS为每个基础选择器都指定了不同的权重&#xff0c;方便我们…

【内存问题真的很烦人】linux内存等资源管理 以及 linux内存不足解决办法

linux内存不足解决办法 ///这一部分存在疑问 查看目录下文件夹大小 du -h --max-depth1 看具体哪个文件夹占用内存过高&#xff0c;一般是日志&#xff0c;删除即可。 ///这一部分存在疑问&#xff0c;上面的文件夹可以代表内存吗&#xff1f; 内存不够 top 命令 看内存占用…

Python就业前景如何?三大就业岗位分享

Python是一门面向对象的编程语言&#xff0c;编译速度超快&#xff0c;从诞生到现在已经20来个年头了。Python的排名从去年开始就借助人工智能持续上升&#xff0c;Python的火热&#xff0c;也带动了工程师们的就业热。 据统计&#xff0c;现在初级Python工程师的起薪一般在10…

【 Lucas-Kanade光流法】

这里写目录标题 1.1 Lucas-Kanade光流法1.1 Lucas-Kanade光流法详细步骤&#xff1a; 1.1 Lucas-Kanade光流法 Lucas-Kanade光流法是一种密集光流估计方法&#xff0c;用于计算图像中每个像素的运动向量。它假设在相邻帧之间&#xff0c;像素的灰度值不会发生大的变化&#xf…

《网络安全0-100》双钥加密体制

双钥加密体制 怎么说 没找着公钥加密在哪&#xff0c;所以就接着写了。 公钥加密&#xff0c;也叫非对称(密钥)加密&#xff0c;属于通信科技下的网络安全二级学科&#xff0c;指的是由对应的一对唯一性密钥(即公开密钥和私有密钥)组成的加密方法。它解决了密钥的发布和管理…

【ArcGIS】使用ArcGIS进行坡度分析

使用ArcGIS进行坡度分析 1 数据来源2 操作步骤参考 坡度是指过地表面任意一点的切平面与水平地面之间的夹角。坡度用来计算任–单元和邻域单元间变化的最大比率&#xff0c;如单元下降最陡的坡面(单元和它相邻单元间的高程距离的最大变化率)。 坡度分析是计算两相邻像元间的数值…

STM32的时钟系统(嵌入式学习)

STM32的时钟系统 时钟的基本概念时钟系统的组成时钟源晶体振荡器和RC振荡器的区别晶体振荡器RC振荡器 STM32G030时钟源时钟树STM32CubeMX时钟树配置 时钟的基本概念 时钟是指用于计量和同步时间的装置或系统。时钟是嵌入式系统的脉搏&#xff0c;处理器内核在时钟驱动下完成指…

Goby 漏洞发布|PandoraFMS 软件 upload_head_image.php 任意文件上传漏洞

漏洞名称&#xff1a;PandoraFMS 软件 upload_head_image.php 任意文件上传漏洞 English Name&#xff1a;PandoraFMS upload_head_image.php Arbitrary File Upload Vulnerability CVSS core: 9.0 影响资产数&#xff1a;768 漏洞描述&#xff1a; PandoraFMS是美国Pando…

【Python】文件操作 ④ ( 文件操作 | 向文件写出数据 | 使用 write 函数向文件中写出数据 | 使用 flush 函数刷新文件数据 )

文章目录 一、向文件写出数据1、使用 write 函数向文件中写出数据2、使用 flush 函数刷新文件数据3、代码示例 - 使用 write / flush 函数向文件中写出数据 一、向文件写出数据 1、使用 write 函数向文件中写出数据 Python 中 通过 调用 write 函数 向文件中写入数据 ; 语法如下…

Fiddler抓包工具之fiddler的常用快捷键

一、常用三个快捷键 ctrlX :清空所有记录 CtrlF&#xff1a;查找 F12&#xff1a;启动或者停止抓包 使用 QuickExec Fiddler2 成了网页调试必备的工具&#xff0c;抓包看数据。Fiddler2自带命令行控制。 fiddler 命令行快捷键&#xff1a;ctrl q &#xff0c;然后 输入 help…

记一次杀猪盘网站渗透

1、首先访问杀猪盘主站。 2、通过扫描子域名找到后台管理系统。 3、对其后台的登录接口进行测试&#xff0c;发现接口的用户名参数存在sql注入&#xff0c;直接跑数据。 4、注入得到后台的账密如下,用户名和safecode是明文的&#xff0c;password使用自定义加密。 跑出来了账号…

PaaS2.0、Matter、AIGC、新能源…TUYA开发者大会亮点抢先看

6月29日&#xff0c;TUYA开发者大会&#xff08;深圳&#xff09;即将开幕。作为业内备受关注的盛会&#xff0c;大会的各种“路透”消息络绎不绝。那么TUYA开发者大会将呈现哪些精彩&#xff0c;我们带大家一探究竟。 亮点1&#xff1a;IoT行业风向标 积蓄2年的硬核分享 TUYA…

【Ribbon实现客户端负载均衡和故障转移】—— 每天一点小知识

&#x1f4a7; R i b b o n 实现客户端负载均衡和故障转移 \color{#FF1493}{Ribbon实现客户端负载均衡和故障转移} Ribbon实现客户端负载均衡和故障转移&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云的博客…

掌握会议任务追踪技巧,提高会议效率!

跟踪会议任务是有效项目管理的重要组成部分。会议可以产生许多需要完成的行动项目和任务&#xff0c;如果没有适当的跟踪&#xff0c;这些任务很容易被遗漏。在本文中&#xff0c;我们将概述如何有效地跟踪会议任务。 1、在会议中分配任务 在会议期间&#xff0c;将任务分配给特…

眼球交互vs眼疲劳,前Vision Pro设计师揭秘这些细节

Vision Pro的发布带来了众多讨论&#xff0c;从交互层面来看&#xff0c;它真正的将AR/VR的首选交互从手柄转移到手势眼球上面来&#xff0c;此前的AR、VR大部分还是通过手柄来完成交互&#xff08;HoloLens除外&#xff09;&#xff0c;手势交互是它们的第二选择。 交互方式主…