echart图标日环图

news2024/10/3 6:34:25

效果图:

 代码实例:

<template>
    <div id="chart-alarm" class="chartStyle"></div>
</template>
<script>
import echarts from 'echarts'
export default {
    name:'alarm',
    data(){
        return{
            chart:null
        }
    },
    mounted(){
        this.warningStatistics()
        // this.initChartAlarm()
    },
    methods:{
        // 获取告警数据统计
        warningStatistics() {
            this.Api.warningStatistics({}, response => {
                if (response.code == 0) {
                    let alarmCount = {
                        face:0,
                        imsi:0,
                        mac:0,
                        vehicle:0,
                        body:0,
                    }
                    response.data.forEach(item => {
                        switch(item.type){
                            case 'face':
                                alarmCount.face += item.total;
                                break;
                            case 'imsi':
                                alarmCount.imsi += item.total;
                                break;
                            case 'mac':
                                alarmCount.mac += item.total;
                                break;
                            case 'vehicle':
                                alarmCount.vehicle += item.total;
                                break;
                            case 'body':
                                alarmCount.body += item.total
                        }
                    })
                    let data = [{
                            name: "人脸",
                            value: alarmCount.face
                        },
                        {
                            name: "热点",
                            value: alarmCount.imsi+alarmCount.mac
                        },
                        {
                            name: "车辆",
                            value: alarmCount.vehicle
                        },
                        {
                            name: "人体",
                            value: alarmCount.body
                        }
                    ];
                    this.initChartAlarm(data)
                } else {
                    this.Utils.message(response.msg, 'error')
                }
            });
        },
        initChartAlarm(data){
            let chart = echarts.init(document.getElementById('chart-alarm'));
            let arrName = getArrayValue(data, "name"),
                arrValue = getArrayValue(data, "value"),
                sumValue = eval(arrValue.join('+')),
                objData = array2obj(data, "name"),
                optionData = getData(data)

            function getArrayValue(array, key) {
                var key = key || "value";
                var res = [];
                if (array) {
                    array.forEach(function(t) {
                        res.push(t[key]);
                    });
                }
                return res;
            }

            function array2obj(array, key) {
                var resObj = {};
                for (var i = 0; i < array.length; i++) {
                    resObj[array[i][key]] = array[i];
                }
                return resObj;
            }

            function getData(data) {
                var res = {
                    series: [],
                    yAxis: []
                };
                for (let i = 0; i < data.length; i++) {
                    // console.log([70 - i * 15 + '%', 67 - i * 15 + '%']);
                    res.series.push({
                        name: '报警类型',
                        type: 'pie',
                        clockWise: false, //顺时加载
                        hoverAnimation: false, //鼠标移入变大
                        radius: [73 - i * 18 + '%', 68 - i * 18 + '%'],
                        center: ["30%", "50%"],
                        label: {
                            show: false
                        },
                        itemStyle: {
                            label: {
                                show: false,
                            },
                            labelLine: {
                                show: false
                            },
                            borderWidth: 5,
                        },
                        data: [{
                            value: data[i].value,
                            name: data[i].name
                        }, {
                            value: sumValue - data[i].value,
                            name: '',
                            itemStyle: {
                                color: "rgba(0,0,0,0)",
                                borderWidth: 0
                            },
                            tooltip: {
                                show: false
                            },
                            hoverAnimation: false
                        }]
                    });
                    res.series.push({
                        name: '',
                        type: 'pie',
                        silent: true,
                        z: 1,
                        clockWise: false, //顺时加载
                        hoverAnimation: false, //鼠标移入变大
                        radius: [73 - i * 18 + '%', 68 - i * 18 + '%'],
                        center: ["30%", "50%"],
                        label: {
                            show: false
                        },
                        itemStyle: {
                            label: {
                                show: false,
                            },
                            labelLine: {
                                show: false
                            },
                            borderWidth: 5,
                        },
                        data: [{
                            value: 7.5,
                            itemStyle: {
                                color: "#032e69",
                                borderWidth: 0
                            },
                            tooltip: {
                                show: false
                            },
                            hoverAnimation: false
                        }, {
                            value: 2.5,
                            name: '',
                            itemStyle: {
                                color: "rgba(0,0,0,0)",
                                borderWidth: 0
                            },
                            tooltip: {
                                show: false
                            },
                            hoverAnimation: false
                        }]
                    });
                    res.yAxis.push(data[i].name + '   ' +data[i].value);
                }
                return res;
            }

            let option = {
                legend: {
                    show: true,
                    icon:"circle",
                    top: "50%",
                    left: '70%',
                    data: arrName,
                    width:50,
                    padding: [0, 5],
                    itemGap: 15,
                    formatter: function(name) {
                        let num = (objData[name].value / sumValue * 100).toFixed(2)
                        if(num == NaN || num == 'NaN'){
                            num = 0
                        }
                        return num + "%"
                    },
                    textStyle: {
                        color:'#fff'
                    },
                },
                tooltip: {
                    show: true,
                    trigger: "item",
                    formatter: "{a}<br>{b}:{c}({d}%)"
                },
                color: ['#0b5fff', '#05cbb4', '#ff8d00', '#ff4e0e'],
                grid: {
                    top: '10%',
                    bottom: '53%',
                    left: "30%",
                    containLabel: false
                },
                yAxis: [{
                    type: 'category',
                    inverse: true,
                    axisLine: {
                        show: false
                    },
                    axisTick: {
                        show: false
                    },
                    axisLabel: {
                        interval: 0,
                        inside: true,
                        textStyle: {
                            color: "#fff",
                        },
                        show: true
                    },
                    data: optionData.yAxis
                }],
                xAxis: [{
                    show: false
                }],
                series: optionData.series
            };
            chart.setOption(option);
            window.addEventListener('resize', function(){
                chart.resize()
            })
        }
    }
}
</script>

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

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

