var _application =
{
isSuccess:"isSuccess",
_mask:new Mask(),//蒙层
_cache:new Cache(),//页面缓存
_identifier: null,
_dsName: null,
_onbeforeunloadFun: [],
/**
* 注册onbeforeunload事件
* @param
* [function] fun onbeforeunload事件触发时执行的动作
* @type void
*/
addUnloadFun: function(fun)
{
if(typeof fun == "function")
{
this._onbeforeunloadFun.push(fun);
}
},
/**
* 请求数据
* @param {Object} config 参数集合:
* [String] url 请求数据的连接
* [String] module 模块名称
* [String] action 请求对象
* [String] event 请求事件
* [String] dataSet 数据
* [boolean] async 是否异步请求,默认为true
* [function] success 成功的回调
* [function] error 失败的回调
* [Object] context 上下文对象
* @type void
*/
requestData:function(config)
{
var url = config["url"];
if(url == null)
{
url = contextPath + "/" + config["module"] + "/" + config["action"] + "/" + config["event"] +".do";
}
var dataSet = config["dataSet"] == null ? new DataSet() : config["dataSet"];
if(this._identifier)
{
dataSet.setHeader(constant.IDENTIFIER, this._identifier);
}
if(this._dsName)
{
dataSet.setParameter("dsName", this._dsName);
}
var data = dataSet.clone();
data["requestComponent"] = "0";
data = encodeURIComponent(JSON.toStr(data));
//$.messager.progress();
var loads = layer.load(1, {shade: [0.5,'#666'] //0.1透明度的白色背景
}); //0代表加载的风格,支持0-2,
$.ajax({
url: url,
type:"POST",
cache:false,
data:"data=" + data,
dataType : "json",
async:config["async"] == null ? true : false,
success: function(data, textStatus, jqXHR)
{
//$.messager.progress('close');
//ajaxLoadEnd();
layer.close(loads);
var dc = _application._getDataSet(data);
if(dc.getHeader(constant.IDENTIFIER))
{
_application._identifier = dc.getHeader(constant.IDENTIFIER);
}
if(dc.getHeader("url") != null)
{
window.location = dc.getHeader("url");
}
else
{
_application._showErrorMessage(dc);
if(dc.getHeader(constant.Header_Success) == constant.Success)
{
if(dc.getHeader(constant.Header_Message_Code))
{
if(dc.getHeader(constant.Header_Message_Code) == constant.Success_Message_Code)
{
config["success"] != null && config["success"].call(config["context"],dc);
}
else
{
config["error"] != null && config["error"].call(config["context"],dc);
}
}
else
{
config["success"] != null && config["success"].call(config["context"],dc);
}
}
/**
else
{
config["error"] != null && config["error"].call(config["context"],dc);
}
**/
}
},
error:function(jqXHR, textStatus, errorThrown)
{
$.messager.progress('close');
var dc = new DataSet();
dc.setHeader(constant.Header_Error,errorThrown);
_application._showErrorMessage(dc);
config["error"] != null && config["error"].call(config["context"],dc);
}
});
},
//显示错误信息
_showErrorMessage:function(dc)
{
var flag = true;
if(dc.getHeader(constant.Header_Message_Info) != null)
{
$.messager.alert('系统提示',dc.getHeader(constant.Header_Message_Info),'info');
flag = false;
}
else if(dc.getHeader(constant.Header_Message_Error) != null)
{
$.messager.alert('系统提示',dc.getHeader(constant.Header_Message_Error),'error');
flag = false;
}
else if(dc.getHeader(constant.Header_Error) != null)
{
$.messager.alert('系统提示',dc.getHeader(constant.Header_Error),'error');
window.status = dc.getHeader(constant.Header_Error);
flag = false;
}
dc.setHeader(constant.Header_IsDefaultMessage,flag);
},
//获取数据集
_getDataSet:function(data)
{
var dc = null;
if (typeof data == "undefined" || typeof data == "string")
{
dc = new DataSet();
dc.setHeader(constant.Header_Error,"Json parse error");
}
else
{
dc = new DataSet(data);
}
return dc;
},
/**
* config:
* [String] id: 对应的dom对象的ID。必填
* [String] module 模块名称
* [String] action 请求对象
* [String] event 请求事件
* [dataSet]dataSet 数据
* [String] config: url: dialog对应的页面。不必填
* [Function] onComplete: dialog关闭后的操作,不必填
* [Object] dlg: easyui本身对应的dialog配置属性。不必填
*/
showDialog:function(config)
{
var dlg = new Dialog(config);
dlg.show();
return dlg;
},
/**
* config:
* [String] title: 标题
* [String] msg 消息
*/
showMessage:function(config)
{
$.messager.show({
title:config["title"] || "",
msg:config["msg"] || "",
timeout:config["timeout"] || 10000, // 默认声明周期为10秒
showType:'show'
});
},
/**
* parameter: cacheName:缓存名称
* parameter: cacheData:缓存数据
* description:插入缓存数据
*/
setCache:function(cacheName,cacheData)
{
this._cache.setCache(cacheName,cacheData);
},
/**
* parameter: cacheName:缓存名称
* description:获得缓存数据
*/
getCache:function(cacheName)
{
return this._cache.getCache(cacheName);
},
/**
* description:用系统方法格式化数据,目前支持decode数据格式化和事件格式化
*/
decode:function(val,row)
{
if(this.datasource != null)
{
var cache = _application.getCache(this.datasource);
if(cache != null)
{
return cache[val];
}
return null;
}
else if(this.dateformatter != null)
{
if(val)
{
if(val.indexOf(".")!=-1)
{
val = val.substring(0,val.indexOf("."));
}
else
{
// 年月 2014-07
if(val.length == 7)
{
val = val +"-01 00:00:00";
}
else if (val.length == 8) // 时分 18:26:01
{
val = "1970-01-01 " + val ;
}
}
val = val.replace(/-/g,"/");
var date = new Date(val);
return date.format(this.dateformatter);
} else {
return null;
}
}
},
/**
* 初始化treeGrid的数据对象
*/
initTreeGridData:function(rowSet,idColumn,titleColumn,parentColumn)
{
var _data = [];
var _idMap = {};//Id对象
var _parentMap = {};//通过父节点查找子节点,以父节点为基础
var rootCode = null;//获得根节点数据
for(var i=0,count = rowSet.getRowCount();i < count;i++)
{
var id = rowSet.getItemValue(i,idColumn);
var parentId = rowSet.getItemValue(i,parentColumn);
_idMap[id] = rowSet.getRow(i);
if(_parentMap[parentId] == null)
{
_parentMap[parentId] = [];
}
_parentMap[parentId].push(id);
}
for(var i=0,count = rowSet.getRowCount();i < count;i++)
{
var parentId = rowSet.getItemValue(i,parentColumn);
if(_idMap[parentId] == null)
{
rootCode = parentId;
break;
}
}
return this._createTreeGridData(_parentMap,_idMap,rootCode,titleColumn,0);
},
_createTreeGridData:function(parentMap,idMap,parentCode,titleColumn,index)
{
if(index > 50)
{
return [];
}
var _data = [];
if(parentMap[parentCode] != null)
{
var children = parentMap[parentCode];
for(var i=0,count = children.length; i < count;i++)
{
var id = children[i];
var row = idMap[id];
var dataItem = row.getData();
if(parentMap[id] != null)//存在子节点
{
dataItem["children"] = this._createTreeGridData(parentMap,idMap,id,titleColumn,index + 1);
}
_data.push(dataItem);
}
}
return _data;
},
/**
* 初始化菜单数据,将rowset数据转换成菜单结构的数据
* @param {RowSet} rowSet: 后台传递来的数据对象:
* [String] idColumn:表示内码的ID列
* [String] titleColumn: 名称列
* [String] parentColumn: 父节点对应的列
* [String] parentCode: 父节点代码,树是从父节点开始展开的
* @type void
*/
initMenuData:function(rowSet,idColumn,titleColumn,parentColumn,parentCode)
{
var _data = [];
var _idMap = {};//Id对象
var _parentMap = {};//通过父节点查找子节点,以父节点为基础
for(var i=0,count = rowSet.getRowCount();i < count;i++)
{
var id = rowSet.getItemValue(i,idColumn);
var parentId = rowSet.getItemValue(i,parentColumn);
_idMap[id] = rowSet.getRow(i);
if(_parentMap[parentId] == null)
{
_parentMap[parentId] = [];
}
_parentMap[parentId].push(id);
}
return this._createTreeData(_parentMap,_idMap,parentCode,titleColumn,0);
},
/**
* 通过递归创建树的数据对象
* @param {Map} parentMap 通过父节点查找子节点,以父节点为基础,子节点的列表:
* [Map] idMap 根据子节点创建的Map对象,里面保存行数据
* [String] parentCode 父节点代码
* [String] titleColumn: 名称列
* [int] index 递归索引,防止死循环
* @type void
*/
_createTreeData:function(parentMap,idMap,parentCode,titleColumn,index)
{
if(index > 50)
{
return [];
}
var _data = [];
if(parentMap[parentCode] != null)
{
var children = parentMap[parentCode];
for(var i=0,count = children.length; i < count;i++)
{
var id = children[i];
var row = idMap[id];
var dataItem = {
"id":id,
"text":row.getItemValue(titleColumn)
}
// =============节点选中状态处理============
var _isChecked = row.getItemValue("isChecked");
if (typeof _isChecked != "undefined")
{
if(_isChecked == "true")
{
dataItem["checked"] = true;
}
else if(_isChecked == "false")
{
dataItem["checked"] = false;
}
}
// ====================end======================
if(parentMap[id] != null)//存在子节点
{
dataItem["children"] = this._createTreeData(parentMap,idMap,id,titleColumn,index + 1);
dataItem["state"] = "closed";
}
dataItem["attributes"] = row;
_data.push(dataItem);
}
}
return _data;
},
/**
* 请求页面
* @param {Object} config 参数集合:
* [String] url 请求的页面链接
* [String] module 模块名称
* [String] action 请求对象
* [String] event 请求事件
* [String] dataSet 数据
* [String] container 当前请求的容器
* @type void
*/
requestComponent:function(config)
{
var allTime = new Date().getTime();
var url = config["url"];
if(url == null)
{
url = contextPath + "/" + config["module"] + "/" + config["action"] + "/" + config["event"] +".do";
}
var dataSet = config["dataSet"] == null ? new DataSet() : config["dataSet"];
if(this._identifier)
{
dataSet.setHeader(constant.IDENTIFIER, this._identifier);
}
var data = dataSet.clone();
data["requestComponent"] = "1";
data = encodeURIComponent(JSON.toStr(data));
var preparedData = new Date().getTime();
// $.messager.progress();
this._showMask();
$.ajax({
url: url,
type:"POST",
data:"data=" + data,
async:config["async"] == null ? true : false,
cache:false
}).done(function(data)
{
var startTime = new Date().getTime();
try
{
// 清除多余的下拉项
if($("#combo_panl_container"))
{
$("#combo_panl_container").empty();
}
var contextData = _application._getContextInfo(data);
// $.messager.progress('close');
if(contextData && contextData.data)
{
var responseData = new DataSet(contextData.data);
_application._showErrorMessage(responseData);
if(responseData.getHeader(constant.IDENTIFIER))
{
_application._identifier = responseData.getHeader(constant.IDENTIFIER);
}
}
if(contextData.url == null)
{
config.container.html(_application._getInData(data,contextData.cmpName));
var htmlTime = new Date().getTime();
if(contextData.cmpName != null)
{
_application._initCmp(contextData,config.container);
}
var initCmpTime = new Date().getTime();
}
else
{
window.location = contextData.url;
}
}
catch(e)
{
// $.messager.alert("系统提示","客户端页面跳转出错,错误信息为: \r\n" + e.message,"error");
if(window.console && window.console.log)
{
window.console.log("错误日志:" + e.stack);
}
}
finally
{
_application._hideMask();
var endTime = new Date().getTime();
if(window.console && window.console.log)
{
window.console.log("all time:" + (endTime-allTime) + "; client time:" + (endTime-startTime) + "; preparedData:" + (preparedData-allTime) + "; htmlTime:" + (htmlTime-startTime) + "; initCmpTime:" + (initCmpTime-htmlTime));
}
}
}).fail(function(jqXHR, textStatus, errorThrown)
{
// $.messager.progress('close');
_application._hideMask();
var status = jqXHR.status;
if(status == "500")
{
$.messager.alert('系统提示','Code:500,内部服务器错误!','error');
}
else if(status == "404")
{
$.messager.alert('系统提示','Code:404,没有找到文件或目录!','error');
}
else
{
$.messager.alert('系统提示','页面访问失败!','error');
}
});
},
showButton:function(rowIndex,cmpName,clickFun,colName)
{
return ""+colName+"";
},
showPicture:function(value, path)
{
return "";
},
// 初始化表单中的附件数据
initFormFileInputData:function(config)
{
var cmpName = config["cmpName"];
var rowSetName = config["rowSetName"];
var colCode = config["colCode"];
var rowSet = cmpName.dataCenter.getRowSet(rowSetName);
var data = rowSet.getItemValue(0,config["colCode"]);
return data;
},
//获得当前页面的组件名称
_getContextInfo:function(text)
{
var prev = "";
var post = "
";
var start = text.indexOf(prev)
if(start == -1)
{
return {};
}
else
{
text = text.substring(start + prev.length);
var end = text.indexOf(post)
text = text.substring(0,end);
return eval("(" + text + ")");
}
},
/**
* 重新设置iframe的宽度和高度
*/
/**
resetIframeOffset:function(obj,parentId)
{
var parentObj = $("#div_" + parentId);
var cmp = eval(parentId);
if(cmp.dialog != null)
{
var dialogHeader = cmp.dialog.getDialogContainer().extdialog("header");
var buttonsHeight = 20;
$(obj).height(parentObj.height() - ($(obj).offset().top - parentObj.offset().top) - dialogHeader.height() - buttonsHeight);
}
else
{
$(obj).height(parentObj.height() - ($(obj).offset().top - parentObj.offset().top));
}
},
**/
/**
* 重新设置iframe的宽度和高度
*/
resetIframeOffset:function(obj,parentId)
{
var parentObj = $("#div_" + parentId);
var cmp = eval(parentId);
if(cmp.dialog != null)
{
var dialogHeader = cmp.dialog.getDialogContainer().extdialog("header");
var buttonsHeight = 20;
$(obj).height(parentObj.height() - ($(obj).offset().top - parentObj.offset().top) - dialogHeader.height() - buttonsHeight - 10);
}
else
{
$(obj).height(parentObj.height() - ($(obj).offset().top - parentObj.offset().top) - 10 );
}
},
//获得当前页面的数据
_getInData:function(text,cmpName)
{
var prev = "";
var post = "
";
var start = text.indexOf(prev);
if(start == -1)
{
return "