echarts饼图例子

news2024/10/2 18:20:38

效果

 代码:index。vue

      <div class="riskStatisticsBox">
        <div class="titleBox">风险统计</div>
        <div class="contentBox">
          <div class="selectGroupBox">
            <div class="categoryBox">
              <span>风险类别: </span>
              <a-select
                v-model:value="RiskPointType"
                @change="changePointType"
                :allowClear="true"
              >
                <a-select-option value="Device">设备设施</a-select-option>
                <a-select-option value="Operation">作业活动</a-select-option>
                <a-select-option value="ProcessNode">工业节点</a-select-option>
              </a-select>
            </div>
            <div class="gradeBox">
              <span>风险等级: </span>
              <a-select
                v-model:value="RiskLevelType"
                @change="changeLeveType"
                :allowClear="true"
              >
                <a-select-option value="">全部</a-select-option>
                <a-select-option value="ExtremeRisk">重大风险</a-select-option>
                <a-select-option value="LargerRisk">较大风险</a-select-option>
                <a-select-option value="GeneralRisk">一般风险</a-select-option>
                <a-select-option value="LowRisk">低风险</a-select-option>
              </a-select>
            </div>
          </div>
          <div :class="!piedata.length ? 'emptyBox' : ''">
            <riskStatistics
              :piedata="piedata"
              v-if="piedata.length"
              :allCounts="allCounts"
            ></riskStatistics>
            <a-empty
              v-else
              :image="Empty.PRESENTED_IMAGE_SIMPLE"
              class="ant-empty-normal"
            />
          </div>
        </div>
      </div>
import { message, Modal, Empty } from "ant-design-vue";
import riskStatistics from "./components/riskStatistics.vue";

 

const getDataRisk = () => {
  getRiskStatistics({
    RiskPointType: RiskPointType.value,
    RiskLevelType: RiskLevelType.value,
  })
    .then((res) => {
      piedata.value = res.map(function (item) {
        return {
          name: item.RiskPointStatisticGroupName,
          value:
            RiskLevelType.value == "ExtremeRisk"
              ? item.ExtremeCount
              : RiskLevelType.value == "LargerRisk"
              ? item.LargerCount
              : RiskLevelType.value == "GeneralRisk"
              ? item.GeneralCount
              : RiskLevelType.value == "LowRisk"
              ? item.LowCount
              : item.TotalCount,
        };
      });
      allCounts.value = res.reduce((prev, cur) => {
        return (
          prev +
          Number(
            RiskLevelType.value == "ExtremeRisk"
              ? cur.ExtremeCount
              : RiskLevelType.value == "LargerRisk"
              ? cur.LargerCount
              : RiskLevelType.value == "GeneralRisk"
              ? cur.GeneralCount
              : RiskLevelType.value == "LowRisk"
              ? cur.LowCount
              : cur.TotalCount
          )
        );
      }, 0);
    })
    .catch((err) => {
      console.log(err);
    });
};
onMounted(async () => {

  getDataRisk();

});

riskStatistics.vue

<template>
  <div :id="id" :ref="id" style="height: 400px; padding: 10px"></div>
