ECharts 环形图组件封装

news2024/11/16 22:50:27

一、ECharts引入

1.安装echarts包

npm install echarts --save

2.引入echarts

这里就演示全局引入了,挂载到vue全局,后面使用时,直接使用 $echarts

import * as echarts from 'echarts'
Vue.prototype.$echarts = echarts

二、写echarts组件

这里演示环形图表吧,刚好项目中用了,兄弟们有时间可以去echarts 官网去看看API

TIPS: 官网地址贴着了 ECharts 官网

几个注意点简单说下:

  1. ECharts 的DOM盒子需要设定尺寸

要不然渲染不出来的;需要设置样式,那就套盒子,写样式;

  1. 数据改变时重新渲染问题;

当传入的数据改变时,需要重新渲染,这里我用watch 来监听 props 的值,改变时,就重新执行渲染函数;


先贴个效果吧:

下面就代码吧:

父组件中(引用组件)

这里的数据,后台在父组件中去请求后台去;这里不多赘述了哈;

 <div class="charts_box" v-if=" active == 1">
    <div class="charts" v-for="(item,index) in echartsList" :key="index">
      <EchartsBar :data="item" />
    </div>
</div>

echarts 组件

<template>
  <div>
    <div class="charts_item">
      <div class="echartsBar">
        <div ref="chart" style="width:140px;height:140px"></div>
      </div>
      <div class="info">
        <p>{{ this.data.residue }}</p>
        <span v-if="data.name == 'CPU资源剩余量'">核</span>
        <span v-else-if=" data.name =='GPU资源剩余量'">TFLOPS</span>
        <span v-else>G</span>
        <p>/</p>
        <p>{{ this.data.total }}</p>
        <span v-if="data.name =='CPU资源剩余量'">核</span>
        <span v-else-if="data.name =='GPU资源剩余量'">TFLOPS</span>
        <span v-else>G</span>
      </div>
      <div class="titleName" v-if="data.name =='CPU资源剩余量'">CPU资源剩余量</div>
      <div class="titleName" v-else-if="data.name =='GPU资源剩余量'">GPU资源剩余量</div>
      <div class="titleName" v-else-if="data.name =='内容资源剩余量'">内容资源剩余量</div>
      <div class="titleName" v-else-if="data.name =='硬盘资源剩余量'">硬盘资源剩余量</div>
    </div>
  </div>
</template>

<script>
export default {
  name: "EchartsBar",
  components: {},
  props: {
    data: {
      type: Object,
      default: () => {
        return {
          name: "请传值",
          residue: 0,
          total: 100
        };
      }
    }
  },
  data() {
    return {};
  },
  watch: {
    // 当数据发生改变时,重新渲染echarts
    data: {
      handler() {
        this.getEchartsData();
      },
      deep: true,
      immediate: true
    }
  },
  mounted() {
    this.getEchartsData();
  },
  methods: {
    getEchartsData() {
      const chart = this.$refs.chart;
      if (chart) {
        const myChart = this.$echarts.init(chart);
        const option = {
          title: {
            text: Math.round((this.data.residue / this.data.total) * 100) + "%",
            textStyle: {
              color: "#333333",
              fontSize: 18,
              fontWeight: "normal"
            },
            // subtext: "总分:100分",
            // subtextStyle: {
            //   color: "#909090"
            // },
            // itemGap: -10, // 主副标题距离
            left: "center",
            top: "center"
          },
          angleAxis: {
            max: this.data.total, // 满分
            clockwise: false, // 逆时针
            // 隐藏刻度线
            axisLine: {
              show: false
            },
            axisTick: {
              show: false
            },
            axisLabel: {
              show: false
            },
            splitLine: {
              show: false
            }
          },
          radiusAxis: {
            type: "category",
            // 隐藏刻度线
            axisLine: {
              show: false
            },
            axisTick: {
              show: false
            },
            axisLabel: {
              show: false
            },
            splitLine: {
              show: false
            }
          },
          polar: {
            center: ["50%", "50%"],
            radius: "160%" //图形大小
          },
          series: [
            {
              type: "bar",
              data: [
                {
                  name: "资源剩余量",
                  value: this.data.residue,
                  itemStyle: {
                    normal: {
                      color:
                        // 比分比低于30%时,显示橘色,否则显示绿色
                        Math.round(
                          (this.data.residue / this.data.total) * 100
                        ) >= 30
                          ? this.$echarts.graphic.LinearGradient(1, 0, 0, 0, [
                              {
                                offset: 0,
                                color: "#4FE884"
                              },
                              {
                                offset: 1,
                                color: "#00B759"
                              }
                            ])
                          : this.$echarts.graphic.LinearGradient(1, 0, 0, 0, [
                              {
                                offset: 0,
                                color: "#ff4f1e"
                              },
                              {
                                offset: 1,
                                color: "#ff8a65"
                              }
                            ])
                    }
                  }
                }
              ],
              coordinateSystem: "polar",
              roundCap: true,
              barWidth: 20,
              barGap: "-100%", // 两环重叠
              z: 2
            },
            {
              // 灰色环
              type: "bar",
              data: [
                {
                  value: this.data.total,
                  itemStyle: {
                    color: "#e9f1f3",
                    shadowColor: "rgba(0, 0, 0, 0.2)",
                    shadowBlur: 5,
                    shadowOffsetY: 2
                  }
                }
              ],
              coordinateSystem: "polar",
              roundCap: true,
              barWidth: 20,
              barGap: "-100%", // 两环重叠
              z: 1
            }
          ]
        };
        myChart.setOption(option);
        window.addEventListener("resize", function() {
          myChart.resize();
        });
      }
    }
  }
};
</script>
<style scoped lang='less'>
.charts_item {
  width: 100%;
  display: flex;
  flex-direction: column;
  justify-content: center;
  justify-items: center;
  .echartsBar {
    margin: 0 auto;
  }
  .info {
    width: 100%;
    display: flex;
    justify-content: center;
    align-items: baseline;
    color: #333333;
    padding: 20px 0 10px 0;
    p {
      text-align: center;
      font-size: 20px;
      font-weight: 500;
      padding: 0 3px;
    }
    span {
      font-size: 14px;
      font-weight: 400;
    }
  }
  .titleName {
    margin: 0 auto;
    font-size: 16px;
    color: #333333;
    text-align: center;
  }
}
</style>

