vue3 + echarts 饼图 和 lengd 左右布局

946 阅读1分钟

echarts 饼图 和 lengd 左右布局

image.png

<template>
  
      <div id="zjysEcharts" style="width: 100%; height: 100%;"></div>
   
</template>

<script setup lang="ts">
import {$message} from "@mars/components/mars-ui"
import {nextTick, onMounted, onUnmounted, ref} from "vue"
import {events} from "@mars/pages/zhts/main"
import {getCapitalInvestment} from "@mars/common/api/jsyApi/jsyFarm";
import {allEvents} from "@mars/main";
import * as echarts from "echarts"

let myChart: any

const dataList = ref([])
const totalList = ref([])

onMounted(() => {
  allEvents.on("onFarmChanged", (farmInfo:any) => {
    getDataList({farmArea:farmInfo.acreage})
  })
})

onUnmounted(() => {
  // 销毁操作
  allEvents.off("onFarmChanged",)
})

const getDataList = async function (params) {
  const {code,data,message} = await getCapitalInvestment(params);
  if(code ==200){
    dataList.value = data
    totalList.value = data.total
    getEcharts(data)
  }else {
    $message(message);
  }
}

// echarts
const getEcharts = (data) => {
  // 基于准备好的dom,初始化echarts实例
  myChart = echarts.init(document.getElementById("zjysEcharts"), "dark")

  // 指定图表的配置项和数据
  const option = getOption(data)

  // 使用刚指定的配置项和数据显示图表。
  myChart.setOption(option)
}

function getOption(data) {
  let legendData = data.data.legend
  let seriesData = data.data.data

  const option = {
    color: ['#E4C73F', '#00D798', '#BED742'],
    tooltip: {
      trigger: "item",
      axisPointer: {            // Use axis to trigger tooltip
        type: "shadow"        // 'shadow' as default; can also be 'line' or 'shadow'
      },
      extraCssText: 'background-color:rgba(0,0,0,0.5);',  //提示框
      formatter: function (params) {
        var res
        res = `<div style="color: #ffffff"><span>${params.data.name}:</span>  ${params.data.value}  亩</div>`
        return res
      }
    },
    grid: {
      top: '3%',
      left: '3%',
      bottom: '4%',
      containLabel: true
    },
    legend: {
      data:legendData,
      orient: 'vertical',
      left:'50%',
      align:'left',
      top:'middle',
      textStyle: {
        color: "#FFFFFF",
        fontSize: 14,
      },
      height:200
    },
    series: [
      {
        type: 'pie',
        radius: ['35%', '70%'], // 控制环的宽度
        center: ['25%', '60%'], // 设置饼图的位置x, y
        avoidLabelOverlap: false,
        label: {
          show: false,
          position: 'center'
        },
        emphasis: {
          label: {
            show: false,
            fontSize: 40,
            fontWeight: 'bold'
          }
        },
        labelLine: {
          show: false
        },
        // itemStyle: {
        //   shadowBlur: 40,
        //   shadowOffsetX: 22,
        //   shadowOffsetY: 22,
        // },
        data: seriesData
      }
    ]
  };
  return option
}


</script>