echart树状图图表

根据后端返回的树状结构,渲染echart树状图,并且默认二级节点后是折叠的
在这里插入图片描述

父级引入组件

    .tree_chart {
            width: 100%;
            height: calc(100% - 30px);
        }

   <div class="tree_chart">
      <EachartTree :treeData="allData.treeData" />
    </div>

树状图子组件

<template>
    <div class="echart_box">
        <div id="treeEchart"></div>
    </div>
</template>

<script>
import * as echarts from "echarts"
export default {
    props: {
        treeData: {
            type: Array,
            default: () => []
        },
    },
    data () {
        return {
            treeEchart: null,
            treeDataLsit: []
        }
    },
    watch: {
        treeData (newVal, oldVal) {
            if (newVal) {
                this.treeDataLsit = newVal
                this.treeEchart =null
                this.getBarData()
            }
        },

    },
    mounted () {
        this.$nextTick(() => {
            this.getBarData()
        })

        window.addEventListener('resize', () => {
            this.treeEchart.resize()
        });
    },

    methods: {
        getBarData () {
            let option = {
                tooltip: {
                    trigger: 'item',
                    triggerOn: 'mousemove',
                    color: '#fff',
                    backgroundColor: 'skyblue',
                    borderColor: 'skyblue',
                },
                grid: {
                    top: 0,
                    left: 0,
                    right: 0,
                    bottom: 0,
                    containLabel: true
                },
         
                animationDurationUpdate: 1500,
                animationEasingUpdate: 'quinticInOut',
                series: [
                    {
                        type: 'tree',
                        symbolSize: [140, 50],
                        symbol: 'rect',
                        edgeShape: 'polyline',
                        edgeForkPosition: '50%',
                        edgeSymbol: ['circle', 'arrow'],
                        edgeSymbolSize: [4, 10],
                        edgeLabel: {
                            normal: {
                                textStyle: {
                                    fontSize: 18,
                                },
                            },
                        },
                        initialTreeDepth: 2,
                        orient: 'vertical',

                        itemStyle: {
                            color: '#FFC125',
                            borderColor: '#FFC125',
                        },

                        expandAndCollapse: true,
                        animationDuration: 550,
                        animationDurationUpdate: 750,
                        //线条的颜色
                        lineStyle: {
                            normal: {
                                opacity: 0.9,
                                color: '#53B5EA',
                                type: 'dashed',
                                width: 1,
                            },
                        },

                        label: {
                            position: 'inside',
                            fontSize: 12,
                            color: '#fff',
                            formatter: function (params) {
                                return [
                                    `${params.data.name}`,
                                    `10 人`
                                ].join('\n');
                            },


                        },
                        top: 50, // 设置节点顶部和容器顶部的距离
                        left: 0, // 设置节点左侧和容器左侧的距离
                        bottom: 80, // 设置节点底部和容器底部的距离
                        right: 0, // 设置节点右侧和容器右侧的距离

                        // leaves: {
                        //     label: {
                        //         position: 'inside',
                        //         color: '#fff',
                        //     },
                        //     itemStyle: {
                        //         color: '#dfdfdf',
                        //         borderColor: '#dfdfdf',
                        //     },
                        // },
                        level: [  // 设置不同层级的节点间距
                            { nodeSpacing: 50 },  // 第一层节点间距为50
                            { nodeSpacing: 150 },  // 第二层节点间距为30
                            { nodeSpacing: 150 },  // 第三层节点间距为20
                        ],

                        data: this.treeDataLsit
                    },
                ],
            }

            this.treeEchart = echarts.init(document.getElementById("treeEchart"))
            this.treeEchart.setOption(option)

        },
    },
}
</script>

<style lang="scss" scoped>
.echart_box {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: 100%;
    position: relative
}

#treeEchart {
    width: 100%;
    height: 100%;
}
</style>

