<template>
  <div ref="chart" style="width: 100%; height: 260px"></div>
</template>

<script setup>
import { onMounted, reactive, ref, onBeforeMount, defineProps } from "vue";
// 局部引入echarts核心模块
import * as echarts from "echarts";
const props = defineProps({
  list: {
    type: Array,
    default: () => [],
  },
  year: {
    type: Array,
    default: () => [],
  },
});
const data = reactive({
  list: [],
  zgffje: [], //职工医疗保险发放人次
  cxffje: [], //城乡医疗保险发放人次
  year: [],
  option: {},
  bg: [],
});
const chart = ref(); // 创建DOM引用

const getOption = () => {
  data.option = {
    tooltip: {
      trigger: "axis",
      padding: [20, 10, 20, 10],
      formatter: "{b0}<br />{a1}:{c1} <br />{a2}:{c2} ",
    },
    legend: {
      data: ["职工医疗保险金额", "城乡医疗保险金额"],
      top: "3%",
      right: "25%",
      textStyle: {
        fontSize: 16,
        color: "#ffffff",
      },
    },
    grid: {
      top: "25%",
      left: "1%",
      right: "5%",
      bottom: "0%",
      containLabel: true,
    },

    xAxis: {
      type: "category",
      // boundaryGap: false,
      data: data.year,
      axisLabel: {
        //坐标轴刻度标签的相关设置
        textStyle: {
          fontSize: 16,
          color: "#ffffff",
        },
      },
    },
    yAxis: [
      {
        name: "职工医疗保险金额",
        type: "value",
        nameTextStyle: {
          // 设置Y轴名称的样式
          fontSize: 14, // 这里设置字体大小为20
        },
        splitLine: {
          show: true,
          lineStyle: {
            color: "rgba(226, 226, 226, 0.3)",
            width: 1,
          },
        },
        axisLabel: {
          //坐标轴刻度标签的相关设置
          textStyle: {
            fontSize: 16,
            color: "#ffffff",
          },
        },
        axisLine: {
          //y轴线的颜色以及宽度
          show: false,
          lineStyle: {
            color: "#ffffff",
            fontSize: 16,
            width: 1,
            type: "solid",
          },
        },
      },
      {
        name: "城乡医疗保险金额",
        type: "value",
        min: 0, // 设置Y轴最小值
        max: function (value) {
          // 自定义Y轴最大值，确保数据点显示在顶部
          return Math.ceil(Math.max(value.max, value.max * 1.5) / 50) * 50;
        },
        splitLine: {
          show: false,
          lineStyle: {
            color: "rgba(226, 226, 226, 0.3)",
            width: 1,
          },
        },
        nameTextStyle: {
          // 设置Y轴名称的样式
          fontSize: 14, // 这里设置字体大小为20
        },
        axisLabel: {
          //坐标轴刻度标签的相关设置
          textStyle: {
            fontSize: 16,
            color: "#ffffff",
          },
        },
        axisLine: {
          //y轴线的颜色以及宽度
          show: false,
          lineStyle: {
            color: "#ffffff",
            fontSize: 16,
            width: 1,
            type: "solid",
          },
        },
      },
    ],
    series: [
      {
        name: "背景",
        type: "bar",
        data: data.bg,
        showBackground: true,
        backgroundStyle: {
          color: "rgba(180, 180, 180, 0.2)",
        },
      },
      {
        yAxisIndex: 0,
        name: "职工医疗保险金额",
        type: "line",
        symbol: "emptyCircle",

        symbolSize: 10,
        itemStyle: {
          borderColor: "#00FCFF",
          borderWidth: 1,
          color: "#00FCFF",
        },
        label: {
          show: true,
          color: "#ffffff",
          position: "top",
          formatter: function (data) {
            return data.value;
          },
        },
        data: data.zgffje,
      },
      {
        yAxisIndex: 1,
        name: "城乡医疗保险金额",
        type: "line",
        symbol: "emptyCircle",

        symbolSize: 10,
        itemStyle: {
          borderColor: "#2468FF",
          borderWidth: 1,
          color: "#2468FF",
        },
        label: {
          show: true,
          color: "#ffffff",
          position: "bottom",
          formatter: function (data) {
            return data.value;
          },
        },
        data: data.cxffje,
      },
    ],
  };
};
const setChart = () => {
  var myChart = echarts.init(chart.value);
  myChart.setOption(data.option);
};
const setChart1 = () => {
  data.zgffje = [];
  data.cxffje = [];
  data.bg = [];

  data.list.forEach((item) => {
    data.zgffje.push(item.zgffje);
    data.cxffje.push(item.cxffje);
    data.bg.push("");
  });
};

onBeforeMount(() => {
  setTimeout(() => {
    data.list = props.list;
    data.year = props.year;
    if (data.list.length !== 0) {
      // console.log("城乡医疗保险金额", data.list, data.year);
      setChart1();
      getOption();
      setChart();
    }
  }, 600);
});
</script>

<style scoped></style>