相关文章

mybatisplus集成geometry实现增改功能

前言 在我们工作中想要实现将空间点位信息存储到数据库时,一般使用以下语句实现 INSERT INTO test-point ( point,text ) VALUES ( st_GeomFromText ( POINT(1 1) ),第1个点);update test-point set pointst_PointFromText(POINT(5 5)) where id 10;但是这样每次都要去编写新…

介绍个小工具 - ABAP Cleaner

1. 背景 在编写ABAP代码时&#xff0c;我们可以通过Pretty Printer &#xff08;Shift F1&#xff09;去完成代码的美化&#xff0c;但Pretty Printer所能提供的仅仅是关键字大小写的设置、以及行首留空格的控制&#xff0c;如下图所示。 也就是说&#xff0c;Pretty Printer…

【MySQL】仓储--维护出入库流水、库存,去重数量逻辑修正

系列文章 C#底层库–MySQLBuilder脚本构建类&#xff08;select、insert、update、in、带条件的SQL自动生成&#xff09; 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/129179216 C#底层库–MySQL数据库操作辅助类&#xff08;推荐阅读&#xff0…

【QNX】快速入门指南

目录 1.QNX 快速入门指南 2.系统要求 2.安装 QNX Momentics 开发套件 3.安装 QNX Neutrino 实时操作系统 4.QNX Neutrino 操作系统的联网 1.QNX 快速入门指南 本指南旨在帮助用户安装和配置 QNX Momentics 工具与 QNX Neutrino 操作系统&#xff0c;以便用户立即进行程序开…

Mybatis 实体类属性名和表中字段名不一致怎么处理

一. 前言 最近耀哥有学生出去面试&#xff0c;被问到 “Mybatis实体类的属性名和表中的字段名不一致该怎么处理&#xff1f;”&#xff0c;这其实是一个很经典的面试题&#xff0c;接下来耀哥就为大家详细解析一下这道面试题。 二. 分析 2.1 实体类和字段名不一致所带来的后果…

<C/C++>日期和时间的使用(time相关函数大全)

1、函数详解及示例 1- time_t time(time_t *time); 1&#xff09;功能&#xff1a;获取或设置系统时间。 2&#xff09;参数&#xff1a;若给定参数&#xff0c;则将当前时间保存到该参数中&#xff1b;若不给定参数&#xff0c;参数填NULL。 3&#xff09;返回值&#xff1…

CANDela Cdd 文件和CddT文件的相互转化

cdd转cddT Step1 点击Check Consistency , step2 没有任何error step1 选择Convert Document to Template , 然后选择想要转换的文件 保存cddt文件 cddT转cdd cddt文件的可编辑权限更高&#xff0c;但是在diva工程和canoe中只能使用cdd文件&#xff0c;所以&#xff0c;我们…

