layui动态表头的实现代码


Posted in Javascript onAugust 22, 2019

又get到一种思路,不光是layui。

layui动态表头的实现代码

外面这层table,就是用原生拼接的。

@Override
  public List<Map<String, Object>> distribution(String begin,String end,String name,String hospitalCode) {
    HashMap<String, Object> params = new HashMap<String, Object>();
    StringBuffer buf = new StringBuffer();
    
    List<HRateAllotDepartment> hRateAllotDepartment = rateAllotDepartmentDao.getRateDepartment(hospitalCode);
    String str1 = "";
    String str2 = "";
    for(int i=0;i<hRateAllotDepartment.size();i++) {
      str1 +=",sum(`"+hRateAllotDepartment.get(i).getDepartmentName()+"`)`"+hRateAllotDepartment.get(i).getDepartmentName()+"`";
      str2 +=",max(case when e.`name`='"+hRateAllotDepartment.get(i).getDepartmentName()+"' then f.price else 0 end) `"+hRateAllotDepartment.get(i).getDepartmentName()+"`";
    
    }
    
    buf.append("select d.`name`,d.productId_,count(*) renshu,sum(price) total"+str1+" ");
    buf.append(" from ( SELECT b.`name`,b.id productId_ ,d.id,max(b.price) price ");
    buf.append(" "+str2+" FROM ");
    buf.append(" dt_pay_health_order_product a "
        + "JOIN dt_pay_health_order d ON a.orderId = d.id "
        + "JOIN dt_pay_health_product b ON a.productId = b.id ");
    buf.append(" JOIN dt_hospital_health_item c ON b.bizId = c.id "
        + "JOIN dt_hospital_health_order_use g ON g.orderProductId = a.id "
        + "JOIN dt_hospital_rate_allot f ON b.id = f.productId ");
    buf.append(" JOIN dt_hospital_department e ON f.departmentId = e.id where g.createDate>=:begin and g.createDate<=:end and b.name like :name and a.state ='02' group by b.`id`,d.`id` ) d group by d.productId_ WITH ROLLUP ");
    if(begin == null || begin.length() == 0){
      begin = "1970-01-01";
    }
    if(end == null || end.length() == 0){
      end = "2099-01-01";
    }
    params.put("begin",begin);
    params.put("end",end);
    params.put("name","%"+name+"%");
    return this.getMapListByMap(buf.toString(), params); 
    
    
  }

可以看到,一开始是有一个list,这个list是医院医生可以配置的科室,这些科室就是动态的。这样一来后台即可得到动态数据。同理,如果在layui时用到page,在这里返回成page类型即可。接下来再看js

function toList(begin,end,name){
    
    console.log(begin);
    console.log(end);
    
    $.ajax({
      url: basePath + "/biz/hospital/rate/allot/list.do",
      data: {
        begin:begin,
        end:end,
        name:name
      },
      type : 'post',
      dataType : 'json',
      success : function(data) {
          
        var arrayPrice = new Array();

        for(var i=0;i<data.length;i++){
          var arrayPrice1 = new Array();
        for(var key in data[i]){
          
          if(key!="name"&&key!="productId_"&&key!="renshu"&&key!="total"){
            arrayPrice1[key]=data[i][key];
          }  
        }
        arrayPrice.push(arrayPrice1);
      }
        
        var title="";
        var sumCols="";
        var partCols=new Array();
        
        for(var i=0;i<arrayPrice.length;i++){
          
          var partColsStr = "";
          
          for(var key in arrayPrice[i]){
        
            if(i==0&&(arrayPrice[arrayPrice.length-1][key]!=0)){
               title+="<th class='firstTh'>"+key+"(元)</th>";
            }
            if(i==(arrayPrice.length-1)&&(arrayPrice[arrayPrice.length-1][key]!=0)){
              sumCols+="<td class='secondTd'>"+arrayPrice[i][key]+"</td>";
            }
            if(i!=(arrayPrice.length-1)&&(arrayPrice[arrayPrice.length-1][key]!=0)){
              partColsStr += "<td class='thirdTd'>"+arrayPrice[i][key]+"</td>";
              
            }
           
          }
          
          partCols.push(partColsStr);
          
        }

        var sRenshu = 0;
        var stotal = 0;
        
        var tablex = "";
        
        tablex += "<tr class='firstTr'><th class='firstTh'>项目名称</th><th class='firstTh'>检查人数</th><th class='firstTh'>金额(元)</th>"+title+"</tr>";
        
        if(data!=null && data.length>0){
          for(var i=0;i<data.length-1;i++){
            sRenshu+=data[i].renshu;
            stotal+=data[i].total;
          }
          
          tablex += "<tr class='secondTr'><td class='secondTd'>总计</td><td class='secondTd'>"+sRenshu+"</td><td class='secondTd'>"+stotal+"</td>"+sumCols+"</tr>";
          
          for(var i=0;i<data.length-1;i++){
             {
              tablex += "<tr class='thirdTr'><td class='thirdTd'>"+data[i].name+"</td>" +
                  "<td class='thirdTd'>" +
                    "<a style='color:#ff5722' href="+basePath +" rel="external nofollow" rel="external nofollow" /biz/hospital/rate/allot/toPageMx.do?startDate="+$("#startDate").val().toString()
                                              +"&endDate="+$("#endDate").val().toString()
                                              +"&productId_="+data[i].productId_+">"+
                                              data[i].renshu+"</a></td>" +
                  "<td class='thirdTd'>"+data[i].total+ partCols[i] +
                  "</tr>";
            }
          }
          
        }
        $("#table_status").empty();
        $("#table_status").append(tablex);
          
        },
      error : function() {
        layer.msg('系统异常,请联系管理员!',{icon:2,time:2000});
      }
    });
    
    
  }

