laui导出全部数据到excel(layui自带导出只能导出当前页数据)

layui有自带的导出功能,但是当有分页后,laui自带的导出功能只能导出当前页的数据。有时候很多业务场景是需要导出全部的数据。
因此需要手动写一个导出功能;
首先到官网上下载excel导出的插件,下面是layui官网提供的插件地址https://fly.layui.com/extend/excel/#download
下载插件后放入项目中。
将数据网格的工具栏开启代码如下

    table.render({
        elem: '#LAY-Arrylist-table'
        , id: 'LAY-Arrylist-table'
        , url: $ctx + '/rest/table/ARRAYLIST/jupiter?url=' + '/1639/1400'
        , headers: {
            'Authorization': 'Bearer ' + localStorage.accessToken
        }
        , method: 'post'
        , cols: [[
            //写回显字段                            
        ]]      
        , page: true
        ,toolbar: '#toolbar'
        , limit: 10 
        , height: 'full'
        ,curr:1
        , text: {
            none: '查询成功,暂无数据!!!'
        }      
    });

导出功能的具体实现的代码如下

	 table.on('toolbar(LAY-Arrylist-table)', function(data){
         var $ = layui.jquery;
         var excel = layui.excel;//很重要,增加属性
         if(data.event === 'LAYTABLE_EXPORT'){ //提供工具栏导出按钮的点击事件
      	   var field = data.config.where;     	     
      	   field.limit = '10000';//向后台重新发送请求,设置limit值(无穷大)
      	   field.page = '1';
      	   var resp = om2.submit('jupiter', '/1639/1400', JSON.stringify(field));        	         	   
      	 var data = resp.data;
      	   var data = excel.filterExportData(data, {//接收后台返回数据
      	   QRY_TYPE:function (value, line, data) {//将后台返回的数据进行映射
      		if (value =='01')
           	  value ='最高人民法院';
             else if (value =='02')
           	  value ='电信反诈骗'
             else if (value =='03')
           	  value ='公安部经侦局';          
             else if (value =='06')
           	  value ='国安';
             else if (value =='11')
           	  value ='省检察院';
             else if (value =='12')
           	  value ='监察委';
      		 return{
             	   v:value,
                }
      	   }
      	  , APP_ID:'APP_ID'
      	  , INSERT_DATE: 'INSERT_DATE'   
          , CSLX:'CSLX'          
          , HANDLE_STATUS:'HANDLE_STATUS'
          , FEEDBACK_STATUS: function (value, line, data) {
            // 可以直接指定类型为数字
           if(value == 1)
        	   value = '已反馈';
           else if(value == 0)
        	   value = '未反馈';
           return{
        	   v:value,
           }
          }
      	                                            
      	   });
      	   //设置表头顺序与之前一致
      	 data.unshift({QRY_TYPE: '查询类型',APP_ID:'查询请求单号',INSERT_DATE:'接收时间',CSLX:'具体类型',HANDLE_STATUS:'处理状态',FEEDBACK_STATUS:'反馈状态'
           });
           //生成excel表格,设置表名
      	excel.exportExcel({
            sheet1: data
        }, '查控流水信息.xlsx', 'xlsx');
         } 
    
     });

具体的实现流程就是上面的代码实现的,实现思路就是向后重新发一遍请求,将分页数据limit设置成一个尽量大的数值(这现在还没有想到更好的方法,有解决方法欢迎评论)然后在接收一次数据将数据映射并利用插件导出excel表格。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值