Newer
Older
Nanping_sponge_HHDP / src / views / Sponge_screen / components / gcleftEcharts.vue
@liyingjing’ liyingjing’ on 29 Nov 2023 8 KB 大屏修改
<template>
  <div ref="assetEchart" class="asset_echart"></div>
</template>
<script lang="ts" setup>
import { init } from "echarts";
import * as echarts from "echarts";
import { reactive, toRefs, Ref, ref, onMounted, watchEffect } from "vue";
const assetEchart: Ref<HTMLElement | null | any> = ref(null);
let { myData, classifyInvestProportion, classifyAreaProportion } = defineProps([
  "myData",
  "classifyInvestProportion",
  "classifyAreaProportion",
]);
console.log(myData);

const emit = defineEmits(["click-call-back"]);
const initM = () => {
  const chart = init(assetEchart.value as HTMLElement);
  window.addEventListener("resize", () => {
    chart.resize();
  });
  chart.setOption({
    tooltip: {
      show: true,
      position: "top",
      offset: [0, 0],
      textStyle: {
        color: "#666666",
        fontSize: 14,
      },
      formatter: `{a0}</br> {b0}:{c0}%`,
    },
    legend: {
      type: "plain",
      textStyle: {
        color: "#D1DEEE", //文字的颜色
        fontSize: 12, //文字的字号
      },
    },
    grid: [
      {
        show: false,
        left: 0,
        top: 30,
        bottom: 22,
        width: "27%",
      },
      {
        show: false,
        left: "30%",
        top: 30,
        bottom: 0,
        containLabel: true,
        width: "33%",
      },
      {
        show: false,
        left: "63%",
        top: 30,
        bottom: 0,
        containLabel: true,
        width: "33%",
      },
    ],
    xAxis: [
      {
        gridIndex: 0,
        show: true,
      },
      {
        gridIndex: 1,
        type: "value",
        inverse: true,
        axisLine: {
          show: false,
        },
        axisTick: {
          show: false,
        },
        axisLabel: {
          show: true,
          verticalAlign: "middle",
          textStyle: {
            color: "#6E8098",
            fontSize: 12,
          },
        },
        splitLine: {
          show: false,
        },
      },
      {
        gridIndex: 2,
        type: "value",
        axisLine: {
          show: false,
        },
        axisTick: {
          show: false,
        },
        axisLabel: {
          show: true,
          verticalAlign: "middle",
          textStyle: {
            color: "#6E8098",
            fontSize: 12,
          },
        },
        splitLine: {
          show: false,
        },
      },
    ],
    yAxis: [
      {
        name: "",
        gridIndex: 0,
        type: "category",
        inverse: true,
        position: "right",
        axisLine: {
          show: false,
        },
        axisTick: {
          show: false,
        },
        data: myData.map(function (value) {
          return {
            value: value,
            textStyle: {
              textAlign: "left",
              align: "right",
            },
          };
        }),
        axisLabel: {
          align: "left",
          textStyle: {
            color: "#fff",
            textAlign: "right",
            align: "right",
            fontSize: "12",
          },
          //   rich: {
          //     a: {
          //       color: "#fff",
          //       backgroundColor: "#49a2ff",
          //       width: 24,
          //       height: 23,
          //       align: "center",
          //       borderRadius: 3,
          //     },
          //     a1: {
          //       color: "#fff",
          //       backgroundColor: "#f5576c",
          //       width: 24,
          //       height: 23,
          //       align: "center",
          //       borderRadius: 3,
          //     },
          //     a2: {
          //       color: "#fff",
          //       backgroundColor: "#fee140",
          //       width: 24,
          //       height: 24,
          //       align: "center",
          //       borderRadius: 3,
          //     },
          //     a3: {
          //       color: "#fff",
          //       backgroundColor: "#96fbc4",
          //       width: 24,
          //       height: 24,
          //       align: "center",
          //       borderRadius: 3,
          //     },
          //     b: {
          //       color: "#D1DEEE",
          //       width: 100,
          //       height: 24,
          //       align: "right",
          //       fontSize: 12,
          //       fontWeight: "bold",
          //     },
          //   },
          //   formatter: function (params) {
          //     var index = myData.map((item) => item).indexOf(params);
          //     index = index + 1;
          //     if (index < 4) {
          //       return [`{a${index}|${index}}{b|${params}}`].join("\n");
          //     } else {
          //       return [`{a|${index}}{b|${params}}`].join("\n");
          //     }
          //   },
        },
        triggerEvent: true,
      },
      {
        gridIndex: 1,
        type: "category",
        inverse: true,
        position: "right",
        axisLine: {
          show: false,
        },
        axisTick: {
          show: false,
        },
        axisLabel: {
          show: false,
          margin: 8,
          textStyle: {
            color: "#9D9EA0",
            fontSize: 12,
          },
        },
        data: myData,
        triggerEvent: true,
      },
      {
        gridIndex: 2,
        type: "category",
        inverse: true,
        position: "left",
        axisLine: {
          show: false,
        },
        axisTick: {
          show: false,
        },
        axisLabel: {
          show: false,
          textStyle: {
            color: "#9D9EA0",
            fontSize: 12,
          },
        },
        data: myData,
        triggerEvent: true,
      },
    ],
    series: [
      {
        name: "资金占比",
        type: "bar",
        barGap: 20,
        barWidth: 6,
        xAxisIndex: 1,
        yAxisIndex: 1,
        showBackground: true,
        backgroundStyle: {
          color: "#011431",
        },
        label: {
          normal: {
            show: false,
          },
          emphasis: {
            show: true,
            position: "left",
            offset: [0, 0],
            textStyle: {
              color: "#666666",
              fontSize: 14,
            },
          },
        },
        itemStyle: {
          normal: {
            barBorderRadius: [10, 0, 0, 10],
            color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [
              {
                offset: 0,
                color: "#FFCE65",
              },
              {
                offset: 1,
                color: "#052a57",
              },
            ]),
          },
        },
        data: classifyAreaProportion,
      },
      {
        name: "面积占比",
        type: "bar",
        barGap: 20,
        barWidth: 6,
        xAxisIndex: 2,
        yAxisIndex: 2,
        showBackground: true,
        backgroundStyle: {
          color: "#011431",
        },
        label: {
          normal: {
            show: false,
          },
          emphasis: {
            show: true,
            position: "right",
            offset: [0, 0],
            textStyle: {
              color: "#666666",
              fontSize: 14,
            },
          },
        },
        itemStyle: {
          normal: {
            barBorderRadius: [0, 10, 10, 0],
            color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [
              {
                offset: 0,
                color: "#303e54",
              },
              {
                offset: 1,
                color: "#1093FA",
              },
            ]),
          },
        },
        data: classifyInvestProportion,
      },
    ],
  });
  chart.on("click", function (params) {
    console.log(params,'paramsparams');
    emit("click-call-back", { ...params });
  });
};
function chartSize(container, charts) {
  function getStyle(el, name) {
    if (window.getComputedStyle) {
      return window.getComputedStyle(el, null);
    } else {
      return el.currentStyle;
    }
  }
  const hi = getStyle(container, "height").height;
  charts.style.height = hi;
}
watchEffect(() => {});
onMounted(() => {
  initM();
});
</script>

<style lang="scss" scoped>
.asset_echart {
  width: 450px;
  height: 240px;
  // margin-left:-30px;
  &_echart {
    width: 100%;
    height: 100%;
  }
}
</style>