可以在最上方图看到,有些字段是固定的,但是有些字段是动态的。思路是通过将调用接口返回出来的数据,动态的部分放到一个键值对数组下。这样一来,固定的部分,依然可以用返回的data得到,而动态的部分,用处理的数组循环赋值即可。动态表头就是动态数组的键。数据就是值。

function toList(begin,end,name){
    
    console.log(begin);
    console.log(end);
    
    $.ajax({
      url: basePath + "/biz/hospital/rate/allot/list.do",
      data: {
        begin:begin,
        end:end,
        name:name
      },
      type : 'post',
      dataType : 'json',
      success : function(data) {
          
        var arrayPrice = new Array();

        for(var i=0;i<data.length;i++){
          var arrayPrice1 = new Array();
        for(var key in data[i]){
          
          if(key!="name"&&key!="productId_"&&key!="renshu"&&key!="total"){
            arrayPrice1[key]=data[i][key];
          }  
        }
        arrayPrice.push(arrayPrice1);
      }
        
        var title="";
        var sumCols="";
        var partCols=new Array();
        
        for(var i=0;i<arrayPrice.length;i++){
          
          var partColsStr = "";
          
          for(var key in arrayPrice[i]){
        
            if(i==0&&(arrayPrice[arrayPrice.length-1][key]!=0)){
               title+="<th class='firstTh'>"+key+"(元)</th>";
            }
            if(i==(arrayPrice.length-1)&&(arrayPrice[arrayPrice.length-1][key]!=0)){
              sumCols+="<td class='secondTd'>"+arrayPrice[i][key]+"</td>";
            }
            if(i!=(arrayPrice.length-1)&&(arrayPrice[arrayPrice.length-1][key]!=0)){
              partColsStr += "<td class='thirdTd'>"+arrayPrice[i][key]+"</td>";
              
            }
           
          }
          
          partCols.push(partColsStr);
          
        }

        var sRenshu = 0;
        var stotal = 0;
        
        var tablex = "";
        
        tablex += "<tr class='firstTr'><th class='firstTh'>项目名称</th><th class='firstTh'>检查人数</th><th class='firstTh'>金额(元)</th>"+title+"</tr>";
        
        if(data!=null && data.length>0){
          for(var i=0;i<data.length-1;i++){
            sRenshu+=data[i].renshu;
            stotal+=data[i].total;
          }
          
          tablex += "<tr class='secondTr'><td class='secondTd'>总计</td><td class='secondTd'>"+sRenshu+"</td><td class='secondTd'>"+stotal+"</td>"+sumCols+"</tr>";
          
          for(var i=0;i<data.length-1;i++){
             {
              tablex += "<tr class='thirdTr'><td class='thirdTd'>"+data[i].name+"</td>" +
                  "<td class='thirdTd'>" +
                    "<a style='color:#ff5722' href="+basePath +" rel="external nofollow" rel="external nofollow" /biz/hospital/rate/allot/toPageMx.do?startDate="+$("#startDate").val().toString()
                                              +"&endDate="+$("#endDate").val().toString()
                                              +"&productId_="+data[i].productId_+">"+
                                              data[i].renshu+"</a></td>" +
                  "<td class='thirdTd'>"+data[i].total+ partCols[i] +
                  "</tr>";
            }
          }
          
        }
        $("#table_status").empty();
        $("#table_status").append(tablex);
          
        },
      error : function() {
        layer.msg('系统异常,请联系管理员!',{icon:2,time:2000});
      }
    });
    
    
  }