跑步用哪款耳机比较好、最适合跑步用的蓝牙耳机推荐

运动时聆听音乐可以为枯燥的过程带来娱乐&#xff0c;并且能够转移注意力&#xff0c;让人忽略身体负荷带来的不适感。而一款出色的运动耳机则成为锻炼过程中的重要辅助&#xff0c;它能够帮助控制节奏&#xff0c;使运动过程更加愉悦和高效。以下是一些备受推崇的热门运动耳机…

EventBus 开源库学习(一)

一、概念 EventBus是一款在 Android 开发中使用的发布-订阅事件总线框架&#xff0c;基于观察者模式&#xff0c;将事件的接收者和发送者解耦&#xff0c;简化了组件之间的通信&#xff0c;使用简单、效率高、体积小。 一句话&#xff1a;用于Android组件间通信的。 二、原理…

Windows环境下VSCode安装PlatformIO Cero报错ERROR: HTTP error 403 while getting

安装PlatformIO插件成功&#xff0c;初始化失败 错误信息判断问题尝试访问https://pypi.tuna.tsinghua.edu.cn/simple/platformio/成功点击文件后报错如下&#xff1a; 解决问题- 换源 &#xff08; Windows下有两个地方需要更改&#xff09;cmd命令行Pip文件 总结&#xff1a;…

C语言指针操作数组赋值

1、通过指针修改数组元素的值 ps:int a[10] {10}; 数组名a &a[0] a1 &a[0]1 跨过得是数组元素类型的长度&#xff0c;&a是对整个数组取地址&#xff0c;&a1是跨过整个数组的长度 #include "stdio.h" #include <stdlib.h>int main() {i…

LeetCode-654-最大二叉树

一&#xff1a;题目描述 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后缀上 构建右子树。 返回…

勒索软件攻击防御的9件事

什么是勒索软件攻击&#xff1f; 勒索软件是一种特定类型的恶意软件&#xff0c;它将数据作为“人质”来勒索赎金。网络钓鱼电子邮件是其一种常见的传播方式&#xff0c;同时勒索软件也可以借由下载广泛传播&#xff0c;也就是在用户访问受到感染的网站时进行传播。随着网络攻…

推荐GitHub 中的 C avl tree

https://github.com/greensky00/avltree.git 6 内核果然是,最好的C 标准库 &#x1f602;, 早晚手撕一遍这个代码

大模型,拼算力更拼落地力

近年来&#xff0c;随着人工智能领域的快速发展&#xff0c;大模型已经成为了业界热议的话题之一。在这个信息爆炸的时代&#xff0c;数据变得比以往任何时候都更加丰富&#xff0c;而大模型的兴起&#xff0c;为我们揭示了探索数据中蕴藏的价值和智慧提供了全新的途径。然而&a…

【阵列信号处理】空间匹配滤波器、锥形/非锥形最佳波束成形器、样本矩阵反演 (SMI) 研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Unity Shader编辑器工具类ShaderUtil 常用函数和用法

Unity Shader编辑器工具类ShaderUtil 常用函数和用法 Unity的Shader编辑器工具类ShaderUtil提供了一系列函数&#xff0c;用于编译、导入和管理着色器。本文将介绍ShaderUtil类中的常用函数和用法。 编译和导入函数 CompileShader 函数签名&#xff1a;public static bool C…

发灰黑行业用搜索留痕排名推广哪款软件好

发灰黑行业用搜索留痕排名推广哪款软件好 最近微博视频排名发不了&#xff0c;不收录 目前推荐泛目录或者寄生虫 以后只要知道这个逻辑就可以 平台会因为发的人多而和谐&#xff0c;也就是发不出去 接下来给大家介绍下 想要网站排名&#xff0c;却又不知道具体的优化步骤和方…

自建类ChatGPT服务:本地化部署与远程访问教程

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

基于注解实现接口幂等机制防止数据重复提交

1:什么是接口幂等性? 能解决什么问题? 接口幂等性是指无论调用接口的次数是一次还是多次&#xff0c;对于同一资源的操作都只会产生相同的效果。 比如: 一个订单记账的时候,会同步扣减库存数量,如果记账的按钮被用户多次触发,就会导致一个订单库存却被多次扣减的情况. 如果对…