美文网首页
Django系列16-员工管理系统实战--echar图表统计

Django系列16-员工管理系统实战--echar图表统计

作者: 只是甲 | 来源:发表于2022-09-20 14:54 被阅读0次

    一. 图表统计:表结构设计

    图表统计是无需设计表结构的,是根据现有的表数据来生成可视化的图表。

    二. URL调整

    新增对应的 增删改查对应的URL,如下:

    # 数据统计
        path('chart/list/', chart.chart_list),
        path('chart/bar/', chart.chart_bar),
        path('chart/pie/', chart.chart_pie),
        path('chart/line/', chart.chart_line),
        path('chart/highcharts/', chart.highcharts),
    

    三. 后端功能实现

    图表统计功能后端实现
    chart.py

    from django.shortcuts import render
    from django.http import JsonResponse
    
    
    def chart_list(request):
        """ 数据统计页面 """
        return render(request, 'chart_list.html')
    
    
    def chart_bar(request):
        """ 构造柱状图的数据 """
        # 数据可以去数据库中获取
        legend = ["只是甲", "NO.1"]
        series_list = [
            {
                "name": '只是甲',
                "type": 'bar',
                "data": [15, 20, 36, 10, 10, 10]
            },
            {
                "name": 'NO.1',
                "type": 'bar',
                "data": [45, 10, 66, 40, 20, 50]
            }
        ]
        x_axis = ['1月', '2月', '4月', '5月', '6月', '7月']
    
        result = {
            "status": True,
            "data": {
                'legend': legend,
                'series_list': series_list,
                'x_axis': x_axis,
            }
        }
        return JsonResponse(result)
    
    
    def chart_pie(request):
        """ 构造饼图的数据 """
    
        db_data_list = [
            {"value": 2048, "name": 'IT部门'},
            {"value": 1735, "name": '运营'},
            {"value": 580, "name": '新媒体'},
        ]
    
        result = {
            "status": True,
            "data": db_data_list
        }
        return JsonResponse(result)
    
    
    def chart_line(request):
        legend = ["上海", "广西"]
        series_list = [
            {
                "name": '上海',
                "type": 'line',
                "stack": 'Total',
                "data": [15, 20, 36, 10, 10, 10]
            },
            {
                "name": '广西',
                "type": 'line',
                "stack": 'Total',
                "data": [45, 10, 66, 40, 20, 50]
            }
        ]
        x_axis = ['1月', '2月', '4月', '5月', '6月', '7月']
    
        result = {
            "status": True,
            "data": {
                'legend': legend,
                'series_list': series_list,
                'x_axis': x_axis,
            }
        }
        return JsonResponse(result)
    
    
    def highcharts(request):
        """ highcharts示例 """
    
        return render(request,'highcharts.html')
    
    

    四. 前端页面

    4.1 通用模板

    layout.html

    image.png

    4.2 前端页面

    chart_list.html

    {% extends 'layout.html' %}
    {% load static %}
    
    
    {% block content %}
        <div class="container">
            <div class="panel panel-default">
                <div class="panel-heading">折线图</div>
                <div class="panel-body">
                    <div id="m1" style="width: 100%;height: 300px"></div>
                </div>
            </div>
            <div class="row">
                <div class="col-sm-8">
                    <div class="panel panel-default">
                        <div class="panel-heading">柱状图</div>
                        <div class="panel-body">
                            <div id="m2" style="width: 100%;height: 400px;"></div>
                        </div>
                    </div>
                </div>
                <div class="col-sm-4">
    
                    <div class="panel panel-default">
                        <div class="panel-heading">饼图</div>
                        <div class="panel-body">
    
                            <div id="m3" style="width: 100%;height: 400px;"></div>
    
                        </div>
                    </div>
                </div>
            </div>
        </div>
    {% endblock %}
    
    {% block js %}
        <script src="{% static 'js/echarts.js' %}"></script>
        <script type="text/javascript">
    
            $(function () {
    
                initLine();
    
                initBar();
    
                initPie();
            })
    
            /**
             * 初始化折线图
             */
            function initLine() {
                var myChart = echarts.init(document.getElementById('m1'));
                var option = {
                    title: {
                        text: '分公司业绩图',
                        left: "center",
                    },
                    tooltip: {
                        trigger: 'axis'
                    },
                    legend: {
                        data: [],
                        bottom: 0
                    },
                    toolbox: {
                        feature: {
                            saveAsImage: {}
                        }
                    },
                    xAxis: {
                        type: 'category',
                        boundaryGap: false,
                        data: []
                    },
                    yAxis: {
                        type: 'value'
                    },
                    series: []
                };
    
    
                $.ajax({
                    url: '/chart/line/',
                    type: "get",
                    dataType: "JSON",
                    success: function (res) {
                        if (res.status) {
                            option.legend.data = res.data.legend;
                            option.xAxis.data = res.data.x_axis;
                            option.series = res.data.series_list;
    
                            myChart.setOption(option);
                        }
                    }
                })
    
    
            }
    
            /**
             * 初始化柱状图
             */
            function initBar() {
                // 基于准备好的dom,初始化echarts实例
                var myChart = echarts.init(document.getElementById('m2'));
    
                // 指定图表的配置项和数据
                var option = {
                    title: {
                        text: '员工业绩阅读汇总信息',
                        textAlign: "auto",
                        left: "center",
                    },
                    tooltip: {},
                    legend: {
                        data: [],  // 后台获取
                        bottom: 0
                    },
                    xAxis: {
                        data: []  // 后台获取
                    },
                    yAxis: {},
                    series: []  // 后台获取
                };
    
                $.ajax({
                    url: "/chart/bar/",
                    type: "get",
                    dataType: "JSON",
                    success: function (res) {
                        // 将后台返回的数据,更新到option中。
                        if (res.status) {
                            option.legend.data = res.data.legend;
                            option.xAxis.data = res.data.x_axis;
                            option.series = res.data.series_list;
    
                            // 使用刚指定的配置项和数据显示图表。
                            myChart.setOption(option);
                        }
                    }
                })
    
    
            }
    
    
            /**
             * 初始化饼状图
             */
            function initPie() {
                // 基于准备好的dom,初始化echarts实例
                var myChart = echarts.init(document.getElementById('m3'));
                var option = {
                    title: {
                        text: '部门预算占比',
                        subtext: '广西分公司',
                        left: 'center'
                    },
                    tooltip: {
                        trigger: 'item'
                    },
                    legend: {
                        bottom: 0
                    },
                    series: [
                        {
                            name: '预算',
                            type: 'pie',
                            radius: '50%',
                            data: [
                                {value: 1048, name: 'IT部门'},
                                {value: 735, name: '运营'},
                                {value: 580, name: '新媒体'},
                            ],
                            emphasis: {
                                itemStyle: {
                                    shadowBlur: 10,
                                    shadowOffsetX: 0,
                                    shadowColor: 'rgba(0, 0, 0, 0.5)'
                                }
                            }
                        }
                    ]
                };
    
                $.ajax({
                    url: "/chart/pie/",
                    type: "get",
                    dataType: "JSON",
                    success: function (res) {
                        if (res.status) {
                            option.series[0].data = res.data;
                            myChart.setOption(option);
                        }
                    }
                })
    
            }
    
        </script>
    {% endblock %}
    
    

    五. 页面测试

    将官网下载的 echarts.js、echarts.min.js 文件拷贝到项目的app01/static/js 下

    image.png

    参考:

    1. https://www.bilibili.com/video/BV1NL41157ph

    相关文章

      网友评论

          本文标题:Django系列16-员工管理系统实战--echar图表统计

          本文链接:https://www.haomeiwen.com/subject/cziagrtx.html