这块是name这些的是固定的,就排除掉,然后将数据放到arrayPrice1下再push到数组下。tablex就是表格的html。当时拼接的是分两步,先是表头,然后是数据。有个总计,后来在sql下加了WITH ROLLUP就得到了。

for(var key in arrayPrice[i]){

    
        if(i==0&&(arrayPrice[arrayPrice.length-1][key]!=0)){
           title+="<th class='firstTh'>"+key+"(元)</th>";
        }
        if(i==(arrayPrice.length-1)&&(arrayPrice[arrayPrice.length-1][key]!=0)){
          sumCols+="<td class='secondTd'>"+arrayPrice[i][key]+"</td>";
        }
        if(i!=(arrayPrice.length-1)&&(arrayPrice[arrayPrice.length-1][key]!=0)){
          partColsStr += "<td class='thirdTd'>"+arrayPrice[i][key]+"</td>";
          
        }
       
      }

这块就是动态的数据,title表头,sumCols总计,partColsStr具体数据,加到tablex下就行。以上就是原生的思路。

layui动态表头的实现代码

这块table用到了layui,当时也是看着这个layui动态设置的思路去写的原生。主要思路是:cols是一个数组,通过ajax得到数据后放到数组下,再放到cols下即可。

$.ajax({
  url: basePath + "/biz/hospital/rate/allot/department/getDepartment.do",
  data: {
  
  },
  type : 'post',
  dataType : 'json',
  success : function(data) {
    mycols[0] = {field : 'nameTrue', title:"姓名", align:'center',width:'120'};
    mycols[1] = {field : 'telephoneTrue', title:'支付手机号', align:'center',width:'120'};
    mycols[2] = {field : 'orderNO', title:'订单号', align:'center',width:'120'};
    mycols[3] = {field : 'createDate', title:'订单创建时间', align:'center',width:'120'};
    mycols[4] = {field : 'modifyDate', title:'订单使用时间', align:'center',width:'120'};
    mycols[5] = {field : 'price', title:'支付金额(元)', align:'center',width:'120'};
    
    for (var i = 0;i < data.length; i++){ 
      var obj = data[i].departmentName;
      if(obj!=0){
        mycols[i+6] = {field : obj, title:obj+"(元)", align:'center',width:'120'};
      }
      
      }
    
  console.log(mycols);
  
  reload();
  
  },
  error : function() {
    layer.msg('系统异常,请联系管理员!',{icon:2,time:2000});
  }
});

以上是ajax调用后处理的数组。下面这些就是table。reload();就是重新渲染。

var options = {
      url: basePath + "/biz/hospital/rate/allot/list_mx.do",
      method: 'post',
      where:{
        begin:$("#startDate").val().toString(),
        end:end,
        productId_:$("#productId_").val().toString(),
        orderNO:$("#qorderNO").val().toString(),
        name:$("#qname").val().toString()
      },
      //分页请求参数
      request:{
        pageName: 'pageIndex', //页码
        limitName: 'limit' //每页多少数据
      },
      //返回的数据格式
      response:{
         statusName: 'status', //数据状态的字段名称,默认:code
         statusCode: 200, //成功的状态码,默认:0
         msgName: 'message', //状态信息的字段名称,默认:msg
         countName: 'total', //数据总数的字段名称,默认:count
         dataName: 'data' //数据列表的字段名称,默认:data
      },
      //每页10条数据
      limit: 10,
      
      //加载时出现加载条
      loading: true,
      elem: '#data_table',
      cols: [
        mycols
       ],
       

       
      id: 'dataTable',
      page: true,
      };
  
  //方法级渲染
  table.render(options);

function reload(){
    
    date = new Date($("#endDate").val());
    
    date=date.setDate(date.getDate()+1);
    date=new Date(date);
  
    datemonth=date.getMonth()+1;   //获取当前月份(0-11,0代表1月)

    end=date.getFullYear()+"-"+datemonth+"-"+date.getDate();
    
    //options.where.departmentId = $("#departmentId").val();
    options.where.begin = $("#startDate").val();
    options.where.end = end;
    options.where.orderNO = $("#qorderNO").val();;
    options.where.name = $("#qname").val();;
     
    table.reload("dataTable",options);
    
  }

