SpringBoot2+Vue2实战(九)集成Echarts

news2024/11/16 5:33:09

Vue下载Echarts

npm i echarts -S

echarts官网

快速上手 - Handbook - Apache ECharts2

引入:

import * as echarts from "echarts"

一、示例

EchartsController

@RestController
@RequestMapping("/echarts")
public class EchartsController {

    @Resource
    private UserService userService;

    @RequestMapping("/example")
    public Result get() {
        Map<String, Object> map = new HashMap<>();
        map.put("x", CollUtil.newArrayList("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"));
        map.put("y", CollUtil.newArrayList(150, 230, 224, 218, 135, 147, 260));
        return Result.success(map);
    }
}

Home.vue

<template>
  <div>
    <el-row>
      <el-col :span="12">
        <div id="main" style="width: 500px;height: 400px"></div>
      </el-col>

      <el-col :span="12">
        <div id="pie" style="width: 500px;height: 400px"></div>
      </el-col>
    </el-row>

  </div>
</template>

<script>
import * as echarts from "echarts"

export default {
  name: "Home",
  data() {
    return {}
  },
  //页面元素渲染之后再触发
  mounted() {
    var option = {
      xAxis: {
        type: 'category',
        data: []
      },
      yAxis: {
        type: 'value'
      },
      series: [
        {
          data: [],
          type: 'line'
        },
        {
          data: [],
          type: 'bar'
        }
      ]
    };
    var chartDom = document.getElementById('main');
    var myChart = echarts.init(chartDom);
    this.request.get("/echarts/example").then(res =>{
      //填空
      option.xAxis.data = res.data.x
      option.series[0].data = res.data.y
      option.series[1].data = res.data.y
      //数据准备完毕之后在set
      myChart.setOption(option);
    })



    //饼图
    var pieOption = {
      title: {
        text: 'Referer of a Website',
        subtext: 'Fake Data',
        left: 'center'
      },
      tooltip: {
        trigger: 'item'
      },
      legend: {
        orient: 'vertical',
        left: 'left'
      },
      series: [
        {
          name: 'Access From',
          type: 'pie',
          radius: '50%',
          data: [
            {value: 1048, name: 'Search Engine'},
            {value: 735, name: 'Direct'},
            {value: 580, name: 'Email'},
            {value: 484, name: 'Union Ads'},
            {value: 300, name: 'Video Ads'}
          ],
          emphasis: {
            itemStyle: {
              shadowBlur: 10,
              shadowOffsetX: 0,
              shadowColor: 'rgba(0, 0, 0, 0.5)'
            }
          }
        }
      ]
    };
    var pieDom = document.getElementById('pie');
    var pieChart = echarts.init(pieDom);
    pieChart.setOption(pieOption)
  }
}
</script>

<style scoped>

</style>

 二、折线图

EchartsController

@GetMapping("/members")
    public Result members() {
        List<User> list = userService.list();
        //四个季度
        int q1 = 0;
        int q2 = 0;
        int q3 = 0;
        int q4 = 0;
        for (User user : list) {
            Date createTime = user.getCreateTime();
            Quarter quarter = DateUtil.quarterEnum(createTime);
            switch (quarter) {
                case Q1:
                    q1 += 1;
                    break;
                case Q2:
                    q2 += 1;
                    break;
                case Q3:
                    q3 += 1;
                    break;
                case Q4:
                    q4 += 1;
                    break;
                default:
                    break;
            }
        }
        return Result.success(CollUtil.newArrayList(q1, q2, q3, q4));
    }

Home.vue

<el-col :span="12">
        <div id="main" style="width: 500px;height: 400px"></div>
      </el-col>



var option = {
      title: {
        text: '各季度会员数量趋势图',
        subtext: '趋势图',
        left: 'center'
      },
      xAxis: {
        type: 'category',
        data: ["第一季度","第二季度","第三季度","第四季度"]
      },
      yAxis: {
        type: 'value'
      },
      series: [
        {
          data: [],
          type: 'line'
        },
        {
          data: [],
          type: 'bar'
        }
      ]
    };
    var chartDom = document.getElementById('main');
    var myChart = echarts.init(chartDom);

    this.request.get("/echarts/members").then(res =>{
      //填空
      option.series[0].data = res.data
      option.series[1].data = res.data
      //数据准备完毕之后在set
      myChart.setOption(option);
    })

三、饼图

