167 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Vue
		
	
	
	
		
		
			
		
	
	
			167 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Vue
		
	
	
	
| 
								 | 
							
								<!--空气质量变化趋势-->
							 | 
						||
| 
								 | 
							
								<template>
							 | 
						||
| 
								 | 
							
								  <div id="charts" ref="charts">
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  </div>
							 | 
						||
| 
								 | 
							
								</template>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<script>
							 | 
						||
| 
								 | 
							
								import * as echarts from 'echarts'
							 | 
						||
| 
								 | 
							
								import {EleResize} from '@/utils/esresize';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const lodash = require('lodash')
							 | 
						||
| 
								 | 
							
								export default {
							 | 
						||
| 
								 | 
							
								  name: 'AirRateCharts',
							 | 
						||
| 
								 | 
							
								  props: {
							 | 
						||
| 
								 | 
							
								    rateNum: {
							 | 
						||
| 
								 | 
							
								      type: Number,
							 | 
						||
| 
								 | 
							
								      default: 0
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    color: {
							 | 
						||
| 
								 | 
							
								      type: Array,
							 | 
						||
| 
								 | 
							
								      default: () => [
							 | 
						||
| 
								 | 
							
								        '#FDBD00',
							 | 
						||
| 
								 | 
							
								        '#00D5FF',
							 | 
						||
| 
								 | 
							
								        '#1978E5'
							 | 
						||
| 
								 | 
							
								      ]
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  data() {
							 | 
						||
| 
								 | 
							
								    return {}
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  watch: {
							 | 
						||
| 
								 | 
							
								    rateNum: {
							 | 
						||
| 
								 | 
							
								      deep: true,
							 | 
						||
| 
								 | 
							
								      immediate: true,
							 | 
						||
| 
								 | 
							
								      handler(value) {
							 | 
						||
| 
								 | 
							
								        if (value) {
							 | 
						||
| 
								 | 
							
								          this.$nextTick(() => {
							 | 
						||
| 
								 | 
							
								            this.init()
							 | 
						||
| 
								 | 
							
								          })
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  mounted() {
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  methods: {
							 | 
						||
| 
								 | 
							
								    init() {
							 | 
						||
| 
								 | 
							
								      let myCharts = echarts.init(this.$refs.charts)
							 | 
						||
| 
								 | 
							
								      let barCharts = this.$refs.charts
							 | 
						||
| 
								 | 
							
								      let sexdata = [{
							 | 
						||
| 
								 | 
							
								          value: this.rateNum,
							 | 
						||
| 
								 | 
							
								          symbol: 'rect',
							 | 
						||
| 
								 | 
							
								          symbolClip: true,
							 | 
						||
| 
								 | 
							
								          symbolRepeat: true,
							 | 
						||
| 
								 | 
							
								          symbolSize: [
							 | 
						||
| 
								 | 
							
								            '40%', // 50% of the width of reference bar.
							 | 
						||
| 
								 | 
							
								            "80%" // 100% of the height of reference bar.
							 | 
						||
| 
								 | 
							
								          ]
							 | 
						||
| 
								 | 
							
								        }]
							 | 
						||
| 
								 | 
							
								      let option = {
							 | 
						||
| 
								 | 
							
								        legend: {},
							 | 
						||
| 
								 | 
							
								        //在坐标系内绘制
							 | 
						||
| 
								 | 
							
								        grid: [{
							 | 
						||
| 
								 | 
							
								          left: 10,
							 | 
						||
| 
								 | 
							
								          bottom: 10,
							 | 
						||
| 
								 | 
							
								          top: 10,
							 | 
						||
| 
								 | 
							
								          right: 60
							 | 
						||
| 
								 | 
							
								        }],
							 | 
						||
| 
								 | 
							
								        //x 轴
							 | 
						||
| 
								 | 
							
								        xAxis: {
							 | 
						||
| 
								 | 
							
								          max: 100,
							 | 
						||
| 
								 | 
							
								          splitLine: {
							 | 
						||
| 
								 | 
							
								            show: false
							 | 
						||
| 
								 | 
							
								          },
							 | 
						||
| 
								 | 
							
								          axisLabel: {
							 | 
						||
| 
								 | 
							
								            show: false
							 | 
						||
| 
								 | 
							
								          },
							 | 
						||
| 
								 | 
							
								          axisTick: {
							 | 
						||
| 
								 | 
							
								            show: false
							 | 
						||
| 
								 | 
							
								          },
							 | 
						||
| 
								 | 
							
								          axisLine: {
							 | 
						||
| 
								 | 
							
								            show: false
							 | 
						||
| 
								 | 
							
								          },
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        //y 轴
							 | 
						||
| 
								 | 
							
								        yAxis: {
							 | 
						||
| 
								 | 
							
								          data: ['a'],
							 | 
						||
| 
								 | 
							
								          axisLine: {
							 | 
						||
| 
								 | 
							
								            show: false
							 | 
						||
| 
								 | 
							
								          },
							 | 
						||
| 
								 | 
							
								          axisTick: {
							 | 
						||
| 
								 | 
							
								            show: false
							 | 
						||
| 
								 | 
							
								          },
							 | 
						||
| 
								 | 
							
								          splitLine: {
							 | 
						||
| 
								 | 
							
								            show: false
							 | 
						||
| 
								 | 
							
								          },
							 | 
						||
| 
								 | 
							
								          axisLabel: {
							 | 
						||
| 
								 | 
							
								            show: false
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        //展示层
							 | 
						||
| 
								 | 
							
								        series: [
							 | 
						||
| 
								 | 
							
								          //目标数据
							 | 
						||
| 
								 | 
							
								          {
							 | 
						||
| 
								 | 
							
								            type: 'pictorialBar',
							 | 
						||
| 
								 | 
							
								            symbolBoundingData: 100,
							 | 
						||
| 
								 | 
							
								            itemStyle: {
							 | 
						||
| 
								 | 
							
								              normal: {
							 | 
						||
| 
								 | 
							
								                color: 'rgba(76,184,255,1)'
							 | 
						||
| 
								 | 
							
								              }
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            z: 20,
							 | 
						||
| 
								 | 
							
								            data: sexdata
							 | 
						||
| 
								 | 
							
								          },
							 | 
						||
| 
								 | 
							
								          //背景数据
							 | 
						||
| 
								 | 
							
								          {
							 | 
						||
| 
								 | 
							
								            type: 'pictorialBar',
							 | 
						||
| 
								 | 
							
								            symbolBoundingData: 100,
							 | 
						||
| 
								 | 
							
								            z: 15,
							 | 
						||
| 
								 | 
							
								            itemStyle: {
							 | 
						||
| 
								 | 
							
								              normal: {
							 | 
						||
| 
								 | 
							
								                color: '#1B2940'
							 | 
						||
| 
								 | 
							
								              }
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            label: {
							 | 
						||
| 
								 | 
							
								              show: true,
							 | 
						||
| 
								 | 
							
								              position: 'right',
							 | 
						||
| 
								 | 
							
								              distance: 16,
							 | 
						||
| 
								 | 
							
								              color: '#fff',
							 | 
						||
| 
								 | 
							
								              fontSize: 16,
							 | 
						||
| 
								 | 
							
								              formatter(params) {
							 | 
						||
| 
								 | 
							
								                return sexdata[0].value + " % "
							 | 
						||
| 
								 | 
							
								              }
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            data: [{
							 | 
						||
| 
								 | 
							
								              symbol: 'rect',
							 | 
						||
| 
								 | 
							
								              value: 100,
							 | 
						||
| 
								 | 
							
								              symbolClip: true,
							 | 
						||
| 
								 | 
							
								              symbolRepeat: true,
							 | 
						||
| 
								 | 
							
								              symbolSize: [
							 | 
						||
| 
								 | 
							
								                '40%', // 50% of the width of reference bar.
							 | 
						||
| 
								 | 
							
								                "80%" // 100% of the height of reference bar.
							 | 
						||
| 
								 | 
							
								              ]
							 | 
						||
| 
								 | 
							
								            }]
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        ]
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      myCharts.setOption(option)
							 | 
						||
| 
								 | 
							
								      let listener = function () {
							 | 
						||
| 
								 | 
							
								        myCharts.resize()
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      EleResize.on(barCharts, listener)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								</script>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<style scoped lang="less">
							 | 
						||
| 
								 | 
							
								#charts {
							 | 
						||
| 
								 | 
							
								  height: 100%;
							 | 
						||
| 
								 | 
							
								  width: 100%;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								</style>
							 |