• 记录一下个人Tp5框架Highcharts图表传值与图表数据赋值


    曲线面积图:


    1、首先引入Highcharts文件,因为我用的是layui框架所以会有一些冲突,特此将 
    highcharts.js献上:https://pan.baidu.com/s/1lLJ7k83W1GgnbI0Xt4Uqhw      提取码:jyoi  或者扫描二维码

    首先引入highcharts文件与我们写图表js的文件

     并且定义好两个id

     现在去执行这个方法获取数据并渲染

    //转义
    function HTMLDecode(input) {
        var converter = document.createElement("DIV");
        converter.innerHTML = input;
        var output = converter.innerText;
        converter = null;
        return output;
    }
    
    
    //数据概况历史总收入历史总支出、ROI图标
    function _initOverviewHighcharts(start_date, end_date) {
        $.ajax({
            type: 'POST',
            url: "/game/overview/getChartsData",
            data:
                {
                    start_date: start_date,
                    end_date: end_date
                },
            dataType: 'json',
            success: function (data) {
                data = $.parseJSON(data)
                var chartsDate = JSON.parse(HTMLDecode(data.chartsDate));
                var chartsData = JSON.parse(HTMLDecode(data.chartsData));
                var chartsRoiData = JSON.parse(HTMLDecode(data.chartsRoiData));
                // 图表初始化函数
                option = {
                    chart: {
                        type: 'areaspline'
                    },
                    exporting: {
                        allowHTML: true,
                        buttons: {
                            enabled: true
                        }
                    },
                    title: {
                        text: '历史总收入、支出走势'
                    },
                    legend: {
                        layout: 'vertical',
                        align: 'left',
                        verticalAlign: 'top',
                        x: 100,
                        y: -10,
                        floating: true,
                        borderWidth: 1,
                        backgroundColor: (Highcharts.theme && Highcharts.theme.legendBackgroundColor) || '#FFFFFF'
                    },
                    xAxis: {
                        categories: [],
                    },
                    yAxis: {
                        title: {
                            text: '单位: 元'
                        },
                        labels: {
                            formatter: function () {
                                return this.value / 10000 + '万';
                            }
                        }
                    },
                    tooltip: {
                        shared: true,
                        valueDecimals: 2,
                        valueSuffix: '元'
                    },
                    plotOptions: {
                        areaspline: {
                            fillOpacity: 0.5
                        },
                        series: {
                            fillColor: {
                                linearGradient: [0, 0, 0, 300],
                                stops: [
                                    [0, Highcharts.getOptions().colors[0]],
                                    [1, Highcharts.color(Highcharts.getOptions().colors[3]).setOpacity(0).get('rgba')]
                                ]
                            }
                        }
                    },
                    series: []
                };
                option1 = {
                    chart: {
                        type: 'areaspline'
                    },
                    title: {
                        text: '累计ROI走势'
                    },
                    legend: {
                        layout: 'vertical',
                        align: 'left',
                        verticalAlign: 'top',
                        x: 100,
                        y: -10,
                        floating: true,
                        borderWidth: 1,
                        backgroundColor: (Highcharts.theme && Highcharts.theme.legendBackgroundColor) || '#FFFFFF'
                    },
                    xAxis: {
                        categories: [],
                    },
                    yAxis: {
                        title: {
                            text: '单位: 百分比'
                        },
                        labels: {
                            formatter: function () {
                                return this.value / 10 + '0';
                            }
                        }
                    },
                    tooltip: {
                        shared: true,
                        valueDecimals: 2,
                        valueSuffix: '%'
                    },
                    plotOptions: {
                        areaspline: {
                            fillOpacity: 0.5
                        }
                    },
                    series: []
                };
                $.each(chartsDate, function (key, item) {
                    option.xAxis.categories.push(item);
                    option1.xAxis.categories.push(item);
                });
                option.series = chartsData;
                option1.series = chartsRoiData;
                Highcharts.chart('container_1', option);
                Highcharts.chart('container_2', option1);
            }
        });
    }

    这边是两个图表。通过ajax请求数据,请求到之后进行转义,渲染。

    附带后端代码:

    可能有点low,我在后端直接把数据组装起来了。

    public function getChartsData()
        {
            $start_date = input('start_date');
            $end_date = input('end_date');
            $gameid = $this->getUserDefaultGameID();
            $chartsDb = Db::connect('mysql')->table(TB_OVERVIEW);
            $charts = $chartsDb->field("date,IFNULL(round(income_sum/100,2),0.00) as 'income_sum',IFNULL(round(pay_sum/100,2),0.00) as 'pay_sum',IFNULL(round(income_sum/pay_sum*100,2),0.00) as 'roi'")->order("date asc")->where(['isdel' => 0, 'gameid' => $gameid])->whereBetween('date', [$start_date, $end_date])->select()->toArray();
            $chartsDate = array_column($charts, 'date');
            $chartsDatas = [
                [
                    'name' => '历史总收入',
                    'data' => json_decode('[' . join(',', array_column($charts, 'income_sum')) . ']', true)
                ],
                [
                    'name' => '历史总支出',
                    'data' => json_decode('[' . join(',', array_column($charts, 'pay_sum')) . ']', true)
                ]
            ];
            $chartsRoiDatas = [
                [
                    'name' => '累计Roi',
                    'data' => json_decode('[' . join(',', array_column($charts, 'roi')) . ']', true)
                ]
            ];
            $returnData = [
                'chartsDate' => json_encode($chartsDate),
                'chartsData' => json_encode($chartsDatas),
                'chartsRoiData' => json_encode($chartsRoiDatas),
            ];
            return json_encode($returnData);
        }

    此博客给自己看的。实现效果就好

  • 相关阅读:
    IDEA快捷键
    关于redis key命名规范的设计 【转载】
    Mybatis数据源与连接池 【转载】
    通过缓冲区读文件和非缓冲区读文件有什么区别
    BCB6 使用正则表达式的例子
    QT在子窗口外单击关闭子窗口
    QT5 中文乱码
    QT 鼠标右键菜单
    关于线程池的几个问题
    关于ConcurentHashMap的几个问题
  • 原文地址:https://www.cnblogs.com/T8888/p/14101194.html
Copyright © 2020-2023  润新知