/**
* 类型:ClientSide
* 对象:图形组件
* 事件:onBeforeRender
* 实现效果:堆积图显示合计
*/
function main(page: IPage, portlet: IEChartsPortlet) {
if (!portlet.getChartOptions) return;
let options = portlet.getChartOptions()
if (!options.series || !options.series.length) return;
/** 总数 */
let totals = getStackSumData(options.series)
/**
* 设置显示总数label
* 最后一个series显示总数标签,其他的不显示标签
*/
options.series.forEach((serie: any, index: number) => {
if (index === options.series.length - 1) {
serie.label ={
show: true,
position: 'top', // 标签显示位置
formatter: function (params: any) {
return totals[params.dataIndex] // 显示总数
},
textStyle: {
color: '#000', // 标签文字颜色
}
}
} else {
serie.label.show = false
}
})
portlet.setChartOptions(options)
}
/**
* 计算总数据
*/
function getStackSumData(series: any) {
if (!series || !series.length) {
return [];
}
let result: any = []
series.forEach((serie: any, index: number) => {
serie.data.forEach((data: any, idx: number) => {
let value = Number((data.value && data.value[1]) || 0)
if (typeof result[idx] === 'undefined') {
result.push(value)
} else {
result[idx] += value;
}
result[idx] = parseFloat(result[idx].toFixed(2))
})
})
return result;
}