const color = [
"rgba(237, 94, 89, 1)",
"rgba(255, 154, 46, 1)",
"rgba(255, 203, 46, 1)",
"rgba(159, 219, 29, 1)",
"rgba(35, 195, 67, 1)",
"rgba(16, 214, 214, 1)",
"rgba(60, 151, 255, 1)",
"rgba(0, 56, 255, 1)",
"rgba(114, 46, 209, 1)",
"rgba(228, 34, 228, 1)",
"rgba(230, 81, 134, 1)",
"rgba(196, 173, 92, 1)",
"rgba(94, 126, 188, 1)",
]
let colorMap = {}
let data1 = [
{ "deptId": 57, "name": "部门a", "value": 9225 },
{ "deptId": 58, "name": "部门b", "value": 84005.98 },
{ "deptId": 59, "name": "部门c", "value": 2669 },
{ "deptId": 60, "name": "部门d", "value": 5226 },
{ "deptId": 61, "name": "部门e", "value": 0 },
{ "deptId": 62, "name": "部门f", "value": 36360 }
]
let data2 = [
{ "businessTypeId": 45, "name": "部门a-1", "value": 9225, "deptId": 57 },
{ "businessTypeId": 41, "name": "部门b-1", "value": 2325.99, "deptId": 58 },
{ "businessTypeId": 42, "name": "部门b-2", "value": 1225.99, "deptId": 58 },
{ "businessTypeId": 44, "name": "部门b-3", "value": 21000, "deptId": 58 },
{ "businessTypeId": 59, "name": "部门b-4", "value": 52554, "deptId": 58 },
{ "businessTypeId": 43, "name": "部门b-5", "value": 6900, "deptId": 58 },
{ "businessTypeId": 49, "name": "部门c-1", "value": 2669, "deptId": 59 },
{ "businessTypeId": 46, "name": "部门e-1", "value": 5226, "deptId": 60 },
{ "businessTypeId": 48, "name": "部门f-1", "value": 36360, "deptId": 62 }
]
//计算颜色
function computedChildColor(rgba) {
// 取第三位 为透明度
let val = rgba.match(/(\d(\.\d+)?)+/g);
let cur = val[3];
cur = (cur - 0.1).toFixed(2);
let color = `rgba(${val[0]},${val[1]},${val[2]},${cur})`;
return color;
}
option = {
tooltip: {
trigger: "item",
formatter: "{a} {b}: {c}<span style='font-size: 12px;color: #8994A3;margin-right: 8px;'>万元</span> ({d}%)",
borderWidth: 0,
},
series: [
{
name: "类别",
type: "pie",
selectedMode: "single",
radius: [0, "55%"],
label: {
show: false
},
labelLine: {
show: false,
},
color: color,
data: [],
tooltip: {
padding: 12,
borderWidth: 0,
formatter: function (params) {
let arr = option.series[1].data.filter(item => item.deptId == params.data.deptId)
let str = arr.map(item => {
let p = (item.value * 100 / total).toFixed(2)
p = p.replace(/\.0*$/g, '')
return `<li>${item.name}:${item.value}<span style="font-size: 12px;color: #8994A3;margin-right: 8px;">万元</span>(${p}%)</li>`
}).join('')
return `
<div style="color: #4E5766;">
<p style="margin-bottom: 12px;">${params.name}:${params.value}<span style="font-size: 12px;color: #8994A3;margin-right: 8px;">万元</span>(${params.percent}%)</p>
<ul>
${str}
</ul>
</div>
`
}
}
},
{
name: "内容",
type: "pie",
radius: ["65%", "80%"],
labelLine: {
length: 30,
},
label: {
formatter: "{b} {c}",
color: "rgb(137, 148, 163)",
fontSize: 14,
},
color: [],
data: [],
},
],
};
let total = 0
data1.map((item, index) => {
colorMap[item.deptId] = option.series[0].color[index]
total += item.value
})
data2.map(item => {
colorMap[item.deptId] = computedChildColor(colorMap[item.deptId])
item.itemStyle = {
color: colorMap[item.deptId]
}
})
option.series[0].data = data1
option.series[1].data = data2
let idx = []
myChart.on('mouseover', function (params) {
if (params.seriesIndex == 0) {
idx = []
let deptId = params.data.deptId
option.series[1].data.map((item, index) => {
if (item.deptId == deptId) {
// 高亮当前图形
idx.push(index)
}
})
myChart.dispatchAction({
type: 'highlight',
seriesIndex: 1,
dataIndex: idx
});
}
});
myChart.on('mouseout', function (params) {
myChart.dispatchAction({
type: 'downplay',
seriesIndex: 1,
dataIndex: idx
});
});
效果如下:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。