可以看到

cols: [
        mycols
       ],

这个就是动态数据。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
基于jquery的高性能td和input切换并可修改内容实现代码
Jan 09 Javascript
JavaScript splice()方法详解
Sep 22 Javascript
详解Bootstrap按钮
Jan 04 Javascript
Bootstrap基本布局实现方法详解
Nov 25 Javascript
JavaScript使用简单正则表达式的数据验证功能示例
Jan 13 Javascript
js canvas实现放大镜查看图片功能
Jun 08 Javascript
Rollup处理并打包JS文件项目实例代码
May 31 Javascript
浅谈Angular单元测试总结
Mar 22 Javascript
解决vue+ element ui 表单验证有值但验证失败问题
Jan 16 Javascript
微信公众号中的JSSDK接入及invalid signature等常见错误问题分析(全面解析)
Apr 11 Javascript
jQuery插件simplePagination的使用方法示例
Apr 28 jQuery
jquery实现简单每周轮换的日历
Sep 10 jQuery
深入理解令牌认证机制(token)
Aug 22 #Javascript
聊聊鉴权那些事(推荐)
Aug 22 #Javascript
在Node.js中将SVG图像转换为PNG,JPEG,TIFF,WEBP和HEIF格式的方法
Aug 22 #Javascript
vue使用高德地图根据坐标定位点的实现代码
Aug 22 #Javascript
ES6基础之字符串和函数的拓展详解
Aug 22 #Javascript
node实现爬虫的几种简易方式
Aug 22 #Javascript
vue router动态路由设置参数可选问题
Aug 21 #Javascript
You might like
基于HTTP长连接的&quot;服务器推&quot;技术的php 简易聊天室
2009/10/31 PHP
PHP利用REFERER根居访问来地址进行页面跳转
2013/09/28 PHP
ThinkPHP标签制作教程
2014/07/10 PHP
laravel 使用事件系统统计浏览量的实现
2019/10/16 PHP
jquery实现的超出屏幕时把固定层变为定位层的代码
2010/02/23 Javascript
JS实现图片预加载无需等待
2012/12/21 Javascript
javascript的动态加载、缓存、更新以及复用(一)
2014/06/09 Javascript
AspNet中使用JQuery上传插件Uploadify详解
2015/05/20 Javascript
jquery 构造函数在表单提交过程中修改数据
2015/05/25 Javascript
JQuery中DOM加载与事件执行实例分析
2015/06/13 Javascript
jquery实现根据浏览器窗口大小自动缩放图片的方法
2015/07/17 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
2015/09/24 Javascript
jQuery限制图片大小的方法
2016/05/25 Javascript
js实现楼层导航功能
2017/02/23 Javascript
nodejs服务搭建教程 nodejs访问本地站点文件
2017/04/07 NodeJs
bootstrap如何让dropdown menu按钮式下拉框长度一致
2017/04/10 Javascript
vue.js 左侧二级菜单显示与隐藏切换的实例代码
2017/05/23 Javascript
JavaScript中click和onclick本质区别与用法分析
2018/06/07 Javascript
vue项目使用axios发送请求让ajax请求头部携带cookie的方法
2018/09/26 Javascript
解决element ui select下拉框不回显数据问题的解决
2019/02/20 Javascript
文章或博客自动生成章节目录索引(支持三级)的实现代码
2020/05/10 Javascript
vue-以文件流-blob-的形式-下载-导出文件操作
2020/08/07 Javascript
[06:09]辉夜杯主赛事开幕式
2015/12/25 DOTA
Python自动发送邮件的方法实例总结
2018/12/08 Python
numpy数组广播的机制
2019/07/12 Python
python同步两个文件夹下的内容
2019/08/29 Python
简单了解python数组的基本操作
2019/11/26 Python
详解用 python-docx 创建浮动图片
2021/01/24 Python
美国领先的礼品卡网站:GiftCards.com
2016/11/02 全球购物
VC++笔试题
2014/10/13 面试题
实习生单位鉴定意见
2013/12/04 职场文书
护士求职自荐信
2015/03/25 职场文书
白银帝国观后感
2015/06/17 职场文书
观看安全警示教育片心得体会
2016/01/15 职场文书
话题作文之成长
2019/12/09 职场文书
JS轻量级函数式编程实现XDM二
2022/06/16 Javascript