layui动态表头

表格需要根据选择的指标显示相应的表头。于是将选择指标的页面单独放在一个页面中。每个指标的选择框checkbox的值为想要显示的指标ID,也就是要动态显示的表头。
在这里插入图片描述点切换指标按钮弹出选择指标页面
在这里插入图片描述

表格HTML代码

点击切换指标按钮弹出选择指标页面

<!--表格-->
<table class="layui-hide" id="test" lay-filter="test"></table>
<!--表格工具栏-->
<script type="text/html" id="toolbarDemo">
	<div class="layui-btn-container">
	<button class="layui-btn layui-btn-sm" lay-event="switch_zhibiao">切换指标</button>
	<button class="layui-btn layui-btn-sm" lay-event="export">导出</button>
	</div>
</script>
<input type="hidden" name="index_selected2" id="index_selected2" value="">

表格JS代码

renderTable为渲染表格方法,传递动态表头ID通过AJAX到服务器端获取想要展示的表头。

//ajax获取表头 head_ids 表头对应的ID
function  getHead(head_ids) {
    var data = null;
    $.ajax({
        type : "post",  
        url : "jsonTableHead", //获取表头URL 
        data: {table_head:head_ids},
        async : false,   //配置是否异步操作
        dataType:"json",//返回数据类型的格式
        timeout: 5000,
    }).done(function (result) {//回调操作
        data = result;
    });
    return data;
}

//渲染表格
function renderTable(check_arr){
    var headData = getHead(check_arr);//表头
    eval("var tableHead = " + headData);
    layui.use('table', function(){
        var table = layui.table;
        var ins1 =  table.render({
            elem: '#test' //表格ID
            ,id: 'idTest'
            ,title:'渠道统计数据表'
            ,autoSort: false //禁用前端自动排序,若使用服务器端排序,此处设置为false
             // ,size: 'lg ' //小尺寸的表格
            ,url:'<?php echo $this->createUrl('/market/crm/jsonTable'); ?>' //获取表格数据url
            ,cellMinWidth: 150 //全局定义常规单元格的最小宽度,layui 2.2.1 新增
            // ,totalRow: true
            ,where: {index_type: check_arr,params:$("#myform").serialize()} 
            ,toolbar: '#toolbarDemo' //工具栏ID
            ,defaultToolbar:['filter'] //默认工具栏 
            ,cols: [
                tableHead //表格显示的列,此处调用getHead(head_ids)动态获取
            ]
            ,page: true //分页
            ,done: function (res, curr, count) {
                //执行表格“尺寸结构”的重置,一般写在对应的事件中
                 table.resize('idTest');
            }
          });
        //监听排序事件 
        table.on('sort(test)', function(obj){ //注:tool是工具条事件名,test是table原始容器的属性 lay-filter="对应的值"
          // console.log(obj.field); //当前排序的字段名
          // console.log(obj.type); //当前排序类型:desc(降序)、asc(升序)、null(空对象,默认排序)
          // console.log(this); //当前排序的 th 对象
          //尽管我们的 table 自带排序功能,但并没有请求服务端。
          //有些时候,你可能需要根据当前排序的字段,重新向服务端发送请求,从而实现服务端排序,如:
          table.reload('idTest', {
            initSort: obj //记录初始排序,如果不设的话,将无法标记表头的排序状态。
            ,where: { //请求参数(注意:这里面的参数可任意定义,并非下面固定的格式)
              field: obj.field //排序字段
              ,order: obj.type //排序方式
            }
          });
          // layer.msg('服务端排序。order by '+ obj.field + ' ' + obj.type);
        });
          //头工具栏事件
          table.on('toolbar(test)', function(obj){
            switch(obj.event){
              case 'switch_zhibiao': //切换指标
              var index_selected2 =  $("#index_selected2").val();//要显示的指标ID
                  layer.open({
                    type: 2,
                    title:'选择指标',
                    shadeClose: true,
                    shade: 0.3,
                    maxmin: false, //开启最大化最小化按钮
                    area: ['700px', '550px'],
                    content: ['<?php echo Yii::app()->createUrl('/market/crm/setIndex'); ?>?index=2&index_selected2='+index_selected2,'no']
                });
              break;
              case 'export':
                // layer.msg("导出全部数据")
                $.get('<?php echo $this->createUrl('/market/crm/jsonTable'); ?>', {
                    t: commonjs.timestrap(),
                    index_type: check_arr,
                    params:$("#myform").serialize()
                }, function (res) {
                    table.exportFile(ins1.config.id,res.data, 'csv');
                },'json')        
              break;
            };
          });
    });
}

指标页HTML

选择指标确定后,将选择的指标传入父页面的,调用渲染表格方法来实现动态表头的展示。window.parent.renderData

<div class="layui-row" id="table_zhibiao" style="height:600px;">
    <div class="layui-col-md10">
         <blockquote class="layui-elem-quote layui-quote-nm" style="font-size: 14px;">
   至少同时选择<span style="color: #f00">1</span>个粒度和<span style="color: #f00">1</span>个指标   
   &nbsp;&nbsp; <button class="layui-btn layui-btn-xs layui-btn-normal" id="setDefault">系统默认指标</button>
  </blockquote>
    <div class="layui-form">
         <div class="layui-row" id="index_div">
           <div class="layui-form-item">
            <label class="layui-form-label" style="width:100px" >粒度指标</label>
            <div class="layui-input-block">
              <input type="checkbox" name="index" data-type='lidu' value="1"  lay-skin="primary" title="时间" class="d_index_2" checked>
              <input type="checkbox" name="index" data-type='lidu' value="2" lay-skin="primary" title="渠道名称" class="d_index_2" checked>
            </div>
          </div>
           <div class="layui-form-item">
            <label class="layui-form-label" style="width:100px">流量指标</label>
            <div class="layui-input-block">
              <input type="checkbox" name="index" value="1756" lay-skin="primary" title="pv" class="d_index_1 d_index_2" checked>
              <input type="checkbox" name="index" value="1757" lay-skin="primary" title="uv" class="d_index_1 d_index_2" checked>
            </div>
          </div>
          <div class="layui-form-item">
            <label class="layui-form-label" style="width:100px">转化指标</label>
            <div class="layui-input-block">
                <input type="checkbox" name="index" value="1721" lay-skin="primary" title="咨询人数" class="d_index_2">
                <input type="checkbox" name="index" value="1718" lay-skin="primary" title="成交人数" class="d_index_2">
            </div>
          </div>
        </div>
        <div class="layui-form-item">
          <div class="layui-input-block">
              <button class="layui-btn  layui-btn-sm"  id="slectAll">全选</button>
              <button class="layui-btn  layui-btn-sm" lay-submit lay-filter="formDemo">确定</button>
          </div>
        </div>
    </div> 
  </div> 
</div> 


<script>
    $(function(){
        layui.use(['form','table'], function(){
          var form = layui.form;
        //全选
           $("#slectAll").click(function(){
             $('#index_div input:checkbox').prop("checked", true);
              form.render('checkbox');
          });
            //监听提交
             form.on('submit(formDemo)', function(data){
                var check_arr = [];//选中的指标集合
                $('input[name=index]:checked').each(function(){
                    check_arr.push($(this).val());
                });
                //调用父类渲染表格的方法
                window.parent.renderData(check_arr.join(","));
                var index = parent.layer.getFrameIndex(window.name); //获取窗口索引
                parent.layer.close(index);  // 关闭layer
             });
        });
    });
</script>

猜你喜欢

转载自blog.csdn.net/u011456813/article/details/86484762