发布时间:2026/8/14 20:38:41
第10章:权限控制与图像报表-02-图形报表(全) 2. 图形报表ECharts2.1 ECharts简介ECharts缩写来自Enterprise Charts商业级数据图表是百度的一个开源的使用JavaScript实现的数据可视化工具可以流畅的运行在 PC 和移动设备上兼容当前绝大部分浏览器IE8/9/10/11ChromeFirefoxSafari等底层依赖轻量级的矢量图形库 ZRender提供直观、交互丰富、可高度个性化定制的数据可视化图表。官网https://echarts.apache.org/zh/index.html下载地址https://echarts.apache.org/zh/download.html下载完成可以得到如下文件解压上面的zip文件我们只需要将dist目录下的echarts.js文件引入到页面上就可以使用了2.2 5分钟上手ECharts我们可以参考官方提供的5分钟上手ECharts文档感受一下ECharts的使用方式地址如下https://echarts.apache.org/handbook/zh/get-started/第一步创建html页面并引入echarts.js文件!DOCTYPE html html head meta charsetutf-8 !-- 引入 ECharts 文件 -- script srcecharts.js/script /head /html第二步在页面中准备一个具备宽高的DOM容器。body !-- 为 ECharts 准备一个具备大小宽高的 DOM -- div idmain stylewidth: 600px;height:400px;/div /body第三步通过echarts.init方法初始化一个 echarts 实例并通过setOption方法生成一个简单的柱状图script typetext/javascript // 基于准备好的dom初始化echarts实例 var myChart echarts.init(document.getElementById(main)); // 指定图表的配置项和数据 var option { title: { text: ECharts 入门示例 }, tooltip: {}, legend: { data:[销量] }, xAxis: { data: [衬衫,羊毛衫,雪纺衫,裤子,高跟鞋,袜子] }, yAxis: {}, series: [{ name: 销量, type: bar, data: [5, 20, 36, 10, 10, 20] }] }; // 使用刚指定的配置项和数据显示图表。 myChart.setOption(option); /script效果如下2.3 查看ECharts官方实例ECharts提供了很多官方实例我们可以通过这些官方实例来查看展示效果和使用方法。官方实例地址https://echarts.apache.org/examples/zh/index.html可以点击具体的一个图形会跳转到编辑页面编辑页面左侧展示源码js部分源码右侧展示图表效果如下要查看完整代码可以点击右下角的Download按钮将完整页面下载到本地。通过官方案例我们可以发现使用ECharts展示图表效果关键点在于确定此图表所需的数据格式然后按照此数据格式提供数据就可以了我们无须关注效果是如何渲染出来的。在实际应用中我们要展示的数据往往存储在数据库中所以我们可以发送ajax请求获取数据库中的数据并转为图表所需的数据即可。3. 会员数量折线图3.1 需求分析会员信息是体检机构的核心数据其会员数量和增长数量可以反映出机构的部分运营情况。通过折线图可以直观的反映出会员数量的增长趋势。本章节我们需要展示过去一年时间内每个月的会员总数据量。展示效果如下图3.2 完善页面会员数量折线图对应的页面为/pages/report_member.html。3.2.1 导入ECharts库第一步将echarts.js文件复制到health_backend工程的plugins目录下第二步在report_member.html页面引入echarts.js文件script src../plugins/echarts/echarts.js/script3.2.2 参照官方实例导入折线图div classbox !-- 为 ECharts 准备一个具备大小宽高的 DOM -- div idchart1 styleheight:600px;/div /divscript typetext/javascript // 基于准备好的dom初始化echarts实例 var myChart1 echarts.init(document.getElementById(chart1)); //发送ajax请求获取动态数据 axios.get(/report/getMemberReport.do).then((res){ myChart1.setOption( { title: { text: 会员数量 }, tooltip: {}, legend: { data:[会员数量] }, xAxis: { data: res.data.data.months }, yAxis: { type:value }, series: [{ name: 会员数量, type: line, data: res.data.data.memberCount }] }); }); /script根据折线图对数据格式的要求我们发送ajax请求服务端需要返回如下格式的数据{ data:{ months:[2019.01,2019.02,2019.03,2019.04], memberCount:[3,4,8,10] }, flag:true, message:获取会员统计数据成功 }3.3 后台代码3.3.1 Controller在health_backend工程中创建ReportController并提供getMemberReport方法package com.liusp.controller; import com.alibaba.dubbo.config.annotation.Reference; import com.liusp.constant.MessageConstant; import com.liusp.entity.Result; import com.liusp.service.MemberService; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.*; /** * 统计报表 */ RestController RequestMapping(/report) public class ReportController { Reference private MemberService memberService; /** * 会员数量统计 * return */ RequestMapping(/getMemberReport.do) public Result getMemberReport(){ //获得日历对象 Calendar calendar Calendar.getInstance(); calendar.add(Calendar.MONTH,-12);//获得当前日期之前12个月的日期 ListString list new ArrayList(); for(int i0;i12;i){ calendar.add(Calendar.MONTH,1); list.add(new SimpleDateFormat(yyyy.MM).format(calendar.getTime())); } MapString,Object map new HashMap(); map.put(months,list); ListInteger memberCount memberService.findMemberCountByMonth(list); map.put(memberCount,memberCount); return new Result(true, MessageConstant.GET_MEMBER_NUMBER_REPORT_SUCCESS,map); } }3.3.2 服务接口在MemberService服务接口中扩展方法findMemberCountByMonthpublic ListInteger findMemberCountByMonth(ListString month);3.2.3 服务实现类在MemberServiceImpl服务实现类中实现findMemberCountByMonth方法//根据月份统计会员数量 public ListInteger findMemberCountByMonth(ListString month) { ListInteger list new ArrayList(); for(String m : month){ m m .31;//格式2019.04.31 Integer count memberDao.findMemberCountBeforeDate(m); list.add(count); } return list; }3.3.4 Dao接口在MemberDao接口中扩展方法findMemberCountBeforeDatepublic Integer findMemberCountBeforeDate(String date);3.3.5 Mapper映射文件在MemberDao.xml映射文件中提供SQL语句!--根据日期统计会员数统计指定日期之前的会员数。lt;是号转义字符-- select idfindMemberCountBeforeDate parameterTypestring resultTypeint select count(id) from t_member where regTime lt; #{value} /select修改main.html 左侧导航点击会员数量统计跳转到我们的report_member.html页面{ path: 5, //菜单项所对应的路由路径 title: 统计分析, //菜单项名称 icon:fa-heartbeat, children:[//是否有子菜单若没有则为[] { path: /5-1, title: 会员数量统计, linkUrl:report_member.html, children:[] } ] }

