Chart.vue 5.77 KB
<template>
  <!-- 折线图 -->
  <Echart :options="options" id="bottomLeftChart" height="100%" width="100%"></Echart>
</template>

<script>
  import Echart from "@/common/echart";
  export default {
    data () {
      return {
        xAxisData: {},
        yAxisData1: {},
        yAxisData2: {},
        yAxisData3: {},
        options: {},
      };
    },
    components: {
      Echart,
    },
    props: {
      cdata: {
        type: Object,
        default: () => ({}),
      },
    },
    methods: {
      hexToRgba (hex, opacity) {
        let rgbaColor = "";
        let reg = /^#[\da-f]{6}$/i;
        if (reg.test(hex)) {
          rgbaColor = `rgba(${parseInt("0x" + hex.slice(1, 3))},${parseInt(
            "0x" + hex.slice(3, 5)
          )},${parseInt("0x" + hex.slice(5, 7))},${opacity})`;
        }
        return rgbaColor;
      },
      fontSize (res) {
        let docEl = document.documentElement,
          clientWidth =
            window.innerWidth ||
            document.documentElement.clientWidth ||
            document.body.clientWidth;
        if (!clientWidth) return;
        let fontSize = clientWidth / 1920;
        return res * fontSize;
      }
    },
    watch: {
      cdata: {
        handler (newData) {
          this.xAxisData = newData.echartData.map((v) => v.yearMonth);
          this.yAxisData1 = newData.echartData.map((v) => v.receive);
          this.yAxisData2 = newData.echartData.map((v) => v.record);
          this.yAxisData3 = newData.echartData.map((v) => v.report);
          this.options = {
            color: newData.color,
            legend: {
              center: true,
              top: "20%",
              data: newData.legendItem,
              textStyle: {
                color: "#00DEFF",
                fontSize: this.fontSize(12),
              },
            },
            // calculable: true,
            tooltip: {
              trigger: "axis",
              formatter: function (params) {
                let html = "";
                params.forEach((v) => {
                  html += `<div style="color: #000;font-size: 14px;line-height: 24px background-color: #000000">
                <span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:${newData.color[v.componentIndex]
                    };"></span>
                ${v.seriesName}.${v.name}
                <span style="color:${newData.color[v.componentIndex]
                    };font-weight:700;font-size: 18px">${v.value}</span>
                个`;
                });
                return html;
              },
              extraCssText:
                "background: #85a2eb; border-radius: 0;box-shadow: 0 0 3px rgba(0, 0, 0, 0.2);color: #333;",
            },
            // grid: {
            //     top: 70,
            //     containLabel: true
            // },
            grid: {
              top: "30%",
              left: "3%",
              right: "6%",
              bottom: "8%",
              containLabel: true,
            },
            xAxis: [
              {
                type: "category",
                axisLine: {
                  show: true,
                  lineStyle: {
                    color: "#458ACF",
                  },
                },
                axisLabel: {
                  inside: false,
                  textStyle: {
                    color: "rgba(255, 255, 255,0.7)", // x轴颜色
                    fontWeight: "normal",
                    fontSize: this.fontSize(12),
                    lineHeight: this.fontSize(22),
                  },
                },
                data: this.xAxisData,
              },
            ],
            yAxis: [
              {
                type: "value",
                axisLabel: {
                  textStyle: {
                    color: "rgba(255, 255, 255,0.7)",
                  },
                },
                splitLine: {
                  show: true,
                  lineStyle: {
                    color: "#458ACF",
                  },
                },
                axisLine: {
                  show: true,
                  lineStyle: {
                    color: "#458ACF",
                  },
                },
                axisTick: {
                  show: false,
                },
              },
            ],
            series: [
              {
                name: newData.legendItem[0],
                type: "line",
                smooth: false, //是否平滑
                showSymbol: true,
                symbol: "circle",
                symbolSize: this.fontSize(6),
                zlevel: 3,
                lineStyle: {
                  normal: {
                    color: newData.color[0]
                  },
                },
                data: this.yAxisData1,
              },
              {
                name: newData.legendItem[1],
                type: "line",
                smooth: false,
                showSymbol: true,
                symbol: "circle",
                symbolSize: this.fontSize(8),
                zlevel: 3,
                lineStyle: {
                  normal: {
                    color: newData.color[1],
                  },
                },
                data: this.yAxisData2,
              },
              {
                name: newData.legendItem[2],
                type: "line",
                smooth: false,
                showSymbol: true,
                symbol: "circle",
                symbolSize: this.fontSize(8),
                zlevel: 3,
                lineStyle: {
                  normal: {
                    color: newData.color[2],
                  },
                },
                data: this.yAxisData3,
              },
            ],
          };
        },
        immediate: true,
        deep: true,
      },
    },
  };
</script>