layui.use(['element','upload','laydate','form'], function(){
  var element = layui.element;
  var upload = layui.upload;
  var laydate = layui.laydate;
  var form = layui.form;
  
  //获取hash来切换选项卡，假设当前地址的hash为lay-id对应的值
  var layid = location.hash.replace(/^#tab=/, '');
  element.tabChange('tab', layid); //假设当前地址为：http://a.com#test1=222，那么选项卡会自动切换到“发送消息”这一项
  
  //监听Tab切换，以改变地址hash值
  element.on('tab(tab)', function(){
	var clayid=this.getAttribute('lay-id');
	if(clayid){
		location.hash = 'tab='+ clayid;
		document.dispatchEvent(new CustomEvent('pbootcms-tab-change', { detail: { layId: clayid } }));
		$('.page').find('a').each(function(index,element){//避免tab翻页问题
			var url=$(this).attr('href');
			if(url.indexOf('tab=')==-1){
				$(this).attr('href', url+'#tab='+ clayid);
			}else{
				$(this).attr('href', url.replace(/tab=[\w]+/, 'tab='+ clayid));
			}
        });
	}
  });
  
  //跳转
	form.on('select(tourl)', function(data){
		window.location.href= data.value;
	}); 

  
  //提示
  $(".tips").on("mouseover",function(){
	layer.tips($(this).data('content'), this);
  }) 
 
  //用户登录验证
  form.on('submit(login-submit)', function(data){
  	var form = $("#dologin");
    var url = form.attr('action');
    var username = form.find("#username").val();
    var password = form.find("#password").val();
    var checkcode = form.find("#checkcode").val();
    var formcheck = form.find("#formcheck").val();
    
	$.ajax({
	  type: 'POST',
	  url: url,
	  dataType: 'json',
	  data: {
            username: username,
            password: password,
            checkcode: checkcode,
            formcheck: formcheck
       },
	  success: function (response, status) {
			if (response.code == 1) {
				layer.msg("登录成功！", {icon: 1});
				window.location.href = response.data;
			} else {
				form.find("#checkcode").val("");
				$('#codeimg').click();//更新验证码
				layer.msg("登录失败：" + response.data, {icon: 5});
			} 
      },
      error:function(xhr,status,error){
    	  layer.msg("登录请求发生错误!", {icon: 5});
    	  $('#note').html('登录请求发生错误，您可按照如下方式排查：<br>1、试着删除根目录下runtime目录，刷新页面重试;<br>2、检查系统会话文件存储目录是否具有写入权限；<br>3、检查服务器环境pathinfo及伪静态规则配置；');
      }
	});
    return false;
  });
  
  
  var sitedir=$('#sitedir').data('sitedir');
  var uploadurl = $("#preurl").data('preurl')+'/index/upload';
  var imageExts = 'jpg|jpeg|png|gif|bmp|webp|svg|svgz|avif';
  
  //执行单图片实例
  var uploadInst = upload.render({
	elem: '.upload' //绑定元素
	,url: uploadurl //上传接口
	,field: 'upload' //字段名称
	,multiple: false //多文件上传
	,accept: 'images' //接收文件类型 images（图片）、file（所有文件）、video（视频）、audio（音频）
	,acceptMime: 'image/*'
	,exts: imageExts
    ,before: function(obj){ 
       //判断是否需要加水印
       uploadInst.config.url = $(this.item).hasClass('watermark')
	     ? uploadurl + '/watermark/1'
	     : uploadurl;
	   layer.load(); //上传loading
	}
	,done: function(res){
	   var item = this.item;
	   var des=$(item).data('des');
	   layer.closeAll('loading'); //关闭loading
	   if(res.code==1){
		   $('#'+des).val(res.data[0]); 
		   $('#'+des+'_box').html("<dl><dt><img src='"+sitedir+res.data[0]+"' data-url='"+res.data[0]+"' ></dt><dd>删除</dd></dl>"); 
		   layer.msg('上传成功！'); 
	   }else{
		   layer.msg('上传失败：'+res.data); 
	   }
	}
	,error: function(){
		layer.closeAll('loading'); //关闭loading
		layer.msg('上传发生错误!'); 
	}
  });
  
   //执行多图片上传实例
  var files='';
  var html='';
  var html2='';
  var uploadOrigNames={}; // chooseFiles 的 index -> 浏览器原文件名
  function escapeAttr(s){
	return String(s)
	  .replace(/&/g,'&amp;')
	  .replace(/"/g,'&quot;')
	  .replace(/'/g,'&#39;')
	  .replace(/</g,'&lt;')
	  .replace(/>/g,'&gt;');
  }
  // pushFile 后 layui 内部 a.files 永不为 falsy，fileLength/allDone 第二批起失效，改自管批次收尾
  function finalizeUploadBatch(inst){
	if(inst._batchFinalized) return;
	inst._batchFinalized = true;
	var item = inst.item;
	var des = $(item).data('des');
	layer.closeAll('loading');
	if(files != ''){
	   if($('#'+des).val()){
		   $('#'+des).val($('#'+des).val()+','+files);
	   }else{
		   $('#'+des).val(files);
	   }
	   // 仅 append 本次上传项，不重绘已有 input，避免覆盖用户手改标题
	   if(des == 'pics'){
		   $('#'+des+'_box').append(html);
	   }else{
		   $('#'+des+'_box').append(html2);
	   }
	   layer.msg('成功上传'+(inst._batchSuccess || 0)+'个文件！');
	   files = '';
	   html = '';
	   html2 = '';
	   uploadOrigNames = {};
	   if(inst._uploadFiles){
		   for(var k in inst._uploadFiles){ delete inst._uploadFiles[k]; }
	   }
	}else{
	   uploadOrigNames = {};
	   if(inst._uploadFiles){
		   for(var k in inst._uploadFiles){ delete inst._uploadFiles[k]; }
	   }
	   layer.msg('全部上传失败！');
	}
  }
  function tickUploadBatch(inst){
	if(inst._batchPending <= 0){
	   finalizeUploadBatch(inst);
	}
  }
  var uploadsInst = upload.render({
	elem: '.uploads' //绑定元素
	,url: uploadurl //上传接口
	,field: 'upload' //字段名称
	,multiple: true//多文件上传
	,accept: 'images' //接收文件类型 images（图片）、file（所有文件）、video（视频）、audio（音频）
	,acceptMime: 'image/*'
	,exts: imageExts
	,choose: function(obj){
	   // 同步缓存 File.name；pushFile 后须在 done 中 delete，避免重复上传
	   var inst = this;
	   var chosen = inst._uploadFiles = obj.pushFile();
	   inst._batchFinalized = false;
	   inst._batchSuccess = 0;
	   inst._batchPending = 0;
	   // layui.each 仅 (obj, fn) 两参，无 scope；勿在回调里用 this 计数
	   layui.each(chosen, function(index, file){
		   uploadOrigNames[index] = (file && file.name) ? file.name : '';
		   inst._batchPending++;
	   });
	}
	,before: function(obj){ 
	   //判断是否需要加水印
       uploadsInst.config.url = $(this.item).hasClass('watermark')
	     ? uploadurl + '/watermark/1'
	     : uploadurl;
	   layer.load(); //上传loading
	}
	,done: function(res, index){
	   if(this._uploadFiles){
		   delete this._uploadFiles[index];
	   }
	   if(res.code==1){
		   this._batchSuccess = (this._batchSuccess || 0) + 1;
		   if(files){
			   files+=','+res.data[0];
		   }else{
			   files+=res.data[0];
		   }
		   var title = uploadOrigNames[index] || '';
		   delete uploadOrigNames[index];
		   html += "<dl><dt><img src='"+sitedir+res.data[0]+"' data-url='"+res.data[0]+"'></dt><dd>删除</dd>" +
		   		"<dt><input type='text' name='picstitle[]' style='width:95%' value='"+escapeAttr(title)+"' /></dt>"+		
		   		"</dl>";
		   html2 += "<dl><dt><img src='"+sitedir+res.data[0]+"' data-url='"+res.data[0]+"'></dt><dd>删除</dd>" +	"</dl>";
	   }else{
		   delete uploadOrigNames[index];
		   layer.msg('有文件上传失败：'+res.data); 
	   }
	   this._batchPending--;
	   tickUploadBatch(this);
	}
  	,allDone: function(obj){
	   // layui fileLength 不可靠；仅 pending 已归零时作兜底，避免首批误触发
	   tickUploadBatch(this);
	}
	,error: function(index){
		if(this._uploadFiles){ delete this._uploadFiles[index]; }
		delete uploadOrigNames[index];
		this._batchPending--;
		if(this._batchPending <= 0){
		   finalizeUploadBatch(this);
		}else{
		   layer.msg('上传发生错误！');
		}
	}
  });
	
  //图片页面删除功能
  $('.pic').on("click",'dl dd',function(){
	  var id=$(this).parents('.pic').attr('id');
	  var url=$(this).siblings('dt').find('img').data('url');
	  var input=$('#'+id.replace('_box',''));
	  var value = input.val();
	  value = value.replace(url,'');
	  value = value.replace(/^,/, '');
	  value = value.replace(/,$/, '');
	  value = value.replace(/,,/, ',');
      input.val(value);
	  $(this).parents('dl').remove();
  });
  
  //执行附件上传实例
  var uploadFileInst = upload.render({
	elem: '.file' //绑定元素
	,url: uploadurl //上传接口
	,field: 'upload' //字段名称
	,multiple: false //多文件上传
	,accept: 'file' //接收文件类型 images（图片）、file（所有文件）、video（视频）、audio（音频）
	,before: function(obj){ 
		layer.load(); //上传loading
	}
	,done: function(res){
	   var item = this.item;
	   var des=$(item).data('des');
	   layer.closeAll('loading'); //关闭loading
	   if(res.code==1){
		   $('#'+des).val(res.data[0]); 
		   layer.msg('上传成功！'); 
	   }else{
		   layer.msg('上传失败：'+res.data); 
	   }
	}
	,error: function(){
		layer.closeAll('loading'); //关闭loading
		layer.msg('上传发生错误！'); 
	}
  });
  
  //使用多日期控件
  useLayDateMultiple('year','year');
  useLayDateMultiple('month','month');
  useLayDateMultiple('time','time');
  useLayDateMultiple('date','date');
  useLayDateMultiple('datetime','datetime');

  //选择模型切换模板
   form.on('select(model)', function(data){
	  var elem = data.elem;
	  var type = $(elem).find("option:selected").data('type');
	  var listtpl = $(elem).find("option:selected").data('listtpl');
	  var contenttpl = $(elem).find("option:selected").data('contenttpl');
	  
	  $(elem).parents('form').find("#type").val(type);
	  addOptionValue("listtpl",listtpl,listtpl);
	  addOptionValue("contenttpl",contenttpl,contenttpl);
	  $(elem).parents('form').find("#listtpl").val(listtpl);
	  $(elem).parents('form').find("#contenttpl").val(contenttpl);
	  form.render(null, 'sort'); 
	}); 
   
});

//日期控件函数
function useLayDateMultiple(cls,type) {
	layui.use('laydate', function() {
		var laydate = layui.laydate;
		lay('.' + cls).each(function() {
			laydate.render({
				elem : this,
				type : type,
			});
		});
	});
} 
