当前位置:   article > 正文

Echarts 树状图修改 以及 解决数据太多堆挤问题_echarts 树节点布局紧凑

echarts 树节点布局紧凑

Echarts树状图每层级样式

效果图

在这里插入图片描述

<template>
    <div :style="{height: chartHeight + 'px'}">
        <div ref="myChart" style="height: 300px" id="chart-tree"></div>
    </div>
</template>
<script>
    export default {
        data() {
            return {
                chartHeight: 1000,
                linkInfoTree:[] //属性数据
            }
        },
        methods:{
            getGQRightTree(){
                let myChart = echarts.init(this.$refs.myChart);
                for (let i in this.linkInfoTree) {
                    // 设置指定节点样式
                    if (this.linkInfoTree[i].id == 1) {
                        let arr = this.linkInfoTree[i].children
                        this.linkInfoTree[i].label = {
                            color: '#fff',
                            backgroundColor:'#409eff',
                            padding: [6, 12],
                            width:70,
                            overflow: 'truncate', // truncate截断,并在末尾显示ellipsis配置的文本,默认为...;break换行;breakAll换行,并强制单词内换行
                            ellipsis: '...',
                        };
                        for(let k in arr) {
                            arr[k].label = {
                                color: '#fff',
                                backgroundColor:'#409eff',
                                padding: [6, 12],
                                width:70,
                                overflow: 'truncate', // truncate截断,并在末尾显示ellipsis配置的文本,默认为...;break换行;breakAll换行,并强制单词内换行
                                ellipsis: '...',
                            };
                        }

                    }else {
                        this.linkInfoTree[i].label = {
                            backgroundColor: '#F0F5FA', 
                            borderColor: '#409eff', 
                            borderWidth: 1,
                            borderType: 'solid', 
                            borderRadius: 4, 
                            padding: [6, 12],
                            color: '#000', // 字体颜色
                            overflow: 'truncate', // truncate截断,并在末尾显示ellipsis配置的文本,默认为...;break换行;breakAll换行,并强制单词内换行
                            ellipsis: '...',
                         };
                    }
                }
                let option1={
                    tooltip: {
                        trigger: 'item',
                        triggerOn: 'mousemove'
                    },
                    series: [
                        {
                        type: 'tree',
                        data: this.linkInfoTree,
                        top: "1%",
                        left: "10%",
                        bottom: "1%",
                        right: "50%",
                        layout: 'orthogonal', // 树图的布局,正交orthogonal和径向radial两种
                        // orient: 'LR', // 树图中正交布局的方向,'LR','RL','TB','BT',只有布局是正交时才生效
                        edgeShape: 'curve', // 树图边的形状,有曲线curve和折线polyline两种,只有正交布局下生效
                        roam: false, // 是否开启鼠标缩放或平移,默认false
                        initialTreeDepth: 2, // 树图初始的展开层级(深度),根节点是0,不设置时全部展开
                        // symbol: 'arrow', // 标记的图形,默认是emptyCircle;circle,rect,roundRect,triangle,diamond,pin,arrow,none
                        // symbolRotate: 270, // 配合arrow图形使用效果较好
                        symbolSize: 0, // 大于0时是圆圈,等于0时不展示,标记的大小
                        itemStyle: { // 树图中每个节点的样式
                        color: '#1890FF', // 节点未展开时的填充色
                        borderColor: '#409eff', // 图形的描边颜色
                        borderWidth: 1, // 描边线宽,为0时无描边
                        borderType: 'dotted', // 描边类型
                        borderCap: 'square', // 指定线段末端的绘制方式butt方形结束,round圆形结束,square
                        // shadowColor: 'rgba(0,121,221,0.3)', // 阴影颜色
                        // shadowBlur: 16, // 图形阴影的模糊大小
                        // opacity: 1 // 图形透明度
                        },
                        label: { // 每个节点对应的文本标签样式
                        show: true, // 是否显示标签
                        distance: 3, // 文本距离图形元素的距离
                        position: 'left', // 标签位置
                        verticalAlign: 'middle', // 文字垂直对齐方式,默认自动,top,middle,bottom
                        align: 'center', // 文字水平对齐方式,默认自动,left,right,center
                        fontSize: 12, // 字体大小
                        color: '#000', // 字体颜色
                        // backgroundColor: '#F0F5FA', 
                        // borderColor: '#409eff', 
                        // borderWidth: 1,
                        // borderType: 'solid', 
                        // borderRadius: 4, 
                        // padding: [6, 12], 
                        // shadowColor: 'rgba(0,121,221,0.3)', // 文字块的背景阴影颜色
                        // shadowBlur: 6, // 文字块的背景阴影长度
                        width:150,
                        // 文字超出宽度是否截断或者换行;只有配置width时有效
                        overflow: 'truncate', // truncate截断,并在末尾显示ellipsis配置的文本,默认为...;break换行;breakAll换行,并强制单词内换行
                        ellipsis: '...',
                        // 第三节点之后的样式
                        formatter:(params) =>{
                            if(params.treeAncestors.length == 4 || params.treeAncestors.length == 5 || params.treeAncestors.length == 6 ){
                            return `{labelTwo|${params.name}}`
                            }
                            },
                            rich:{
                            labelTwo:{
                                padding: [6, 12], 
                                backgroundColor: '#F0F5FA',
                                borderColor: '#409eff',
                                borderWidth: 1,
                                borderType: 'solid', 
                                borderRadius: 4, 
                            },
                            }

                        },
                        lineStyle: { // 树图边的样式
                        color: '#409eff', // 树图边的颜色
                        width: 1, // 树图边的宽度
                        curveness: 0.5, // 树图边的曲度\
                        height:20,
                        padding: [6, 12]
                        // shadowColor: 'rgba(0, 0, 0, 0.5)', // 阴影颜色
                        // shadowBlur: 10 // 图形阴影的模糊大小
                        },
                        emphasis: { // 树图中图形和标签高亮的样式
                        focus: 'descendant'
                        },
                        blur: { // 淡出状态的相关配置,开启emphasis.focus后有效
                        itemStyle: {}, // 节点的样式
                        lineStyle: {}, // 树图边的样式
                        label: {} // 淡出标签的文本样式
                        },
                        leaves: { // 叶子节点的特殊配置
                        label: { // 叶子节点的文本标签样式
                            distance: 8,
                            // color: '#1890FF',
                            position: 'right',
                            verticalAlign: 'middle',
                            align: 'left',
                            // 第三节点之后带子级个数
                            formatter:(params) =>{
                            if(params.treeAncestors.length == 4 || params.treeAncestors.length == 5 || params.treeAncestors.length == 6 ){
                                let str = '-'
                                if(params.data.children.length > 0) {
                                    return `{labelName|${params.name}}{labelMark|${str}}{length|${params.data.children.length}}`
                                }else {
                                    return `{labelTwo|${params.name}}`
                                }
                            }
                            },
                            rich:{
                            labelTwo:{
                                padding: [6,8], 
                                backgroundColor: '#F0F5FA',
                                borderColor: '#409eff',
                                borderWidth: 1,
                                borderType: 'solid', 
                                borderRadius: 4,
                            },
                            labelName:{
                                padding: [6, 8], 
                                backgroundColor: '#F0F5FA',
                                borderColor: '#409eff',
                                borderWidth: 1,
                                borderType: 'solid', 
                                borderRadius: 4, 
                            },
                            labelMark:{
                                color: '#409eff'
                            },
                            length:{
                                padding: [4,4],
                                fontSize: 12,
                                backgroundColor: '#F0F5FA', 
                                borderColor: '#409eff',
                                borderWidth: 1, 
                                borderType: 'solid',
                                borderRadius: 10,
                            }
                            }
                        },
                        itemStyle: {
                        }, // 叶子节点的样式
                        emphasis: {}, // 叶子节点高亮状态的配置
                        blur: {}, // 叶子节点淡出状态的配置
                        select: {} // 叶子节点选中状态的配置
                        },
                        animation: true, // 是否开启动画
                        expandAndCollapse: true, // 子树折叠和展开的交互,默认打开
                        animationDuration: 550, // 初始动画的时长
                        animationEasing: 'linear', // 初始动画的缓动效果
                        animationDelay: 0, // 初始动画的延迟
                        animationDurationUpdate: 750, // 数据更新动画的时长
                        animationEasingUpdate: 'cubicInOut', // 数据更新动画的缓动效果
                        }
                    ]
                }
                option1 && myChart.setOption(option1);
                this.initChartTree(option1)
		  },
        // 高度自适应
        initChartTree(option1) {
            let myChart = echarts.init(this.$refs.myChart)
            // this.$nextTick(() => {
                option1 && myChart.setOption(option1)
                const eleArr = Array.from(new Set(myChart._chartsViews[0]._data._graphicEls))
                const itemHeight = 30
                const currentHeight = itemHeight * (eleArr.length - 1) || itemHeight
                const newHeight = Math.max(currentHeight, itemHeight)
                this.chartHeight = newHeight
                myChart.resize({
                    height: newHeight
                })
            // })
        },
        }
    }
</script>```

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号