当前位置: 首页 > news >正文

echarts关系图(Vue3)节点背景图连线设置

效果图:

需求:节点添加背景图,连线不能从圆心连接,设置线的颜色(渐变/其他颜色),请求接口接进去即可用。

<template><div><v-chartref="vChartRef":option="option"style="width: 100%; height: 900px"></v-chart></div>
</template><script setup lang="ts">
import { ref, computed, nextTick } from "vue";
import VChart from "vue-echarts";
import { use } from "echarts/core";
import { CanvasRenderer } from "echarts/renderers";
import { RadarChart, GraphChart } from "echarts/charts";
import {DatasetComponent,GridComponent,TooltipComponent,LegendComponent,
} from "echarts/components";
import cloneDeep from "lodash/cloneDeep";use([DatasetComponent,CanvasRenderer,RadarChart,GraphChart,GridComponent,TooltipComponent,LegendComponent,
]);const seriesItem = ref({type: "graph", // 类型:关系图layout: "none", // none circular环形布局,force类型为力导图data: <any>[],links: <any>[],categories: <any>[],label: {// 标签show: 1,position: "right",formatter: "{b}",},labelLayout: {hideOverlap: true,},lineStyle: {color: "source", // 线条颜色curveness: 0.2, // 线条卷曲程度},roam: true, // 是否开启鼠标缩放和平移漫游。默认不开启。如果只想要开启缩放或者平移,可以设置成 'scale' 或者 'move'。设置成 true 为都开启edgeSymbolSize: [1, 1], //设置端点大小和线差不多edgeSymbol: ["circle", "circle"], // 边两端的标记大小,可以是一个数组分别指定两端,也可以是单个统一指定。(因节点背景是透明,不设置端点的时候是从节点中心开始连接,设置的时候是从边开始)// force: {//   //力引导图基本配置//   friction: 0.6,//   layoutAnimation: true,//   gravity: 0.05, //节点受到的向中心的引力因子。该值越大节点越往中心点靠拢。//   edgeLength: 360, //边的两个节点之间的距离//   repulsion: 4000, //节点之间的斥力因子。支持数组表达斥力范围,值越大斥力越大。// },
});const getSeries = () => {let series: any = [];const values = dataJson.value;if (values.nodes === undefined ||values.links === undefined ||values.categories === undefined) {return;}//渲染节点背景图const processedNodes = values.nodes.map((node: any) => {return {...node,symbol: `image://${node.symbol}`,};});//系列模板let item: any = cloneDeep(seriesItem.value);item.data = processedNodes; // 使用处理后的节点数据item.links = values.links;item.categories = values.categories;series = item;return series;
};const vChartRef = ref<typeof VChart>();const option = ref({tooltip: {},legend: {show: true,top: 20,textStyle: {color: "#000",fontSize: 14,},data: dataJson.value.categories.map((a) => {return a.name;}),},series: getSeries(),
});
</script>

json数据

const dataJson = ref({nodes: [{draggable: true,symbolSize: [200, 200],symbol: require("@/assets/images/graph/1.png"),name: "智能网联与新能源汽车",x: 0,y: 10,fixed: true,label: {show: false,},category: "一级",},{draggable: true,symbolSize: [150, 150],symbol: require("@/assets/images/graph/2.png"),name: "上游",x: -50,y: -10,label: {show: false,},category: "二级",},{draggable: true,symbolSize: [150, 150],symbol: require("@/assets/images/graph/2.png"),name: "中游",x: 40,y: -30,label: {show: false,},category: "二级",},{draggable: true,symbolSize: [150, 150],symbol: require("@/assets/images/graph/2.png"),name: "下游",x: 50,y: 20,label: {show: false,},category: "二级",},{draggable: true,symbolSize: [100, 100],symbol: require("@/assets/images/graph/4.png"),name: "通讯系统",x: -80,y: -50,category: "三级",},{draggable: true,symbolSize: [100, 100],symbol: require("@/assets/images/graph/4.png"),name: "感知系统",x: -90,y: 20,category: "三级",},{draggable: true,symbolSize: [100, 100],symbol: require("@/assets/images/graph/4.png"),name: "汽车零部件",x: -55,y: -60,category: "三级",},{draggable: true,symbolSize: [100, 100],symbol: require("@/assets/images/graph/4.png"),name: "执行系统",x: 85,y: -65,category: "三级",},{draggable: true,symbolSize: [100, 100],symbol: require("@/assets/images/graph/4.png"),name: "整车制造",x: 80,y: -10,category: "三级",},{draggable: true,symbolSize: [100, 100],symbol: require("@/assets/images/graph/4.png"),name: "运营维护",x: 100,y: 15,category: "三级",},{draggable: true,symbolSize: [100, 100],symbol: require("@/assets/images/graph/4.png"),name: "汽车金融",x: 90,y: 50,category: "三级",},],links: [{source: "智能网联与新能源汽车",target: "上游",lineStyle: {width: 2,color: {type: "linear",x: 0,y: 0,x2: 1,y2: 1,colorStops: [{//线渐变颜色offset: 0,color: "#0f3362", // 0% 处的颜色},{offset: 1,color: "red", // 100% 处的颜色},],global: false, // 缺省为 false},curveness: 0.2, //折线曲度},},{source: "智能网联与新能源汽车",target: "中游",},{source: "智能网联与新能源汽车",target: "下游",},{source: "上游",target: "感知系统",},{source: "上游",target: "通讯系统",},{source: "上游",target: "汽车零部件",},{source: "中游",target: "执行系统",},{source: "中游",target: "整车制造",},{source: "下游",target: "运营维护",},{source: "下游",target: "汽车金融",},],categories: [{name: "一级",},{name: "二级",},{name: "三级",},],
});

http://www.dtcms.com/a/343211.html

相关文章:

  • 2025.7.19卡码刷题-回溯算法-组合
  • IOS购买订阅通知信息解析说明Java
  • 设计模式3-模板方法模式
  • 爬虫基础学习-项目实践:每次请求,跟换不同的user-agent
  • 茶饮业内卷破局,从人力管理入手
  • iOS 手势与控件事件冲突解决清单
  • 一本通1342:【例4-1】最短路径问题
  • 【Docker基础】Docker-Compose核心配置文件深度解析:从YAML语法到高级配置
  • 一个状态机如何启动/停止另一个状态机
  • C++ 常见的排序算法详解
  • CPP学习之priority_queue的使用及模拟实现
  • 3维模型导入到3Dmax中的修改色彩简单用法----第二讲
  • Kotlin 中适用集合数据的高阶函数(forEach、map、filter、groudBy、fold、sortedBy)
  • AI客服系统架构与实现:大模型、知识库与多轮对话的最佳实践
  • 蛋白质分析常用数据库2
  • QT开发---QT布局与QSS样式设置
  • 网络打印机自动化部署脚本
  • 工业机器人远程监控与运维物联网解决方案
  • 精准评估新纪元:AI得贤招聘官AI面试智能体6.3,重新定义AI面试
  • 赛灵思ZYNQ官方文档UG585自学翻译笔记与代码示例:Quad-SPl Flash 闪存控制器
  • 深度剖析字节跳动VeOmni框架
  • MySQL索引优化之索引条件字段类型不同
  • POI读和写
  • C2ComponentStore
  • CMOS知识点 MOS管线性区电流公式
  • Linux 网络命令大全
  • 在VSCode中配置.NET项目的tasks.json以实现清理、构建、热重载和发布等操作
  • vue2 watch 用法
  • K8s安全管理与持久化存储实战指南
  • Seaborn数据可视化实战:Seaborn入门-环境搭建与基础操作