
若依前后端分离版本地搭建开发环境并运行项目的教程:
若依前后端分离版手把手教你本地搭建环境并运行项目_BADAO_LIUMANG_QIZHI的博客-CSDN博客
在上面搭建架构的基础上,实现使用ElementUI的el-date-picker选择一段时间范围,
统计后台数据库中对应时间内的记录数并在柱状图中显示。
注:
博客:
BADAO_LIUMANG_QIZHI的博客_霸道流氓气质_CSDN博客-C#,SpringBoot,架构之路领域博主
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
1、后台设计数据库,新建带时间字段的表
DROp TABLE IF EXISTS `bus_blog`; CREATE TABLE `bus_blog` ( `id` int(0) NOT NULL AUTO_INCREMENT COMMENT 'id', `add_time` datetime(0) NOT NULL COMMENT '添加时间', `blog_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '名称', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '博客表' ROW_FORMAT = Dynamic; SET FOREIGN_KEY_CHECKS = 1;
然后表中添加几条带时间的数据
2、使用若依自带的代码生成工具生成前后端代码和菜单数据。
在实体类中添加开始时间和结束时间两个字段,用来接收和传递时间范围字段
package com.ruoyi.system.domain;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.baseEntity;
public class BusBlog extends baseEntity
{
private static final long serialVersionUID = 1L;
private Long id;
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "添加时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date addTime;
@Excel(name = "名称")
private String blogName;
//开始时间
private String beginDate;
//结束时间
private String endDate;
public String getBeginDate() {
return beginDate;
}
public void setBeginDate(String beginDate) {
this.beginDate = beginDate;
}
public String getEndDate() {
return endDate;
}
public void setEndDate(String endDate) {
this.endDate = endDate;
}
public void setId(Long id)
{
this.id = id;
}
public Long getId()
{
return id;
}
public void setAddTime(Date addTime)
{
this.addTime = addTime;
}
public Date getAddTime()
{
return addTime;
}
public void setBlogName(String blogName)
{
this.blogName = blogName;
}
public String getBlogName()
{
return blogName;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("addTime", getAddTime())
.append("blogName", getBlogName())
.toString();
}
}
3、修改Controller层的获取数据的接口
@GetMapping("/list")
public AjaxResult list(BusBlog busBlog)
{
BusBlog indexModel=new BusBlog();
//构造返回数据,注意这里需要用linkedHashMap
Map resultMap = new linkedHashMap();
if(null!= busBlog.getBeginDate() && null!= busBlog.getEndDate()) {
//获取请求参数,开始时间和结束时间
indexModel.setBeginDate(busBlog.getBeginDate());
indexModel.setEndDate(busBlog.getBeginDate());
List rangeData = new ArrayList();
//查询数据库获取指定时间内的数据
rangeData = busBlogService.selectBlogCountByDate(busBlog);
if (rangeData.size() >= 0) {
// 日期格式化
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
// 起始日期
Date d1 = sdf.parse(busBlog.getBeginDate());
// 结束日期
Date d2 = sdf.parse(busBlog.getEndDate());
Date tmp = d1;
Calendar dd = Calendar.getInstance();
dd.setTime(d1);
while (tmp.getTime() < d2.getTime()) {
int dayCount = 0;
tmp = dd.getTime();
//获取查询的数据每天的档案数量
for (String oneDay:rangeData) {
Date oneDayDate = sdf.parse(oneDay);
if(oneDayDate.toString().equals(tmp.toString()))
{
dayCount++;
}
}
resultMap.put(sdf.format(tmp),dayCount);
// 天数加上1
dd.add(Calendar.DAY_OF_MONTH, 1);
}
System.out.println(resultMap);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
return AjaxResult.success(resultMap);
}
4、Service层和mapper略过
都是如下返回格式和请求数据格式
public ListselectBlogCountByDate(BusBlog queryParam);
5、mapper.xml具体查询sql实现
6、最终后台返回的数据格式为
7、前端新建一个组件BarChartDateRange.vue用来显示柱状图
组件代码:
8、然后在主页面中引入该组件
import BarChartDateRange from "@/components/Echarts/BarChartDateRange";
export default {
name: "Blog",
components: {
BarChartDateRange,
},
并且在主页面添加时间范围选择组件
设置时间选择组件的改变事件
@change="dateSelectChange"
实现该方法
dateSelectChange(val) {
if (val) {
var startDate = new Date(val[0]).getTime();
var endDate = new Date(val[1]).getTime();
debugger;
if (endDate - startDate > 6 * 24 * 60 * 60 * 1000) {
this.$message({
message: "所选时间范围不能大于7天",
type: "warning",
});
}else{
this.$refs.BarChartDateRange.getSelectedRangeList(val);
}
}
},
获取选择的时间进行范围校验,然后通过
this.$refs.BarChartDateRange.getSelectedRangeList(val);
调用子组件的方法重新查询数据并渲染柱状图
子组件需要声明ref
在子组件中方法实现
//父组件调用子组件的该方法进行重新渲染柱状图
getSelectedRangeList(range) {
var startDate = range[0];
var endDate = range[1];
this.queryParam.beginDate = startDate;
this.queryParam.endDate = endDate;
this.getList().then((response) => {
var res = response.data;
if (res) {
this.typeData = [];
for (var key in res) {
this.typeData.push({ product: key, 博客数: res[key] });
}
}
this.initChart(this.typeData);
});
},
9、柱状图组件完整示例代码
10、显示柱状图的父组件完整示例代码
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)