如何使用echarts做出一个动态统计图

51 篇文章 2 订阅
7 篇文章 0 订阅

  • 这里需要用到一个插件echarts,可在我博客资源中寻找并免费下载

  • 官网地址(选择想要的统计图形效果):https://echarts.apache.org/zh/index.html

  • 引入插件相关文件
    在这里插入图片描述

  • 首先要先在后台系统部分显示出数据(一个控制器)

  • 然后再考虑将这些数据统计图形式图形化处理(一个控制器)

  • 此演示一共用到2个控制器

后端部分

后端系统效果图

  • 可以通过这里的’分组类型’ 进行统计(比如门店,年月日)
  • 这里的数据可以忽略(我数据库数据乱七八糟)
  • 这里点击柱状图按钮,即可将这些数据可视化成图形!
    在这里插入图片描述
    在这里插入图片描述

使用到的数据库表结构

  • 结算单表 和 门店表
  • 一个门店可以有多个结算单,结算单和门店是多对一关系
    * 这里显示的数据

关于传给后台控制器的过滤参数

  • 这里grouType默认是’b.name’,意思是后台sql语句默认通过门店来进行分组查询
    在这里插入图片描述

操作前的一些讲解

  • 因为显示的数据不是数据库表直接有的,是要通过计算而得出的新的数值
  • 所以这里数据返回封装的对象无法用到逆向工程直接已有的实体类
  • 有2种方法可以解决
  • 一种,新建一个java类作为vo去接收封装数据
  • 第二种,直接返回hashMap类型封装,则无需新建一个java类作为vo
  • 此演示用第二种方法 hashMap接受封装的数据 返回给到前端
  • 所以控制器层,业务层,dao层 也需要自己另外重新建()

显示数据页面之控制器部分

  • 这里主要看businessRepoertService.selectRepot(qo),qo作为过滤参数
  • 其他业务层方法主要是为了回显过滤查询数据而已
    在这里插入图片描述

业务层方法

使用到的sql部分

  • 注意这里resultType是HashMap,因为已经没有可用已有实体类封装,只好出此下策
  • 这里where我缩起来了,只是做一些过滤查询不在此篇文章讲解范围内
  • 通过前端传过来的分组条件(${groupType}),可以是门店,年月日,来查询各店铺应收金额,优惠金额,实收金额
    在这里插入图片描述

后台显示数据效果图

  • 使用以上数据页面之控制器("/list"),跳转至显示数据页面得出以下效果
    在这里插入图片描述
  • 开始使用图形统计图,将以上数据图形化!

开搞动态统计图

效果图

在这里插入图片描述

js部分代码

  • 在官网上拷贝下来,根据需求做更改,此演示是财务报表的显示
  • 在前端页面body内 输入以下代码
  • 我用的是freemarker模板引擎,通过$ 注入动态数据
<!-- 为ECharts准备一个具备大小(宽高)的Dom -->
<div id="main" style="width: 800px;height:500px;"></div>
<script type="text/javascript">
    // 基于准备好的dom,初始化echarts实例
    var myChart = echarts.init(document.getElementById('main'));

    // 指定图表的配置项和数据
    var option = {
        title:{
            text:'按${groupType}分组统计'
        },
        tooltip: {
            trigger: 'axis',
            axisPointer: {
                type: 'cross',
                crossStyle: {
                    color: '#999'
                }
            }
        },
        toolbox: {
            feature: {
                dataView: {show: true, readOnly: false},
                magicType: {show: true, type: ['line', 'bar']},
                restore: {show: true},
                saveAsImage: {show: true}
            }
        },
        legend: {
            data: ['总订单数', '总消费金额', '总优惠金额','总实收金额']
        },
        xAxis: [
            {
                type: 'category',
                data: ${groupTypeList},
                axisPointer: {
                    type: 'shadow'
                }
            }
        ],
        yAxis: [
            {
                type: 'value',
                name: '金额(元)',
                min: 0,
                // max: 250,
                // interval: 50,
                axisLabel: {
                    formatter: '{value}'
                }
            },
            {
                type: 'value',
                name: '数量',
                min: 0,
                // max: 25,
                // interval: 5,
                axisLabel: {
                    formatter: '{value}'
                }
            }
        ],
        series: [
            {
                name: '总订单数',
                type: 'line',
                data: ${numberList},
            },
            {
                name: '总消费金额',
                type: 'bar',
                data: ${totalAmountList},
                markPoint: {
                    data: [
                        {type: 'max', name: '最大值'},
                        {type: 'min', name: '最小值'}
                    ]
                },
                markLine: {
                    data: [
                        {type: 'average', name: '平均值'}
                    ]
                }
            },
            {
                name: '总实收金额',
                type: 'bar',
                data: ${payAmountList}
            },
            {
                name: '总优惠金额',
                type: 'bar',
                yAxisIndex: 1,
                data: ${discountAmountTypeList}
            }
        ]
    };


    // 使用刚指定的配置项和数据显示图表。
    myChart.setOption(option);
</script>
  • 以下演示 此前端js页面中的${} 内的数据如何来

统计图控制器部分

  • 数据还是以上演示的数据,但是要将它们抽取出来放进集合中
  • js部分接受的是数组,后端传list集合也可以的
  • 这里的细节点必须将list集合 toJSONString
  • 然后直接返回统计图视图页面(flt)即可
    在这里插入图片描述
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值