通过echarts绘制双十一销量实时统计图表

echarts 是apache的一个孵化项目,这次我们利用它的api,来实现了kintone门户页面的双十一的销量实时统计的Dashboard 。

我们先看下效果图。

0015db7d84dd9dbb4d488351a9a9401

折线图显示了双十一期间的产品销量走势,而饼图则显示了各渠道的产品销量的占比,同时他们都是实时变化的。

接下来我们就来看下它是怎么实现的。

公用的库

下面是我们要用到的库:

echarts

kintone JS SDK

※ 这里不对这两个库做具体介绍,如果还不熟悉它们,请先参阅相关文档。

graph.js

(应用列表页和应用详情页显示绘图的js,为了方便这边将pc端和mobile端的代码整合到了一起。)

(function () {
    'use strict';
    kintone.events.on(['app.record.detail.show', 'app.record.edit.show'], function (res) {
        const pcSetting = {
            type: 'pc',
            showContent: true,
            style: "width: 600px;height:400px;",
        };
        generateDetail(pcSetting, res);
    });
    kintone.events.on(['mobile.app.record.detail.show', 'mobile.app.record.edit.show'], function (res) {
        const mobileSetting = {
            type: 'mobile',
            showContent: false,
            style: "width: 350px;height:400px;",
        };
        generateDetail(mobileSetting, res);
    });
    kintone.events.on(['app.record.index.show'], function (res) {
        const pcSetting = {
            type: 'pc',
            showContent: true,
            style: "width: 900px;height:400px;"
        };
        generateTotal(pcSetting);
    });
    kintone.events.on(['mobile.app.record.index.show'], function (res) {
        const mobileSetting = {
            type: 'mobile',
            showContent: false,
            style: "width: 350px;height:400px;"
        };
        generateTotal(mobileSetting);
    });
    function generateDetail(setting, res) {
        var record = res.record;
        var report_el;
        if (setting.type === "mobile") {
            report_el = kintone.mobile.app.record.getSpaceElement("report");
        }
        else {
            report_el = kintone.app.record.getSpaceElement("report");
        }
        var report_div = document.createElement('div');
        report_div.id = "graph";
        report_div.style = setting.style;
        var myChart = echarts.init(report_div);
        var option = {
            title: {
                text: '各渠道销量统计',
                x: 'center'
            },
            tooltip: {
                trigger: 'item',
                formatter: "{a} <br/>{b} : {c} ({d}%)",
                showContent: setting.showContent
            },
            legend: {
                orient: 'vertical',
                left: 'left',
                data: ['京东', '淘宝', '拼多多', '天猫', '考拉']
            },
            series: [
                {
                    name: '假期类型',
                    type: 'pie',
                    radius: '55%',
                    center: ['50%', '60%'],
                    data: [
                        { value: record.channel1.value, name: '京东' },
                        { value: record.channel2.value, name: '淘宝' },
                        { value: record.channel3.value, name: '拼多多' },
                        { value: record.channel4.value, name: '天猫' },
                        { value: record.channel5.value, name: '考拉' }
                    ],
                    itemStyle: {
                        emphasis: {
                            shadowBlur: 10,
                            shadowOffsetX: 0,
                            shadowColor: 'rgba(0, 0, 0, 0.5)'
                        }
                    }
                }
            ]
        };
        myChart.setOption(option);
        report_el.appendChild(report_div);
    }
    function generateTotal(setting) {
        if (document.getElementById('graph') !== null) {
            return;
        }
        var graph = document.createElement('div');
        graph.id = 'graph';
        graph.style = setting.style;
        var app;
        if (setting.type === "mobile") {
            kintone.mobile.app.getHeaderSpaceElement().appendChild(graph);
            app = kintone.mobile.app.getId();
        }
        else {
            kintone.app.getHeaderSpaceElement().appendChild(graph);
            app = kintone.app.getId();
        }
        var myChart = echarts.init(graph);
        var kintoneRecord = new kintoneJSSDK.Record();
        var rcOption = {
            app: app,
            query: 'order by date asc'
        };
        kintoneRecord.getAllRecordsByCursor(rcOption).then((rsp) => {
            var records = rsp.records;
            var graphData = { 'channel1': [], 'channel2': [], 'channel3': [], 'channel4': [], 'channel5': [] };
            var dateArray = [];
            for (var record of records) {
                var dateKey = record.date.value;
                graphData.channel1.push(record.channel1.value);
                graphData.channel2.push(record.channel2.value);
                graphData.channel3.push(record.channel3.value);
                graphData.channel4.push(record.channel4.value);
                graphData.channel5.push(record.channel5.value);
                dateArray.push(dateKey);
            }
            var option = {
                tooltip: {
                    trigger: 'axis',
                    axisPointer: {
                        type: 'shadow'
                    },
                    showContent: setting.showContent
                },
                legend: {
                    data: ['京东', '淘宝', '拼多多', '天猫', '考拉']
                },
                grid: {
                    left: '3%',
                    right: '4%',
                    bottom: '3%',
                    containLabel: true
                },
                xAxis: {
                    type: 'value'
                },
                yAxis: {
                    type: 'category',
                    data: dateArray
                },
                series: [
                    {
                        name: '京东',
                        type: 'bar',
                        stack: '总量',
                        label: {
                            normal: {
                                show: true,
                                position: 'insideRight'
                            }
                        },
                        data: graphData.channel1
                    },
                    {
                        name: '淘宝',
                        type: 'bar',
                        stack: '总量',
                        label: {
                            normal: {
                                show: true,
                                position: 'insideRight'
                            }
                        },
                        data: graphData.channel2
                    },
                    {
                        name: '拼多多',
                        type: 'bar',
                        stack: '总量',
                        label: {
                            normal: {
                                show: true,
                                position: 'insideRight'
                            }
                        },
                        data: graphData.channel3
                    },
                    {
                        name: '天猫',
                        type: 'bar',
                        stack: '总量',
                        label: {
                            normal: {
                                show: true,
                                position: 'insideRight'
                            }
                        },
                        data: graphData.channel4
                    },
                    {
                        name: '考拉',
                        type: 'bar',
                        stack: '总量',
                        label: {
                            normal: {
                                show: true,
                                position: 'insideRight'
                            }
                        },
                        data: graphData.channel5
                    }
                ]
            };
            myChart.setOption(option);
        }).catch((err) => {
            document.getElementById('graph').innerText = "获取数据失败";
        });
    }
}());

