<!--
    filename: left-chart-base
    author: liubin
    date: 2024-04-10 08:59:28
    description:
-->

<template>
  <chart-container class="left-chart-base">
    <div class="legend">
      <span style="color: rgba(223,241,254,.8);" v-for="item in legend" :key="item.label" class="legend-item"
        :style="{ fontSize: isFullscreen ? '0.72vw' : '0.7vw' }">{{ item.label }}</span>
    </div>
    <div ref="chart" style="max-width: 22vw" :style="{ height: vHeight + 'vh' }"></div>
  </chart-container>
</template>

<script>
import screenfull from "screenfull";
import ChartContainerVue from "../../components/ChartContainer.vue";
import chartMixin from "@/mixins/chart.js";

export default {
  name: "LeftChartBase",
  components: {
    ChartContainer: ChartContainerVue,
  },
  mixins: [chartMixin],
  props: {
    vHeight: {
      type: Number,
      default: 34,
    },
    legend: {
      type: Array,
      required: true,
    },
    xAxis: {
      type: Array,
      required: true,
    },
    series: {
      type: Array,
      required: true,
    },
  },
  data() {
    return {
      isFullscreen: false,
      actualOptions: null,
      options: {
        grid: {
          left: "5%",
          right: "4%",
          bottom: "0",
          top: "15%",
          containLabel: true,
        },
        tooltip: {
          trigger: "axis",
          axisPointer: {
            // type: "cross",
            crossStyle: {
              color: "rgba(237,237,237,0.5)",
            },
          },
          backgroundColor: 'rgba(0,0,0,0)', // tooltip默认背景为白色，手动置为透明
          extraCssText: 'padding:0;border-width:0',
          formatter: params => {
            console.log('params', params)
            var res = `<span style='display:inline-block;color:rgba(255,255,255,0.85);margin-bottom:8px;font-size:16px;letter-spacing: 2px;'>${params[0].axisValueLabel}</span>`;
            for (var i = 0, l = params.length; i < l; i++) {
              let color = Object.prototype.toString.call(params[i].color) == "[object String]" ? params[i].color : params[i].color.colorStops ? params[i].color.colorStops[0].color : ''
              // console.log(item.color, color);
              res +=
                "<br/>" +
                `<span style='display:inline-block;margin-right:4px;border-radius:2px;width:12px;height:12px;background-color:${color}'></span>` +
                `<span style='display:inline-block;width:150px;color:rgba(255,255,255,.85);font-size:16px;letter-spacing: 2px;'>${params[i].seriesName}</span>` +
                `<span style='width:60px;display:inline-block;color:rgba(255,255,255,0.65);font-size:16px;text-align: right;letter-spacing: 2px;'>${params[i].value ? params[i].value: 0}</span>`;
            }
            const htmlContent = `
              <div style="padding: 12px 16px;background:rgba(0,24,41,.5);box-shadow: 0px 4px 8px 0px rgba(0, 0, 0, 0.38);backdrop-filter: blur(10px);">
                ${res}
              </div>
              `;

            return htmlContent;
            // return res;
          },
        },
        xAxis: {
          type:'category',
          axisTick: {
            show: false,
          },
          axisLine: {
            lineStyle: {
              color: "#4561AE",
            },
          },
          axisLabel: {
            textStyle: {
              color: "rgba(223,241,254,.8)",
              fontSize: 16,
            },
          },
          data: this.xAxis,
        },
        yAxis: {
          name: "单位/片",
          // position:'left',
          nameTextStyle: {
            color: "rgba(223,241,254,.8)",
            fontSize: 16,
            align:'right'
          },
          axisTick: {
            show: false,
          },
          axisLabel: {
            color: "rgba(223,241,254,.8)",
            fontSize: 16,
          },
          axisLine: {
            show: true,
            lineStyle: {
              color: "#4561AE",
            },
          },
          splitLine: {
            lineStyle: {
              color: "#4561AE",
            },
          },
        },
        series: [
          {
            name: '', // this.series[0].name,
            type: "bar",
            barWidth: 16,
            label: {
              show: true, //开启显示
              align: 'right', //在上方显示
              position: 'top', //在上方显示
              textStyle: { //数值样式
                color: "rgba(223,241,254,.8)",
                fontSize: 14
              }
            },
            itemStyle: {
              borderRadius: [10, 10, 0, 0],
              color: {
                type: "linear",
                x: 0,
                y: 0,
                x2: 0,
                y2: 1,
                colorStops: [
                  {
                    offset: 0,
                    color: "#12f7f1", // 0% 处的颜色
                  },
                  {
                    offset: 0.35,
                    color: "#12f7f177", // 100% 处的颜色
                  },
                  {
                    offset: 0.75,
                    color: "#12f7f133", // 100% 处的颜色
                  },
                  {
                    offset: 1,
                    color: "transparent", // 100% 处的颜色
                  },
                ],
                global: false, // 缺省为 false
              },
            },
            data: [], // this.series[0].data,
          },
          {
            name: '', // this.series[1].name,
            type: "bar",
            barWidth: 16,
            label: {
              show: true, //开启显示
              align: 'left', //在上方显示
              position: 'top', //在上方显示
              textStyle: { //数值样式
                color: "rgba(223,241,254,.8)",
                fontSize: 16
              }
            },
            itemStyle: {
              borderRadius: [10, 10, 0, 0],
              // normal: {

              // },
              color: {
                type: "linear",
                x: 0,
                y: 0,
                x2: 0,
                y2: 1,
                colorStops: [
                  {
                    offset: 0,
                    color: "#57abf8", // 0% 处的颜色
                  },
                  {
                    offset: 1,
                    color: "#364BFE66", // 100% 处的颜色
                  },
                ],
                global: false, // 缺省为 false
              },
            },
            data: [], // this.series[1].data,
          },
        ],
      },
    };
  },
  watch: {
    /** 全屏状态切换时，对柱子粗细和字体大小进行相应调整 */
    isFullscreen(val) {
      this.actualOptions.series.map((item) => {
        item.barWidth = val ? 18 : 12;
      });
      this.actualOptions.xAxis.axisLabel.fontSize = val ? 18 : 14;
      this.actualOptions.yAxis.axisLabel.fontSize = val ? 18 : 14;
      this.actualOptions.yAxis.nameTextStyle.fontSize = val ? 18 : 14;
      this.initOptions(this.actualOptions);
    },
    series(val) {
      if (!val) {
        this.initOptions(this.options);
        return;
      }
      const actualOptions = JSON.parse(JSON.stringify(this.options));
      actualOptions.series[0].data = val[0].data;
      actualOptions.series[0].name = val[0].name;
      actualOptions.series[1].data = val[1].data;
      actualOptions.series[1].name = val[1].name;
      this.actualOptions = actualOptions;
      this.initOptions(actualOptions);
    },
  },
  mounted() {
    this.actualOptions = this.options;
    this.initOptions(this.options);

    if (screenfull.isEnabled) {
      screenfull.on("change", () => {
        this.isFullscreen = screenfull.isFullscreen;
      });
    }
  },
};
</script>

<style scoped lang="scss">
.echarts-tooltip{
  background: #001829;
  // background-color: ;
    box-shadow: 0px 4px 8px 0px rgba(0, 0, 0, 0.38);
    opacity: 0.6;
    border-radius: 4px;
    .content {
        content: "";
        position: absolute;
        top: 0;
        left: 0;
        bottom: 0;
        right: 0;
        backdrop-filter: blur(6px);
        // transition: .3s transform;
      }
}

.left-chart-base {
  .legend {
    position: absolute;
    top: 5.2vh;
    right: 1vw;
  }

  .legend-item {
    position: relative;
    // font-size: 12px;
    margin-right: 0.67vw;

    &::before {
      content: "";
      display: inline-block;
      // width: 10px;
      // height: 10px;
      width: 0.531vw;
      height: 0.531vw;
      background-color: #ccc;
      border-radius: 2px;
      margin-right: 0.22vw;
    }
  }

  .legend-item:nth-child(1):before {
    background-color: #12f7f1;
  }

  .legend-item:nth-child(2):before {
    background-color: #58adfa;
  }

  /** add more */
  // .legend-item:nth-child(3):before {
  //   background-color: #f7f1;
  // }
}
</style>
