zoukankan      html  css  js  c++  java
  • layui 搜索加动态添加列

    有时候表格得配合chart bar 那种横向展示带时间 范围展示的 那种

     顺带着图下边再加个表格 table

     与表中数据相同,上边的列是动态加上去的.

    对于这个耗电对比,实现起来还是有点小复杂, 总体原理就是前端table内 列字段由后台组装,由于table内的data是json串直接怼上去的,有个设备名的列在cols内的直接前端初始化一个一个列头,不在后台添加

    具体为layui table是由 cols 列 和 data组成  cols 内field 是列绑定后台的字段,所以data内的 值与field内的字段是相对应的, 后台展示字段的数据在cols 内和data内都要加进去.要不后台数据无法和前端field内的字段相对应.

    在此也碰到了js内转后台的json对象的时候,数据又重新排序的问题. 导致展示的时候小时是按照从大到小排序,比如昨天的晚上10后的数据排在了今天的数据之后,对于list<string>这种方式是不变化的, 所以程序中后台的列头没有共用data内的值,

      table.render({
                    elem: '#tableId'
                    ,@* url: "/AutoNetwork/MeterRealData/List",*@
                    size: "sm",
                    cols: [hours]
                    , data: result             
                });

    后台返回值再加了一层

    public class Res
            {
               public JsonArray ja { get; set; }
                public List<string> hl { get; set; }
            }

    ja 是 table内数据 

    hl是列头数据,只要列头在前端排序对了,后台的data怼过来是根据hl 内的排序来的.

    数据库内采集的数据是从电表内读值,也就是说里边的有功电能是那时跑到的数字, 在存的时候也是这个数据,那求每小时耗能,只能是 小时i  减掉小时i-1 时的有功电能 ,

    再有就是数据要求每个小时的一个值,由于采集是10分钟一次,并且每小时最后一次采集时间并不固定. 

    如下表

    select deviceName, datepart(hour, updateTime)as h,datepart(DAY, updateTime) as d ,
    max(realData) as reald from   AutoNetwork_MeterRealData where attributeName = N'有功电能' and updatetime > DATEADD(HOUR, -24,
    GETDATE()) group by datepart(dd, updatetime),datepart(hour, updateTime),deviceName order by datepart(dd, updatetime)

    打开页面默认是统计24小时内的数据,

    group by datepart(dd, updatetime),datepart(hour, updateTime),deviceName  按小时 日  devicename 分组
    order by datepart(dd, updatetime) 按小时排序,
    max(realData)获取小组内 最大值
    最终过滤计算之后

    得到了两块电表 24小时内数据
    求小时内耗电量

    由于前段格式是动态的,无法在实体类内固定好列字段  最开始想动态添加字段,似乎c#实现起来挺麻烦,后来想前段需要的是json,拼装成需要的格式就行了,拼装json的方式

    JsonArray jsonarr = new JsonArray();  //竟然是facebook的库

     json对象用的是下边的

    Newtonsoft.Json.JsonObject jsonObject1 = new Newtonsoft.Json.JsonObject();

    Newtonsoft.Json.JsonObject jsonObject2 = new Newtonsoft.Json.JsonObject();

    两块电能表分别做好差值

    最终

    jsonarr.Add(jsonObject1);

    jsonarr.Add(jsonObject2);

      为列头名,  后边是值 

    Res re = new Res();
                    List<string> hl = new List<string>();
                    Newtonsoft.Json.JsonObject jsonObject1 = new Newtonsoft.Json.JsonObject();
                    Newtonsoft.Json.JsonObject jsonObject2 = new Newtonsoft.Json.JsonObject();
                    //初始化一列 
                    {
                  //      _log.Info("jsonObject1.Add(devname, 智能电表);");
                        jsonObject1.Add("devname", "智能电表");
                        jsonObject2.Add("devname", "智能电表2");
                     //   _log.Info("jsonObject1.Add(devname, 智能电表2);");
                    }
                    for (int i = 2; i < dt.Rows.Count; i++) //多取一个数,从2 开始循环, 弃用最小的那个为了第一个数的耗能值
                    {
                        if (dt.Rows[i]["deviceName"].ToString() == "智能电表")
                        {
                            float cha = float.Parse(dt.Rows[i]["reald"].ToString()) - float.Parse(dt.Rows[i - 2]["reald"].ToString());
                          //  _log.Info("i= "+i+" ifzhinengdianbiao1 小时" + dt.Rows[i]["h"].ToString() + " 值" + dt.Rows[i]["reald"].ToString());
                            jsonObject1.Add(dt.Rows[i]["d"].ToString()+"-"+dt.Rows[i]["h"].ToString(), cha.ToString());
                          /*  for (int j = 0; j < jsonObject1.Keys.Count; j++)
                            {
                                _log.Info("值 i="+i+"jsonObject1" + jsonObject1.Keys.ToArray()[j] + " 值" + dt.Rows[i]["reald"].ToString());
                            }              */         
                            hl.Add(dt.Rows[i]["d"].ToString() + "-" + dt.Rows[i]["h"].ToString());
                        }
                        if (dt.Rows[i]["deviceName"].ToString() == "智能电表2")
                        {
                            float cha = float.Parse(dt.Rows[i]["reald"].ToString()) - float.Parse(dt.Rows[i - 2]["reald"].ToString());
                        //    _log.Info("ifzhinengdianbiao2 小时" + dt.Rows[i]["h"].ToString() + " 值" + dt.Rows[i]["reald"].ToString());
                            jsonObject2.Add(dt.Rows[i]["d"].ToString() + "-" + dt.Rows[i]["h"].ToString(), cha.ToString());
                        //    _log.Info("ifzhinengdianbiao2");
                        }
                    }
                  //  _log.Info(" jsonarr.Add(jsonObject1);");
                    jsonarr.Add(jsonObject1);
                    jsonarr.Add(jsonObject2);
                    jsonarr.ToString();
                  //  _log.Info(" jsonarr.Add(jsonObject2);");
                    //  var retu = jsonarr.ToString();
                    re.hl = hl;
                    re.ja = jsonarr;
    
                    return re;
                }

    前端

     <div class="ok-card-body map-body">
                    <canvas id="canvas1"></canvas>              
                </div>
     window.onload = function () {
            var ctx1 = document.getElementById('canvas1').getContext('2d');
            window.myBar1 = new Chart(ctx1, {
                type: 'bar',
                data: barChartData1,
                options: {
                    responsive: true,
                    legend: {
                        position: 'top',
                    },
                    title: {
                        display: true,
                        text: '南屋北屋有功电能对比图'
                    }
                }
            });       
        };
     layui.use(["table", "form", "laydate"], function () {
            let table = layui.table;
            let form = layui.form;
            let laydate = layui.laydate;
            var $ = layui.$;//等同于jquery
            var result;
         //   var hours=new Array();
            laydate.render({
                elem: '#StartDateTime'
                ,type: 'datetime'
               
            });
    
            var hours = [
               {
                    field: 'devname', title: '设备名', align: 'center',  90, fixed: true@*, templet: function (d) {
                        return d.LAY_INDEX;
                    }*@
                }];
            $.ajax({
                url: "/AutoNetworkNew/EnergyConsumCompare/GetTableData", // //请求路径
                type: "get",// "post", //请求方式
                dataType: 'json', //期望获得的返回值类型
                async: false, //是否异步
               @* data: params, //传递的参数*@
                success: function (data) {
                    console.log(data);
                    if (data != '') {                 
                        result = data.ja;
                            var strs = new Array();
                        strs = data.hl;
                        for (var i = 0; i < strs.length; i++) {
                            hours.push({
                                field: strs[i], title: strs[i], align: 'center',  80, sort: false
                            });
                        }
                        
    
                    }
                },
                error: function (jqXHR, textStatus, errorThrown) {
    
                    //console.log('状态码:' + jqXHR.status);
                    //console.log('错误信息:' + jqXHR.statusText);
                    //console.log('服务器反馈信息:' + textStatus);
                }
            });
           DynamicLoad();
            function DynamicLoad() {
                //动态加载数据
            table.render({
                    elem: '#tableId'
                    ,@* url: "/AutoNetwork/MeterRealData/List",*@
                    size: "sm",
                    cols: [hours]
                    , data: result             
                });
           }
            laydate.render({
                elem: '#EndDateTime'
                , type: 'datetime'
                , done: function (value, date) {
                    var start = $('#StartDateTime').val();
                    var end = value;
                    var re = CompareDate(start, end);
                    if (!re) {
                      // layer.alert('你选择的日期是:' + value + '<br>获得的对象是' + JSON.stringify(date));
                        layer.alert('结束时间小于起始时间');
                        $('#EndDateTime').reset();
                    }
                }
            });
            form.on('submit(search)', function (data) {
              //  console.log(data);
                $.ajax({
                    url: '/AutoNetworkNew/EnergyConsumCompare/GetSerachData',
                    type: 'GET',
                    data: {
                        StartDateTime: $('#StartDateTime').val()
                        , EndDateTime: $('#EndDateTime').val()
                    },
                    success: function (data1) {
                         console.log(data1);
                        if (data1.length == 0) {
                            alert("此时辰范围内,没有数据");
                            return;
                        }
                        if (barChartData1.labels.length > 0) {
                            barChartData1.labels.length = 0;
                            barChartData1.datasets.length = 0;  //清空
                        }
    
                        var labhours = data1[0]['hours'];
                        //初始化x轴
                        for (var i = 0; i < labhours.length; i++) {
                            barChartData1.labels.push(labhours[i] + '点');
                        }
    
                        //根据数量新建datasets
                        for (var i = 0; i < data1.length; i++) {
                            var newDataset = {
                                label: '',
                                backgroundColor: '',// color(dsColor).alpha(0.5).rgbString(),
                                borderColor: '',// dsColor,
                                borderWidth: 1,
                                data: []
                            };
    
                            if (i === 0) //电能表1 柱颜色
                            {
                                var dsColor = window.chartColors['green'];
                                newDataset.backgroundColor = color(dsColor).alpha(0.5).rgbString();
                                newDataset.borderColor = dsColor;
    
                            } else if (i === 1) //电能表2
                            {
                                var dsColor1 = window.chartColors['yellow'];
                                newDataset.backgroundColor = color(dsColor1).alpha(0.5).rgbString();
                                newDataset.borderColor = dsColor1;
                            }
                            newDataset.label = data1[i]['devname'];  //柱名
                            var engl = data1[i]['lenergy'];
                            for (var index = 0; index < barChartData1.labels.length; index++) {
                                newDataset.data.push(parseFloat(engl[index]));
                            }
                            barChartData1.datasets.push(newDataset);
                        }
                        window.myBar1.update();
                    }
                    , error: function (err) {
                        // console.log(err.statusText);
                        console.log('异常');
                    }
                });
    
                //获取表数据
                $.ajax({
                    url: "/AutoNetworkNew/EnergyConsumCompare/GetTableData", // //请求路径
                    type: "get",// "post", //请求方式
                    dataType: 'json', //期望获得的返回值类型
                    async: false, //是否异步
                    data: {
                        StartDateTime: $('#StartDateTime').val()
                        , EndDateTime: $('#EndDateTime').val()
                    },
                    success: function (data) {
                        console.log(data);
                        if (data != '') {
                            result = null;
                            result = data.ja;
                            var strs = [];
                            strs = data.hl;
                            hours.length = 0; //清空数组 并重新初始化
                            hours = [
                                {
                                    field: 'devname', title: '设备名', align: 'center',  90, fixed: true
                                }];
                            for (var i = 0; i < strs.length; i++) {                          
                                hours.push({
                                    field: strs[i], title: strs[i], align: 'center',  80, sort: false
                                });
                            }
                            DynamicLoad();
                        }
                    },
                error: function (jqXHR, textStatus, errorThrown) {
    
                    //console.log('状态码:' + jqXHR.status);
                    //console.log('错误信息:' + jqXHR.statusText);
                    //console.log('服务器反馈信息:' + textStatus);
                }
            });
                return false;
            });
        })
        //小时耗能bar
       initCaijiName1();
        function initCaijiName1() {
    
            $.ajax({
                url: '/AutoNetworkNew/EnergyConsumCompare/GetSerachData',
                type: 'GET',
                success: function (data1) {
                 console.log(data1);
                    if (data1.length == 0) {
                        alert("此时辰范围内,没有数据");
                        return;
                    }
    
                    var labhours = data1[0]['hours'];
                    //初始化x轴
                    for (var i = 0; i < labhours.length; i++) {
                        barChartData1.labels.push(labhours[i] + '点');
                    }
    
                    //根据数量新建datasets
                    for (var i = 0; i < data1.length; i++) {
                        var newDataset = {
                            label: '',
                            backgroundColor: '',// color(dsColor).alpha(0.5).rgbString(),
                            borderColor: '',// dsColor,
                            borderWidth: 1,
                            data: []
                        };
    
                        if (i === 0) //电能表1 柱颜色
                        {
                            var dsColor = window.chartColors['green'];
                            newDataset.backgroundColor = color(dsColor).alpha(0.5).rgbString();
                            newDataset.borderColor = dsColor;
    
                        } else if (i === 1) //电能表2
                        {
                            var dsColor1 = window.chartColors['yellow'];
                            newDataset.backgroundColor = color(dsColor1).alpha(0.5).rgbString();
                            newDataset.borderColor = dsColor1;
                        }
                        newDataset.label = data1[i]['devname'];  //柱名
                        var engl = data1[i]['lenergy'];
                        for (var index = 0; index < barChartData1.labels.length; index++) {
                            newDataset.data.push(parseFloat(engl[index]));
                        }
                        barChartData1.datasets.push(newDataset);
                    }
                    window.myBar1.update();
                }
                , error: function (err) {
                    // console.log(err.statusText);
                    console.log('异常');
                }
    
            });
        }

     于是浩浩荡荡的一连串调整,最终实现了想象中的效果,

  • 相关阅读:
    HDU 6430 Problem E. TeaTree(虚树)
    hdu6437 Problem L.Videos(网络流)
    Rikka with Prefix Sum(组合数学)
    借教室
    2018年全国多校算法寒假训练营练习比赛(第五场)H Tree Recovery
    1296 营业额统计
    FZU oj Problem 2082 过路费
    大数乘法(适合k进制)
    重载小于号
    莫比乌斯
  • 原文地址:https://www.cnblogs.com/zuochanzi/p/13755451.html
Copyright © 2011-2022 走看看