Newer
Older
smartKitchenFront / src / components / echart / lineChart / gradientLineChart.vue
<template>
  <Echart
    ref="chart"
    :options="option"
    height="100%"
    width="100%"
  />
</template>
<script>
/**
   * @author 王晓颖
   * @date 2020/08/19
   * @Description 渐变折线图
   * @props 数据格式:{
   *    id: 'traffic_govern_line_id',
      legend:['近一周日均车位占用率','近一周日均车位停车次数'], // 可不传
      xAxisData:['周一','周二','周三','周四','周五','周六','周日'],
      axisData: [
        {name:'近一周日均车位占用率',data:[120, 252, 101, 134, 290, 230, 110],color:'58,55,194'},
        {name:'近一周日均车位停车次数',data:[120, 222, 191, 234, 250, 200, 310],color:'109,202,23'},
      ]
    }
   *
   */
import Echart from './../index'
import { countSize } from '@/utils/index'
export default {
  name: 'GradientLineChart',
  components: { Echart },
  props: {
    unit: { // 单位
      type: String,
      default: ''
    },
    colors: { // 颜色
      type: Array,
      default: () => { return ['#01b4ff', '#0337ff'] }
    },
    axisLineColor: { // 轴线颜色
      type: String,
      default: '#101d5d'
    },
    fontColor: { // 轴线上文字颜色
      type: String,
      default: '#000fff'
    },
    labelColor: { // 图形上文本标签颜色
      type: String,
      default: '#47c8b2'
    },
    smooth: {
      type: Boolean,
      default: true
    }, // 平滑
    seriesData: { // 数据
      type: Array,
      default: () => { return [] }
    },
    xAxisData: { // X轴数据
      type: Array,
      default: () => { return [] }
    }
  },
  data() {
    return {
      curWidth: this.width,
      curHeight: this.height,
      option: {
        grid: {
          left: 10,
          right: 5,
          bottom: 30,
          top: 10,
          containLabel: true,
        },
        legend: {
          orient: "horizontal",
          // data:[],
          type:'scroll',
          left:'center',
          top:'bottom',
          itemWidth: 12,
          itemHeight: 12,
          icon: "rect",
          textStyle: {
            width: "300",
            color: "#000",
            fontSize: 12,
          },
        },
        tooltip: {
          trigger: 'axis',
          textStyle: {
            fontSize: '16'
          },
          axisPointer: {
            type: 'line',
            label: {
              fontSize: '16'
            }
          }
        },
        xAxis: [
          {
            type: 'category',
            boundaryGap: true,
            data: [],
            axisLine: {
              show:true,
              lineStyle: {
                color: '#000' // 轴线的颜色
              }
            },
            axisLabel: {
              color: '#000', // X轴名称颜色
              fontSize: 14
            },
            axisTick:{
              show:true
            }
          }
        ],
        yAxis: [
          {
            name: this.unit,
            type: 'value',
            color: '#000',
            nameTextStyle: {
              color: '#000',
              fontSize: 14,
              verticalAlign: 'middle'
            },
            splitLine: {
              show: true,
              lineStyle: {
                color: ['#D7D9E0'],
                type: 'solid'
              }
            },
            // max: function(value) {
            //   return value.max
            // },
            minIntermal: 1,
            axisLine: {
              show:false,
              lineStyle: {
                color: '#000'
              }
            },
            axisLabel: {
              color: '#000',
              fontSize: 12
            }
          }
        ],
        series: []
      }
    }
  },
  watch: {
    xAxisData(newVal) {
      this.option.xAxis[0].data = newVal
      // this.refreshEchart()
    },
    legend(newVal) {
      this.option.legend.data = newVal
      // this.refreshEchart()
    },
    unit(newVal) {
      this.option.yAxis[0].name = newVal
      // this.refreshEchart()
    },
    seriesData: {
      handler(newVal) {
        const newSeries = []
        for (const item of newVal) {
          const series = {
            name: item.name,
            type: 'line',
            symbol: 'none', // 去掉折线节点
            smooth: this.smooth, // 曲线变平滑
            // itemStyle: {
            //   color: `rgb(${item.color})`
            // },
            lineStyle: {
              width: 1
            },
            areaStyle:{
              opacity:0.3
            },
            // areaStyle: {
            //   color: new this.$echarts.graphic.LinearGradient(
            //     0, 0, 0, 1, // 变化度 //三种由深及浅的颜色
            //     [
            //       {
            //         offset: 0.1,
            //         // color: `rgba(${item.color},.6)`
            //       },
            //       {
            //         offset: 1,
            //         // color: 'rgba(0,0,0,.0)'
            //       }
            //     ]
            //   )
            // },
            data: item.data
          }
          newSeries.push(series)
        }
        this.$set(this.option, 'series', newSeries)
        // this.refreshChart()
      },
      deep: true
    }
  },
  // mounted() {
  //   this.refreshChart()
  // },
  // methods: {
  //   refreshChart() {
  //     this.unit && (this.option.yAxis[0].name = this.unit)
  //     if (this.xAxisData.length) {
  //       this.option.legend.data = this.legend
  //       this.option.xAxis[0].data = this.xAxisData
  //       const newSeries = []
  //       for (const item of this.seriesData) {
  //         const series = {
  //           name: item.name,
  //           type: 'line',
  //           symbol: 'none', // 去掉折线节点
  //           smooth: this.smooth, // 曲线变平滑
  //           itemStyle: {
  //             color: `rgb(${item.color})`
  //           },
  //           lineStyle: {
  //             width: 1
  //           },
  //           areaStyle: {
  //             color: new this.$echarts.graphic.LinearGradient(
  //               0, 0, 0, 1, // 变化度 //三种由深及浅的颜色
  //               [
  //                 {
  //                   offset: 0.1,
  //                   color: `rgba(${item.color},.6)`
  //                 },
  //                 {
  //                   offset: 1,
  //                   color: 'rgba(0,0,0,.0)'
  //                 }
  //               ]
  //             )
  //           },
  //           data: item.data
  //         }
  //         newSeries.push(series)
  //       }
  //       this.$set(this.option, 'series', newSeries)
  //     }
  //   }
  // }
}
</script>

<style scoped>
</style>