vue3+ts echarts的使用

1、安装echarts
npm install echarts --save
2、在utils文件夹下创建一个echarts.js文件
//引入echarts
import * as echarts from 'echarts/core'
//引入雷达图、柱状图
import { RadarChart, BarChart } from 'echarts/charts'
// 引入提示框,标题,直角坐标系,数据集,内置数据转换器组件,组件后缀都为 Component
import {
  TooltipComponent,
  TitleComponent,
  GridComponent,
  // 数据集组件
  DatasetComponent,
  // 内置数据转换器组件 (filter, sort)
  TransformComponent,
} from 'echarts/components'
// 标签自动布局、全局过渡动画等特性
import { LabelLayout, UniversalTransition } from 'echarts/features'
// 引入 Canvas 渲染器,注意引入 CanvasRenderer 或者 SVGRenderer 是必须的一步
import { CanvasRenderer } from 'echarts/renderers'
// 注册必须的组件
echarts.use([
  TooltipComponent,
  TitleComponent,
  GridComponent,
  DatasetComponent,
  TransformComponent,
  LabelLayout,
  UniversalTransition,
  CanvasRenderer,
  RadarChart,
  BarChart,
])
export default echarts
3、在main.js中进行挂载(按需引入可忽略这步)
import echarts from '@common/utils/echarts'

const pinia = createPinia()

pinia.use(
  createPersistedState({
    storage: sessionStorage,
  }),
)

// 创建并挂载根实例
const app = createApp(App)

app.config.globalProperties.$echarts = echarts;
app.use(router).use(pinia).mount('#app')
4.上代码(这里是按需引入的步骤)

在需要使用的页面里先定义一个容器,然后将图表放入这个容器就行

<template>
  <div ref="radarChartRef" :style="{ width: '100%', height: '100%' }"></div>
</template>

<script setup lang="ts">
  import echarts from '@common/utils/echarts'
  import { ref, onMounted, watch } from 'vue'
  import { commonStore } from '@/store/common'

  import { IProfitModelRadar } from '../../modal'

  const props = withDefaults(
    defineProps<{
      radarData: IProfitModelRadar[]
    }>(),
    {},
  )

  const myChart = ref<any | null>(null)
  const radarChartRef = ref()

  onMounted(() => {
    myChart.value = echarts.init(radarChartRef.value) // 初始化eCharts实例

    if (props.radarData.length) {
      setOption()
    }
  })

  const setOption = () => {
    const scoreData = props.radarData.map(v => v.score)
    myChart?.value.setOption({
      radar: [
        {
          indicator: props.radarData,
          splitNumber: 10,
          axisName: {
            // 自定义文字颜色 使用字符串模板,模板变量为指示器名称 {value}
            formatter: function (value: string, indicator: any) {
              return `{a|${value}} {b|${indicator.score}分}`
            },
            // 自定义标签
            rich: {
              a: {
                color: '#ffffff',
                fontSize: '1rem',
              },
              b: {
                color: '#ABA6EA',
                fontSize: '1rem',
              },
            },
          },
          splitLine: {
            // 分隔线颜色
            lineStyle: { color: '#453A80' },
          },
          axisLine: {
            // 坐标轴线线的颜色
            lineStyle: { color: '#453A80' },
          },
          splitArea: {
            // 分隔区域颜色
            areaStyle: { color: ['#302663', '#2A1E5C'] },
          },
        },
      ],
      series: [
        {
          type: 'radar',
          areaStyle: {
            color: 'rgba(161,233,229,0.3)',
            shadowColor: 'rgb(10,216,237)',
            shadowBlur: 60,
          },
          lineStyle: { color: '#0AD8ED' },
          data: [
            {
              value: scoreData,
              name: '城市代理商综合能力图',
            },
          ],
          // 拐点颜色
          itemStyle: { color: '#fff' },
        },
      ],
    })
  }

  watch(
    () => props.radarData,
    () => {
      setOption()
    },
  )

  // 设置实例参数
  watch(
    () => commonStore().clientWidth,
    () => {
      myChart.value?.resize()
    },
  )
</script>

<style scoped lang="less"></style>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值