数据转换、重构

   /* 转换树形结构 */
        transformData (originalData, isParent = false) {

            return originalData.map((node, index) => {
                let obj = {
                    name: node.deptName,
                    itemStyle: {
                        color: isParent ? '#13bc4c' : '#4095e5',
                        borderColor: isParent ? '#13bc4c' : '#4095e5',
                    },
                }
                if (node.child) {
                    obj.children = this.transformData(node.child)
                }
                return obj;
            });
        },
 //获取到树状结构数据
    getOrganizationData(params).then((res) => {
                let arr = [res.data.data]

                this.allData.treeData = this.transformData(arr, true);
                this.allData.treeData.map((item) => {
                    if (item.children) {
                        item.children.map((item1) => {
                            item1.collapsed = true; //这是设置图表折叠的属性
                        })
                    }
                })


            })

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

conan2 基础入门(02)-安装

conan2 基础入门(02)-安装 文章目录 conan2 基础入门(02)-安装⭐前言⭐安装python安装安装包安装自行操作 ⭐验证配置环境变量命令行验证conan配置文件 END ⭐前言 Conan 2.0: C and C Open Source Package Manager 官方提供三种安装conan的方式。分别为&#xff1a; Recommen…

哈希表的理解和实现

目录 1. 哈希的概念 (是什么) 2. 实现哈希的两种方式 (哈希函数) 2.1. 直接定址法 2.2. 除留余数法 2.2.1. 哈希冲突 3. 补充知识 3.1. 负载因子 3.2. 线性探测和二次探测 4. 闭散列实现哈希表 (开放定址法) 4.1. 开放定址法的实现框架 4.2. Xq::hash_table::insert…

【数组中重复的数据】leetcode,python

和上题一样&#xff0c;【找到所有数组中消失的数字】 换个判断条件就行 class Solution:def findDuplicates(self, nums: List[int]) -> List[int]:nlen(nums)for i in nums:x(i-1)%nnums[x]n#只需要替换条件即可return [i1 for i,num in enumerate(nums) if num>(2*n)…

