import * as echarts from 'echarts';
import elementResizeDetectorMaker from 'element-resize-detector';
export default {
  props: {
    id: {
      type: String,
      default: 'pie'
    },
    titleNum: {
      type: String,
      default: "1000 万元"
    },
    title: {
      type: String,
      default: "总债务"
    },
    showTit: {
      type: Boolean,
      default: true
    },
    data: {
      type: Array,
      default: function () {
        return [
          {
            value: 2154,
            unit: '万元',
            name: "项目一",
          },
          {
            value: 3854,
            unit: '万元',
            name: "项目二",
          },
          {
            value: 3854,
            unit: '万吨',
            name: "项目三",
          },
          {
            value: 3854,
            unit: '万吨',
            name: "项目四",
          }
        ];
      }
    }
  },
  data () {
    return {
      chart: null
    };
  },
  watch: {
    data: {
      handler: function (val) {
        this.$nextTick(function () {
          setTimeout(() => {
            this.initChart();
          }, 2000)
        });
      },
      immediate: true,
      deep: true
    }
  },
  mounted () {
  },
  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 () {
      var scale = 1;
      var echartData = [
        ...this.data
      ];
      var that = this;
      var rich = {
        yellow: {
          color: "rgba(185, 211, 235, 1)",
          fontSize: 18 * scale,
          padding: [5, 4],
          align: "center",
        },
        total: {
          color: "#ffc72b",
          fontSize: 40 * scale,
          align: "center",
        },
        white: {
          color: "rgba(185, 211, 235, 1)",
          align: "center",
          fontSize: 18 * scale,
          padding: [0, 0],
        },
        blue: {
          color: "rgba(185, 211, 235, 1)",
          fontSize: 16 * scale,
          align: "center",
        },
        hr: {
          // borderColor: "#0b5263",
          width: "100%",
          borderWidth: 1,
          height: 0,
        },
      };
      const option = {
        tooltip: {
          trigger: "item"
        },
        title: [
          {
            text: this.title,
            show: this.showTit,
            left: "center",
            top: "40%",
            padding: [0, 0],
            textStyle: {
              color: "#fff",
              fontSize: 18 * scale,
              align: "center",
            },
          },
          {
            text: this.titleNum,
            show: this.showTit,
            left: "center",
            top: "50%",
            padding: [0, 0],
            textStyle: {
              color: "#fff",
              fontSize: 18 * scale,
              align: "center",
            },
          }
        ],
        series: [
          {
            name: "",
            type: "pie",
            radius: ["48%", "70%"],

            color: ["rgba(15, 252, 252, 1)", "rgba(134, 91, 252, 1)", "rgba(49, 129, 246, 1)", "rgba(29, 197, 104, 1)", "#ffc72b"],
            label: {
              normal: {
                formatter: function (params, ticket, callback) {
                  var total = 0; //考生总数量
                  var percent = 0; //考生占比
                  echartData.forEach(function (value, index, array) {
                    total += value;
                  });
                  percent = ((params.value / total) * 100).toFixed(1);
                  return (
                    "{white|" + params.percent
                    + "%" + "}\n" +
                    "{blue|" + params.name + "}\n" +
                    (that.showTit ? "{hr|}\n{yellow|" + params.value + params.data.unit + '}' : '')
                  );
                },
                rich: rich,
              },
            },
            labelLine: {
              normal: {
                length: 10 * scale,
                length2: 20 * scale,
              },
            },
            data: echartData,
          },
        ],
      };
      this.chart.setOption(option);
      this.initResizeCallBack();

    }
  }
};
