var pic = 'data:image/png;base64,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' var room = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAAAPFBMVEUAAABKlfNMl/NKl/NKlvNKlvNKlfNAj/9LlfJLlvRJlvJJlvNIl/dKlvJKlfNKlfRKlvJKlvRKlPJLlvNNahX2AAAAE3RSTlMAgEB/wNCQEPBwUD8g4LAwoF9PlDlXUQAAAJFJREFUOMvt0csKAjEMheHTsXd7mTHv/65aXdQWQoMiuvBfhg8CCb5ePTFd3OA2YtMDVH0+ZogYSMY+b9tY+MD7kVg4l6MQkpdC+sN3oZdBBTgrgAqtsoYVd7GGSQoDWvsa+gggiM6Ttf/9F34Knm+FCR7EVjBkOacTpmookwHfpvQSdmxNh4tcbDijJcAJr3UFPi4x3UUk2hAAAAAASUVORK5CYII=' var data = [{ name: '干部宿舍楼', total: 120, use: 60, empty: 60, }, { name: '公寓住房', total: 110, use: 40, empty: 70, }] // 计算总数 var total = 0; var seriesOption = [] data.map((item, index) => { total+=item.total seriesOption.push({ name: '柱背景', type: 'bar', xAxisIndex: index, yAxisIndex: index, data: [{ }, { name: item.name, value: item.total, rate: (item.use / item.total).toFixed(2) * 100 + '%', }], barWidth: 16, itemStyle: { normal: { barBorderRadius: 8, color: '#DFEEFF' } }, label: { show: true, position: 'insideRight', formatter: params => { return `{pb|使用率:${params.data.rate}}` }, rich: { pb: { color: '#4B96F3', padding: [0, 0, -30, 0] } } } }) seriesOption.push({ value: item.use, max: item.total, name: item.name, zlevel: 2, type: 'bar', yAxisIndex: index, xAxisIndex: index, data: [{ }, { value: item.use, use:item.use, empty:item.empty, total:item.total }], label:{ show:true, color:'transparent', position:'insideLeft', formatter:params=>{ console.log(params) return `{pb|}\n{imgIcon|} {normalText|房间:${params.data.total}间} \n\n{circleYellow|●} {normalText|使用:${params.data.use}间} \n\n{circleGreen|●} {normalText|空闲:${params.data.empty}间}` }, rich:{ circleYellow:{ color:'#FFA83E', width:16, height:16, fontSize:20, lineHeight:20, padding:[0,0,0,4] }, pb:{ padding:[0,0,200,0] }, circleGreen:{ color:'#36C78B', fontSize:20, width:16, height:16, lineHeight:20, padding:[0,0,0,4] }, imgIcon:{ backgroundColor:{ image:room, }, width:20, height:20, }, normalText:{ fontSize:15, height:20, textVeticalAlign:'middle', color:'#666666' } } }, rate: item.total === 0 ? 0 : (item.use / item.total).toFixed() * 100 + '%', barGap: '-100%', barWidth: 16, itemStyle: { normal: { barBorderRadius: 8, color: '#4B96F3' } } }) }) option = { graphic: { elements: [{ type: 'image', left: 'center', top: 25, style: { image: pic, width: 136, height: 136, textAlign: 'center' } }, { type: 'text', left: 'center', top: 180, style: { text: '房间总数', fill: '#333333', fontSize:16, } }, { type: 'rect', left: 'center', top: 200, textVeticalAlign:'middle', shape:{ width:80, height:36, }, style: { color:'#FFFFFF', fontSize:20, fontWeight:'bold', text:total, fill: '#4B96F3', } }] }, grid: [{ left: '5%', top: '5%', width: '30%', bottom: '5%', containLabel: true, }, { left: '35%', top: '5%', width: '30%', bottom: '5%', containLabel: true, }, { left: '65%', top: '5%', width: '30%', bottom: '5%', containLabel: true, }], yAxis: [{ type: 'category', data: ['', '干部宿舍楼'], gridIndex: 0, axisLabel: { inside: true, padding: [0, 0, 48, 0], color: '#333333', fontWeight: 'bold' }, axisTick: { show: false, }, axisLine: { show: false, } }, { type: 'category', data: ['', '公寓住房'], gridIndex: 2, axisLabel: { inside: true, padding: [0, 0, 48, 0], color: '#333333', fontWeight: 'bold' }, axisTick: { show: false, }, axisLine: { show: false, } }], xAxis: [{ type: 'value', gridIndex: 0, max: data[0].total, show: false, }, { type: 'value', gridIndex: 2, max: data[1].total, show: false, }], series: [...seriesOption] }