Echarts 树形股权图
点击上图人员切换至下方股权关系图,点击的为公司则继续在该图展示被点击公司的公司股份结构图,点击股权关系图切换至上图公司股份结构图
公司股份结构图:https://gallery.echartsjs.com/editor.html?c=xkiiaUN8q (他人编写)
股权关系图:https://gallery.echartsjs.com/editor.html?c=xvLVfMXW2m (他人编写)
他人写的股权穿透图
该图有一处无法满足我个人需求,点击子公司进行相应的操作。但是该方法不支持点击点击事件,因为点击区域由下图红色框树形设置的大小决定,当Size为1的时候则能够被点击的区域极小。
以下修正后的代码可支持点击事件:https://gallery.echartsjs.com/editor.html?c=xpXuQej3au&v=2
只写了部分我认为比较重要的注释,以下为代码
var data2 = [{ name: "马云", children: [{ //子集 name: "北京国风信通科技有限公司", value: '控股', percent: '60%', money: '120万元' }, { name: "北京阿里巴巴信息技术有限公司", value: '', percent: '1.43%', money: '800万元' }, { name: "高德软件有限公司", value: '控股', percent: '67%', money: '16242.4242万元' }, { name: "杭州大井头贰拾贰号文化艺术有限公司", value: '控股', percent: '99%', money: '990万元' } ] }]; var option = { tooltip: { trigger: 'item', formatter: '{b}' }, series: [{ type: 'tree', name: '股权穿透图', edgeShape: 'polyline', //链接线是折现还是曲线 orient: 'TB',//树形图的显示方向TB:从上往下显示 data: data2, width: 1000,//树形图宽 height: 200,//树形图高 top: '30%',//树型图整体偏移 left: '10%',//树型图整体偏移 symbolSize: [150, 40],//设置自己选择区域的宽高 symbol: 'rect',//子级选择区域的形状默认circle(圆形),rect矩形 roam: true,//鼠标移到区块时会显示一个灰色背景的title,移动不同区域时是否开启滑动动画 initialTreeDepth: 10,//树图初始展开的层级(深度),默认展开几层子节点 itemStyle: {//symbol的样式 color: '#fff', borderColor: '#fff', offset: [-150, 50] }, label: { normal: {//蓝色框的配置 position: [-70, 30],//蓝色框的定位 verticalAlign: 'middle', align: 'left',//框框的对其方向可以配合position定位到自己想要的位置 backgroundColor: '#0084ff', color: '#fff', padding: [15, 132],//内填充 borderWidth: 2,//边框宽度 borderColor: '#0070d9', fontWeight: 'bold', formatter: [ '{box|{b}}' ].join('\n'), rich: { box: { height: 30, color: '#fff', padding: [0, 5], align: 'center', fontWeight: 'bold', fontSize: 16, } } }, }, leaves: { label: { normal: {//子级框的配置 position: [-20, 30],//子级框的定位 verticalAlign: 'middle', align: 'left', backgroundColor: '#fff', padding: [15, 40], fontSize: 12, fontWeight: 'normal', width: 100, borderColor: '#ccc', borderWidth: 1, formatter: function (param) { console.log(param); let money = '认缴金额:' + param.data.money; let percent = param.data.percent; let name = param.name.substring(0, 11) + '\n' + param.name.substring(11); let konggu = param.value; if (konggu.length === 0) { return [ `{percent|${percent}}`, `{name|${name}}`, `{money|${money}}` ].join('\n'); } else { return [ `{konggu|${konggu}}`, `{percent|${percent}}`, `{name|${name}}`, `{money|${money}}` ].join('\n'); } }, rich: { konggu: { color: '#0f8bff', padding: [-50, 10], height: 18, distance: 10, align: 'left', verticalAlign: 'top', fontSize: 12, borderWidth: 1, fontWeight: 'normal', }, percent: { height: 18, color: '#0f8bff', padding: [-50, 10], align: 'right', verticalAlign: 'top', fontSize: 12, borderColor: 'red', borderWidth: 0, fontWeight: 'normal' }, name: { height: 18, color: '#000', padding: [0, 5], align: 'center', fontSize: 12, }, money: { height: 18, color: 'DarkGray', padding: [0, 5], align: 'center', fontSize: 12, borderWidth: 2, fontWeight: 'normal' } } } } }, lineStyle: { color: '#909090', }, expandAndCollapse: false,//是否开启点击父节点,展开及收缩子节点 animationDuration: 550, animationDurationUpdate: 750 },] }; myChart1.setOption(option); myChart1.on('click', function (params) { alert(111); })