layui动态加载复杂表头,前端导出Excel格式数据。

动态生成header,此场景用于表头从数据库中读取便于后续更改表头字段。前端导出用是开源插件table2excel.js,此导出有局限性,只能导出doom元素中的本页的数据,如果是分页的数据不太适用。
返回二元数组,后台构建相应的数据格式:
layui动态加载复杂表头,前端导出Excel格式数据。_第1张图片
前端处理返回的数据,push到一个空数组中就可以组成一个动态的多级表头。

var header= [];
var header1= [
	{
		title: "编号",
		type: "numbers",
		align: "center",
		width: 80,
		rowspan: 2
	}, {
		title: "姓名",
		field: 'name',
		align: "center",
		width: 120,
		rowspan: 2
	}];
	var header2= [];
$.ajax({
	        type: "post",
	        url: "",
	        dataType:"json",
	        async:false,
	        success: function (data) {
	        	console.log(data)
	            if (data.code === 0){
	            	var djs=data.data[0][0];
	            	console.log(djs)
	            	 header1.push({align: 'center', title: djs, colspan:3});
	            	 var sdarr=["基数"];
	            	 var newArr = delArr(sdarr,data.data[0]);//只需要一个三列表头,其余是二列的。
	            	 console.log(newArr);
	            	 
	                $.each(newArr, function (index, obj) {
//	                	console.log(obj)
	                    header1.push({align: 'center', title: obj, colspan:2});
	                });
	                $.each(data.data[1], function (index, obj) {
	                	//拼接成官网所需要的数组
	                    header2.push({field: obj.field1, title: obj.title1 });
	                    header2.push({field: obj.field2, title: obj.title2 });
	                    header2.push({field: obj.field3, title: obj.title3 });
	                });
	                $.each(data.data[2], function (index, obj) {
	                	//拼接成官网所需要的数组
	                	header2.push({field: obj.field1, title: obj.title1 });
	                	header2.push({field: obj.field2, title: obj.title2 });
	                });
	                
	                
	                $.each(data.data[3], function (index, obj) {
	                	//拼接成官网所需要的数组
	                	header2.push({field: obj.field1, title: obj.title1 });
	                	header2.push({field: obj.field2, title: obj.title2 });
	                });
	                $.each(data.data[4], function (index, obj) {
	                	//拼接成官网所需要的数组
	                	header2.push({field: obj.field1, title: obj.title1 });
	                	header2.push({field: obj.field2, title: obj.title2 });
	                });
	                $.each(data.data[5], function (index, obj) {
	                	//拼接成官网所需要的数组
	                	header2.push({field: obj.field1, title: obj.title1 });
	                	header2.push({field: obj.field2, title: obj.title2 });
	                });
	              
	                header1.splice(10,0,
				, {
					title: '操作',
					toolbar: '#barDemo',
					fixed:"right",
					width: 80,
					rowspan: 2
				});//固定操作列
	                header.push(header1);
	                header.push(header2);
	                console.log(header);//所需的表头push到一个总的数组里
	                 
	            }
	        }
	    });
	var table2Excel;
	let TableC= table.render({
	        id: 'demo',
	        elem: '#demo'
	        , url: '' //数据接口
	        , cellMinWidth: 80
	        , limit: 10//每页默认数
	        , limits: [10, 20, 30, 40, 50, 100]
	        , page: { //支持传入 laypage 组件的所有参数(某些参数除外,如:jump/elem) - 详见文档
	            layout: ['count', 'prev', 'page', 'next', 'limit', 'refresh', 'skip'] //自定义分页布局
	            , curr: 1 //设定初始在第 1 页
	        },request: {
    			pageName: "page",
    			limitName: "rows"
    		},
	        response: {
				statusCode: 0,
				countName: 'total',   //规定数据总数的字段名称,默认:count
				dataName: 'data'   //规定数据列表的字段名称,默认:data
			},
			loading:true,  //是否显示加载条(默认:true)。如果设置 false,则在切换分页时,不会出现加载条。该参数只适用于 url 参数开启的方式
			title:"记录表",  //
			//cellMinWidth:60,   //全局定义所有常规单元格的最小宽度(默认:60),一般用于列宽自动分配的情况。其优先级低于表头参数中的 minWidth
			text:{
			    none: '暂无相关数据' //默认:无数据。注:该属性为 layui 2.2.5 开始新增
			  },  //自定义文本,如空数据时的异常提示等。注:layui 2.2.5 开始新增。
			autoSort:true,
			skin:"row",  //用于设定表格风格,若使用默认风格不设置该属性即可line (行边框风格) row (列边框风格) nob (无边框风格)
			even:true,   //若不开启隔行背景,不设置该参数即可
			//size:"lg",   //用于设定表格尺寸,若使用默认尺寸不设置该属性即可
			parseData: function(res) {
				var ss = {
					data: res.rows,
					code: 0,
					total: res.total,
				}
				return ss
			},
			done:function(){
				console.log("数据渲染完了!")
				table2Excel = new Table2Excel();
				table2Excel.append($("#demo"));//遍历页面上layui生成的div,抓取里面的格式与数据,来手动append到table中,再控制该table隐藏,来为导出做准备。
				//console.log(table2Excel.append($("#demo")))
				
				
			}
	        , cols: header
	    });

	// 导出excel点击事件
	$('#exportElemId').click(function(){
		let fileName = 'XXX-20200xxxx';
		table2Excel.exportLayTable($('#demo'),fileName);
	});

百度网盘:table2Excel.js
提取码:5u9h
使用方法:
上面js已经有了,数据表格渲染完毕后,在done函数中做相关遍历操作

var table2Excel ;
table.render({
	elem: '#demo',
	...          
	done: function (res, curr, count) {
		table2Excel = new Table2Excel();
		table2Excel.append($("#tableId"));
	})    
});
// 导出excel点击事件
$('#exportElemId').click(function(){
	let fileName = 'XXX-20200xxxx';
	table2Excel.exportLayTable($('#tableId'),fileName);
});

导出效果:

layui动态加载复杂表头,前端导出Excel格式数据。_第2张图片
参考:https://blog.csdn.net/zhiyingshenjian/article/details/85004517
https://blog.csdn.net/weixin_45237517/article/details/100119628

你可能感兴趣的:(layui,javascript)