//饼图
    var pieOption = {
      title: {
        text: '各季度会员数量比例图',
        subtext: '比例图',
        left: 'center'
      },
      tooltip: {
        trigger: 'item'
      },
      legend: {
        orient: 'vertical',
        left: 'left'
      },
      series: [
        {
          type: 'pie',
          radius: '60%',
          //饼图上的文本标签
          label:{
            normal:{
              show:true,
              //标签的位置
              position:'inner',
              textStyle:{
                fontWeight:300,
                fontSize:14,
                color:'#fff'
              },
              formatter:'{d}%'
            }
          },
          data: [],//填空
          emphasis: {
            itemStyle: {
              shadowBlur: 10,
              shadowOffsetX: 0,
              shadowColor: 'rgba(0, 0, 0, 0.5)'
            }
          }
        }
      ]
    };



    var pieDom = document.getElementById('pie');
    var pieChart = echarts.init(pieDom);

    this.request.get("/echarts/members").then(res =>{

      pieOption.series[0].data = [
        {name:'第一季度',value:res.data[0]},
        {name:'第二季度',value:res.data[1]},
        {name:'第三季度',value:res.data[2]},
        {name:'第四季度',value:res.data[3]},
      ]
      pieChart.setOption(pieOption)
    })
  }

四、构造

 Home.vue

<template>
  <div>
    <el-row :gutter="10" style="margin-bottom: 60px">

      <el-col :span="6">
        <el-card style="color: #409EFF">
          <div><i class="el-icon-user-solid"/>用户总数</div>
          <div style="padding: 10px 0; text-align: center;font-weight: bold">
            <el-tag type="primary">100</el-tag>
          </div>
        </el-card>
      </el-col>

      <el-col :span="6">
        <el-card style="color: #F56C6C">
          <div><i class="el-icon-money"/>销售总量</div>
          <div style="padding: 10px 0; text-align: center;font-weight: bold">
            ¥ 1000000
          </div>
        </el-card>
      </el-col>

      <el-col :span="6">
        <el-card style="color: #67C23A">
          <div><i class="el-icon-bank-card"/>收益总额</div>
          <div style="padding: 10px 0; text-align: center;font-weight: bold">
            ¥ 300000
          </div>
        </el-card>
      </el-col>

      <el-col :span="6">
        <el-card style="color: #E6A23C">
          <div><i class="el-icon-s-shop"/>门店总数</div>
          <div style="padding: 10px 0; text-align: center;font-weight: bold">
            20
          </div>
        </el-card>
      </el-col>
    </el-row>


    <el-row>
      <el-col :span="12">
        <div id="main" style="width: 500px;height: 450px"></div>
      </el-col>

      <el-col :span="12">
        <div id="pie" style="width: 500px;height: 400px"></div>
      </el-col>
    </el-row>

  </div>
</template>

<script>
import * as echarts from "echarts"

export default {
  name: "Home",
  data() {
    return {}
  },
  //页面元素渲染之后再触发
  mounted() {
    var option = {
      title: {
        text: '各季度会员数量趋势图',
        subtext: '趋势图',
        left: 'center'
      },
      tooltip: {
        trigger: "item"
      },
      xAxis: {
        type: 'category',
        data: ["第一季度", "第二季度", "第三季度", "第四季度"]
      },
      yAxis: {
        type: 'value'
      },
      series: [
        {
          name:"星巴克",
          data: [],
          type: 'bar'
        },
        {
          name:"星巴克",
          data: [],
          type: 'line'
        },
        {
          name:"瑞星咖啡",
          data: [],
          type: 'bar'
        },
        {
          name:"瑞星咖啡",
          data: [],
          type: 'line'
        }
      ]
    };
    var chartDom = document.getElementById('main');
    var myChart = echarts.init(chartDom);

    this.request.get("/echarts/members").then(res => {
      //填空
      option.series[0].data = res.data
      option.series[1].data = res.data


      option.series[2].data = [5,6,7,8]
      option.series[3].data = [5,6,7,8]
      //数据准备完毕之后在set
      myChart.setOption(option);
    })


    //饼图
    var pieOption = {
      title: {
        text: '各季度会员数量比例图',
        subtext: '比例图',
        left: 'center'
      },
      tooltip: {
        trigger: 'item',
        formatter:'{a} <br/>{b}:{c} ({d}%)'
      },
      legend: {
        orient: 'vertical',
        left: 'left'
      },
      series: [
        {
          name:'星巴克',
          type: 'pie',
          radius: '60%',
          center:['25%','50%'],
          //饼图上的文本标签
          label: {
            normal: {
              show: true,
              //标签的位置
              position: 'inner',
              textStyle: {
                fontWeight: 300,
                fontSize: 14,
                color: '#fff'
              },
              formatter: '{c}/({d}%)'
            }
          },
          data: [],//填空
          emphasis: {
            itemStyle: {
              shadowBlur: 10,
              shadowOffsetX: 0,
              shadowColor: 'rgba(0, 0, 0, 0.5)'
            }
          }
        },
        {
          name:'瑞星咖啡',
          type: 'pie',
          radius: '40%',
          center:['75%','50%'],
          //饼图上的文本标签
          label: {
            normal: {
              show: true,
              //标签的位置
              position: 'inner',
              textStyle: {
                fontWeight: 300,
                fontSize: 14,
                color: '#fff'
              },
              formatter: '{d}%'
            }
          },
          data: [
            {name: '第一季度', value: 5},
            {name: '第二季度', value: 6},
            {name: '第三季度', value: 7},
            {name: '第四季度', value: 8},
          ],//填空
        }
      ]
    };

    var pieDom = document.getElementById('pie');
    var pieChart = echarts.init(pieDom);

    this.request.get("/echarts/members").then(res => {

      pieOption.series[0].data = [
        {name: '第一季度', value: res.data[0]},
        {name: '第二季度', value: res.data[1]},
        {name: '第三季度', value: res.data[2]},
        {name: '第四季度', value: res.data[3]},
      ]
      pieChart.setOption(pieOption)
    })
  }
}
</script>

