|
|
@@ -0,0 +1,229 @@ |
|
|
|
import * as echarts from 'echarts'; |
|
|
|
import elementResizeDetectorMaker from 'element-resize-detector'; |
|
|
|
export default { |
|
|
|
props: { |
|
|
|
id: { |
|
|
|
type: String, |
|
|
|
default: 'bar' |
|
|
|
}, |
|
|
|
data: { |
|
|
|
type: Array, |
|
|
|
default: function () { |
|
|
|
return [ |
|
|
|
{ |
|
|
|
name: '1月', |
|
|
|
value: '10' |
|
|
|
}, |
|
|
|
{ |
|
|
|
name: '2月', |
|
|
|
value: '19' |
|
|
|
} |
|
|
|
]; |
|
|
|
} |
|
|
|
}, |
|
|
|
unit: { |
|
|
|
type: String, |
|
|
|
default: '单位:万元' |
|
|
|
}, |
|
|
|
color: { |
|
|
|
type: Array, |
|
|
|
default: function () { |
|
|
|
return ['rgba(15, 252, 252, 1)', 'rgba(53, 197, 124, 1)'] |
|
|
|
} |
|
|
|
} |
|
|
|
}, |
|
|
|
data () { |
|
|
|
return { |
|
|
|
chart: null |
|
|
|
}; |
|
|
|
}, |
|
|
|
mounted () { |
|
|
|
this.initChart(); |
|
|
|
}, |
|
|
|
computed: { |
|
|
|
}, |
|
|
|
methods: { |
|
|
|
// 设置监听器 页面尺寸变化重新绘制图表 |
|
|
|
initResizeCallBack () { |
|
|
|
const erd = elementResizeDetectorMaker(); |
|
|
|
erd.listenTo(document.getElementById(this.id), () => { |
|
|
|
this.$nextTick(() => { |
|
|
|
this.chart.resize(); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}, |
|
|
|
initChart () { |
|
|
|
this.chart = echarts.init(document.getElementById(this.id)); |
|
|
|
this.chartSetOption(); |
|
|
|
}, |
|
|
|
chartSetOption () { |
|
|
|
let xAxisData = []; |
|
|
|
let data = []; |
|
|
|
this.data.forEach(item => { |
|
|
|
xAxisData.push(item.name) |
|
|
|
data.push(item.value) |
|
|
|
}); |
|
|
|
const option = { |
|
|
|
color: ["#3398DB"], |
|
|
|
tooltip: { |
|
|
|
trigger: "axis", |
|
|
|
axisPointer: { |
|
|
|
type: "line", |
|
|
|
lineStyle: { |
|
|
|
opacity: 0, |
|
|
|
}, |
|
|
|
} |
|
|
|
}, |
|
|
|
legend: { |
|
|
|
data: ["直接访问", "背景"], |
|
|
|
show: false, |
|
|
|
}, |
|
|
|
grid: { |
|
|
|
left: "0%", |
|
|
|
right: "0%", |
|
|
|
bottom: "5%", |
|
|
|
top: "15%", |
|
|
|
containLabel: true, |
|
|
|
z: 22, |
|
|
|
}, |
|
|
|
xAxis: [ |
|
|
|
{ |
|
|
|
splitArea: { |
|
|
|
show: false, |
|
|
|
areaStyle: { |
|
|
|
color: ['RGBA(13, 31, 64, 1)'] |
|
|
|
} |
|
|
|
}, |
|
|
|
splitLine: { |
|
|
|
show: false, |
|
|
|
lineStyle: { |
|
|
|
color: ['rgba(18, 40, 83, 1)'], |
|
|
|
width: 100 |
|
|
|
} |
|
|
|
}, |
|
|
|
type: "category", |
|
|
|
gridIndex: 0, |
|
|
|
data: xAxisData, |
|
|
|
axisTick: { |
|
|
|
alignWithLabel: true, |
|
|
|
}, |
|
|
|
axisLine: { |
|
|
|
lineStyle: { |
|
|
|
color: "#0c3b71", |
|
|
|
}, |
|
|
|
}, |
|
|
|
axisLabel: { |
|
|
|
show: true, |
|
|
|
color: 'rgba(185, 211, 235, 1)' |
|
|
|
}, |
|
|
|
}, |
|
|
|
], |
|
|
|
yAxis: [ |
|
|
|
{ |
|
|
|
type: "value", |
|
|
|
name: this.unit, |
|
|
|
nameTextStyle: { |
|
|
|
color: 'rgba(185, 211, 235, 1)' |
|
|
|
}, |
|
|
|
axisLabel: { |
|
|
|
formatter: "{value}", |
|
|
|
textStyle: { |
|
|
|
color: "rgba(185, 211, 235, 1)", |
|
|
|
}, |
|
|
|
}, |
|
|
|
axisLine: { |
|
|
|
lineStyle: { |
|
|
|
color: "#27b4c2", |
|
|
|
}, |
|
|
|
}, |
|
|
|
axisTick: { |
|
|
|
show: false, |
|
|
|
}, |
|
|
|
splitLine: { |
|
|
|
show: true, |
|
|
|
lineStyle: { |
|
|
|
color: "#11366e", |
|
|
|
}, |
|
|
|
}, |
|
|
|
}, |
|
|
|
{ |
|
|
|
type: "value", |
|
|
|
gridIndex: 0, |
|
|
|
max: 100, |
|
|
|
splitNumber: 12, |
|
|
|
splitLine: { |
|
|
|
show: false, |
|
|
|
}, |
|
|
|
axisLine: { |
|
|
|
show: false, |
|
|
|
}, |
|
|
|
axisTick: { |
|
|
|
show: false, |
|
|
|
}, |
|
|
|
axisLabel: { |
|
|
|
show: false, |
|
|
|
} |
|
|
|
}, |
|
|
|
], |
|
|
|
series: [ |
|
|
|
{ |
|
|
|
name: "合格率", |
|
|
|
type: "bar", |
|
|
|
barWidth: 15, |
|
|
|
xAxisIndex: 0, |
|
|
|
yAxisIndex: 0, |
|
|
|
showBackground: false, |
|
|
|
backgroundStyle: { |
|
|
|
shadowBlur: 10, |
|
|
|
color: 'rgba(18, 40, 83, 1)' |
|
|
|
}, |
|
|
|
itemStyle: { |
|
|
|
normal: { |
|
|
|
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ |
|
|
|
{ |
|
|
|
offset: 0, |
|
|
|
color: this.color[0], |
|
|
|
}, |
|
|
|
{ |
|
|
|
offset: 1, |
|
|
|
color: this.color[1], |
|
|
|
}, |
|
|
|
]), |
|
|
|
}, |
|
|
|
}, |
|
|
|
data: data, |
|
|
|
zlevel: 11, |
|
|
|
}, |
|
|
|
{ |
|
|
|
type: 'custom', |
|
|
|
itemStyle: { |
|
|
|
color: 'rgba(18, 40, 83, 0.4)' |
|
|
|
}, |
|
|
|
renderItem: function (params, api) { |
|
|
|
//获取对应类目的axisTick中心点坐标 |
|
|
|
var start = api.coord([api.value(0)]); |
|
|
|
//通过坐标系的宽度和类目数,计算单个类目的背景 |
|
|
|
var width = (params.coordSys.width / 7) * 0.6; |
|
|
|
return { |
|
|
|
type: 'rect', |
|
|
|
shape: { |
|
|
|
// 相对左上角坐标 |
|
|
|
x: start[0] - width / 2, |
|
|
|
y: params.coordSys.y, |
|
|
|
width: width, |
|
|
|
height: params.coordSys.height, |
|
|
|
}, |
|
|
|
style: api.style() |
|
|
|
}; |
|
|
|
}, |
|
|
|
data: [100, 100, 100, 100, 100, 100, 100] |
|
|
|
}, |
|
|
|
|
|
|
|
], |
|
|
|
};; |
|
|
|
this.chart.setOption(option); |
|
|
|
this.initResizeCallBack(); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
}; |