</template>
<script setup>
import * as echarts from "echarts";
import {
  defineComponent,
  onMounted,
  reactive,
  ref,
  nextTick,
  watch,
  onUnmounted,
} from "vue";
import moment from "moment";
// import resize from './resizeEchart.js'
const props = defineProps({
  id: {
    type: String,
    default: "myCharts",
  },
  allCounts: {
    type: Number,
    default: 0,
  },
  optionProp: {
    type: Object,
    default: () => {
      return {};
    },
  },
  piedata: {
    type: Array,
    default: () => [],
  },
});
onUnmounted(() => {
  myChart.value = null;
});
const myChart = ref(null);
const option = ref({
  color: [
    "#3dc76e",
    "#5494f2",
    "#f57878",
    "#3dc76e",
    "#bd87eb",
    "#62e9de",
    "#fc9065",
    "#fdd751",
    "#4cc5f4",
    "#bbcce4",
    "#8b9cf0",
    "#ebeaaa",
    "#bba0c1",
  ],
  legend: {
    type: "scroll",
  },
  tooltip: {
    trigger: "item",
    confine: true,
  },
  grid: {
    left: "2%",
    right: "4%",
    bottom: "8%",
    containLabel: true,
  },
  series: [
    {
      name: "",
      type: "pie",
      center: ["55%", "65%"],
      radius: ["40%", "65%"],
      avoidLabelOverlap: false,
      itemStyle: {
        borderRadius: 10,
        borderColor: "#fff",
        borderWidth: 2,
      },
      emphasis: {
        label: {
          show: true,
        },
      },
      data: [],
    },
  ],
});
function getData(piedata) {
  const option = {
    title: {
      text: "总数量",
      subtext: props.allCounts?props.allCounts:0,
      left: "49%",
      top: "45%",
      textAlign: "center",
      subtextStyle: {
        fontSize: 16,
        align: "center",
      },
    },
    color: [
      "#3dc76e",
      "#5494f2",
      "#f57878",
      "#3dc76e",
      "#bd87eb",
      "#62e9de",
      "#fc9065",
      "#fdd751",
      "#4cc5f4",
      "#bbcce4",
      "#8b9cf0",
      "#ebeaaa",
      "#bba0c1",
    ],
    legend: {
      type: "scroll",
      pageIconSize: 8,
       bottom: 'bottom'
    },
    tooltip: {
      trigger: "item",
      confine: true,
    },
    // grid: {
    //   left: "2%",
    //   right: "4%",
    //   bottom: "8%",
    //   containLabel: true,
    // },
    series: [
      {
        name: "",
        type: "pie",
        radius: ["70%", "55%"],
        center: ["50%", "50%"],
        avoidLabelOverlap: true,
        itemStyle: {
          borderRadius: 10,
          borderColor: "#fff",
          borderWidth: 2,
        },
        emphasis: {
          label: {
            show: true,
          },
        },
        data: piedata,
      },
    ],
  };
  return option;
}
function draw(piedata) {
  myChart.value && myChart.value.setOption(getData(piedata));
}
watch(
  () => props.piedata,
  (val, oldVal) => {
    nextTick(() => {
      if (!myChart.value) {
        const chartBox = document.getElementById(props.id);
        myChart.value = echarts.init(chartBox);
        myChart.value.resize();
      }
      draw(val);
    });
  },
  { deep: true, immediate: true }
);
</script>

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

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

相关文章

Vc - Qt - 绘制窗口背景色

要在Qt中绘制一个背景颜色&#xff0c;你可以使用Qt的绘图功能来完成。下面是一种简单的方法&#xff1a; 步骤1&#xff1a;在你想要绘制背景颜色的QWidget&#xff08;例如QMainWindow或QDialog&#xff09;的派生类中&#xff0c;重写 它的paintEvent函数。步骤2&#xff1a…

模拟信号和数字信号的转换

此文章介绍的模拟信号与数字信号转换相关的知识有如下&#xff1a; 通信原理的PCM脉冲编码调制 数字电子技术的A/D与D/A 以及stm32的ADC与DAC 模拟信号是指-----时间和数值均连续变化的电信号&#xff0c;如正弦波、三角波等。 数字信号是指-----在时间上和数值上均是离散的…

antv l7每次刷新无法加载iconFont

如图&#xff0c;只渲染出了文本&#xff0c;未渲染出iconFont 但是如果我跳转到其他页面再跳转回来(未经过刷新时)&#xff0c;可以展示出iconFont 解决&#xff1a; 查看官方源码后 找到了iconfont.tsx文件 可以看到多了一步font loaded&#xff0c; 放到项目中后再次测试&…

【01】基础知识:typescript安装及使用,开发工具vscode配置

一、typescript 了解 typeScript 是由微软开发的一款开源的编程语言。 typeScript 是 javascript 的超级&#xff0c;遵循最新的 es6、es5规范。 typeScript 扩展了 javaScript 的语法。 typeScript 更像后端 java、C# 这样的面向对象语言&#xff0c;可以让 js 开发大型企…

全球与中国工程机械轮胎市场现状及未来发展趋势

工程机械轮胎是装于专用性作业的工程机械车辆上&#xff0c;例如装载机、推土机、挖掘机、平整土地机、压路机和石方作业机等。行驶速度不高&#xff0c;但使用的路面条件和载荷性能要求苛刻。 工程机械轮胎行业目前现状分析 轮胎主要采用斜交和子午结构&#xff0c;从轮胎断面…

力扣1137.第N个泰波那契数(动态规划)

/*** author Limg* date 2023/08/11* 泰波那契序列 Tn 定义如下&#xff1a; * T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2* 给你整数 n&#xff0c;请返回第 n 个泰波那契数 Tn 的值。 */ #include<iostream> using namespace std; int tribonacci…

Java 包装类(Wrapper)

Wrapper概念 Java是一个面向对象的编程语言&#xff0c;但是Java中的八种基本数据类型却是不面向对象的&#xff0c;为了使用方便和解决这个不足&#xff0c;在设计类时为每个基本数据类型设计了一个对应的类进行代表&#xff0c;这样八种基本数据类型对应的类统称为包装类(Wra…

Android中Matrix的简单使用

