Vue3使用VueEcharts实现图表

这里以折线图为例,其他以此类推
编写折线图子组件
 

<script lang="ts" setup>
import { useDark } from '@vueuse/core'
import moment from 'moment'
import { computed } from 'vue'
import VueEcharts from 'vue-echarts'

const props = defineProps<{
  data: {
    t: Date
    data: number
  }[]
}>()

const isDark = useDark()

const chartTheme = computed(() => {
  return isDark.value ? 'dark' : 'light'
})

const chartOption = computed(() => {
//处理数据获取x轴数据
  const dateList = props.data.map(function (item) {
    return moment(item.t).format('YYYY-MM-DD')
  })
//处理数据获取图表数据
  const valueList = props.data.map(function (item) {
    return item.data
  })
  return {
    visualMap: [
      {
        show: false,
        type: 'continuous',
        seriesIndex: 0,
        min: 0,
        max: 400
      }
    ],
//信息窗体
    tooltip: {
      trigger: 'axis'
    },
    xAxis: [
      {
        data: dateList
      }
    ],
    yAxis: [{}],
//图表配置
    series: [
      {
        type: 'line',
        showSymbol: false,
        data: valueList
      }
    ]
  }
})
//notMerge: true保证配置更新时图表不重复
//theme表示图表的主题
//option图表的配置项
//autoresize图标大小自适应
</script>
<template>
 
    <VueEcharts
      :update-options="{
        notMerge: true
      }"
      :theme="chartTheme"
      :option="chartOption"
      autoresize
    />
  
</template>

父组件引入使用图表

<script lang="ts" setup>
import { onMounted, ref, watch } from 'vue'
import axios from '@/request/interceptors'
import ComplaintCountChart from './ComplaintCountChart.vue'
import { regulatoryBodiesIdStore } from '@/stores/insuiList'
import { ElMessage } from 'element-plus'

const chartData = ref({
  complaintOverviewChartData: {
    names: [] as string[],
    links: [] as any[]
  },
  complaintSourceTypeChartData: {},
  complaintAcceptTypeChartData: {},
  complaintCountChartData: []
})

onMounted(() => {
  loadComplaintOverviewData()
})
//获取数据
function loadComplaintOverviewData() {
  axios
    .get(
      `/api/public-opinion-tracking/complaint-overview/regulator/${regulatoryBodiesIdStore().regulatoryBodiesId}/complaint-overview-data`,
      {
        params: {
          complaintTimeStart: props.timeRange.range[0],
          complaintTimeEnd: props.timeRange.range[1]
        }
      }
    )
    .then((data: any) => {
      if (data.errorcode === 0) {
        chartData.value = data.data
      } else {
        ElMessage.error(data.message)
      }
    })
    .catch((e) => {
      if (e.response?.data?.message) {
        ElMessage.error(e.response.data.message)
      }
      console.error(e)
    })
}

</script>
<template>
  <div >
    <ComplaintCountChart :data="chartData.complaintCountChartData"></ComplaintCountChart>
  </div>
</template>
<style scoped>

</style>

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值