|
- 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();
-
- }
- }
- };
|