觉得还行,收藏点赞哈

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~END~~~~~~~~~~~~~~~~~~~~~~~~~~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/399039.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【蓝桥杯嵌入式】PWM的设置,原理图解析与代码实现(第十一届省赛为例)——STM32

&#x1f38a;【蓝桥杯嵌入式】专题正在持续更新中&#xff0c;原理图解析✨&#xff0c;各模块分析✨以及历年真题讲解✨都在这儿哦&#xff0c;欢迎大家前往订阅本专题&#xff0c;获取更多详细信息哦&#x1f38f;&#x1f38f;&#x1f38f; &#x1fa94;本系列专栏 - 蓝…

Lombok 常用注解

文章目录简介MAVEN 依赖常用的注解1. Data 注解 :2. Setter 注解&#xff1a;3.Getter 注解&#xff1a;4.Log4j or Slf4j 注解5.NoArgsConstructor注解&#xff1a;6.AllArgsConstructor注解&#xff1a;7.RequiredArgsConstructor注解:8.Builder注解&#xff1a;9.Cleanup注解…

全国青少年软件编程(Scratch)等级考试一级真题——2019.12

青少年软件编程&#xff08;Scratch&#xff09;等级考试试卷&#xff08;一级&#xff09;分数&#xff1a;100 题数&#xff1a;37一、单选题(共25题&#xff0c;每题2分&#xff0c;共50分)1.下列关于舞台的描述&#xff0c;不正确的是&#xff1f;&#xff08; &#xff09…

DMHS搭建DMDSC 2节点集群同步到单库

DMHS搭建DMDSC 2节点集群同步到单库环境介绍1 安装DMOCI1.1 关闭数据库实例服务1.2 将DMOCI 复制到源端与目的端的数据库bin目录1.3 对数据库bin 执行目录文件更改用户属组和权限2 启动源数据库服务并配置数据库实例参数2.1 使用DMCSSM启动集群实例2.2 DMDSC源其中一个节点执行…

为何英格兰与苏格兰同属英国,却争端不断?

英国作为世界上的强国其组成部分是由大不列颠岛上的英格兰、威尔士和苏格兰以及爱尔兰岛东北部的北爱尔兰以及一系列附属岛屿。英国作为西欧的一个岛国&#xff0c;地理位置十分优越&#xff0c;位于欧洲大陆西北面的不列颠群岛。英国作为西欧的一颗不容忽视的“明星”&#xf…

【Unity风格化草地】概述风格化草地的实现方法

写在前面 最近本专业开始多很多事情了&#xff0c;要开始建模写论文了&#xff08;不然研究生毕不了业&#xff09;&#xff0c;TA方面的学习进度更慢了&#xff0c;&#xff0c;so sad。 废话不多说&#xff0c;这篇文章其实是个小总结&#xff0c;毕竟学习新东西就是先要当…

序列索引序列切片

六个标准数据类型中是序列的有&#xff1a;字符串&#xff08;String&#xff09;、列表&#xff08;List&#xff09;、元组&#xff08;Tuple&#xff09;。 通过索引和切片的方式可以访问序列中的元素。 一、序列索引 序列中的每一个元素都有一个属于自己的编号&#xff0c…

演唱会的火车票没了?Python实现12306查票以及zidong购票....

嗨害大家好&#xff01;我是小熊猫~ 不知道大家抢到演唱会的门票没有呢? 不管抢到没有&#xff0c;火车票也是很重要的哇 24小时抢票不间断的那种喔~ ~ ~ 不然可就要走路去了喔~ 准备工作 环境 Python 3.8Pycharm 插件 谷歌浏览器驱动 模块 需要安装的第三方模块&am…

1/4车、1/2车、整车悬架LQR仿真合集