<style scoped>

</style>

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

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

相关文章

异常处理~

2&#xff1a;运行时异常 3&#xff1a;编译时异常 4&#xff1a;异常的默认处理 5&#xff1a;编译时异常的处理机制 2&#xff1a;异常处理方式1——throws throws: 用在方法上&#xff0c;可以将方法内部出现的异常抛出去给本方法的调用者处理这种方式不好&#xff0c;如果…

在IDEA中通过maven打包war包

在pom文件中加入这一句 <packaging>war</packaging> 然后打包就好了 war包文件目录

途乐证券|A股半年行情收官 北向净买入超1800亿元

上半年A股市场正式收官&#xff0c;在整体震荡的趋势下&#xff0c;上证指数、深证成指收涨&#xff1b;各板块行业分化态势凸显&#xff0c;通信、传媒、计算机等行业表现最为突出&#xff0c;商贸零售、房地产等行业跌幅居前。业内人士表示&#xff0c;上半年市场行情受产业趋…

企业所得税高怎么办?合理节税有哪些方式

企业所得税高怎么办&#xff1f;合理节税有哪些方式 《税筹顾问》专注于园区招商、企业税务筹划&#xff0c;合理合规助力企业节税&#xff01; 如今越来越多的企业深耕于创新与发展&#xff0c;这也是一种迎合市场的需求迫不得以需要进行的转变&#xff0c;很多企业所得税高的…

不看后悔,appium自动化环境完美搭建

桌面版appium提供可视化操作appium主要功能的使用方式&#xff0c;对于初学者非常适用。 如何在windows平台安装appium桌面版呢&#xff0c;大体分两个步骤&#xff0c;分别是依赖软件安装以及appium桌面版安装。以下是对这两个步骤的拆解文字加图片描述。 01、依赖软件安装 …

Google在AI领域的潜力被严重低估了

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 总结 &#xff08;1&#xff09;Google正在人工智能领域采取重大举措&#xff0c;推出了生成式人工智能聊天机器人Google Bard&#xff0c;并向人工智能初创公司Anthropic投资了3亿美元。 &#xff08;2&#xff09;Goo…

Dockerfile使用指南

Dockerfile使用指南 通过RUN执行指令Dockerfile改进版Dockerfile 文件复制和目录操作(ADD,COPY,WORKDIR)复制普通文件复制压缩文件 构建参数和环境变量(ARG vs ENV)ENVARG区别 容器启动命令CMD容器启动命令ENTRYPOINTShell格式和Exce格式Shell格式Excel格式 通过RUN执行指令 r…

No2.精选前端面试题,享受每天的挑战和学习

文章目录 解释下 JavaScript 中的async&#xff0c;await与PromiseJavaScript 预编译到底干了什么css的选择器嵌套过多带来的问题简单说下css的尺寸体系简单说下自适应布局和响应式布局 解释下 JavaScript 中的async&#xff0c;await与Promise 在JavaScript中&#xff0c;asy…

Ubuntu 编译 OpenCV SDK for Android + Linux

概述 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉库&#xff0c;它提供了很多函数&#xff0c;这些函数非常高效地实现了计算机视觉算法&#xff08;最基本的滤波到高级的物体检测皆有涵盖&#xff09;。   OpenCV 的应用领域…

