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的一些注意
Dec 06 Javascript
一段利用WSH修改和查看IP配置的代码
May 11 Javascript
js 操作select相关方法函数
Dec 06 Javascript
js操作iframe兼容各种主流浏览器示例代码
Jul 22 Javascript
JavaScript bold方法入门实例(把指定文字显示为粗体)
Oct 17 Javascript
js创建对象几种方式的优缺点对比
Sep 28 Javascript
JavaScript基于自定义函数判断变量类型的实现方法
Nov 23 Javascript
前端开发必知的15个jQuery小技巧
Jan 22 Javascript
js实现微信/QQ直接跳转到支付宝APP打开口令领红包功能
Jan 09 Javascript
小试小程序云开发(小结)
Jun 06 Javascript
JavaScript生成一个不重复的ID的方法示例
Sep 16 Javascript
Vue实现指令式动态追加小球动画组件的步骤
Dec 18 Vue.js
深入理解令牌认证机制(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
咖啡的传说和历史
2021/03/03 新手入门
MYSQL数据库初学者使用指南
2006/11/16 PHP
实现laravel 插入操作日志到数据库的方法
2019/10/11 PHP
用Greasemonkey 脚本收藏网站会员信息到本地
2009/10/26 Javascript
Javascript图像处理—亮度对比度应用案例
2013/01/03 Javascript
图片动画横条广告带上下滚动的JS代码
2013/10/25 Javascript
JQuery伸缩导航练习示例
2013/11/13 Javascript
解决Extjs4中form表单提交后无法进入success函数问题
2013/11/26 Javascript
jQuery中siblings()方法用法实例
2015/01/08 Javascript
PHP+MySQL+jQuery随意拖动层并即时保存拖动位置实例讲解
2015/10/09 Javascript
全面解析Bootstrap排版使用方法(标题)
2015/11/30 Javascript
js中window.open的参数及注意注意事项
2016/07/06 Javascript
AngularJs ng-route路由详解及实例代码
2016/09/14 Javascript
jQuery双向列表选择器select版
2016/11/01 Javascript
vue.js初学入门教程(1)
2016/11/03 Javascript
浅谈Vue数据绑定的原理
2018/01/08 Javascript
jQuery实现侧边栏隐藏与显示的方法详解
2018/12/22 jQuery
重学 JS:为啥 await 不能用在 forEach 中详解
2019/04/15 Javascript
layer.open回调获取弹出层参数的实现方法
2019/09/10 Javascript
js实现图片粘贴到网页
2019/12/06 Javascript
JavaScript修改注册表实例代码
2020/01/05 Javascript
微信小程序实现翻牌抽奖动画
2020/09/21 Javascript
Python3.5基础之NumPy模块的使用图文与实例详解
2019/04/24 Python
Python计算不规则图形面积算法实现解析
2019/11/22 Python
使用keras框架cnn+ctc_loss识别不定长字符图片操作
2020/06/29 Python
Python判断远程服务器上Excel文件是否被人打开的方法
2020/07/13 Python
pycharm 实现光标快速移动到括号外或行尾的操作
2021/02/05 Python
宿舍打麻将检讨书
2014/01/24 职场文书
小学生成长感言
2014/01/30 职场文书
网站创业计划书
2014/04/30 职场文书
2014党委书记四风对照检查材料思想汇报
2014/09/21 职场文书
2014年员工工作总结范文
2014/11/18 职场文书
超市工作总结范文2014
2014/12/19 职场文书
教师工作表现评语
2014/12/31 职场文书
原来闭幕词是这样写的呀!
2019/07/01 职场文书
如何使用Tkinter进行窗口的管理与设置
2021/06/30 Python