Echarts 日历热力图

利用 Echarts 实现统计笔记操作(新建/修改)的日历热力图,类似于 git 的 contributions 表。


mark

数据库

mark

后台

mapper

<!-- 天/笔记数 日历热力图 -->
<resultMap type="Calendar" id="calendarMap">
    <result property="date" column="date"/>
    <result property="count" column="count"/>
</resultMap>

<!-- 查询 热力图数据 -->
<select id="calendar" resultMap="calendarMap">
    SELECT DATE_FORMAT(gmt_create,'%Y-%m-%d') as date,count(*) as count from note
    WHERE gmt_create >= #{start} and gmt_create &lt; #{end} GROUP BY date;
</select>

pojo

public class Calendar {
    private String date;
    private String count;
}

service

/**
 * 天/笔记数 - 日历热力图
 * @return
 */
public List<Calendar> calendar() {
    String start = DateUtil.getDateLastYear(); // 2018-07-12
    String end = DateUtil.getDateNow(); // 2019-07-12
    return chartDao.calendar(start,end);
}

controller

@GetMapping("/calendar")
public List<Calendar> calendar(){
    List<Calendar> data = chartService.calendar();
    return data;
}

// 2018-07-12+2019-07-12
@GetMapping("/calendarYear")
public String calendarYear(){
    return DateUtil.getDateLastYear() + "+" + DateUtil.getDateNow();
}

前端

<html>
<head>
    <meta charset="utf-8">
    <title>calendar</title>
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <link rel="icon" href="img/ico/qr_blue.ico" type="image/x-icon">
    <script src="js/jquery/2.0.0/jquery.min.js"></script>
    <script src="js/vue/2.5.16/vue.min.js"></script>
    <script src="js/axios/0.17.1/axios.min.js"></script>
    <!-- echarts -->
    <link rel="stylesheet" href="js/echarts/reset.css">
    <script src="js/echarts/esl.js"></script>
    <script src="js/echarts/config.js"></script>
</head>
<body>
<style>
    html, body, #main {
        width: 100%;
        height: 100%;
    }
</style>
<div id="main"></div>
<script>
    $(function () {
        var data4Vue = {
            uri2calendar: 'calendar',
            uri2calendarYear: 'calendarYear',
        };
        var vue = new Vue({
            el: '#layout',
            data: data4Vue,
            created: function () {
                this.calendar();
            },
            methods: {
                // 日历热力图
                calendar: function () {
                    var startDate;
                    var endDate;
                    var uri2Year = this.uri2calendarYear;
                    var uri2calendar = this.uri2calendar;
                    // 日期区间
                    axios.get(uri2Year).then(function (response) {
                        var data = response.data.split("+"); // 2018-07-12+2019-07-12
                        startDate = data[0];
                        endDate = data[1];
                    });
                    axios.get(uri2calendar).then(function (response) {
                        var dateLst=[];
                        var datas=[];
                        vue.data2chart = response.data;
                        dateLst = response.data;
                        var getData =  function() {
                            var data;
                            for (var i=0;i<dateLst.length;i++){
                                data = dateLst[i];
                                datas.push([data["date"],data["count"]]);
                            }
                            return datas;
                        };
                        require([
                            'daily/dist/echarts'
                        ], function (echarts) {
                            var chart = echarts.init(document.getElementById('main'));
                            chart.setOption({
                                title: {
                                    top: 30,
                                    left: 'center',
                                    text: startDate + " ~ " + endDate + ' 笔记记录',
                                    subtext: '十年饮水,难凉热血'
                                },
                                tooltip : {},
                                visualMap: {
                                    type: 'piecewise',
                                    // 数据段分区及样式
                                    pieces: [
                                        {min: 0, max: 1, label: '1', color: '#C6E48B'},
                                        {min: 1, max: 2, label: '2', color: '#91e47f'},
                                        {min: 2, max: 5, label: '3-5', color: '#a0d7ff'},
                                        {min: 5, max: 10, label: '6-10', color: '#ffa26b'},
                                        {min: 10, label: '10-max', color: '#ff1826'}
                                    ],
                                    orient: 'horizontal',
                                    left: 'center',
                                    top: 330,
                                    textStyle: {
                                        color: '#000'
                                    }
                                },
                                calendar: {
                                    top: 100,
                                    left: 'center',
                                    cellSize: [30],
                                    range: [startDate,endDate],
                                    monthLabel:{
                                        nameMap: 'cn'
                                    },
                                    dayLabel:{
                                        nameMap: ['7', '1', '2', '3', '4', '5', '6'],
                                        firstDay: 1
                                    }
                                },
                                series: {
                                    type: 'heatmap',
                                    coordinateSystem: 'calendar',
                                    data: getData()
                                }
                            });
                            $(window).resize(function() {
                                chart.resize();
                            });
                        });
                    });
                }
            }
        });
    });

</script>
</body>
</html>
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值