/**
* 工具组件 对原有的工具进行封装,自定义某方法统一处理
*
* @author lgf 2018-4-10
* @Url: http://www.jeeplus.org
* @version 2.0v
*/
(function() {
jp = {
/**使用jp.open代替top.layer.open,参数使用完全一致,请参照layer官网, 不在直接暴露layer在,jeeplus对layer进行统一封装**/
open:top.layer.open,
/**通知方法,不阻塞浏览器当前窗口,四个级别 info,warning,error,success,图标不同,其余用法完全相同*/
info:function(msg){
return top.layer.msg(msg);
},
warning: function(msg){//通知
return top.layer.msg(msg, {icon:0});
},
success:function(msg){
return top.layer.msg(msg, {icon:1});
},
error:function(msg){
return top.layer.msg(msg, {icon:2});
},
//layer之外的另一个选择toast风格消息提示框,直接使用jp.toastr调用
toastr:(function(){
top.toastr.options = {
"closeButton": true,
"debug": false,
"progressBar": true,
"positionClass": "toast-top-right",
"onclick": null,
"showDuration": "400",
"hideDuration": "5000",
"timeOut": "10000",
"extendedTimeOut": "1000",
"showEasing": "swing",
"hideEasing": "linear",
"showMethod": "fadeIn",
"hideMethod": "fadeOut"
}
return top.toastr;
})(),
//页面提示声音
voice:function() {
var audio = document.createElement("audio");
audio.src = ctxStatic+"/common/voice/default.wav";
audio.play();
},
/**加载层,一直阻塞浏览器窗口,必须手动调用close方法关闭*/
loading:function(msg){
if(!msg){
msg = '正在提交,请稍等...';
}
var index = top.layer.msg(msg, {
icon: 16
,shade: 0.01,
time:999999999//设置超长时间
});
return index;
},
close:function(index){
if(index){
top.layer.close(index);
}else{
top.layer.closeAll();
}
},
/**alert弹出框,阻塞浏览器窗口*/
alert:function(msg){
top.layer.alert(msg, {
skin: 'layui-layer-lan'
,area:['auto', 'auto']
,icon: 0
,closeBtn: 0
,anim: 4 //动画类型
});
},
/**询问框,阻塞浏览器窗口*/
confirm:function(msg, succFuc, cancelFuc){//msg:询问信息, succFuc:点‘是’调用的函数, errFuc:点‘否’调用的函数
top.layer.confirm(msg,
{icon: 3, title:'系统提示', btn: ['是','否'] //按钮
}, function(index){
if (typeof succFuc == 'function') {
succFuc();
}else{
location = succFuc;
jp.success("操作成功!", {icon:1});
}
top.layer.close(index);
}, function(index){
if(cancelFuc)
cancelFuc();
top.layer.close(index);
});
return false;
},
prompt:function (title, href) {
var index = top.layer.prompt({title: title, formType: 2}, function(text){
if (typeof href == 'function') {
href(text);
}else{
location = href + encodeURIComponent(text);
}
top.layer.close(index);
});
},
//打开一个窗体
windowOpen:function(url, name, width, height){
var top=parseInt((window.screen.height-height)/2,10),left=parseInt((window.screen.width-width)/2,10),
options="location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,"+
"resizable=yes,scrollbars=yes,"+"width="+width+",height="+height+",top="+top+",left="+left;
window.open(url ,name , options);
},
// //打开对话框(添加修改)
// openDialog: function(title,url,width,height, $table){
// var auto = true;//是否使用响应式,使用百分比时,应设置为false
// if(width.indexOf("%")>=0 || height.indexOf("%")>=0 ){
// auto =false;
// }
// top.layer.open({
// type: 2,
// area: [width, height],
// title: title,
// auto:auto,
// maxmin: true, //开启最大化最小化按钮
// content: url ,
// btn: ['确定', '关闭'],
// yes: function(index, layero){
// var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
// if(!$table){//如果不传递table对象过来,按约定的默认id获取table对象
// $table = $('#table')
// }
// iframeWin.contentWindow.doSubmit($table, index);
// },
// cancel: function(index){
// }
// });
// },
//
// //打开对话框(查看)
// openDialogView :function(title,url,width,height){
// var auto = true;//是否使用响应式,使用百分比时,应设置为false
// if(width.indexOf("%")>=0 || height.indexOf("%")>=0 ){
// auto =false;
// }
// top.layer.open({
// type: 2,
// area: [width, height],
// title: title,
// auto:auto,
// maxmin: true, //开启最大化最小化按钮
// content: url ,
// btn: ['关闭'],
// cancel: function(index){
// }
// });
//
// },
/**打开图片预览框**/
showPic:function(url){
var json = {
"data": [ //相册包含的图片,数组格式
{
"src": url, //原图地址
}
]
};
top.layer.photos({
photos: json
,anim: 0 //0-6的选择,指定弹出图片动画类型,默认随机(请注意,3.0之前的版本用shift参数)
});
},
/**用户选择框**/
openUserSelectDialog:function(isMultiSelect, yesFuc){
top.layer.open({
type: 2,
area: ['1100px', '560px'],
title:"选择用户",
auto:true,
maxmin: true, //开启最大化最小化按钮
content: ctx+"/sys/user/userSelect?isMultiSelect="+isMultiSelect,
btn: ['确定', '关闭'],
yes: function(index, layero){
var ids = layero.find("iframe")[0].contentWindow.getIdSelections();
var names = layero.find("iframe")[0].contentWindow.getNameSelections();
var loginNames = layero.find("iframe")[0].contentWindow.getLoginNameSelections();
if(ids.length ==0){
jp.warning("请选择至少一个用户!");
return;
}
// 执行保存
yesFuc(ids.join(","), names.join(","), loginNames.join(","));
top.layer.close(index);
},
cancel: function(index){
//取消默认为空,如需要请自行扩展。
top.layer.close(index);
}
});
},
/**
* 关联用户选择对话框
*
* @author huang
*/
openJoinSelectDialog:function(isParty,yesFuc){
top.layer.open({
type: 2,
area: ['1100px', '560px'],
title:isParty ? "选择党员": "选择村支书",
auto:true,
maxmin: true, //开启最大化最小化按钮
content: ctx+"/sys/user/userJoinSelect?isParty="+isParty,
btn: ['确定', '关闭'],
yes: function(index, layero){
var ids = layero.find("iframe")[0].contentWindow.getIdSelections();
var names = layero.find("iframe")[0].contentWindow.getNameSelections();
if(ids.length ==0){
jp.warning("请选择至少一个用户!");
return;
}
// 执行保存
yesFuc(ids.join(","), names.join(","));
top.layer.close(index);
},
cancel: function(index){
//取消默认为空,如需要请自行扩展。
top.layer.close(index);
}
});
},
/**角色选择框**/
openRoleSelectDialog:function(isMultiSelect, yesFuc){
var url = ctx + "/sys/role/data";
var fieldLabels = "角色名|英文名";
var fieldKeys = "name|enname";
top.layer.open({
type: 2,
area: ['800px', '500px'],
title:"角色选择",
auto:true,
name:'friend',
content: ctx+"/tag/gridselect?url="+encodeURIComponent(url)+"&fieldLabels="+encodeURIComponent(fieldLabels)+"&fieldKeys="+encodeURIComponent(fieldKeys)+"&searchLabels="+encodeURIComponent(fieldLabels)+"&searchKeys="+encodeURIComponent(fieldKeys)+"&isMultiSelected="+isMultiSelect,
btn: ['确定', '关闭'],
yes: function(index, layero){
var iframeWin = layero.find('iframe')[0].contentWindow; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
var items = iframeWin.getSelections();
if(items == ""){
jp.warning("必须选择一条数据!");
return;
}
var ids = [];
var names = [];
for(var i=0; i/g, ">").replace(/"/g, """).replace(/'/g, "'");;
},
/**
* @function unescapeHTML 还原html脚本 < > & " '
* @param a -
* 字符串
*/
unescapeHTML: function(a){
a = "" + a;
return a.replace(/</g, "<").replace(/>/g, ">").replace(/&/g, "&").replace(/"/g, '"').replace(/'/g, "'");
},
//获取字典标签
getDictLabel : function(data, value, defaultValue){
for (var i=0; i").replace(/[\r]/g,"
").replace(/[\n]/g,"
")+"";
top.layer.alert(errDetail , {
icon: 2,
area:['80%','70%'],
title:xhr.status+"错误"
})
}else{
var errDetail ="未知错误!";
top.layer.alert(errDetail , {
icon: 2,
area:['auto','auto'],
title:"真悲剧,后台抛出异常了"
})
}
},
success:function(data,textStatus,jqXHR){
if(data.indexOf == "_login_page_"){//登录超时
location.reload(true);
}else{
callback(data);
}
}
});
},
get:function(url,callback){
$.ajax({
url:url,
method:"get",
error:function(xhr,textStatus){
if(xhr.status == 0){
jp.info("连接失败,请检查网络!")
}else if(xhr.status == 404){
var errDetail ="404,请求地址不存在!";
top.layer.alert(errDetail , {
icon: 2,
area:['auto','auto'],
title:"请求出错"
})
}else if(xhr.status && xhr.responseText){
var errDetail =""+ xhr.responseText.replace(/[\r\n]/g,"
").replace(/[\r]/g,"
").replace(/[\n]/g,"
")+"";
top.layer.alert(errDetail , {
icon: 2,
area:['80%','70%'],
title:xhr.status+"错误"
})
}else{
var errDetail ="未知错误!";
top.layer.alert(errDetail , {
icon: 2,
area:['auto','auto'],
title:"真悲剧,后台抛出异常了"
})
}
},
success:function(data,textStatus,jqXHR){
if(data.indexOf == "_login_page_"){//返回首页内容代表登录超时
top.layer.alert("登录超时!")
location.reload(true);
}else{
callback(data);
}
}
});
},
/*
* params:
* id: 表单的jQuery ID 例如"#inputForm"
* succFuc, 成功后执行的回调函数
* beformSubmit:执行提交操作前执行的方法
*/
ajaxForm:function(id, succFuc, beforeSubmit){
$(id).ajaxForm({
dataType: 'json',
beforeSubmit: function (arr, form, options) {
if(beforeSubmit){
beforeSubmit();
}
var isValidate = jp.validateForm(id);//校验表单
if(isValidate){
form.find("button:submit").button("loading");
}else{
return false;
}
},
error:function(xhr,textStatus){
if(xhr.status == 0){
jp.info("连接失败,请检查网络!")
}else if(xhr.status == 404){
var errDetail ="404,请求地址不存在!";
top.layer.alert(errDetail , {
icon: 2,
area:['auto','auto'],
title:"请求出错"
})
}else if(xhr.status && xhr.responseText){
var errDetail =""+ xhr.responseText.replace(/[\r\n]/g,"
").replace(/[\r]/g,"
").replace(/[\n]/g,"
")+"";
top.layer.alert(errDetail , {
icon: 2,
area:['80%','70%'],
title:xhr.status+"错误"
})
}else{
var errDetail ="未知错误!";
top.layer.alert(errDetail , {
icon: 2,
area:['auto','auto'],
title:"真悲剧,后台抛出异常了"
})
}
$(id).find("button:submit").button("reset");
},
success: function (data, statusText, xhr, form) {
succFuc(data);
// form.find("button:submit").button("reset");
}
});
},
//打开对话框(添加修改)
openSaveDialog: function(title,url,width,height){
var auto = true;//是否使用响应式,使用百分比时,应设置为false
if(width.indexOf("%")>=0 || height.indexOf("%")>=0 ){
auto =false;
}
top.layer.open({
type: 2,
area: [width, height],
title: title,
auto:auto,
maxmin: true, //开启最大化最小化按钮
content: url ,
btn: ['确定', '关闭'],
yes: function(index, layero){
var iframeWin = layero.find('iframe')[0]; //得到弹出的窗口对象,执行窗口内iframe页的方法:iframeWin.method();
iframeWin.contentWindow.save();//调用保存事件,在 弹出页内,需要定义save方法。处理保存事件。
},
cancel: function(index){
}
});
},
//审核弹出层
openVerifyDialog: function(title,url,width,height){
var auto = true;//是否使用响应式,使用百分比时,应设置为false
if(width.indexOf("%")>=0 || height.indexOf("%")>=0 ){
auto =false;
}
top.layer.open({
type: 2,
area: [width, height],
title: title,
auto:auto,
maxmin: true, //开启最大化最小化按钮
content: url ,
btn: ['批准','驳回','关闭'],
btn1: function(index, layero){
var iframeWin = layero.find('iframe')[0]; //得到弹出的窗口对象,执行窗口内iframe页的方法:iframeWin.method();
iframeWin.contentWindow.save();//调用保存事件,在弹出页内,需要定义save方法。处理保存事件。
},
btn2:function(index, layero){
var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
iframeWin.contentWindow.audit(function (data) {
if(data.success){
jp.success(data.msg);
refresh();
}else{
jp.error(data.msg);
}
jp.close(index);
});//调用保存事件
return false;
var inputForm =top.$("##inputForm");
inputForm.onsubmit = function(){
jp.loading(' 正在导入,请稍等...');
}
inputForm.submit();
jp.close(index);
return false;
},
btn3: function(index, layero){
},
cancel: function(index){
}
});
},
//打开对话框(查看)
openViewDialog :function(title,url,width,height){
var auto = true;//是否使用响应式,使用百分比时,应设置为false
if(width.indexOf("%")>=0 || height.indexOf("%")>=0 ){
auto =false;
}
top.layer.open({
type: 2,
area: [width, height],
title: title,
auto:auto,
maxmin: true, //开启最大化最小化按钮
content: url ,
btn: ['关闭'],
cancel: function(index){
}
});
},
//打开子对话框(仅仅用作 父子layer弹窗之间交互数据使用)
openChildDialog: function(title,url,width,height, parentObj){
var auto = true;//是否使用响应式,使用百分比时,应设置为false
if(width.indexOf("%")>=0 || height.indexOf("%")>=0 ){
auto =false;
}
top.layer.open({
type: 2,
area: [width, height],
title: title,
auto:auto,
maxmin: true, //开启最大化最小化按钮
content: url ,
btn: ['确定', '关闭'],
yes: function(index, layero){
var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
iframeWin.contentWindow.save(parentObj);//在子窗口定义save方法,负责实际业务逻辑的执行
},
cancel: function(index){
}
});
},
validateForm: function (id) {
return $(id).validate({
errorPlacement: function(error, element) {
if (element.is(":checkbox")||element.is(":radio")){
error.appendTo(element.parent().parent().parent().parent());
}else if (element.parent().is(".form_datetime") ||element.parent().is(".input-append") || element.is(".mydatepicker")){
error.appendTo(element.parent().parent());
}else{
error.insertAfter(element);
}
}
}).form();
},
go:function(url){//在当前选项卡跳转页面
window.location.href = url;
},
openTab:function(url,title, isNew){//isNew 为true时,打开一个新的选项卡;为false时,如果选项卡不存在,打开一个新的选项卡,如果已经存在,使已经存在的选项卡变为活跃状态。
top.openTab(url,title,isNew);
},
/**
* Ajax上传文件
* @param fileObj
* @param url
* @param callback
*/
uploadFile: function (fileObj, url,callback) {
var data = new FormData(fileObj);
// data.append("CustomField", "This is some extra data, testing");//如果要添加参数
$.ajax({
type: "POST",
enctype: 'multipart/form-data',
url: url,
data: data,
processData: false, //prevent jQuery from automatically transforming the data into a query string
contentType: false,
cache: false,
timeout: 600000,
success: function (result) {
callback(result);
},
error:function(xhr, textStatus){
if(xhr.status == 0){
jp.info("连接失败,请检查网络!")
}else if(xhr.status == 404){
var errDetail ="404,请求地址不存在!";
top.layer.alert(errDetail , {
icon: 2,
area:['auto','auto'],
title:"请求出错"
})
}else if(xhr.status && xhr.responseText){
var errDetail =""+ xhr.responseText.replace(/[\r\n]/g,"
").replace(/[\r]/g,"
").replace(/[\n]/g,"
")+"";
top.layer.alert(errDetail , {
icon: 2,
area:['80%','70%'],
title:xhr.status+"错误"
})
}else{
var errDetail =xhr.responseText=="未知错误!";
top.layer.alert(errDetail , {
icon: 2,
area:['auto','auto'],
title:"真悲剧,后台抛出异常了"
})
}
}
})
},
downloadFile: function(url, name) {
var $a = $("").attr("href", url).attr("download", name);
$a[0].click();
},
/**
* 返回当前活跃的tab页面关联的iframe的Windows对象,方便layer弹窗调用父页面的方法。
*/
getParent: function () {
return top.getActiveTab()[0].contentWindow;
}
}
})(jQuery);