当前位置: 首页 > news >正文

vue3之echarts仪表盘

vue3之echarts仪表盘

效果如下:
在这里插入图片描述
版本
"echarts": "^5.5.1"

核心代码:

<template>
  <div ref="chartRef" class="circle"></div>
</template>
<script lang="ts" setup>
import { ref, onMounted, onBeforeMount } from 'vue';
import * as echarts from 'echarts';

const chartRef = ref(null);
const percent = ref(23);
let chart: any = null;

const topChartOptions = (value: number) => {
  return {
    series: [
      {
        name: 'S',
        z: 3,
        type: 'gauge', // 仪表盘
        center: ['50%', '82%'],
        radius: '135%',
        detail: {
          show: false,
        },
        title: {
          show: false,
        },
        data: [
          {
            value,
            name: 'Percent',
          },
        ],
        startAngle: '178', // 仪表盘起始角度
        endAngle: '2', // 仪表盘结束角度
        min: 0,
        max: 100,
        axisLine: {
          show: true,
          lineStyle: {
            roundCap: true,
            width: 8,
            color: [
              [
                value / 100,
                new echarts.graphic.LinearGradient(0, 0, 1, 0, [
                  {
                    offset: 0,
                    color: 'rgba(11, 163, 250, 1)',
                  },
                  {
                    offset: 1,
                    color: 'rgba(227, 250, 255, 1)', // 100% 处的颜色
                  },
                ]),
              ],
              [1, 'rgba(4, 211, 251, 0)'],
            ],
          },
        },
        axisTick: {
          show: false,
        },
        axisLabel: {
          show: false,
        },
        splitLine: {
          show: false,
        },
        pointer: {
          length: '22%',
          width: 4,
          icon: 'rect',
          offsetCenter: [0, '-87%'],
          itemStyle: {
            color: 'RGBA(191, 255, 238, 1)',
          },
        },
      },
      {
        name: 'T',
        z: 2,
        type: 'gauge', // 仪表盘
        center: ['50%', '82%'],
        radius: '135%',
        detail: {
          show: false,
        },
        title: {
          show: false,
        },
        data: [
          {
            value: 100,
            name: 'Percent',
          },
        ],
        startAngle: '178', // 仪表盘起始角度
        endAngle: '2', // 仪表盘结束角度
        min: 0,
        max: 100,
        axisLine: {
          show: true,
          lineStyle: {
            roundCap: true,
            width: 10,
            color: [
              [
                1,
                new echarts.graphic.LinearGradient(0, 0, 1, 0, [
                  {
                    offset: 0,
                    color: 'transparent',
                  },
                  {
                    offset: value / 100,
                    color: 'rgba(255, 192, 1, 1)',
                  },
                  {
                    offset: 1,
                    color: 'rgba(255, 242, 204, 1)', // 100% 处的颜色
                  },
                ]),
              ],
              [1, 'rgba(255, 192, 1, 0)'],
            ],
          },
        },
        axisTick: {
          show: false,
        },
        axisLabel: {
          show: false,
        },
        splitLine: {
          show: false,
        },
        pointer: {
          show: false,
        },
      },
    ],
  };
};

const initChart = () => {
  if (!chart) chart = echarts.init(chartRef.value);
  chart.setOption(topChartOptions(percent.value));
};

onMounted(() => {
  initChart();
});

const destroyChart = () => {
  if (!chart) {
    return;
  }
  chart.dispose();
  chart = null;
};

onBeforeMount(() => {
  destroyChart();
});
</script>
<style lang="scss" scoped>
.circle {
  width: 314px;
  height: 191px;
}
</style>

http://www.dtcms.com/a/51128.html

相关文章:

  • JavaScript+vue 实现复制文字功能
  • Linux·数据库INSERT优化
  • 【MySQL、Oracle、SQLserver、postgresql】查询多条数据合并成一行
  • SpaCy处理NLP的详细工作原理及工作原理框图
  • Flutter 学习之旅 之 flutter 使用 carousel_slider 简单实现轮播图效果
  • JAVA毕设项目-基于SSM框架的百色学院创新实践学分认定系统源码+设计文档
  • chrome Vue.js devtools 提示不支持该扩展组件,移除
  • 【JQuery—前端快速入门】JQuery 操作元素
  • 如何使用 Ollama 的 API 来生成聊天
  • js基本功
  • 【软考-架构】2.2、进程调度-死锁-存储管理-固定分页分段
  • 网络安全需要学多久才能入门?
  • 大语言模型技术发展
  • Dify部署-(零基础)(个人体验)(Linux)(白嫖)(可部署大模型)
  • Vue前端开发- Vant之Card组件
  • visual studio 2022 手工写一个简单的MFC程序
  • 如何在Android中实现服务(Service)
  • 基于vue框架的游戏商城系统cq070(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 网络问题排查基本命令
  • Linux Sed实战指南:从入门到精通
  • springboot3.x下集成hsqldb数据库
  • 某金融租赁公司数据治理实践
  • 储油自动化革命,网关PROFINET与MODBUS网桥的无缝融合,锦上添花
  • 装饰器模式:灵活扩展对象功能的利器
  • STM32程序的加密与破解以及烧录方法
  • 10分钟从零开始搭建机器人管理系统(飞算AI)
  • c++ 操作数组
  • 解决redis lettuce连接池经常出现连接拒绝(Connection refused)问题
  • 【DFS/回溯算法】2016年蓝桥杯真题之路径之谜详解
  • 面试高频考点:一文吃透并发Concurrency与并行Parallelism