layui.define(function(exports) {
	//tablePlus在原来的table模块的基础上实现了批量数据导出功能，实现defaultToolbar中筛选列记忆功能
	var table = layui.table;	
	var form = layui.form;	
    var MOD_NAME='tablePlus';	
    var tablePlus=$.extend({},table);	
    tablePlus._render = tablePlus.render;	
	tablePlus.excel = function(data,page_size,obj){
		//表头工具栏导出按钮
		$('[lay-id="'+obj.id+'"]').find('[lay-event="LAYTABLE_EXCEL"]').off().on('click',function(){
			if(data.count==0){
				layer.msg('暂无数据');
				return false;
			}
			else{
				let _page = parseInt(data.count/page_size);
				let page = data.count%page_size>0?(_page+1):_page;
				let pageHtml='<p style="padding:16px 10px 0; text-align:center; color:red">由于导出数据比较消耗服务器资源，建议使用搜索功能筛选好数据再导出</p><p style="padding:5px 10px 10px; text-align:center; color:red">如果点击导出后，没有立即导出文件，请耐心等待一下，30秒内请勿重复点击。</p><p style="padding:0 10px; text-align:center;">共查询到<strong> '+data.count+' </strong>条数据，每次最多导出<strong>'+page_size+'</strong>条，共<strong>'+page+'</strong>页，请点击下面的页码导出</p><div id="exportPage" class="layui-box layui-laypage" style="padding:10px 0; width:100%;text-align:center;">';
				for (i = 1; i <= page; i++) {
					pageHtml += '<a href="javascript:;" data-page="'+i+'">'+i+'</a>';
				}
				pageHtml+='</div>';							
				layer.open({
					  type: 1,
					  title: '导出数据',
					  area:['580px','240px'],
					  content: pageHtml,
					  success:function(res){
							var tableWhere = JSON.parse(JSON.stringify(obj.where));
							tableWhere.limit=page_size;										
							$('#exportPage').on('click','a',function(){
								tableWhere.page=$(this).data('page');
								let msg = layer.msg('正在导出数据...', {time:5000});
								$.ajax({
									url: obj.url,
									data: tableWhere,
									success:function(res){
										table.exportFile(obj.id, res.data,'xls');
										setTimeout(function(){
											layer.msg('导出完成');			
										},3000)	
									}
								});
							})
						}
					});
				return false;
			}
		});
		$('[lay-id="'+obj.id+'"]').find('[lay-event="LAYTABLE_HELP"]').off().on('click',function(){
			let content = obj.help||'无帮助说明';
			layer.open({
				shadeClose: true,
				title:'帮助说明',
				type: 1,
				content: '<div style="padding:20px 15px; min-width:300px; line-height:1.8">'+content+'</div>'
			})
		})
	}
	//重写渲染方法
    tablePlus.render=function(params){
		let is_excel = params.is_excel||false;
		let cols_save = params.cols_save||false;
		let excel_limit = params.excel_limit||1000;
		if(params.limit === undefined){
			params.limit = 20;
		}
		if(params.page === undefined){
			params.page = true;
		}
		if(params.cellMinWidth === undefined){
			params.cellMinWidth = 80;
		}	
		if(is_excel){
			let toolbar = ['filter', {title:'导出EXCEL',layEvent: 'LAYTABLE_EXCEL',icon: 'layui-icon-export'},{title:'数据说明',layEvent: 'LAYTABLE_HELP',icon: 'layui-icon-help'}];
			if(params.defaultToolbar == false){
				params.defaultToolbar = toolbar;
			}	
			else{
				let _toolbar = params.defaultToolbar||[];
				params.defaultToolbar = _toolbar.concat(toolbar);
			}
			
			if(typeof params.done === "function"){
				let _done = params.done;
				params.done = function(data, curr, count){
					let obj = this;
					_done(data, curr, count);					
					if(cols_save){
						obj.elem.next().on('mousedown', 'input[lay-filter="LAY_TABLE_TOOL_COLS"]+', function(){
							var input = $(this).prev()[0];
							layui.data ('col-filter-'+params.url,{
								key: input.name
								,value: input.checked
							})
						});
					}					
					tablePlus.excel(data,excel_limit,obj);
				}
			}
			else{
				params.done = function(data){
					let obj = this;
					if(cols_save){
						obj.elem.next().on('mousedown', 'input[lay-filter="LAY_TABLE_TOOL_COLS"]+', function(){
							var input = $(this).prev()[0];
							layui.data ('col-filter-'+params.url,{
								key: input.name
								,value: input.checked
							})
						});
					}
					tablePlus.excel(data,excel_limit,obj);
				}
			}
		}
		if(cols_save){
			// 从本地存储获取用户保存的列显示设置
			let savedCols = localStorage.getItem('col-filter-'+params.url);
			let colsStatus = savedCols ? JSON.parse(savedCols) : {};
			let cols = params.cols;
			for (var i=0;i<cols[0].length;i++){
                if(cols[0][i].field!=undefined  && colsStatus[cols[0][i].field] != undefined){
                    cols[0][i].hide=colsStatus[cols[0][i].field];
                }
            }
			params.cols = cols;
		}
		var init = tablePlus._render(params);
		//监听搜索提交
		form.on('submit(table-search)', function(data) {
			init.reload({
				where: data.field,
				page: {curr: 1}
			});
			return false;
		});
		//重置搜索提交
		$('body').on('click', '[lay-filter="table-search-reset"]', function () {
			let prev = $(this).prev();
			if (typeof(prev) != "undefined" ) {
				setTimeout(function () {
					prev.click();
				}, 10)
			}
		});
		
		return init;
		//console.log(params);
    };
    exports(MOD_NAME, tablePlus);
});