Android中Matrix的简单使用 1.简介&#xff1a; Matrix 是一款微信研发并日常使用的应用性能接入框架&#xff0c;支持iOS, macOS和Android。 Matrix 通过接入各种性能监控方案&#xff0c;对性能监控项的异常数据进行采集和分析&#xff0c;输出相应的问题分析、定位与优化建…

08-3_Qt 5.9 C++开发指南_Graphics View绘图架构

文章目录 1. 场景、视图与图形项1.1 场景1.2 视图1.3 图形项 2. Graphics View 的坐标系统2.1 图形项坐标2.2 视图坐标2.3 场景坐标2.4 坐标映射 3. Graphics View 相关的类3.1 QGraphicsView 类的主要接口函数3.2 QGraphicsScene 类的主要接口函数3.3 图形项 4. 实例介绍 1. 场…

CI+JUnit5并发单测机制创新实践

目录 一. 现状问题 二. 分析原因 三. 采取措施 四. 实践步骤 五. 效能提升 资料获取方法 一. 现状问题 针对现如今高并发场景的业务系统&#xff0c;“并发问题” 终归是必不可少的一类&#xff08;占比接近10%&#xff09;&#xff0c;每次出现问题和事故后&#xff0c…

【C++】const_cast基本用法(详细讲解)

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

华熙生物肌活:2023年版Bio-MESO肌活油性皮肤科学护肤指南

关于报告的所有内容&#xff0c;公众【营销人星球】获取下载查看 核心观点 以悦己和尝鲜为消费动机的他们&#xff0c;已迅速崛起成为护肤行业的焦点人群。而在新生代护肤议题中&#xff0c;“油性皮肤护理”已经成为一个至关重要的子集。今天&#xff0c;中国新生代人口数量…

通讯协议036——全网独有的OPC HDA知识一之聚合(五)计数

本文简单介绍OPC HDA规范的基本概念&#xff0c;更多通信资源请登录网信智汇(wangxinzhihui.com)。 本节旨在详细说明HDA聚合的要求和性能。其目的是使HDA聚合标准化&#xff0c;以便HDA客户端能够可靠地预测聚合计算的结果并理解其含义。如果用户需要聚合中的自定义功能&…

NZ系列工具NZ01:64位系统VBA二维码应用技术

【分享成果&#xff0c;随喜正能量】汗水能浇出成功的鲜花&#xff0c;拼搏能赢来胜利的喜悦&#xff0c;人生不易&#xff0c;累也过&#xff0c;闲也过&#xff0c;只要能充实就是最好过&#xff0c;有也过&#xff0c;没也过&#xff0c;为什么你不看看众生怎么过&#xff0…

从零到精通:学习这些R语言必学包成为数据分析高手!

一、操作数据 ❝ tidyverse ❞ tidyverse是一个强大的R语言数据分析工具集&#xff0c;包含了多个核心包。其中包括ggplot2用于数据可视化、dplyr用于数据处理和转换、tidyr用于数据整理和重塑、readr用于数据导入和读取、purrr用于函数式编程、stringr用于字符串处理等。 ❝ d…

同步_异步请求和Ajax并利用axios框架简化

目录 同步和异步 原生的Ajax 创建XMLHttpRequest对象 常用方法 常用属性 axios框架 同步和异步 同步请求&#xff1a;发送请求后&#xff0c;会做出回应&#xff0c;回应的内容会覆盖浏览器中的内容&#xff0c;这样会打断其他正常的操作&#xff0c;显得不太友好&#…

造个轮子-任务调度执行小框架-任务执行器代理实现

文章目录 前言执行器代理代理对象任务清单代理对象任务清单执项对象处理handler对象状态对象代理工厂任务清单代理工厂清单任务项代理工厂总结前言 不知道为啥,今天好像学不进去,没办法,那就继续编码吧。那么今天的话,加更一篇文章,那就是咱们这个任务执行器的实现。先前…

ESP-IDF插件去除红色波浪线

如图&#xff0c;新装的ESP-IDF打开别人的工程有好多红色波浪线。 把这里的第一个文件夹删除&#xff0c;就是那个.vscode&#xff0c;接下来按ctrlshiftP&#xff0c;输入vscode&#xff0c; 选第一个&#xff0c;添加配置文件夹。 问题解决。 之后记得重新配置板子信息和串…

【C++】static_cast基本用法(详细讲解)

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

ffmepg滤镜

视频按顺时针方向旋转90度 ffplay -vf transpose1 -i juren-30s.mp4 ffplay -f lavfi -i testsrc -vf transpose1 -f lavfi -i testsrc这个滤镜是ffmpeg给用户的一个测试使用的视频 视频水平翻转(左右翻转) -vf hflip 实现慢速播放&#xff0c;声音速度是原始速度的50% ffpla…