目录 前言 1. 1/4悬架系统 1.1数学模型 1.2 LQR求解反馈阵阵(负反馈) 1.3仿真分析 2. 1/2悬架系统 2.1数学模型 2.2 LQR求解反馈阵阵(负反馈) 2.3仿真分析 3. 整车悬架系统 3.1数学模型 整车7自由度主动悬架数学模型 3.2 LQR求解反馈阵阵(负反馈) 3.3仿真分析 4…

MySQL(四)视图、存储过程、触发器

视图、存储过程、触发器视图检查选项视图的更新存储过程存储过程基本语法变量系统变量用户自定义变量局部变量if判断参数casewhile循环repeat循环loop循环cursor游标handler条件处理程序存储函数触发器视图 视图&#xff08;View&#xff09;是一种虚拟存在的表。视图中的数据…

ERP原理与应用教程(作业2)

1. 简答题 ERP是一个高度集成的信息系统&#xff0c;从管理信息集成的角度来看&#xff0c;从MRP到MRPII到ERP&#xff0c;是企业管理信息继承的不断扩展和深化。 所有成为ERP的软件都把MRPII作为其生产和控制模块&#xff0c;以MRPII为基础的计划功能在整个供应链的业务处理…

Composer最小稳定性问题

Composer最小稳定性问题主要指的是&#xff0c;在使用Composer安装某个特定的依赖包时&#xff0c;可能会出现一些不稳定的情况&#xff0c;比如依赖包的版本号发生变化&#xff0c;或者依赖包的某些功能发生变化&#xff0c;这样就会导致应用程序出现问题。为了解决这个问题&a…

【数据结构】栈和队列 (栈 栈的概念结构 栈的实现 队列 队列的概念及结构 队列的实现 栈和队列面试题)

文章目录前言一、栈1.1 栈的概念结构1.2栈的实现二、队列2.1队列的概念及结构2.2队列的实现三、栈和队列面试题总结前言 一、栈 1.1 栈的概念结构 栈也是一种线性表&#xff0c;数据在逻辑上挨着存储。只允许在固定的一端进行插入和删除元素。进行插入和删除操作的一端叫栈顶…

记录 UE5 完全重新构建 UE C++项目

不知道搞了什么&#xff0c;C项目的实时代码编译罢工了&#xff0c;搞了半天都修不好&#xff0c;只能又重建了 UE5 版本为 v5.1.1 删除以下文件夹 /Binaries /Intermediate /SavedBinaries 文件夹是编译后的模块 Intermediate 文件夹里是中间层的C代码&#xff0c;完全由ue…

腾讯乐固加固+app签名+多渠道打包

一、腾讯乐固-基础版免费加固-上传未加固的app-下载加固包&#xff08;加固成功会清除原apk的签名信息和多渠道信息&#xff09;https://console.cloud.tencent.com/ms/reinforce/list/basic二、使用AndroidStudio自带工具apksigner对apk重新签名找到apksigner.bat文件 路径D:\…

CentOS7环境下Docker入门到dockerfile(一)CentOS7安装Docker、容器构建、文件复制与挂载

文章目录准备CentOS7虚拟机准备SecureCRT远程连接虚拟机Centos7环境下安装Docker安装Docker镜像Docker容器的基本操作Docker容器的文件复制与挂载可能遇到的问题准备CentOS7虚拟机 关于网络连接三种模式可以参看这篇博客 准备SecureCRT远程连接虚拟机 可以自行搜索相关安装博…

MQTT协议-发布消息和发布确认

MQTT协议-发布消息和发布确认 PUBLISH一发布消息 PUBLISH控制报文是指从客户端向服务端或者服务端向客户端传输一个应用消息。 发布消息报文由以下5个部分组成 固定报头由两个字节组成&#xff0c;第一个字节的高4位固定为0011&#xff0c;第2位和第1位表示Qos等级&#xff…

Redis单机版安装

文章目录前言Redis单机版安装下载1.安装依赖C语言依赖2.上传并解压3.编译并安装3.1编译3.2安装4.开启守护进程5.启动并测试5.1启动redis5.2关闭/重启redis5.3启动客户端工具5.4杀死进程的方式关闭redis前言 这里安装linux版本的redis,后续如有需要添加windowx版本 安装linux教…

电脑怎么重装系统?教你轻松掌握这些方法

重新安装计算机系统有两种原因&#xff1a;一种是计算机系统可以正常使用&#xff0c;但是电脑比较卡&#xff0c;为了提高它的运行速度&#xff0c;所以想要通过重新安装系统来解决这个问题;另一种原因是计算机系统文件丢失&#xff0c;系统出现蓝屏&#xff0c;或者黑屏的情况…

【Linux内核二】常用的网络丢包错包debug工具介绍

目录 ifconfig Ifconfig输出各字段简述 txqueuelen RX和TX的errors指哪些错误 dropped与overruns的区别 常用ifconfig配置命令 显示网卡信息 启动关闭指定网卡 配置和删除ip地址 修改MAC地址 启用和关闭ARP协议 设置最大传输单元 设置网卡的promiscuous模式 设置…