|
- 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',
- data: []
- },
- {
- name: '2月',
- value: '19',
- data: []
- }
- ];
- }
- },
- unit: {
- type: String,
- default: '单位:万元'
- },
- interval: {
- type: Number,
- default: null
- },
- serverName: {
- type: String,
- default: '面积'
- },
- color: {
- type: Array,
- default: function () {
- return ['rgba(15, 252, 252, 1)', 'rgba(53, 197, 124, 1)']
- }
- },
- barBorderRadius: {
- type: Array,
- default: function () {
- return [0, 0, 0, 0]
- }
- }
- },
- data () {
- return {
- chart: null,
- rotate: 0
- };
- },
- watch: {
- data: {
- handler: function (val) {
- this.$nextTick(function () {
- setTimeout(() => {
- this.initChart();
- }, 2000)
- });
- },
- immediate: true,
- deep: true
- }
- },
- create () {
-
- },
- mounted () {
- // setTimeout(()=>{
- // this.initChart();
- // },2000)
- },
- computed: {
- },
- methods: {
- // 设置监听器 页面尺寸变化重新绘制图表
- initResizeCallBack () {
- const erd = elementResizeDetectorMaker();
- erd.listenTo(document.getElementById(this.id), () => {
- this.$nextTick(() => {
- if (document.getElementById(this.id).offsetWidth > 500){
- this.rotate = 60;
- }else{
- this.rotate = 0;
- }
- this.chart.resize();
- this.chart.setOption({
- // 新的配置项,例如:
- xAxis: {
- axisLabel: {
- rotate: this.rotate
- },
- }
- });
- });
- });
- },
- initChart () {
- this.chart = echarts.init(document.getElementById(this.id));
- this.chartSetOption();
- },
- chartSetOption () {
- let xAxisData = [];
- let data = [];
- this.data[0]?.data.forEach(child =>{
- data.push({
- name: child.dataNum1,
- barWidth: 20,
- type: 'bar',
- stack: 'Ad',
- emphasis: {
- focus: 'series'
- },
- data: []
- })
- })
- this.data.forEach(item => {
- xAxisData.push(item.deptName);
- item.data.forEach(child =>{
- data.forEach(son =>{
- if (child.dataNum1 == son.name ){
- son.data.push(child.dataNum2)
- }
- })
- })
- });
- const option = {
- color: ["#2195fe","#04e26f","#f7cc3a","#e23ff7","#f77e3f"],
- tooltip: {
- trigger: "axis",
- axisPointer: {
- type: "line",
- lineStyle: {
- opacity: 0,
- },
- }
- },
- legend: {
- top: '0%',
- right: '2%',
- textStyle: {
- color: 'rgba(210, 238, 255, 1)',
- },
- },
- grid: {
- left: "5%",
- right: "2%",
- 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,//xAxisData
- axisTick: {
- alignWithLabel: true,
- },
- axisLine: {
- lineStyle: {
- color: "#0c3b71",
- },
- },
- axisLabel: {
- show: true,
- rotate: this.rotate,
- 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: data
- };
- this.chart.setOption(option);
- this.initResizeCallBack();
- }
- }
- };
|