layui.define([ 'layer', 'table', 'form', 'element', 'notice' ], function(exports) {
	// 操作对象
	var layer = layui.layer;
	var table = layui.table;
	var form = layui.form;
	var toast = layui.notice;
	var $ = layui.jquery;

	// 表格ID
	var identifier = 'table';

	// 列表对象
	var tobj;

	var topt = {
		id : identifier,
		elem : '#' + identifier,
		defaultToolbar : [ 'filter', 'print'], //'exports'
		url : 'url',
		cols : 'cols',
		page : true,
		skin : 'row',
		even : true,
		size : 'sm'
	};

	// page
	// submit
	// remove
	// post
	// dialog
	// open
	// refresh

	// 封装方法
	var mod = {
		// 分页【分页参数】
		page : function(options) {
			// 参数重设
			for ( var index in options) {
				topt[index] = options[index];
			}
			// 初始化列表
			tobj = table.render(topt);
			// 监听复选框
			table.on('checkbox(' + topt.id + ')', function(obj) {
				console.log(obj)
			});
			// 监听复选框
			table.on('t1(' + topt.id + ')', function(obj) {
				console.log(obj)
			});
			// 监听事件
			table.on('toolbar(' + topt.id + ')', function(obj) {
				var checkStatus = table.checkStatus(obj.config.id);
				var data = obj.data;
				if (obj.event === 'search' && topt.search) {
					topt.search(data);
				} else if (obj.event === 'add' && topt.add) {
					topt.add(data);
				} else if (obj.event === 'del' && topt.del) {
					topt.del(data);
				} else if (obj.event === 'b1' && topt.b1) {
					topt.b1(data);
				} else if (obj.event === 'b2' && topt.b2) {
					topt.b2(data);
				} else if (obj.event === 'b3' && topt.b3) {
					topt.b3(data);
				}
			});
			// 监听工具条
			table.on('tool(' + topt.id + ')', function(obj) {
				var data = obj.data;
				if (obj.event === 'info' && topt.info) {
					topt.info(data);
				} else if (obj.event === 't1' && topt.t1) {
					topt.t1(data);
				} else if (obj.event === 't2' && topt.t2) {
					topt.t2(data);
				} else if (obj.event === 't3' && topt.t3) {
					topt.t3(data);
				}
				console.log('ID：' + data.id);
			});
			tobj.table = table;

			return tobj;
		},

		// 提交【地址、提示、参数、回调】
		submit : function(url, parames, callback) {
			parent.layer.confirm('确定提交？', {
				icon : 1,
				title : '提示',
				btn : [ '确定', '取消' ]
			}, function() {
				var load;
				$.ajax({
					type : 'POST',
					url : url,
					data : parames,
					dataType : 'json',
					beforeSend : function(xhr, textStatus) {
						load = parent.layer.msg('加载中', {
							icon : 16
						});
					},
					success : function(data, textStatus) {
						// parent.layer.msg(data.msg);
						if (data.code == 0) {
							toast.success(data.msg);
						} else {
							toast.error(data.msg);
						}
						if (callback) {
							callback(data);
						}
					},
					complete : function(xhr, textStatus) {
						parent.layer.close(load);
					}
				});
			});
		},

		// 提交【地址，回调】
		remove : function(url) {
			var checkStatus = table.checkStatus(identifier);
			var data = checkStatus.data;
			if (data.length == 0) {
				layer.msg("请选择删除数据");
				toast.error("请选择删除数据");
				return;
			}
			parent.layer.confirm('确认删除？', {
				icon : 3,
				title : '提示',
				btn : [ '确定', '取消' ]
			}, function() {
				//
				var deleteParames = '';
				for (var i = 0; i < data.length; i++) {
					deleteParames = deleteParames + 'ids=' + data[i].id + "&";
				}
				//console.log(deleteParames); // 记得删
				//
				$.ajax({
					type : 'POST',
					url : url,
					data : deleteParames,
					dataType : 'json',
					beforeSend : function(xhr, textStatus) {
						parent.layer.msg('加载中', {
							icon : 16
						});
					},
					success : function(data, textStatus) {
						// parent.layer.msg(data.msg);
						if (data.code == 0) {
							toast.success(data.msg);
						} else {
							toast.error(data.msg);
						}
					},
					complete : function(xhr, textStatus) {
						parent.layer.closeAll();
						tobj.reload();
					}
				});
			});
		},
		getTableSelectedIds:function(fieldName){
			var checkStatus = table.checkStatus(identifier);
			var data = checkStatus.data;
			if (data.length == 0) {
				toast.error("请选择条目");
				return "";
			}
			var params = '';
			for (var i = 0; i < data.length; i++) {
				params = params + 'ids=' + data[i][fieldName] + "&";
			}
			console.log(params); // 记得删
			return params;
		},
		// 提交【地址，回调】
		idsSubmit : function(url, callback, actionText) {
			if(!actionText){
				actionText = '操作'
			}
			var checkStatus = table.checkStatus(identifier);
			var data = checkStatus.data;
			if (data.length == 0) {
				layer.msg("请选择" + actionText + "的数据");
				toast.error("请选择" + actionText + "的数据");
				return;
			}
			parent.layer.confirm('确认' + actionText + '？', {
				icon : 3,
				title : '提示',
				btn : [ '确定', '取消' ]
			}, function() {
				//
				var params = '';
				for (var i = 0; i < data.length; i++) {
					params = params + 'ids=' + data[i].id + "&";
				}
				console.log(params); // 记得删
				//
				$.ajax({
					type : 'POST',
					url : url,
					data : params,
					dataType : 'json',
					beforeSend : function(xhr, textStatus) {
						parent.layer.msg('加载中', {
							icon : 16
						});
					},
					success : function(data, textStatus) {
						if (data.code == 0) {
							toast.success(data.msg);
							if(callback) {
								callback(data, parent.layer.msg)
							}
						} else {
							toast.error(data.msg);
						}
					},
					complete : function(xhr, textStatus) {
						tobj.reload();
					}
				});
			});
		},

		// 数据【地址、参数、回调】
		post : function(url, parames, callback) {
			$.ajax({
				type : 'POST',
				url : url,
				data : parames,
				dataType : 'json',
				success : function(data, textStatus) {
					// parent.layer.msg(data.msg);
					if (data.code == 0) {
						toast.success(data.msg);
					} else {
						toast.error(data.msg);
					}
					if (callback) {
						callback(data);
					}
				},
				complete : function(xhr, textStatus) {
					form.render();
				}
			});
		},
		// 数据【地址、参数】
		postSync : function(url, parames, dataType, contentType , toast) {
			var res = $.ajax({
				type : 'POST',
				url : url,
				async: false,
				data : parames,
				dataType : "json"
			});
			if(res.readyState == 4 && res.status == 200){
				var data = res.responseJSON;
				if(toast) {
					if (data.code == 0) {
						toast.success(data.msg);
					} else {
						toast.error(data.msg);
					}
				}
				return data
			} else {
				toast.error("服务器异常！");
				return {code:1000};
			}
		},

		// 数据【地址、参数、回调】
		get : function(url, success, complete) {
			$.ajax({
				type : 'GET',
				url : url,
				success : success,
				complete : complete
			});
		},

// 打开【地址、高度】回调
		dialog : function(url, h, callback) {
			parent.layer.open({
				type : 2,
				title : false,
				content : [ url ],
				shade : 0.6,
				resize : true,
				area : [ '64%', h ],
				closeBtn : 2,
				anim : 0,
				isOutAnim : false,
				scrollbar : false,
				btnAlign : 'r',
				btn : [ '提交', '返回' ],
				yes : function(index, layero) {
					// 得到iframe页的窗口对象
					// var iframeWin = window[layero.find('iframe')[0]['name']];
					// iframeWin.reset();
					var iframeBody = parent.layer.getChildFrame('body', index);
					iframeBody.find('#submit').click();
				},
				btn2 : function(index, layero) {
					tobj.reload();
				},
				end: function(){
					if(callback){
						callback()
					}
				}
			});
		},
		dialog2 : function(url, w, h,buttonConfigs, callback) {

			var opt ={
				type : 2,
				title : false,
				content : [ url ],
				shade : 0.6,
				resize : true,
				area : [ w, h ],
				closeBtn : 0,
				anim : 0,
				isOutAnim : false,
				scrollbar : false,
				btnAlign : 'c',
				btn : buttonConfigs.buttons,
				yes : buttonConfigs.funs[0],
				btn2 : buttonConfigs.funs[1],
				btn3 : buttonConfigs.funs[2],
				end: function(){
					if(callback){
						callback()
					}
				}
			}

			parent.layer.open(opt);
		},

		// 打开【地址、高度】无回调
		open : function(url, h, title, cfg) {
			var options = {
				type : 2,
				title : title ? title : false,
				content : [ url ],
				resize : true,
				closeBtn : 2,
				anim : 0,
				isOutAnim : false,
				scrollbar : false,
			}

			if(cfg){
				if(cfg.area){
					options.area = cfg.area || [ '64%', h ]
					options.shade = cfg.shade || 0.6
				}
			}

			parent.layer.open(options);
		},
		// 刷新
		refresh : function() {
			// 关闭所有
			parent.layer.closeAll();
			// 刷新当前页
			setTimeout(function() {
				document.location = document.location;
			}, 1000)
		},
		/**
		 * 加载下拉框
		 * @param url
		 * @param opt
		 */
		loadSelect : function(url, opt){
			this.post(url,opt.data,function(res){
				let data = res.data;
				$("#"+ opt.id).empty();
				if(opt.defaultOption){
					$("#"+ opt.id).append(opt.defaultOption);
				}
				for(let i = 0; i < data.length; i++){
					if(opt.selected && data[i][opt.valueField] == opt.selected){
						$("#"+ opt.id).append("<option selected value='"+data[i][opt.valueField]+"'>"+data[i][opt.textField]+"</option>");//新增
					}else{
						$("#"+ opt.id).append("<option value='"+data[i][opt.valueField]+"'>"+data[i][opt.textField]+"</option>");//新增
					}
				}
				if(opt.loadedListener){
					opt.loadedListener(data, opt)
				}
			})
		},
		//form 表单 转成 json对象
		formToJson(formData){
			var result = {};
			for(var i=0;i< formData.length;i++){
				let obj = formData[i]
				result[obj.name] = obj.value;
			}
			return result;
		},
		timestampToTime(timestamp) {
			var date = new Date(timestamp);//时间戳为10位需*1000，时间戳为13位的话不需乘1000
			var Y = date.getFullYear() + '-';
			var M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-';
			var D = date.getDate();
			// var D = date.getDate() + ' ';
			// var h = date.getHours() + ':';
			// var m = date.getMinutes() + ':';
			// var s = date.getSeconds();
			return Y+M+D;
		}
	};

	// 输出
	exports('tool', mod);
});