[2023-07-03]2023博客之星候选--码龄赛道--15年以上

https://bbs.csdn.net/topics/616395535https://bbs.csdn.net/topics/616395535 用户名总原力值当月获得原力值2023年获得原力值2023年高质量博文数75阿酷tony:[博客] [成就]3999345028 博客之星 2023 《码龄赛道 15年以上》第 75 名 啊&#xff0c;75名啊&#xff01;你叫…

WINDBG 查崩溃

前言&#xff1a;windbg大家都很熟悉&#xff0c;它是做windows系统客户端测试的QA人员很应该掌握的定位程序崩溃原因的工具&#xff0c; 网上也有很多资料&#xff0c;但是真正适合QA阅读和实用的资料不多&#xff0c;我把我认为最重要最应该掌握的结合以前的使用经验分享一下…

SPI机制

SPI机制是Service Provider Interface&#xff0c;是服务提供发现机制&#xff0c;用来启用框架扩展和替换组件。比如java.sql.Driver接口&#xff0c;其他不同厂商可以针对同一接口做出不同的实现&#xff0c;MySQL和PostgreSQL都有不同的实现提供给用户&#xff0c;而Java的S…

学生台灯护眼好还是防近视好?专家推荐的学生台灯分享

其实学生台灯如果护眼效果好也是能在一定程度上防近视的&#xff0c;这两种是由联系的并不冲突。我们要知道造成近视的主要原因的是什么&#xff1f;是不是每天长时间高强度的学习&#xff1f;是不是长时间玩电子产品没有合理休息&#xff1f;这些都导致一个结果&#xff0c;那…

为什么使用消息队列?消息队列有什么优点和缺点?常用的MQ 都有什么区别,以及适合哪些场景?

问题&#xff1a; 为什么使用消息队列&#xff1f;消息队列有什么优点和缺点&#xff1f;Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别&#xff0c;以及适合哪些场景&#xff1f; 为什么使用消息队列&#xff1f; 其实就是问问你消息队列都有哪些使用场景&#xff0c;…

计算机专业大学如何自学?常用网站和工具

耗时5小时&#xff0c;第一个B站视频&#xff0c;满足分享欲 计算机专业现状 or 困境&#xff1f;如何自学&#xff1f;常用网站科普&#xff01;_哔哩哔哩_bilibili &#x1f446;发了个视频&#xff0c;结合文章中的链接&#xff0c;保存到自己浏览器收藏夹里就完了 目录 …

亚马逊买家账号防关联怎么弄?

如果你希望你的亚马逊买家账号不被关联到其他账号&#xff0c;你可以采取以下措施来增强账号的安全性和保护个人信息&#xff1a; 1、强密码&#xff1a;使用强密码来保护你的亚马逊账号。确保密码包含字母、数字和特殊字符&#xff0c;并且长度足够长。避免使用与其他网站或账…

Linux day2

在 Linux 系统中&#xff0c;你看到一个文件的属主和属组都是 root&#xff0c;它的权限是 -rwxrwxr--&#xff0c;那么下面的描述中哪个是不正确的&#xff08;&#xff09; 官方解析&#xff1a; 文件类型和文件权限由10个字符组成&#xff1a; 第 1 位表示文件的类型&#x…

黄牛泛滥如何影响亚洲的演唱会和现场娱乐行业

随着新冠大流行的结束&#xff0c;中国的各类线下娱乐活动尤其是演唱会等又逐渐红火了起来&#xff0c;但蓬勃发展的现场娱乐活动却饱受日益严重的黄牛问题的困扰。黄牛是指个人通过使用自动化机器人批量购买现场活动门票&#xff0c;然后以高昂的价格转售的行为&#xff08;黄…

【python】基础应用

python 基础 变量函数函数定义函数参数说明匿名函数 lambda 文件文件编码文件读取文件写入 异常tryExceptionelsefinally异常的传递 模块模块导入自定义python包并导入第三方包的导入 JSON 变量 python 中变量的定义不需要指定变量的类型&#xff0c;直接进行定义&#xff0c;…

五月&六月券商金工精选

✦研报目录✦ ✦简述✦ 按发布时间排序 海通证券 通往绝对收益之路&#xff08;八&#xff09;&#xff1a;“固收”产品股票端的量化解决方案 发布日期&#xff1a;2023-05-05 关键词&#xff1a;固收、股票、量化策略 主要内容&#xff1a;本研报研究了优秀的“固收”产品…