shopping
配置项如下
let arr = [];
let list = [];
let series = [];
let legend = [];
let fontSize=16;
let barWidth=26;
let barGap=0;
let maxList=[];
let max=460;//背景最大值取y轴刻度线(最后注释部分)
let colorStartList=["transparent",'transparent','transparent','transparent']
let colorLeftList=["#000","#000","#000","#000"]
let colorTopList= ["#1E7EFF",'#FFA75A','#6ACC29','#9833FF']
let colorEndList=["#4084EE",'#FF8D28','#6ACC29','#9833FF']
chartObj={
series:[{name:"当前资源",data:[269,460,400,170]},{name:"其他资源",data:[39,50,40,100]},{name:"资源",data:[15,200,80,60]}],
chartList:['通信','网络','能源','建筑']
}
function colorRgba(str,alpha){
let reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
var sColor = str.toLowerCase();
if(sColor=='transparent'){
return 'transparent'
}
if(sColor && reg.test(sColor)){
if(sColor.length === 4){
var sColorNew = "#";
for(let i=1; i<4; i+=1){
sColorNew += sColor.slice(i,i+1).concat(sColor.slice(i,i+1));
}
sColor = sColorNew;
}
//处理六位的颜色值
var sColorChange = [];
for(let i=1; i<7; i+=2){
sColorChange.push(parseInt("0x"+sColor.slice(i,i+2)));
}
return "rgba(" + sColorChange.join(",") +','+alpha+ ")";
}else{
return sColor;
}
}
if (chartObj.series && chartObj.series.length) {
chartObj.series.forEach((ele, i) => {
arr = arr.concat(ele.data);
});
maxList = chartObj.series[0].data.map(() => {
return max;
});
list = chartObj.series[0].data.map((item, index) => {
return 1;
});
chartObj.series.forEach((item, index) => {
legend.push({
name: item.name,
itemStyle: {
color: colorEndList[index % colorEndList.length],
},
});
//背景顶部切片
series.push({
data: maxList,
type: 'pictorialBar',
barMaxWidth: fontSize * 3,
itemStyle: {
color: colorEndList[index],
opacity: 0.1,
},
tooltip: {
show: false,
},
symbolPosition: 'end',
symbol: 'diamond',
symbolOffset: [
(-0.5 * (chartObj.series.length - 1) +
index +
-0.5 * barGap * 0.01 * (chartObj.series.length - 1) +
barGap * 0.01 * index) *
barWidth,
'-50%',
],
symbolSize: [barWidth, barWidth * 0.4],
zlevel: -1,
});
//底部切片
series.push({
data: list,
color: colorStartList[index % colorStartList.length],
type: 'pictorialBar',
tooltip: {
show: false,
},
barMaxWidth: fontSize * 3,
symbol: 'diamond',
symbolOffset: [
(-0.5 * (chartObj.series.length - 1) +
index +
-0.5 * barGap * 0.01 * (chartObj.series.length - 1) +
barGap * 0.01 * index) *
barWidth,
'50%',
],
symbolSize: [barWidth, barWidth * 0.5],
});
//实际数据顶部切片
series.push({
data: item.data,
type: 'pictorialBar',
tooltip: {
show: false,
},
barMaxWidth: fontSize * 3,
color: colorTopList[index],
symbolPosition: 'end',
symbol: 'diamond',
symbolOffset: [
(-0.5 * (chartObj.series.length - 1) +
index +
-0.5 * barGap * 0.01 * (chartObj.series.length - 1) +
barGap * 0.01 * index) *
barWidth,
'-50%',
],
symbolSize: [barWidth, barWidth * 0.4],
zlevel: 2,
});
//实际数据侧边切片
series.push({
data: item.data,
type: 'pictorialBar',
tooltip: {
show: false,
},
barMaxWidth: fontSize * 3,
color: {
x: 0,
y: 1,
x2: 0,
y2: 0,
type: 'linear',
global: false,
colorStops: [
{
offset: 0,
color: 'transparent',
},
{
offset: 0.2,
color: colorRgba(colorLeftList[index % colorLeftList.length], 0.2),
},
{
offset: 1,
color: colorRgba(colorLeftList[index % colorLeftList.length], 0.3),
},
],
},
symbolPosition: 'end',
symbol: 'rect',
symbolSize: [barWidth / 2, '100%'],
symbolOffset: [
(-0.5 * (chartObj.series.length - 1) +
index +
-0.5 * barGap * 0.01 * (chartObj.series.length - 1) +
barGap * 0.01 * index -
0.25) *
barWidth,
0,
],
zlevel: 1,
});
//柱子
series.push({
data: item.data,
type: 'bar',
name: item.name,
barGap: barGap + '%',
barWidth: barWidth,
barMaxWidth: fontSize * 3,
label: {
show: true,
position: 'top',
distance: fontSize * 0.3,
textStyle: {
color: colorEndList[index % colorEndList.length],
fontSize: fontSize,
},
// formatter: function (a, b) {
// return a.value==0?'':a.value;
// },
},
showBackground: true,
backgroundStyle: {
color: {
x: 0,
y: 1,
x2: 0,
y2: 0,
type: 'linear',
global: false,
colorStops: [
{
offset: 0,
color: colorStartList[index % colorStartList.length],
},
{
offset: 0.2,
color: colorRgba(colorEndList[index % colorEndList.length], 0.2),
},
{
offset: 1,
color: colorRgba(colorEndList[index % colorEndList.length], 1),
},
],
},
opacity: 0.1,
},
itemStyle: {
color: {
x: 0,
y: 1,
x2: 0,
y2: 0,
type: 'linear',
global: false,
colorStops: [
{
offset: 0,
color: colorStartList[index % colorStartList.length],
},
{
offset: 0.2,
color: colorRgba(colorEndList[index % colorEndList.length], 0.2),
},
{
offset: 1,
color: colorRgba(colorEndList[index % colorEndList.length], 1),
},
],
},
},
});
});
}
option = {
// backgroundColor: "#061326",
title: {
text: '',
top: 20,
left: 'center',
textStyle: {
color: '#fff',
fontSize: 20,
},
},
tooltip: {
show: true,
trigger: 'axis',
backgroundColor: 'rgba(116,176,222,0.3)',
extraCssText: 'box-shadow: 0 0 8px rgba(0, 128, 255, 0.27) inset;',
borderWidth: 0,
confine: false,
appendToBody: true,
formatter: (params) => {
////console.log(params,'---paramsshopping')
let result = "<div style='margin-bottom:5px;'>" + params[0].name + '</div>';
params.forEach((item, index) => {
var dotHtml = `<span style="display:inline-block;margin-right:5px;border-radius:50%;width:${fontSize}px;height:${fontSize}px;background:${colorEndList[index]}"></span>`;
result +=
"<div style='display:flex;align-items:center;margin-bottom:5px'>" +
dotHtml +
item.seriesName +
(item.seriesName ? "<span style='display:inline-block;margin-right:6px;'></span>" : '') +
item.data +
'</div>';
});
return result;
},
//轴触发提示才有效
axisPointer: {
type: 'shadow',
shadowStyle: {
color: 'rgba(35,49,77,0.3)',
},
},
textStyle: {
color: '#fff',
fontSize: fontSize,
},
},
grid: {
top: fontSize * 3.5,
left: 5,
right: 5,
bottom: fontSize,
containLabel: true, //包括文本,居中
},
legend: {
show: true,
data: legend,
selectedMode: false, //图例是否可以点击
type: 'scroll',
icon: 'circle',
itemWidth: fontSize,
itemHeight: fontSize,
textStyle: {
color: '#C3E3F9',
fontSize: fontSize,
},
},
xAxis: {
data: chartObj.chartList,
type: 'category',
axisLine: {
show: true,
lineStyle: {
color: '#2B72A1',
},
},
axisLabel: {
fontSize: fontSize,
color: '#87CCFF',
},
splitLine: {
show: false,
},
axisTick: {
show: false,
},
interval: 0,
},
yAxis: [
{
type: 'value',
name: '单位',
nameGap: fontSize * 1.5,
nameTextStyle: {
align: 'center',
fontSize: fontSize,
color: '#2869A9',
},
splitNumber: 4,
splitLine: {
show: true,
lineStyle: {
color: 'rgba(255,255,255,0.1)',
},
},
axisLine: {
show: false,
},
axisLabel: {
margin: 10,
fontSize: fontSize,
color: '#2869A9',
},
axisTick: {
show: true,
lineStyle: {
color: '#2869A9',
},
},
},
],
series: series,
// series: [
// //下切片
// {
// data: [1, 1, 1, 1],
// color: "#63caff",
// type: "pictorialBar",
// barMaxWidth: "20",
// symbol: "diamond",
// symbolOffset: [-barWidth/2,barWidth*0.2],
// symbolSize: [barWidth,barWidth*0.5],
// },
// //实际数据上切片
// {
// data: [120, 85, 112, 50],
// type: "pictorialBar",
// barMaxWidth: "20",
// color: "#63caff",
// symbolPosition: "end",
// symbol: "diamond",
// symbolOffset: [-barWidth/2,-barWidth*0.2],
// symbolSize: [barWidth,barWidth*0.4],
// zlevel: 2,
// },
// //背景上切片
// {
// data: [700, 700, 700, 700],
// type: "pictorialBar",
// barMaxWidth: "20",
// itemStyle: {
// color: "#63caff",
// opacity: 0.1,
// },
// symbolPosition: "end",
// symbol: "diamond",
// symbolOffset: [-barWidth/2,0],
// symbolSize: [barWidth,barWidth*0.4],
// zlevel: -5,
// },
// //柱子
// {
// data: [120, 85, 112, 50],
// type: "bar",
// name:'ni',
// barMaxWidth: "auto",
// barWidth:barWidth,
// showBackground: true,
// backgroundStyle: {
// color: "#63caff",
// opacity: 0.1,
// },
// itemStyle: {
// color: {
// x: 0,
// y: 0,
// x2: 0,
// y2: 1,
// type: "linear",
// global: false,
// colorStops: [
// {
// offset: 0,
// color: "#0b9eff",
// },
// {
// offset: 1,
// color: "#63caff",
// },
// ],
// },
// },
// label: {
// show: true,
// position: "top",
// distance: 10,
// color: "#fff",
// },
// },
// //下切片
// {
// data: [1, 1, 1, 1],
// color: "#63caff",
// type: "pictorialBar",
// barMaxWidth: "20",
// symbol: "diamond",
// symbolOffset: [barWidth/2,barWidth*0.2],
// symbolSize: [barWidth,barWidth*0.5],
// },
// //实际数据上切片
// {
// data: [200, 85, 112, 50],
// type: "pictorialBar",
// barMaxWidth: "20",
// color: "#63caff",
// symbolPosition: "end",
// symbol: "diamond",
// symbolOffset: [barWidth/2,-barWidth*0.2],
// symbolSize: [barWidth,barWidth*0.4],
// zlevel: 2,
// },
// //背景上切片
// {
// data: [700, 700, 700, 700],
// type: "pictorialBar",
// barMaxWidth: "20",
// itemStyle: {
// color: "#63caff",
// opacity: 0.1,
// },
// symbolPosition: "end",
// symbol: "diamond",
// symbolOffset: [barWidth/2, 0],
// symbolSize: [barWidth,barWidth*0.4],
// zlevel: -5,
// },
// //柱子
// {
// data: [200, 85, 112, 50],
// type: "bar",
// name:'wo',
// // barMaxWidth: "auto",
// barGap:barGap,
// showBackground: true,
// backgroundStyle: {
// color: "#63caff",
// opacity: 0.1,
// },
// barWidth:barWidth,
// itemStyle: {
// color: {
// x: 0,
// y: 0,
// x2: 0,
// y2: 1,
// type: "linear",
// global: false,
// colorStops: [
// {
// offset: 0,
// color: "#0b9eff",
// },
// {
// offset: 1,
// color: "#63caff",
// },
// ],
// },
// },
// label: {
// show: true,
// position: "top",
// distance: 10,
// color: "#fff",
// },
// },
// ],
};
//获取Y轴的刻度范围 必须在图表画完后才能获取
// var rangeY = chart.getModel().getComponent('yAxis').axis.scale._extent;
// let max = rangeY[1];
// if (chartObj.series && chartObj.series.length) {
// maxList = chartObj.series[0].data.map(() => {
// return max;
// });
// chartObj.series.forEach((item, index) => {
// //背景顶部切片
// series.push({
// data: maxList,
// type: 'pictorialBar',
// barMaxWidth: fontSize * 3,
// itemStyle: {
// color: colorEndList[index],
// opacity: 0.1,
// },
// tooltip: {
// show: false,
// },
// symbolPosition: 'end',
// symbol: 'diamond',
// symbolOffset: [
// (-0.5 * (chartObj.series.length - 1) +
// index +
// -0.5 * barGap * 0.01 * (chartObj.series.length - 1) +
// barGap * 0.01 * index) *
// barWidth,
// '-50%',
// ],
// symbolSize: [barWidth, barWidth * 0.4],
// zlevel: -1,
// });
// });
// }
// echarts.setOption({ series: series });