(十七)前后端分离的Echart图表--基于SpringBoot+MySQL+Vue+ElementUI+Mybatis前后端分离面向小白管理系统搭建

这篇具有很好参考价值的文章主要介绍了(十七)前后端分离的Echart图表--基于SpringBoot+MySQL+Vue+ElementUI+Mybatis前后端分离面向小白管理系统搭建。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

任务十六 VUE权限菜单之动态路由

任务十七 前后端分离的Echart图表

任务十 VUE侧边菜单栏导航 中我们留了一个home.vue页面一直没有做,它还是这样的
(十七)前后端分离的Echart图表--基于SpringBoot+MySQL+Vue+ElementUI+Mybatis前后端分离面向小白管理系统搭建

一般情况home就是对整个系统的一些核心数据的图表展示。这次任务,我们将使用echarts图表工具,简单实现用户统计数据展示。通过本次任务,大家能够:
(1)了解Echart图表工具的使用方法;
(2)掌握前后端数据传递及图表获取数据;
(3)基本了解Home页面。

一、ECharts介绍

ECharts是一款基于JavaScript的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。
官网地址:https://echarts.apache.org/examples/zh/index.html#chart-type-line

ECharts 安装

npm i echarts -s

二、Echars初探Demo

我们先简单的做一个demo,让页面出现图表,然后再在这个基础上加上动态数据,这样更容易理解和使用。

1. 修改Home.vue

在Home.vue组件中,添加两个div容器,存放图表,这里放了两个,准备main中放折线图和柱状图,pie中放饼图,并且采用栅格系统,左右排列。

<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>

2. 参考Echarts官网将折线图、柱状图和饼图放入

(1)打开官网,找到需要的折线图,点击“JS”,打开JS代码。
(十七)前后端分离的Echart图表--基于SpringBoot+MySQL+Vue+ElementUI+Mybatis前后端分离面向小白管理系统搭建
(2)复制代码
找到“完整代码”,相应的代码复制,然后放到Home.vue中。
(十七)前后端分离的Echart图表--基于SpringBoot+MySQL+Vue+ElementUI+Mybatis前后端分离面向小白管理系统搭建

<script>
import * as echarts from 'echarts';
export default {
    name:"Home",
    data(){
        return{

        }
    },
    mounted(){       //使用mounted的目的是为了等页面元素渲染之后再触发
        var chartDom = document.getElementById('main');//main 中放了一个折线图和柱状图
        var myChart = echarts.init(chartDom);
        var charOption;
       charOption = {
            xAxis: {
                type: 'category',
                data:  ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
            },
            yAxis: {
                type: 'value'
            },
            series: [
                {
                data: [150, 230, 224, 218, 135, 147, 260],
                type: 'line'
                },
                {
                data: [150, 230, 224, 218, 135, 147, 260],
                type: 'bar'
                }
            ]
        };       
        myChart.setOption(charOption);

        
        var pieDom = document.getElementById('pie');//pie中放了饼图
        var pieChart = echarts.init(pieDom);
        var pieOption;

        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)'
                }
            }
            }
        ]
        };

        pieChart.setOption(pieOption);
    }
}
</script>

说明: 这里放了两个容器,chartDom和pieDom,分别渲染折线图(柱状图)和饼图。

3. 运行项目

这时候运行项目,折线图、柱状图、饼图就都出来了。
(十七)前后端分离的Echart图表--基于SpringBoot+MySQL+Vue+ElementUI+Mybatis前后端分离面向小白管理系统搭建

三、 数据库数据图表展示

在基本图表能够正常显示的情况下,一方面保障了Echart引入环境正常,另一方面,基本学会使用官网JS代码。
观察上面的图表就会发现,使用Echart做图表非常方便。比如折线像图或者柱状图,只要提供X、Y轴数据即可。

1. 后端获取数据

这里做一个根据用户生成的日期进行一个季度统计,比如第三季度,有多少用户,第四季度有多少用户等。
在定义members路由及members映射方法。使用Hutool工具中的DateUtil.quarterEnum可以实现对日期进行季度提取。然后根据季度进行Switch判断,并计数。

2. 新建EchartsController,添加members接口

新建EchartsController,添加members接口,使用Hutool工具中的DateUtil.quarterEnum可以实现对日期进行季度提取。然后根据季度进行Switch判断,并计数。

package com.example.demo.controller;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.Quarter;
import com.example.demo.common.Result;
import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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

    @Autowired
    private UserService userService;   
    //统计每个季度的会员人数
    @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.getCreatedTime();
            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));
    }
}

3.修改Home.vue,将X轴写上各季度

xAxis: {
          type: 'category',
           data: ["第一季度","第二季度","第三季度","第四季度"]
        },

4. 从后端获取数据,并填充到Y轴

this.request("http://localhost:8084/echarts/members").then(res=>{ 
            console.log(res);            
             option.series[0].data=res.data;
             option.series[1].data=res.data;
              myChart.setOption(option);
            }) 

5. 可以为图表添加标题等信息

