<template>
  <div class="chart" :id="id"></div>
</template>

<script>
import util from "@/helper/util.js";
import partten from "@/helper/partten.js";
import * as echarts from "echarts";

export default {
  name: "multiple-bar-chart",
  componentName: "multiple-bar-chart",
  props: {
    width: {
      type: String,
      default: "100%",
    },
    height: {
      type: String,
      default: "800px",
    },
    // 传入数据
    bardata: {
      type: Object,
      default: () => {
        return {
          area: [
            "风场1",
            "风场2",
            "风场3",
            "风场4",
            "风场5",
            "风场6",
            "风场7",
            "风场8",
            "风场9",
          ],
          legend: [
            "实际电量",
            "计划检修损失",
            "非计划检修损失",
            "限电损失",
            "受累损失",
            "性能损失",
          ],
          data: [
            [1320, 1302, 901, 634, 1390, 1330, 1320, 1000, 500],
            [320, 302, 301, 334, 390, 330, 320, 100, 50],
            [320, 302, 301, 334, 390, 330, 320, 100, 50],
            [1320, 1302, 901, 634, 1390, 1330, 1320, 1000, 500],
            [320, 302, 301, 334, 390, 330, 320, 100, 50],
            [320, 302, 301, 334, 390, 330, 320, 100, 50],
            [1320, 1302, 901, 634, 1390, 1330, 1320, 1000, 500],
            [320, 302, 301, 334, 390, 330, 320, 100, 50],
          ],
        };
      },
    },
    lineData: {
      type: Array,
      default: () => [200, 350, 400, 500, 600, 700, 800, 900, 1200],
    },
    lineName: {
      type: String,
      default: "损失电量",
    },
    // 单位
    units: {
      type: Array,
      default: () => ["(万KWh)", "(风速)"],
    },
    // 显示 legend
    showLegend: {
      type: Boolean,
      default: true,
    },
    // 颜色
    color: {
      type: Array,
      default: () => ["#323E6F", "#e17e23", "#ba3237", "#c531c7", "#ffffff", "#EDEB2F"],
    },
    // 每页显示个数
    pageSize: {
      type: Number,
      default: 20,
    },
  },
  data() {
    return {
      id: "",
      chart: null,
      areaData: [],
    };
  },
  computed: {
    legend() {
      return this.bardata.legend;
    },
    end() {
      var result = 20;
      if (this.areaData) {
        result = parseInt((this.pageSize / this.areaData.length) * 100);
      }
      return result;
    },
  },
  methods: {
    initChart() {
      let chart = echarts.init(this.$el);
      let option = {
        color: this.color,
        grid: {
          left: 40,
          right: 16,
          bottom: 16,
          top: 16,
          containLabel: true,
        },
        legend: {
          show: this.showLegend,
          data: this.bardata.legend,
          right: 56,
          icon: "ract",
          itemWidth: 8,
          itemHeight: 8,
          inactiveColor: this.$store.state.themeName === "dark"
              ? partten.getColor("gray")
              : "#000",
          textStyle: {
            color: this.$store.state.themeName === "dark"
              ? partten.getColor("grayl")
              : "#000",
            fontSize: 12,
          },
        },
        tooltip: {
          trigger: "axis",
          backgroundColor: this.$store.state.themeName === "dark"
              ? "rgba(0,0,0,0.4)"
              : "rgba(255,255,255,0.5)",
          borderColor: this.$store.state.themeName === "dark"
              ? partten.getColor("gray")
              : "#000",
          textStyle: {
            color: this.$store.state.themeName === "dark" ? "#fff" : "#000",
            fontSize: util.vh(16),
          },
        },
        dataZoom: [
          {
            type: "inside",
            start: 0,
            end: this.end,
            yAxisIndex: [0],
          },
          {
            start: 0,
            end: this.end,
            bottom: 40,
            yAxisIndex: [0],
            backgroundColor: "transparent",
            // handleIcon: "path://M306.1,413c0,2.2-1.8,4-4,4h-59.8c-2.2,0-4-1.8-4-4V200.8c0-2.2,1.8-4,4-4h59.8c2.2,0,4,1.8,4,4V413z",
            handleStyle: {
              color: this.$store.state.themeName === "dark"
              ? partten.getColor("green")
              : partten.getColor("blue"),
            },
            moveHandleSize: 0,
            // dataBackground: {
            //   lineStyle: {
            //     color: partten.getColor("gray"),
            //   },
            //   areaStyle: {
            //     color: partten.getColor("gray"),
            //   },
            // },
            // selectedDataBackground: {
            //   lineStyle: {
            //     color: partten.getColor("yellow"),
            //   },
            //   areaStyle: {
            //     color: partten.getColor("yellow"),
            //   },
            // },
            fillerColor: "transparent",
            textStyle: {
              color: this.$store.state.themeName === "dark"
              ? partten.getColor("grayl")
              : "#000",
            },
            borderColor: this.$store.state.themeName === "dark"
              ? partten.getColor("gray")
              : "#000",
            brushSelect: false,
          },
        ],
        yAxis: [
          {
            type: "category",
            axisLabel: {
              color: this.$store.state.themeName === "dark"
              ? partten.getColor("gray")
              : "#000",
            },
            inverse: true,
            // minInterval: 10,
            // maxInterval: 10,
            axisLine: {
              show: false,
            },
            axisTick: {
              show: false,
            },
            data: this.areaData,
          },
        ],
        xAxis: [
          {
            type: "value",
            axisLabel: {
              color: this.$store.state.themeName === "dark"
              ? partten.getColor("gray")
              : "#000",
            },
            axisLine: {
              type: "dashed",
              lineStyle: {
                color: this.$store.state.themeName === "dark"
              ? partten.getColor("gray")
              : "#000",
              },
              width: 5,
            },
            axisTick: {
              show: false,
            },
            splitLine: {
              lineStyle: {
                type: "dashed",
                dashOffset: 10,
                color: this.$store.state.themeName === "dark" ? "#5a6162" : "#000" + 80,
              },
            },
          },
          {
            type: "value",
            name: "",
            axisLabel: {
              show: false,
              // formatter: "{value}",
              // color: partten.getColor("gray"),
            },
            axisLine: {
              show: false,
            },
            axisTick: {
              show: false,
            },
            splitLine: {
              show: false,
            },
          },
        ],
        series: [],
      };

      if (this.bardata && this.bardata.legend)
        // bar data
        for (var i = 0; i < this.bardata.legend.length; i++) {
          option.series.push({
            name: this.bardata.legend[i],
            type: "bar",
            stack: "总量",
            barWidth: 16,
            label: {
              show: false,
              position: "insideRight",
            },
            data: this.bardata.data[i],
          });
        }

      // line data
      if (this.lineData.length > 0) {
        option.series.push({
          name: this.lineName,
          type: "line",
          data: this.lineData,
          smooth: false, //平滑展示
          xAxisIndex: 1,
          lineStyle: {
            color: this.$store.state.themeName === "dark"
              ? partten.getColor("green")
              : partten.getColor("blue"),
          },
          itemStyle: {
            color: this.$store.state.themeName === "dark"
              ? partten.getColor("green")
              : partten.getColor("blue"),
          },
        });
      }
      chart.setOption(option);
    },
  },
  created() {
    this.id = "pie-chart-" + util.newGUID();
    if (this.bardata.area && this.bardata.area.length < this.pageSize) {
      this.areaData = this.bardata.area;
      for (let i = this.bardata.area.length; i <= this.pageSize; i++) {
        this.areaData.push("");
      }
    }
  },
  mounted() {
    this.$nextTick(() => {
      this.$el.style.width = this.width;
      this.$el.style.height = this.height;
      this.initChart();
    });
  },
  updated() {
    this.$nextTick(() => {
      this.initChart();
    });
  },
  beforeUpdate(){
	  this.areaData = this.bardata.area;
  },
  beforeUpdate(){
  	  this.areaData = this.bardata.area;
  },
  watch: {
    bardata(val) {
      if (val.area && val.area.length < this.pageSize) {
        this.areaData = val.area;
        for (let i = val.area.length; i <= this.pageSize; i++) {
          this.areaData.push("");
        }
      }
    },
	"$store.state.themeName"() {
	  this.initChart();
	},
  },
};
</script>

<style lang="less">
.chart {
  width: 100%;
  height: 100%;
  display: inline-block;
}
</style>
