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表格。