(十七)前后端分离的Echart图表--基于SpringBoot+MySQL+Vue+ElementUI+Mybatis前后端分离面向小白管理系统搭建

  title: {
           text: '各季度会员统计',
           subtext: '趋势图',
           left: 'center'
            },

6. 为饼图填充值

清空原demo中data的值。从后端获取数据,填充到data中。
(十七)前后端分离的Echart图表--基于SpringBoot+MySQL+Vue+ElementUI+Mybatis前后端分离面向小白管理系统搭建

7.完整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">100</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">¥30003</div>
                </el-card>
            </el-col>
             <el-col :span="6">
                <el-card  style="color:#409EFF">
                    <div style="color:#409EFF"><i class="el-icon-s-shop"/>门店总数</div>
                    <div style="padding:10px 0;text-align:center;font-weight:bold">100</div>
                </el-card>
            </el-col>
        </el-row>
        <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(){       //使用mounted的目的是为了等页面元素渲染之后再触发
    
        var chartDom = document.getElementById('main');
        var myChart = echarts.init(chartDom);
        var charOption;
        charOption = {
            title: {
                text: '各季度会员统计',
                subtext: '趋势图',
                left: 'center'
            },
            xAxis: {
                type: 'category',
                data: ["第一季度","第二季度","第三季度","第四季度"]
            },
            yAxis: {
                type: 'value'
            },
            series: [
                {
                data: [],
                type: 'line'
                },
                {
                data: [],
                type: 'bar'
                }
            ]
        };           
        var pieDom = document.getElementById('pie');
        var pieChart = echarts.init(pieDom);
        var pieOption;

        pieOption = {
            title: {
                text: '各季度会员统计',
                subtext: '比例图',
                left: 'center'
            },
            tooltip: {
                trigger: 'item'
            },
            legend: {
                orient: 'vertical',
                left: 'left'
            },
            series: [
              {
                type: 'pie',
                radius: '70%',
                label: {
                normal: {
                    show: true,
                    position: 'inner',
                    textStyle:{
                        fontWeight:300,
                        fontSize:16,
                        color:"#fff"
                    },
                    formatter: '{d}%' //自定义显示格式(b:name, c:value, d:百分比)
                }
                },
                data: [],
                emphasis: {
                    itemStyle: {
                    shadowBlur: 10,
                    shadowOffsetX: 0,
                    shadowColor: 'rgba(0, 0, 0, 0.5)'
                    }
                }
              }
        ]
        };
        this.request("http://localhost:8084/echarts/members").then(res=>{            
             charOption.series[0].data=res.data;
             charOption.series[1].data=res.data;
             myChart.setOption(charOption);

            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>

8. 运行项目

(十七)前后端分离的Echart图表--基于SpringBoot+MySQL+Vue+ElementUI+Mybatis前后端分离面向小白管理系统搭建

9. 添加统计数据

还可以为home页添加一些统计汇总数据,统计数据当然可以从后端获取,比如做一个统计用户总量。其余三个中做了一些模拟数据。
(十七)前后端分离的Echart图表--基于SpringBoot+MySQL+Vue+ElementUI+Mybatis前后端分离面向小白管理系统搭建
前端Home.vue再加一个<el-row>:放4个栅格。第一个使用插值方式取值{{total}}

    <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">{{total}}</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">¥30003</div>
                </el-card>
            </el-col>
             <el-col :span="6">
                <el-card  style="color:#409EFF">
                    <div style="color:#409EFF"><i class="el-icon-s-shop"/>门店总数</div>
                    <div style="padding:10px 0;text-align:center;font-weight:bold">100</div>
                </el-card>
            </el-col>
        </el-row>

10. 完整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">{{total}}</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">¥30003</div>
                </el-card>
            </el-col>
             <el-col :span="6">
                <el-card  style="color:#409EFF">
                    <div style="color:#409EFF"><i class="el-icon-s-shop"/>门店总数</div>
                    <div style="padding:10px 0;text-align:center;font-weight:bold">100</div>
                </el-card>
            </el-col>
        </el-row>
        <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{
            total:0
        }
    },
    mounted(){       //使用mounted的目的是为了等页面元素渲染之后再触发
    
        var chartDom = document.getElementById('main');
        var myChart = echarts.init(chartDom);
        var charOption;
        charOption = {
            title: {
                text: '各季度会员统计',
                subtext: '趋势图',
                left: 'center'
            },
            xAxis: {
                type: 'category',
                data: ["第一季度","第二季度","第三季度","第四季度"]
            },
            yAxis: {
                type: 'value'
            },
            series: [
                {
                data: [],
                type: 'line'
                },
                {
                data: [],
                type: 'bar'
                }
            ]
        };           
        var pieDom = document.getElementById('pie');
        var pieChart = echarts.init(pieDom);
        var pieOption;

        pieOption = {
            title: {
                text: '各季度会员统计',
                subtext: '比例图',
                left: 'center'
            },
            tooltip: {
                trigger: 'item'
            },
            legend: {
                orient: 'vertical',
                left: 'left'
            },
            series: [
              {
                type: 'pie',
                radius: '70%',
                label: {
                normal: {
                    show: true,
                    position: 'inner',
                    textStyle:{
                        fontWeight:300,
                        fontSize:16,
                        color:"#fff"
                    },
                    formatter: '{d}%' //自定义显示格式(b:name, c:value, d:百分比)
                }
                },
                data: [],
                emphasis: {
                    itemStyle: {
                    shadowBlur: 10,
                    shadowOffsetX: 0,
                    shadowColor: 'rgba(0, 0, 0, 0.5)'
                    }
                }
              }
        ]
        };
        this.request("http://localhost:8084/echarts/members").then(res=>{  
            console.log(res.data);          
             charOption.series[0].data=res.data;
             charOption.series[1].data=res.data;
             this.total=res.data[4];
             myChart.setOption(charOption);

            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>

11. 运行项目

(十七)前后端分离的Echart图表--基于SpringBoot+MySQL+Vue+ElementUI+Mybatis前后端分离面向小白管理系统搭建

任务总结

通过本次任务,大家能够:
(1)学会Echart图表工具的使用方法;
(2)学会前后端数据传递及图表获取数据。文章来源地址https://www.toymoban.com/news/detail-439077.html

到了这里,关于(十七)前后端分离的Echart图表--基于SpringBoot+MySQL+Vue+ElementUI+Mybatis前后端分离面向小白管理系统搭建的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于Springboot+vue鲜花商城系统(前后端分离)

    项目技术栈: 前端:vue+elementUI+echarts 后端:Springboot+mybatis+MySQL 项目主要功能: 商品信息 商品分类 角色管理 公告管理 轮播图管理 订单管理 收货地址管理 日志管理 部分功能截图:

    2024年01月19日
    浏览(42)
  • 基于SpringBoot+Vue的旅游系统、前后端分离

    博主24h在线,想要源码文档部署视频直接私聊,9.9元拿走! 基于SpringBoot+Vue的旅游系统、前后端分离  开发语言:Java 数据库:MySQL 技术:SpringBoot、Vue、Mybaits Plus、ELementUI 工具:IDEA/Ecilpse、Navicat、Maven 【主要功能】 角色:管理员、用户 用户:浏览旅游新闻、景区信息、美食

    2024年02月05日
    浏览(37)
  • 基于springboot+vue的宠物领养系统(前后端分离)

    博主主页 :猫头鹰源码 博主简介 :Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万+、专注Java技术领域和毕业设计项目实战 主要内容 :毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 宠物在人类生活中扮演着越来越重

    2024年01月20日
    浏览(39)
  • 基于springboot+vue的社区团购系统(前后端分离)

    博主主页 :猫头鹰源码 博主简介 :Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万+、专注Java技术领域和毕业设计项目实战 主要内容 :毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 网络交易(Electronic Commerce):是

    2024年01月21日
    浏览(44)
  • 基于springboot+vue的在线拍卖系统(前后端分离)

    博主主页 :猫头鹰源码 博主简介 :Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万+、专注Java技术领域和毕业设计项目实战 主要内容 :毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 随着社会的快速发展,计算机的影

    2024年01月19日
    浏览(32)
  • 基于Springboot+Vue实现前后端分离酒店管理系统

    一、🚀选题背景介绍 📚 推荐理由 : 近几年来,随着各行各业计算机智能化管理的转型,以及人们经济实力的提升,人们对于酒店住宿的需求不断的提升,用户的增多导致酒店管理信息的不断增多,于是酒店管理系统开始受到相关行业的重视,酒店管理系统也显的越发的重

    2024年04月09日
    浏览(42)
  • 基于springboot+vue的房屋租赁系统(前后端分离)

    博主主页 :猫头鹰源码 博主简介 :Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万+、专注Java技术领域和毕业设计项目实战 主要内容 :毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 本系统创作2023年,采用前后端分

    2024年02月14日
    浏览(39)
  • 基于springboot+vue的旅游网站系统(前后端分离)

    博主主页 :猫头鹰源码 博主简介 :Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万+、专注Java技术领域和毕业设计项目实战 主要内容 :毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 从古至今,通过书本获取知识信息

    2024年01月19日
    浏览(47)
  • 基于SpringBoot+SpringCloud+Vue前后端分离项目实战 --开篇

    如何高效学习Java? 毕业设计项目应该怎么做?入门实战项目应该怎么做? 做Java开发都应该学习哪些框架技术?到底应该往哪个方向努力? 📢 这是专栏的第一篇文章,我想来跟你聊聊 为什么要学习此专栏 ?我们经常说,看一个事儿千万不要直接陷入细节里,你应该 先鸟瞰

    2024年02月03日
    浏览(38)
  • 基于springboot+vue的网上超市系统(前后端分离)

    博主主页 :猫头鹰源码 博主简介 :Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万+、专注Java技术领域和毕业设计项目实战 主要内容 :毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 网络技术和计算机技术发展至今,

    2024年01月23日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包