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