手机端画面:

             

pc端画面:

具体代码包括首页的实时变化数据的图表代码请参考完整文章:

双十一销量实时统计图表 - cybozu - cybozu开发者网站

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ASP.NET是一个基于Web的应用程序开发平台,支持多种编程语言和开发工具。随着Web应用程序的发展,数据可视化变得越来越重要,ECharts是一个非常流行的数据可视化库。 使用ECharts绘制图表需要几个步骤。首先,在ASP.NET项目中添加ECharts库,并在需要绘制图表的页面中引入相关的JavaScript文件和CSS。 然后,我们需要编写JavaScript代码来配置图表。这包括定义图表的类型、数据来源、样式和其他样式选项。可以在ECharts官网上找到各种类型的图表示例和文档,作为参考和指导。 最后,将图表渲染到HTML页面中。可以使用ECharts提供的API来将图表插入到指定的HTML元素中。 除了基本的图表绘制功能,ECharts还提供了一些高级的特性,如数据驱动的形变化、交互式数据探索、闪烁式动画效果等。这些特性可以进一步增强数据可视化的效果,为用户提供更好的数据分析和理解能力。 在ASP.NET应用程序中使用ECharts绘制图表可以使数据更好地呈现出来,为用户提供更好的数据可视化效果。这对于数据分析、报表和决策支持等方面都非常有帮助。 ### 回答2: ASP.NET是一个强大的Web应用程序框架,可以让开发者使用各种技术(如HTML、CSS、JavaScript等)来构建高效的Web应用程序。而ECharts则是一款极其强大的JavaScript图表库,可以在Web应用程序中呈现各种类型的图表,如折线、柱状、饼、雷达等等。 在ASP.NET中使用ECharts绘制图表非常简单,只需要引入ECharts的JavaScript文件,并编写一些JavaScript代码即可实现想要的图表效果。ASP.NET中的ECharts使用采用前端渲染的方式,将图表的数据和样式信息通过JSON格式传递给浏览器,由浏览器进行渲染,从而实现对数据的可视化。开发者可以通过ECharts提供的丰富的API来自定义图表样式,如更改颜色、字体、标签等。 在ASP.NET中使用ECharts的主要优点是能够快速实现数据可视化,使得开发者可以更直观地了解数据的特点,从而更快速地做出决策。同时,ECharts还支持对移动设备的适配,可以在不同设备上实现合适的图表展示效果。 总之,ASP.NET结合ECharts可以让开发者更便捷地实现数据可视化,展示出更直观的数据结果,帮助用户更好地了解和处理数据。 ### 回答3: asp.net echarts是一种非常强大的数据可视化组件,可以在asp.net网页中轻松地绘制各种图表,包括折线、柱状、饼状、散点等。由于asp.net echarts使用简单方便,所以很受开发者的喜爱。 想要在asp.net网页中使用echarts绘制图表,需要先准备好echarts库和所需的数据。可以通过引入echarts.js文件和样式表,然后在网页中设置一个容器,用于显示echarts图表。接下来,可以通过JavaScript或jQuery编写代码,在容器中绘制不同类型的图表,并对其进行样式和交互的设置。 使用asp.net echarts绘制图表时,需要注意一些细节问题。例如在加载echarts库时需要注意版本兼容性,需要对数据进行合理的处理和格式化,还需要设置一些参数和方法,以达到更好的可视化效果。 总之,使用asp.net echarts可以快速轻松地实现数据可视化的需求,使数据更加直观、易于理解,有助于提高网页的用户体验,也有助于更好地展示数据分析的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值