jeasyUI popWindow插件,适用jeasyui1.4.x
蒋高杰
2023-12-01
/**
* @author GodSon
* http://www.btboys.com
* date 2011-5-12 12:30 version 2.1
* @How to use
* var path = 'page/newFile.html';
* var confing = {
* url : path,
* title : "标题",
* width : 500,
* height : 150,
* maximizable : false,
* buttons : [{
* text : '继续>>',
* handler : function() {
* fun(GETWIN(this));
* }
* }]
* };
* var curDialogId = $.createWin(confing);
* 销毁
* $(GETWIN(curDialogId)).destroy();
*/
/**
* @param {Object} options
* return windowId
*/
(function($){
/**
* 创建UUID
*/
function S4() {
return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
}
/**
* 生成windowId
*/
function CreateIndentityWindowId(){
return "UUID-"+(S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
}
/**
* 销毁
*/
function destroy(target){
$(target).dialog("destroy");
}
/**
* 获取当前操作的window
* @param target 当前窗口的windowId 或者 当前窗口中的元素(element)
*/
function getWindow(target){
if(typeof target == "string"){
return document.getElementById(target);
}else{
return $(target).parents(".window-body");
}
}
//入口方法
$.createWin = function(options){
if(!options.url && !options.content){
$.messager.alert("提示","缺少必要参数!(url or content)");
return false;
}
var windowId = CreateIndentityWindowId();
if(options.winId){
windowId=options.winId;
}
//如果存在buttons(请看easyui对buttons的定义),默认添加关闭按钮
if(options.buttons){
var closeBtn = {
text:'关闭',
handler:function(){
$("#"+windowId).dialog("destroy");
}
};
options.buttons.push(closeBtn);
}
options = $.extend({},$.createWin.defaults, options || {});
if(options.content){
ajaxSuccess(options.content);
}else{
if(!options.isIframe){
$.ajax({
url:options.url,
type:"POST",
data:options.data == null ? "" : options.data,
success:function(date){
ajaxSuccess(date);
},
error:function(XMLHttpRequest, textStatus, errorThrown){
$.messager.alert("提示","加载失败!\n"+textStatus+"\n"+errorThrown);
}
});
}else{
ajaxSuccess();
}
}
return windowId;
/**
* 页面加载成功处理
*/
function ajaxSuccess(date){
var dialog = $('<div id="'+windowId+'"></div>');
if(options.target == 'body'){
dialog.appendTo(options.target);
}else{
options.inline = true;
dialog.appendTo($(options.target));
}
if(options.isIframe && !date){
$(dialog).html('<iframe width="100%" height="100%" frameborder="0" src="'+options.url+'" ></iframe>');
}else{
$(dialog).html(date);
}
dialog.dialog(options);
//给dialog增加id属性,负责右下方关闭按钮失效.
dialog.attr("id",windowId);
//增加初始位置设定功能.
if (options.align) {
var w = dialog.closest(".window");
switch (options.align) {
case "right":
dialog.dialog("move", {
left : w.parent().width() - w.width() - 10
});
break;
case "tright":
dialog.dialog("move", {
left : w.parent().width() - w.width() - 10,
top : 0
});
break;
case "bright":
dialog.dialog("move", {
left : w.parent().width() - w.width() - 10,
top : w.parent().height() - w.height() - 10
});
break;
case "left":
dialog.dialog("move", {
left : 0
});
break;
case "tleft":
dialog.dialog("move", {
left : 0,
top : 0
});
break;
case "bleft":
dialog.dialog("move", {
left : 0,
top : w.parent().height() - w.height() - 10
});
break;
case "top":
dialog.dialog("move", {
top : 0
});
break;
case "bottom":
dialog.dialog("move", {
top : w.parent().height() - w.height() - 10
});
break;
}
}
dialog.dialog('open');
options.onComplete.call(this,windowId); //创建成功后回调函数
//可以整合fck的显示
// options.fck:{
// "id":textAreaIdORtextAreaName,
// "height":fckHeight
// }
// if(options.fck){
// CKEDITOR.replace(options.fck.id,{
// height:options.fck.height
// });
// }
//可以整合KindEditor的显示
// options.ke:{
// "id":textAreaId
// }
// if(options.ke){
// KE.init(options.ke);
// KE.create(options.ke.id);
// }
}
};
//关闭并销毁实体
$.fn.destroy =function(){
destroy(this);
};
window.GETWIN = getWindow;
//默认参数
// opetion.isIframe设置为false后,请使用用html片段做弹出窗口页面渲染,
//提交方式为POST,如果值为true,则默认的提交方式为get,参数data将失效.
//modified by hety on June29,2015.
$.createWin.defaults = $.extend({},$.fn.dialog.defaults,{
url:'', //窗口要加载的html片段地址
data:'', //可带参数,data类型为jqurey.ajax的data参数类型
target:'body', //指定窗口打开的区域,是一个jq的选择器,例如#id
isIframe:false, //如果存在url,是否在iframe里面打开url
zIndex: 100000,
height : 200,
width : 400,
collapsible: false,
minimizable: false,
maximizable: false,
closable: true,
modal:true,
onClose:function(){
destroy(this);
},
onMove:function(left,top){
var opts = $.data(this, 'panel').options;
if(top < 0){
$(this).dialog("move",{"left":left,"top":0});
}else if(opts.maximized){
$(this).dialog("restore");
$(this).dialog("move",{"left":left+100,"top":top});
}
if(top > ($(opts.target).height()-20)){
$(this).dialog("move",{"left":left,"top":($(opts.target).height()-25)});
}
},
onComplete:function(windowId){} //创建成功后的回调方法
});
})(jQuery);