相关新闻

2026/8/14 20:38:41

第7章:页面静态化-02-生成移动端静态页面

5. 生成移动端静态页面 前面我们已经学习了Freemarker的基本使用方法,下面我们就可以将Freemarker应用到项目中,帮我们生成移动端套餐列表静态页面和套餐详情静态页面。接下来我们需要思考几个问题: (1)什么时候生成…

2026/8/14 20:38:41

企业如何快速识别符合自身需求的科技成果?

观点作者:科易网-国家科技成果转化(厦门)示范基地 在当前新一轮科技革命和产业变革加速推进的背景下,科技成果的高效转化已成为推动经济高质量发展的重要引擎。然而,面对海量的科技成果、复杂的技术需求以及多元的创新…

2026/8/14 21:23:48

Windows系统文件ulib.dll丢失找不到问题解决

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

2026/8/14 21:23:48

JX3Toy零基础上手全攻略:剑网3自动化脚本如何帮你腾出双手

JX3Toy零基础上手全攻略:剑网3自动化脚本如何帮你腾出双手 【免费下载链接】JX3Toy 全功能减负工具 项目地址: https://gitcode.com/GitHub_Trending/jx/JX3Toy JX3Toy是一款开源的剑网3自动化脚本工具,基于Lua语言接管重复的技能循环操作。本文将…

2026/8/14 21:23:48

外卖平台商家入驻怎么审核?先核对资料、配送和结算条件

县城外卖平台审核商家入驻时,应把主体资料、经营品类、营业地址、配送范围、收款与结算信息分开核对,再决定是否开店。先完成资料审核并不等于马上开放接单;营业时间、商品、配送方式和结算周期都要在上线前单独配置,才能减少无效…

2026/8/14 21:18:47

OpenClaw 避坑指南,解决 Gateway 离线等各类问题

🤖本地桌面 AI 智能体:OpenClaw Windows2.9.3 实战部署 前言 现在各类大模型聊天工具遍地开花💬,但大多只局限文字对话,没办法真正操作本地电脑文件、浏览器。OpenClaw 作为一款桌面端 AI 智能体,最大价值…

2026/8/14 4:27:24

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/14 4:27:24

当 LLM 遇见大文档:主流开源项目如何处理上下文超限

从 Agentic Loop 到 Repo Map,七种策略与六类陷阱引言:128K vs 10MB 的硬冲突 2026 年的 LLM 上下文窗口已达到 128K ~ 1M token(≈ 0.5MB ~ 4MB 文本),但 LLM 想要处理的真实数据规模远远超过这个量级:真实…

2026/8/14 0:00:09

Flutter与OpenHarmony实现剧本杀组队表单开发实战

1. 项目概述在移动应用开发领域,跨平台框架Flutter因其高效的开发体验和出色的性能表现,已经成为众多开发者的首选。而OpenHarmony作为新兴的操作系统平台,其开放性和灵活性为开发者提供了全新的可能性。本文将聚焦于一个实际应用场景——剧本…

2026/8/14 0:00:09

VSCode高效Git管理:从入门到实战技巧

1. 为什么选择VSCode进行Git代码管理作为微软推出的轻量级代码编辑器,Visual Studio Code(简称VSCode)已经成为全球开发者使用率最高的编辑器之一。根据2023年Stack Overflow开发者调查,VSCode的市场占有率高达74.48%。它内置的Gi…

2026/8/14 4:27:24

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/14 4:27:24

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/14 4:27:24

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…