echarts柱状图

1、先展示效果图
在这里插入图片描述
2、直接上代码,copy代码进行调试便会懂(导入echarts插件看之前的文章)

<template>
  <div class="antigen-container">
    <div class="top-content">
      <span class="top-title">抗原检测统计</span>
      <el-select v-model="value" placeholder="请选择" @change="getData(value)">
        <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
        </el-option>
      </el-select>
    </div>
    <div id="antigen-detection-statistics"></div>
  </div>

</template>
<script>
  import {
    getAntigenRecord
  } from '@/api/auth'
  import {
    getTheSpecifiedDate
  } from '@/utils/data.js'
  export default {
    name: 'AntigenDetectionStatistics',
    data() {
      return {
        options: [{
          value: '0',
          label: '今天'
        }, {
          value: '1',
          label: '昨天'
        }, {
          value: '6',
          label: '最近7天'
        }, {
          value: '29',
          label: '最近30天'
        }],
        value: '6',
        dateAbscissa: [], // 横坐标的日期
        negativeData: [], // 阴性数据
        PositiveWithoutSymptoms: [], // 阳性无症状
        PositiveWithSymptoms: [], // 阳性有症状
        ToBeTested: [], // 待检测
        total: null,
        chartBox: null // 将echarts赋值给他
      };
    },
    created() {
      this.getData(6)
    },
    mounted() {
      setTimeout(() => {
        this.echart()
      }, 500);
    },
    methods: {
      // 获取列表数据
      async getData(dateNumber) {
        let time = new Date()
        let currentDate = time.toLocaleDateString().split('/').join('-')
        let timeBegin = getTheSpecifiedDate(time.toLocaleDateString(), dateNumber) + ' 00:00'
        let timeEnd = currentDate + ' 23:59'
        let data = {
          sampleTimeBegin: timeBegin,
          sampleTimeEnd: timeEnd,
          pageNo: 1,
          pageSize: 10
        }
        await getAntigenRecord(data).then(res => {
          this.total = res.data.list[0].items[0].totalQuantity
          this.dateAbscissa = []
          this.negativeData = []
          this.PositiveWithoutSymptoms = []
          this.PositiveWithSymptoms = []
          this.ToBeTested = []
          res.data.list.forEach(item => {
            this.dateAbscissa.push(item.dayValue)
            item.items.forEach(item2 => {
              if (item2.resultStatus == 10) {
                this.negativeData.push(item2.quantity)
              } else if (item2.resultStatus == 20) {
                this.PositiveWithoutSymptoms.push(item2.quantity)
              } else if (item2.resultStatus == 30) {
                this.PositiveWithSymptoms.push(item2.quantity)
              } else if (item2.resultStatus == 40) {
                this.ToBeTested.push(item2.quantity)
              }
            })
          })
          this.echart()
        }).catch(err => {
          console.log(err);
        })
      },
      // 2. echart图表
      echart() {
        const total = this.total
        if (this.chartBox != null && this.chartBox != "" && this.chartBox != undefined) {
          this.chartBox.dispose() //销毁
        }
        this.chartBox = this.$echarts.init(document.getElementById("antigen-detection-statistics"));
        const option = {
          tooltip: {
            trigger: 'axis',
            axisPointer: {
              type: 'shadow'
            }
          },
          legend: {},
          grid: {
            left: '3%',
            right: '4%',
            bottom: '3%',
            containLabel: true
          },
          yAxis: {
            type: 'value'
          },
          xAxis: {
            type: 'category',
            data: this.dateAbscissa
          },
          color: ['#77bc21', '#fcca00', '#c82323', '#d8d8d8'],
          series: [{
              name: '阴性',
              type: 'bar',
              stack: 'total',
              label: {
                show: true,
                fontSize: 14,
                formatter: function (val) {
                  if (val.value == 0) {
                    return ""
                  }
                  let proportion = ((val.value / total) * 100).toFixed(0) + '%'
                  return val.value + '\n' + proportion
                },
              },
              emphasis: {
                focus: 'series'
              },
              data: this.negativeData
            },
            {
              name: '阳性无症状',
              type: 'bar',
              stack: 'total',
              label: {
                show: true,
                fontSize: 14,
                formatter: function (val) {
                  if (val.value == 0) {
                    return ""
                  }
                  let proportion = ((val.value / total) * 100).toFixed(0) + '%'
                  return val.value + '\n' + proportion
                },
              },
              emphasis: {
                focus: 'series'
              },
              data: this.PositiveWithoutSymptoms
            },
            {
              name: '阳性有症状(发烧等)',
              type: 'bar',
              stack: 'total',
              label: {
                show: true,
                fontSize: 14,
                formatter: function (val) {
                  if (val.value == 0) {
                    return ""
                  }
                  let proportion = ((val.value / total) * 100).toFixed(0) + '%'
                  return val.value + '\n' + proportion
                },
              },
              emphasis: {
                focus: 'series'
              },
              data: this.PositiveWithSymptoms
            },
            {
              name: '未检测',
              type: 'bar',
              stack: 'total',
              label: {
                show: true,
                fontSize: 14,
                formatter: function (val) {
                  if (val.value == 0) {
                    return ""
                  }
                  let proportion = ((val.value / total) * 100).toFixed(0) + '%'
                  return val.value + '\n' + proportion
                },
              },
              emphasis: {
                focus: 'series'
              },
              data: this.ToBeTested
            }
          ]
        };
        this.chartBox.setOption(option);
        // 根据页面大小自动响应图表大小
        // window.addEventListener("resize", function () {
        //   this.chartBox.resize();
        // });
      },

    },
  };