(1)医疗图像处理:MRI磁共振成像-基本原理--(杨正汉

一、基本原理 1.组成 对应了解 1&#xff09;主磁体&#xff1a; 基本构建&#xff0c;用于产生磁场&#xff0c;主要有两种方式产生磁场永磁&#xff08;磁铁&#xff09;、电磁&#xff08;给线圈通电&#xff09;。MR按主磁场的场强分类主要有四类&#xff0c;分类的原因…

有什么比较方便的裁剪图片软件?7个软件教你轻松裁剪图片

有什么比较方便的裁剪图片软件&#xff1f;7个软件教你轻松裁剪图片 以下是七款比较方便的裁剪图片软件&#xff0c;它们可以帮助您轻松裁剪图片&#xff1a; 图片编辑助手&#xff1a;作为图像处理领域的佼佼者&#xff0c;这款软件提供了多种裁剪工具和功能。您可以使用其…

Java入门基础学习笔记23——For循环结构

1、for循环&#xff1a; 控制一段代码反复执行很多次。 2、For循环语句的基本结构&#xff1a; for(初始化表达式&#xff1b;判断表达式&#xff1b;递增&#xff08;递减&#xff09;表达式&#xff09; {循环体语句&#xff08;重复执行的代码&#xff09; } 例&#xff1…

pytest教程-47-钩子函数-pytest_sessionfinish

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了pytest_sessionstart钩子函数的使用方法&#xff0c;本小节我们讲解一下pytest_sessionfinish钩子函数的使用方法。 pytest_sessionfinish 钩子函数在 Pytest 测试会话结束时调用&#xff0c;…

【正则表达式】2、深入了解与应用

1、关于分组与引用 假设我们现在要去查找 15 位或 18 位数字。根据前面学习的知识&#xff0c;使用量词可以表示出现次数&#xff0c;使用管道符号可以表示多个选择&#xff0c;你应该很快就能写出\d{15}|\d{18}。但经过测试&#xff0c;你会发现&#xff0c;这个正则并不能很好…

20231911 2023-2024-2 《网络攻防实践》实践九报告

1.实践内容 1.1 缓冲区 缓冲区是内存空间的一部分&#xff0c;在内存中预留了一定的存储空间&#xff0c;用来暂时保存输入和输出等I/O操作的一些数据&#xff0c;这些预留的空间就叫做缓冲区。 1.2 shellcode shellcode是一段用于利用软件漏洞而执行的代码&#xff0c;也可以…

2024年【制冷与空调设备运行操作】考试内容及制冷与空调设备运行操作考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 制冷与空调设备运行操作考试内容是安全生产模拟考试一点通生成的&#xff0c;制冷与空调设备运行操作证模拟考试题库是根据制冷与空调设备运行操作最新版教材汇编出制冷与空调设备运行操作仿真模拟考试。2024年【制冷…

SVDD(Singing Voice Deepfake Detection,歌声深度伪造检测)挑战2024

随着AI生成的歌声快速进步&#xff0c;现在能够逼真地模仿自然人类的歌声并与乐谱无缝对接&#xff0c;这引起了艺术家和音乐产业的高度关注。歌声与说话声不同&#xff0c;由于其音乐性质和强烈的背景音乐存在&#xff0c;检测伪造的歌声成为了一个特殊的领域。 SVDD挑战是首个…

Java面试八股之反射慢在哪里

Java反射慢在哪里 动态类型检查&#xff1a; 在反射过程中&#xff0c;Java需要在运行时确定类、方法、字段等的类型信息。这与编译时已经确定类型信息的常规对象访问不同&#xff0c;反射需要额外的类型查询和验证&#xff0c;增加了性能开销。 安全检查&#xff1a; 反射…

Pencils Protocol 获合作伙伴 Galxe 投资,加快了生态进展

近日&#xff0c;Scroll 生态项目 Penpad 将品牌进一步升级为 Pencils Protocol&#xff0c;全新升级后其不仅对 LaunchPad 平台进行了功能上的升级&#xff0c;同时其也进一步引入了 Staking、Vault 以及 Shop 等玩法&#xff0c;这也让 Pencils Protocol 的叙事方向不再仅限于…

表的创建与操作表

1. 创建表 创建表有两种方式 : 一种是白手起家自己添&#xff0c;一种是富二代直接继承. 2. 创建方式1 (1). 必须具备条件 CREATE TABLE权限存储空间 (2). 语法格式 CREATE TABLE IF NOT EXISTS 表名(字段1, 数据类型 [约束条件] [默认值],字段2, 数据类型 [约束条件] [默…

企业计算机服务器中了faust勒索病毒如何处理,faust勒索病毒解密恢复

随着网络技术的不断发展与应用&#xff0c;越来越多的企业利用网络走向了数字化办公模式&#xff0c;网络也极大地方便了企业生产运营&#xff0c;大大提高了企业生产效率&#xff0c;但对于众多企业来说&#xff0c;企业的数据安全一直是大家关心的主要话题&#xff0c;保护好…

【Android踩坑】重写onClick方法时,显示Method does not override method from its supperclass

问题 重写onClick方法时&#xff0c;显示Method does not override method from its supperclass 解决 在类上加implements View.OnClickListener

自然语言处理通用框架BERT原理解读

相关代码见文末 1.概述 问题背景: 传统Seq2Seq模型的局限性: 早期的机器翻译和文本生成任务常采用基于循环神经网络(RNN)的序列到序列(Seq2Seq)模型,这类模型在处理长序列时容易遇到梯度消失/爆炸问题,导致训练效率低,难以捕捉长期依赖。 RNN网络的问题: RNN及其变…

Kotlin扩展函数和运算符重载

扩展函数 fun String.lettersCount():Int{var count 0for(i in this){if(i.isLetter())count}return count } fun main(){val str:String "12we"println(str.lettersCount()) } 相当于直接将方法写在类里面。函数体内可以直接使用this而不用传参。 运算符重载 …

Apifox:API 接口自动化测试完全指南

01 前言 这是一篇关于 Apifox 的接口自动化测试教程。相信你已经对 Apifox 有所了解&#xff1a;“集 API 文档、API 调试、API Mock、API 自动化测试&#xff0c;更先进的 API 设计/开发/测试工具”。 笔者是后端开发&#xff0c;因此这篇教程关注的是 API 自动化测试&#…

程序在银河麒麟系统下实现开机自启及创建桌面快捷方式

目录 1. 机器环境说明 2. 程序开机自启动设置 2.桌面快捷方式设置 3. 附加说明 1. 机器环境说明 机器安装的银河麒麟操作系统属性如下&#xff1a; 2. 程序开机自启动设置 第1步&#xff1a;编写一个脚本,用于自动化启动&#xff0c;为便于后文描述&#xff0c;该脚本名称…