</script>

<style lang="scss" scoped>
  .antigen-container {
    width: 100%;
    height: 100%;
    padding-top: 20px;
    display: flex;
    flex-direction: column;
    align-items: center;

    .top-content {
      display: flex;
      align-items: center;
      justify-content: space-between;
      width: 100%;
      margin-bottom: 40px;

      .top-title {
        margin-left: 30px;
        letter-spacing: 2px;
        font-size: 24px;
      }

      .el-select {
        width: 120px;
        margin-right: 30px;
      }
    }

    #antigen-detection-statistics {
      width: 900px;
      height: 500px;
    }
  }
</style>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电商商品详情API接口,python请求示例说明

PC端商品详情接口&#xff0c;H5商品详情接口&#xff0c;APP商品详情接口&#xff0c;商品详情接口&#xff0c;商品销量接口&#xff0c;商品列表接口&#xff0c;商品属性接口&#xff0c;商品sku接口&#xff0c;商品评论接口&#xff0c;商品优惠价接口&#xff0c;商品历…

求职咨询Job Information

前言 加油 原文 求职咨询常用会话 ❶ I want to apply for a job which enables me to use my major. 我想要申请一个能用到我的专业知识的职业。 ❷ I have the capability of operating the computer. 我有操作电脑的能力。 ❸ My dream is to be an excellent interpret…

ts基础内容

javascript脚本语言简称ts为javascript进阶脚本语法 TypeScript是微软开发的一个开源的编程语言&#xff0c;通过在JavaScript的基础上添加静态类型定义构建而成。TypeScript通过TypeScript编译器或Babel转译为JavaScript代码&#xff0c;可运行在任何浏览器&#xff0c;任何操…

Python 字符串格式化高级用法

字符串格式化: 是在编程过程中&#xff0c;允许编码人员通过特殊的占位符&#xff0c;将相关对应的信息整合或提取的规则字符串。 python字符串格式化字符串的格式化常用的三种方式&#xff0c;分别是使用 %格式化&#xff0c;format方法格式化&#xff0c;fstring格式化。 传…

元数据管理概述

参考公众号文章&#xff1a;数据治理&#xff1a;元数据及元数据管理策略、方法和技术

走进小程序【一】什么是小程序?

文章目录&#x1f31f;前言&#x1f31f;发展史&#x1f31f;什么是[微信小程序](https://developers.weixin.qq.com/miniprogram/dev/framework/)&#xff1f;&#x1f31f;微信小程序能做什么&#xff1f;&#x1f31f;小程序发展前景和优势&#x1f31f;写在最后&#x1f31…

应用层 —— HTTPS协议

目录 1、HTTPS介绍 HTTP 与 HTTPS "加密" 是什么 常见的加密方式 对称加密 非对称加密 数据摘要 && 数据指纹 数字签名 2、HTTPS的工作过程探究 方案1 —— 只使用对称加密&#xff08;明文传输不可取&#xff09; 方案2 —— 只使用非对称加密&#xff08…

【探花交友】day02—完善个人信息

目录 1、完善用户信息 1.1、阿里云OSS 1.2、百度人脸识别 1.3、保存用户信息 1.4、上传用户头像 2、用户信息管理 2.1、查询用户资料 2.2、更新用户资料 3、统一token处理 3.1、代码存在的问题 3.2、解决方案 3.3、代码实现 4、统一异常处理 4.1、解决方案 4.2、…

「从零入门推荐系统」14:推荐系统冷启动

作者 | gongyouliu编辑 | gongyouliu作者在第2章《推荐系统基础介绍》中讲述推荐系统面临的挑战时提到冷启动是推荐系统的重要挑战之一。冷启动问题是推荐系统工程实践中非常重要的一个问题&#xff0c;只有解决好冷启动问题&#xff0c;推荐系统的用户体验才会更好。有很多读者…

首届“兴智杯”产业赛收官,文心大模型助推产业创新

由工业和信息化部、科学技术部、深圳市人民政府共同主办&#xff0c;中国信通院等单位承办的首届“兴智杯”全国人工智能创新应用大赛圆满收官。本次大赛受到国家部委、政府机构、科技企业、高校师生等社会各界密切关注。为了进一步激发创新活力&#xff0c;促进人工智能核心技…

ChatGPT 本地部署及搭建

这篇简要说下清华开源项目 ChatGLM 本地部署的详细教程。清华开源项目 ChatGLM-6B 已发布开源版本&#xff0c;这一项目可以直接部署在本地计算机上做测试&#xff0c;无需联网即可体验与 AI 聊天的乐趣。 项目地址&#xff1a;GitHub - THUDM/ChatGLM-6B: ChatGLM-6B&#xf…

创建网络数据集

目的&#xff1a;主要是用来做路径规划。 第一步&#xff1a;加载用作构建网络数据集的道路网数据到arcmap。 第二步&#xff1a;做打断处理。【如果线数据未做过打断处理&#xff0c;需要做这一步。】 有两种方式【1、编辑器里面的高级编辑器的打断相交线功能&#xff1b;2、…

带你玩转Python爬虫(胆小者勿进)千万别做坏事·······

这节课很危险&#xff0c;哈哈哈哈&#xff0c;逗你们玩的 目录 写在前面 1 了解robots.txt 1.1 基础理解 1.2 使用robots.txt 2 Cookie 2.1 两种cookie处理方式 3 常用爬虫方法 3.1 bs4 3.1.1 基础介绍 3.1.2 bs4使用 3.1.2 使用例子 3.2 xpath 3.2.1 xpath基础介…

AD20 PCB后期处理

•DRC检查•位号的调整•装配图制造输出•Gerber&#xff08;光绘&#xff09;文件输出•BOM输出•原理图PDF输出•文档规范存档1.电气性能检查 完成PCB的布局布线工作之后&#xff0c;接下来需要进行DRC检查&#xff0c;DRC检查主要是检查整板PCB布局布线与用户设置的规则约束…

最小的k个数(堆排序,快排)

原文&#xff1a; 最小的k个数 - 最小的k个数 - 力扣&#xff08;LeetCode&#xff09; class Solution { public: vector<int> getLeastNumbers(vector<int>& arr, int k) { vector<int> vec(k, 0); if (k 0) { // 排除 0 的情况 …

WT588D软件操作教程二

1、音频输出模式设置 设置音频的输出方式为 DAC(外接功放模式)和 PWM(直接驱动扬声器模式)。 点击“操作”→“选项”,在选项界面里设置音频输出模式。 2、BUSY 设置 设置 BUSY 端( I/O 口 P17)在播放音频时输出电平状态为高或低。 点击“操作”→“选项”,在“忙信号输…

ArcEngine 添加标题

样例 做法【这个很简单&#xff0c;看一下就能懂】 代码 private void 添加标题ToolStripMenuItem_Click(object sender, EventArgs e){{ IGraphicsContainer graphicsContainer mainPageLayoutControl1.PageLayout as IGraphicsContainer;IEnvelope envelope ne…

javaweb实现登录和注册(前端转数据到后端,servlet到mysql验证的案例)

一、 myeclipse的tomcat的使用和驱动的放置 软件版本&#xff1a; 编译软件myeclipse2014 数据库mysql2014 驱动mysql-connector-java-5.1.47 1、myeclipse的tomcat的使用 新建立一个java web 项目&#xff0c;在src下面新建里一个servlet类&#xff08;名叫register&#x…

电子学会2023年3月青少年软件编程(图形化)等级考试试卷(四级)真题,含答案解析

青少年软件编程(图形化)等级考试试卷(四级) 分数:100 题数:24 一、单选题(共10题,共30分) 1. 编写一段程序,从26个英文字母中,随机选出10个加入列表a。空白处应填入的代码是?( )
最新文章