').appendTo($('body'));
$mask.css({
"display" : "block",
"color" : "#fff",
"position" : "fixed",
"top" : "0px",
"left" : "0px",
"background-color" : 'black',
"opacity" : opacity,
"-moz-opacity" : opacity,
"filter" : "alpha(opacity=" + (opacity * 100) + ")",
"width" : "100%",
"height" : "100%",
"z-index": "1024"
});
},
//重写eval方法
codeEval: function ( code ){
var script;
if ( code ) {
var data_key = '_process_json_data_'+parseInt(shr.randMath());
code = 'window["'+data_key+'"]=('+code+');'
script = document.createElement("script");
script.text = code;
document.head.appendChild( script ).parentNode.removeChild( script );
return window[data_key];
}
return null;
},
//附件上传中需要用到的fileUUID
getAttachmentFileUUID: function(){
if( $(".attachmentUploadArea").length > 0
&& $(".attachmentUploadArea").hasClass('standardAttachment')){
var mainPageDom = $(".attachmentUploadArea").closest(".view_mainPage");
var uuid = '';
//多行表单的时候需要取view_mainPage上的uuid去拿viewPage
if(mainPageDom.length && mainPageDom.attr('id')){
uuid = mainPageDom.attr('id');
}
var currentPage = shr.getCurrentViewPage(uuid);
var attachmentFileUUID = currentPage ? currentPage.attachmentFileUUID: '';
return attachmentFileUUID;
}
},
//生成附件fileUUID
generateAttachmentFileUUID : function(){
var attachmentFileUUID = '';
if ($(".attachmentUploadArea").length > 0) {
attachmentFileUUID = shr.generateUUID();
}
return attachmentFileUUID;
},
//在接口中设置附件上传中需要用到的UUID
_addAttachmentFileUUID : function(data){
if(data){
var attachmentFileUUID = shr.getAttachmentFileUUID();
if( $(".attachmentUploadArea").length > 0
&& $(".attachmentUploadArea").hasClass('standardAttachment')
&& attachmentFileUUID ){
data.fileUUID = attachmentFileUUID;
}
}
},
//生成UUID
generateUUID: function() {
var uuid = '';
var d = new Date().getTime();
if (window.performance && typeof window.performance.now === "function") {
d += performance.now();
}
uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = (d + Math.random() * 16) % 16 | 0;
d = Math.floor(d / 16);
return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);
});
return uuid;
},
//随机数
randMath: function(number){
number = number? number : 100000;
var seed = (new Date()).getTime();
function r(){
seed = (seed*9301+49297)%233280;
return seed/(233280.0);
}
return Math.ceil(r()*number);
},
stopMask: function(){
//对于界面存在多个iframe时,关闭提示不能移除所有遮罩
var iframes = top.document.getElementsByTagName('iframe');
if(iframes.length > 0) {
for(var i = 0;i < iframes.length;i++) {
mask = iframes[i].contentWindow.document.getElementById('shr-mask');
$(mask).remove();
}
}
$("div#shr-mask").remove();
},
// 增加一个关闭Mask的方法,用来提示浏览器缩放时的关闭。
stopAllMask: function(){
//对于界面存在多个iframe时,关闭提示不能移除所有遮罩
var iframes = top.document.getElementsByTagName('iframe');
if(iframes.length > 0) {
for(var i = 0;i < iframes.length;i++) {
mask = iframes[i].contentWindow.document.getElementById('shr-mask');
$(mask).remove();
}
}
$("div#shr-mask").remove();
$("div#shr-mask", top.parent.document).remove();
},
/**
* 获取当前的语言类型
* 判断语言类型规则:当字符串中存在中午字符、英文字符和数字时,规则是中文字符安>英文字符>数字
* @param {value}
*/
getValueLanguageType: function(value) {
if(escape(value).indexOf('%u') > -1) {
return 'zh_CN';
}else if(/[a-z]/i.test(value)) {
return 'en_US';
}else{
return 'number';
}
},
getCommonForUrl: function (someWindow, re) {
if (!someWindow) {
someWindow = _top;
}
var ret = re.exec(someWindow.location.href);
return (ret && ret.length > 1) ? ret[1] : '';
},
/**
* 过滤掉jquery选择器中的特殊字符串
*/
filterSelectorSpecialChar: function (selector) {
var _selector = selector;
if (typeof selector == "string") {
_selector = selector.replace(selector_special_char_regex, "\\$&");
}
return _selector;
},
/**
* 描述:获取当前语种标识
* zh_CN |中文
*en_US |英文
*zh_TW |繁体
*/
getContext: function () {
if (!shr.context) {
shr.context = { locale: window.contextLanguage };
}
return shr.context;
},
//处理安全漏洞扫描出来的json注入
explainJson: function( data ) {
var rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g;
var rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g;
var rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g;
var rvalidchars = /^[\],:{}\s]*$/;
if ( typeof data !== "string" || !data ) {
return null;
}
// Make sure leading/trailing whitespace is removed (IE can't handle it)
data = jQuery.trim( data );
// Make sure the incoming data is actual JSON
// Logic borrowed from http://json.org/json2.js
if ( rvalidchars.test(data.replace(rvalidescape, "@").replace(rvalidtokens, "]").replace(rvalidbraces, "")) ) {
// Try to use the native JSON parser first
return window.JSON && window.JSON.parse ?window.JSON.parse( data ) : (new Function("return " + data))();
} else {
jQuery.error( "Invalid JSON: " + data );
}
},
/**
* 根据语言环境获取多语言字段对应语言值
* 作用:当前的en_US,zh_CN,zh_TW环境与l1,l2,13的映射
* @param lan en_US、zh_CN、zh_TW 可以通过shr.getContext().locale或者window.contextLanguage获取
* @return l1、l2、13
* */
getFieldLangByContext: function (lan) {
var locale = 'zh_CN';
if(lan){
locale = lan;
}else if(shr.getContext().locale){
locale = shr.getContext().locale;
}
var each = null;
for (var i = 0, total = window.languageMappingList.length;i
\s*/ig;
//过滤on开头的标签属性
var reg2 = /\s*(ontoggle|ondragend|onunload|onsubmit|onscroll|onclick|onchange|onblur|onbefore|onafter|onactivate|onselect|onload|onkey|onfocus|onhelp|ondrop|onfinish|onerror|eval|expression|onclick|ondbclick|onmousedown|onmouseup|prompt)\s*=/ig;
//过滤src和href的伪协议
var reg3 = /\s*(href|src)\s*=/ig;
//过滤alert的伪协议
var reg4 = /\s*(alert|confirm(?!\s*ed))\s*/ig;
if(reg1.test(targetVal) || reg2.test(targetVal) || reg3.test(targetVal) || reg4.test(targetVal)){
return true;
}else{
return false;
}
},
/**
* xss过滤
*/
xssFilter: function(targetVal){
//XSS过滤
if((typeof targetVal) != 'string'){
return targetVal;
}
if(shr.verifyXss(targetVal)){
// 1.前端简单转义,主要对 < > 处理 2,服务端对特殊字符拦截
return $.htmlEncode(targetVal);
}else{
return targetVal;
}
},
/**
* 防止恶意url
*/
safeUrl: function(url, whiteChars){
var strRegex = '^((https|http|ftp)://)?'//(https或http或ftp):// 可有可无
+ '(([\\w_!~*\'()\\.&=+$%-]+: )?[\\w_!~*\'()\\.&=+$%-]+@)?' //ftp的user@ 可有可无
+ '(([0-9]{1,3}\\.){3}[0-9]{1,3}' // IP形式的URL- 3位数字.3位数字.3位数字.3位数字
+ '|' // 允许IP和DOMAIN(域名)
+ '(localhost)|' //匹配localhost
+ '([\\w_!~*\'()-]+\\.)*' // 域名- 至少一个[英文或数字_!~*\'()-]加上.
+ '\\w+\\.' // 一级域名 -英文或数字 加上.
+ '[a-zA-Z]{1,6})' // 顶级域名- 1-6位英文
+ '(:[0-9]{1,5})?' // 端口- :80 ,1-5位数字
+ '((/?)|' // url无参数结尾 - 斜杆或这没有
+ '(/[\\w_!~*\'()\\.;?:@&=+$,%#-]+)+/?)$';//请求参数结尾- 英文或数字和[]内的各种字符
var re=new RegExp(strRegex,'i');//i不区分大小写
//将url做uri转码后再匹配,解除请求参数中的中文和空字符影响
if (re.test(encodeURI(url))) {
return url;
}else {
return url;
}
},
/**
* 获取协议和域名
*/
getProtocolAndDomain: function (someWindow) {
var re = (/^((?:http|https)(?:\:\/\/)[^\/]+)/i);
return this.getCommonForUrl(someWindow, re);
},
/**
* 获取协议
*/
getProtocol: function (someWindow) {
var _window = (someWindow || _top);
return _window.location.protocol;
},
/**
* 获取域名
*/
getDomain: function (someWindow) {
var _window = (someWindow || _top);
return _window.location.host;
},
/**
* 获取serviceId
*/
getServiceId: function (someWindow) {
var _win = _top;
if (someWindow) {
_win = someWindow;
}
return shr.getUrlRequestParam('serviceId', _win.location.href);
},
/**
* F7请求头的特征值
*/
getXShrEncryptF7Value: function(){
return window.systemParamForShr['encryptDB']+'_'+window.systemParamForShr['encryptUser']+'_'+window.systemParamForShr['encryptContext'];
},
/**
* 获取数据中心
*/
getDataCenter: function () {
var dataCenter = _top.localStorage.getItem('FAccountDCName');
if (dataCenter === 'undefined') {
return;
}
return dataCenter;
},
/**
* 提供通用的SessionStorage存储方法
* 整个系统最好统一调用此方法
* @param key 关键字 必须
* @param billId 表单Id 可选
* @param value 必须
*/
setSessionStorage:function(key,billId,value){
sessionStorage.setItem(this.genStorageKey(key,billId),value);
},
/**提供通用的SessionStorage获取方法
* 整个系统最好统一调用此方法
* @param key 关键字 必须
* @param billId 表单Id 可选
* @param value 必须
*/
getSessionStorage:function(key,billId){
return sessionStorage.getItem(this.genStorageKey(key,billId));
},
/**
* 提供通用的LocalStorage 存入方法
* 整个系统最好统一调用此方法
* @param key 关键字 必须
* @param billId 表单Id 可选
* @param value 必须
*/
setLocalStorage:function(key,billId,value){
localStorage.setItem(this.genStorageKey(key,billId),value);
},
/**
* 提供通用的LocalStorage 获取方法
* 整个系统最好统一调用此方法
* @param key 关键字 必须
* @param billId 表单Id 可选
*/
getLocalStorage:function(key,billId){
return localStorage.getItem(this.genStorageKey(key,billId));
},
/**
* SessionStorage 或者 LocalStorage 的key的生成方式,以contextId+key[+单据id(可选)]
*/
genStorageKey:function(key,billId){
if(key == 'data-navigationData'){
return 'data-navigationData';
}
var key = window.systemParamForShr.encryptContext + '#' + key;
if(billId){
key += '#' + billId;
}
return key;
},
/**
* 提供通用的LocalStorage 值移除方法
* 整个系统最好统一调用此方法
* @param key 关键字 必须
* @param billId 表单Id 可选
*/
removeLocalStorageItem:function(key,billId){
localStorage.removeItem(this.genStorageKey(key,billId));
},
/**
* 提供通用的SessionStorage 值移除方法
* 整个系统最好统一调用此方法
* @param key 关键字 必须
* @param billId 表单Id 可选
*/
removeSessionStorageItem:function(key,billId){
sessionStorage.removeItem(this.genStorageKey(key,billId));
},
/**
* 获取浏览器类型
*/
getBowserInfo : function(){
var Sys = {};
var ua = navigator.userAgent.toLowerCase();
var s;
(s = ua.match(/rv:([\d.]+)\) like gecko/)) ? Sys.ie = s[1] :
(s = ua.match(/msie ([\d.]+)/)) ? Sys.ie = s[1] :
(s = ua.match(/firefox\/([\d.]+)/)) ? Sys.firefox = s[1] :
(s = ua.match(/chrome\/([\d.]+)/)) ? Sys.chrome = s[1] :
(s = ua.match(/opera.([\d.]+)/)) ? Sys.opera = s[1] :
(s = ua.match(/version\/([\d.]+).*safari/)) ? Sys.safari = s[1] : 0;
if (Sys.ie) return { browser : "IE" , version :Sys.ie};
if (Sys.firefox) return { browser : "Firefox" , version :Sys.firefox};
if (Sys.chrome) return { browser : "Chrome" , version :Sys.chrome };
if (Sys.opera) return { browser : "Opera" , version :Sys.opera };
if (Sys.safari) return { browser : "Safari" ,version : Sys.safari };
},
/**
*描述:ajax请求超时时间
*/
ajaxTimeout: 600000,
/**
* ajax请求时出现阻塞提示最小间隔时间
*/
blockMinTime: 100,
dynamicURL: '/dynamic.do',
openServiceURL: '/shr/msf/service.do',
getTreeDataURL: '/dynamic.do?method=getTreeData',
/**
* 描述:注册命名空间,并返回
* @param {String} 名称空间路径
*/
registerNamespace : function(ns){
var nsArray = fullNS.split('.');
var sEval = "";
var sNS = "";
for (var i = 0; i < nsArray.length; i++) {
if (i != 0)
sNS += ".";
sNS += nsArray[i];
sEval += "if (typeof(" + sNS + ") == 'undefined') " + sNS
+ " = new Object();"
}
if (sEval != "")
return eval(sEval);
},
/**
* 描述:shr 的js 类继承
* @param {subClass} 当前类
* @param {superClass} 需要继承的超类
*/
inherit : function(subClass, superClass) {
if(superClass==null) return ;
var Fun = function(){};//用一个空的函数作为中间缓冲,如果直接用父类的实例作为原型,可能有潜在问题,如计算量超大等
Fun.prototype = superClass.prototype;
subClass.prototype = new Fun();
subClass.prototype.constructor = subClass;
//提供 superClass 属性,这个属性可以弱化父类子类之间的耦合
//否则,在子类中调用父类的构造函数就需要指明父类,此时只需调用这个属性即可
subClass.superClass = superClass.prototype;
if(superClass.prototype.constructor == Object.prototype.constructor){
superClass.prototype.constructor = superClass;
}
},
/**
* 描述:shr 的js 类定义
* @param subClassName 当前类
* @param superClass 超类
* @param prototype 当前类体
* @return 返回创建好的JS类
*/
defineClass:function(subClassName,superClass,prototype){
var clzPath=subClassName.substr(0,subClassName.lastIndexOf('.'));
var ns=Namespace.register(clzPath);
var subClass=eval(subClassName + "=function(){};");
shr.inherit(subClass,superClass);
for(var p in prototype){
eval(subClassName + ".prototype." + p.toString() + "=prototype." + p.toString());
}
},
/**
* 描述: 创建对象
* @param {clazz} 创建该类的对象
*/
createObject:function(clazz){
var obj=new clazz();
if(clazz.superClass!=null){
obj.superClass=clazz.superClass;
}
//对JS类中的方法 作AOP处理
shr.aspectClassFun(clazz,obj);
return obj;
},
/**
* 描述:对JS类中的方法作AOP处理
* @param {} url
* @return {}
*/
aspectClassFun:function(clazz,object){
var clazz_temp=clazz;
while(clazz_temp!=null && clazz_temp!=undefined) {
for(var p in clazz_temp.prototype){
var methodName=p.toString();
var beforeMethodFun=p.toString() + "_before";
var afterMethodFun=p.toString() + "_after";
var aroundMethodFun=p.toString() + "_replace";
if(eval("object." + beforeMethodFun)!=null) {
shr.aspectBefore(object,p.toString(),eval("object." + beforeMethodFun));
}
if(eval("object." + afterMethodFun)!=null){
shr.aspectAfter(object,p.toString(),eval("object." + afterMethodFun));
}
if(eval("object." + aroundMethodFun)!=null){
shr.aspectAround(object,p.toString(),eval("object." + aroundMethodFun));
}
}
clazz_temp=clazz_temp.superClass;
}
},
/**
* 描述:JS类方法调用代理
* @param method 方法名称
* @param clazz JS类名称
* @param obj 调用对象
*/
proxyCall:function(methodName,objectName){
var fun=null;
if(objectName==null){
objectName="jsBinder";
}
if( typeof(methodName)=="object") {
fun=methodName;
}
else {
if(typeof(objectName)=="object"){
fun=eval(objectName[methodName]);
}
else {
fun=eval(objectName + "." + methodName);
}
}
if (!fun) {
return;
}
var paramArray=[];
if(arguments.length>2) {
paramArray=new Array();
for(var nIndex=2;nIndex').text(value).html();
},
htmlDecode: function(value) {
return $('').html(value).text();
},
/**
* 转义符换成普通字符
*/
strEscape: function (str) {
var arrEntities = { 'lt': '<', 'gt': '>', 'nbsp': ' ', 'amp': '&', 'quot': '"' };
var result = '';
if (str) {
result = str.replace(/&(lt|gt|nbsp|amp|quot);/ig, function (all, t) {
return arrEntities[t];
});
}
return result;
},
getRealId: function(id, uuid) {
id = this.convertId(id);
if (uuid) {
id = id + uuid;
}
return id;
},
getValueByRole: function (role, $element, id, context, isFromWF) {
var value;
var handler = {
'checkbox': function(){
var value;
if (typeof $element.attr("checked") == 'undefined') {
value = 0;
} else {
var _v_ = $element.shrCheckbox('getValue');
if(_v_){
value= 1;
}else{
value = 0;
}
}
return value;
},
'editGrid': function () {
var collection = $element.jqGrid('getAllPageData');
return collection;
},
'shrMultiLangBox': function () {
return $element.shrMultiLangBox('getTransformedValue');
},
'datetimepicker': function(){
return $element.shrDateTimePicker('getValue');
},
'numberField': function () {
return $element.shrNumberField('getValue');
},
'shrFieldDisplay': function() {
return $element.shrFieldDisplay('getOriginalValue') || $element.shrFieldDisplay('getValue');
}
}
//兼容ie下select控件'01'value值会被浏览器改变为'1'
if(shr.getBowserInfo().browser == 'IE'){
handler.select = function() {
return $element.shrSelect('getValue').value;
}
}
//查看状态下的分录role为grid
if(role === 'grid' && _self.getOperateState() === 'VIEW'){
role = 'editGrid';
}
if (handler.hasOwnProperty(role)) {
value = handler[role]();
} else {
value = shr.createObject(shr.framework.Widget).getInputValue(id, context, isFromWF);
}
return value;
},
getFieldValue: function (fieldName, uuid, context) {
var id = this.getRealId(fieldName, uuid);
var $element = $('#' + id, context);
var role = $element.attr('ctrlrole');
var value = this.getValueByRole(role, $element, id, context,false);
return value;
},
/**
* 根据字段id和方法名来执行方法
* 使用该方法的前提是具有ctrlrole属性,并且组件中有传入的方法名对应的方法
* fieldId:是字段的id
* methodName:方法名
* arguments:执行的方法要传递的参数
* context:上下文,可选参数,如果某些iframe中获取不到元素,则需要传上下文
*/
execByFieldIdAndMethod: function (fieldId, methodName, _arguments, context) {
var id = this.getRealId(fieldId);
var $element = $('#' + id, context);
try {
if ($element.length == 0) {
throw 'can not find the suitable element';
}
var ctrlrole = $element.attr('ctrlrole');
if (!ctrlrole) {
throw 'this elment has no ctrlrole attribute'
}
var componentName = this.getComponentNameByCtrlrole(ctrlrole);
if (_arguments) {
return $element[componentName](methodName, _arguments);
}
return $element[componentName](methodName);
} catch (e) {
console.error(e);
}
},
/**
* 根据字段id和方法名来执行方法
* 使用该方法的前提是具有ctrlrole属性,并且组件中有传入的方法名对应的方法
* $element:是jquery对象
* methodName:方法名
* arguments:执行的方法要传递的参数
*/
execByElementAndMethod: function ($element, methodName, _arguments) {
try {
if ($element.length == 0) {
throw 'can not find the suitable element';
}
var ctrlrole = $element.attr('ctrlrole');
if (!ctrlrole) {
throw 'this elment has no ctrlrole attribute'
}
var componentName = this.getComponentNameByCtrlrole(ctrlrole);
if (_arguments) {
return $element[componentName](methodName, _arguments);
}
return $element[componentName](methodName);
} catch (e) {
console.error(e);
}
},
/**
* 根据ctrlrole获取对应的组件名称
*/
getComponentNameByCtrlrole: function (ctrlrole) {
var componentName;
var mapping = {
'checkbox': 'shrCheckbox',
'radio':'shrRadio',
'select':'shrSelect',
'text':'shrTextField',
'shrSetIndexCode':'shrSetIndexCode',
'shrDetailTips':'shrDetailTips',
'shrFastFilter':'shrFastFilter',
'shrGridConfig':'shrGridConfig',
'shrIconUpload':'shrIconUpload',
'intlCell':'shrIntlCell',
'shrMessageTips':'shrMessageTips',
'multiSelect':'shrMultiSelect',
'shrSaveFilterSchemeDialog':'shrSaveFilterSchemeDialog',
'shrSpreadChooseAll':'shrSpreadChooseAll',
'shrTableDialog':'shrTableDialog',
'textarea':'shrTextarea',
'shrMultiLangBox': 'shrMultiLangBox',
'datetimepicker': 'shrDateTimePicker',
'dateSpanPicker':'shrDateSpanPicker',
'numberField': 'shrNumberField',
'shrFieldDisplay': 'shrFieldDisplay',
'promptBox':'shrPromptBox',
}
if (mapping.hasOwnProperty(ctrlrole)) {
componentName = mapping[ctrlrole];
}else{
throw 'can not find the suitable component';
}
return componentName;
},
setModelFieldValue: function(model, fieldName, value) {
if (fieldName.indexOf('.') != -1) {
var fields = fieldName.split('.');
var subModel;
for (var i = 0, length = fields.length - 1; i < length; i++) {
fieldName = fields[i];
subModel = model[fieldName];
if (typeof subModel == 'undefined') {
subModel = {};
model[fieldName] = subModel;
}
model = subModel;
}
fieldName = fields[fields.length - 1];
}
model[fieldName] = value;
},
setTamplateModelFieldValue: function(model, fieldName, value) {
if (fieldName.indexOf('.') != -1) {
var fields = fieldName.split('.');
fieldName = fields.join('_');
}
model[fieldName] = value;
},
/**
* 增加表单数据进行加密传输
* 表单数据有些格式数据会被防火墙或者网络安全策略拦截,导致保存失败
* @param data
*/
encryptFormModelData:function(data){
var option={model:data.model};
var encryptObj = shr.encryptForObj(option, null);
data.model = encryptObj.obj['model'];
data.encryptKeys='encryptKeys:' + $.allEncrypt('model');
},
addEncryptParams:function(postData,key,value){
var option ={};
option[key]=value;
var encryptObj = $.encryptForObj(option, null);
$.extend(postData, encryptObj.obj);
if (!postData.encryptKeys){
postData.encryptKeys = encryptObj.keyStr;
} else if(shr.arrayIndexOf(postData.encryptKeys.split(','),encryptObj.keyStr) == -1 && key != 'encryptKeys') {
postData.encryptKeys = postData.encryptKeys+','+ encryptObj.keyStr;
}
},
/**
* 增加接口数据进行加密传输
* @param postData
*/
addEncryptPostData: function(postData,isAllEncrypt){
if(postData){
var encryptKeysStr = postData.encryptKeys;
var needEncryptKey = shr.needEncryptKey();
if(encryptKeysStr && encryptKeysStr.indexOf('encryptKeys:') != -1){
encryptKeysStr = $.allDecrypt(encryptKeysStr.substring(12,encryptKeysStr.length));
}else if(encryptKeysStr && encryptKeysStr.indexOf('encryptKeys:') < 0){
var optEncryptKeysArray = encryptKeysStr.split(',');
optEncryptKeysArray.forEach(function(item){
if(shr.arrayIndexOf(needEncryptKey,item) < 0){
needEncryptKey.push(item);
}
});
}
if(postData.encryptKeys && encryptKeysStr){
var encryptKeys = encryptKeysStr;
for(var key in postData){
if(shr.arrayIndexOf(encryptKeys.split(','),key) != -1 && key != 'encryptKeys'){
try {
if($.allDecrypt(postData[key])){
postData[key] = $.allDecrypt(postData[key]);
}
} catch (error) {}
}
}
postData.encryptKeys = '';
}else if(!postData.encryptKeys){
postData.encryptKeys = '';
}
}
for(var key in postData){
if(postData[key] && !Array.isArray(postData[key])){
if(!isAllEncrypt && shr.arrayIndexOf(needEncryptKey,key) >= 0){
shr.addEncryptParams(postData, key, postData[key]);
}else if(isAllEncrypt && shr.arrayIndexOf(['method','serviceName','uipk','encryptKeys'],key) < 0){
shr.addEncryptParams(postData, key, postData[key]);
}
}
}
if(postData.encryptKeys){
postData.encryptKeys = 'encryptKeys:' + $.allEncrypt(postData.encryptKeys);
}
},
needEncryptKey: function(){
return ['filterItems','filter',
'fastFilterItems','sorterItems','advancedFilter','custom_params',
'tree_params','columnModel','queryMode','exportPrivteProtected',
'keyField','dataPerm','fieldName_key','searchFilterItems','categoryFilter',
'contractFilter','dynamicSql','model','order'];
},
//将url参数转换成对象类型,并且参数值做了 decodeURIComponent,所以 仅供与dealPostParam去使用,别的地方不可以使用
urlParamsToObject: function(url) {
var queryString = url.split('?').length > 1?url.split('?')[1]:'';
var paramsArr = queryString.split('&');
var paramObj = {};
for ( var i = 0; i < paramsArr.length; i++) {
var pos = paramsArr[i].indexOf('=');// 查找name=value
if (pos == -1) continue;// 如果没有找到就跳过
var argname = paramsArr[i].substring(0, pos);// 提取name
var value = paramsArr[i].substring(pos + 1);// 提取value
try {
paramObj[argname] = decodeURIComponent(value);
} catch (error) {
paramObj[argname] = value;
}
}
return paramObj;
},
dealPostParam: function(option){
var isHasKey = false;
var isUrlHasKey = false;
if(option.data){
if(option.data.noEncrypt) return;
var encryptKey = shr.needEncryptKey();
var optEncryptKeys = option.data.encryptKeys;
if(optEncryptKeys && optEncryptKeys.indexOf('encryptKeys:') < 0){
var optEncryptKeysArray = optEncryptKeys.split(',');
optEncryptKeysArray.forEach(function(item){
if(shr.arrayIndexOf(shr.needEncryptKey(),item) < 0){
encryptKey.push(item);
}
});
}
for(var item in option.data){
if(shr.arrayIndexOf(encryptKey,item) >= 0){
isHasKey = true;
}
}
if(option.url.indexOf('/shr/dynamic.do') >= 0){
encryptKey.forEach(function(item){
if(option.url.indexOf(item) >= 0){
isUrlHasKey = true;
}
});
}
}
if(option.url.indexOf('getListData') >= 0 || isUrlHasKey){
var paramObj = shr.urlParamsToObject(option.url);
option.url = option.url.split('?')[0];
$.extend(option.data,paramObj);
shr.addEncryptPostData(option.data);
option.type = 'POST';
}else if(option.data && option.data.method == 'callService'){
shr.addEncryptPostData(option.data,true);
}else if(option.data && option.data.method == 'exportToExcel'
|| option.data && option.data.method == 'newTask'){
shr.addEncryptPostData(option.data);
}else if(option.data && option.data.method == 'getCompareResults'){
option.data.a = $.allEncrypt(option.data.a);
option.data.b = $.allEncrypt(option.data.b);
option.data.encryptKeys='encryptKeys:' + $.allEncrypt('a,b');
}else if(isHasKey){
shr.addEncryptPostData(option.data);
}
},
doAction: function(option) {
//shr.dealPostParam会修改options,防止影响外部参数引用
var option = $.extend(true,{},option);
// disible button
if (option.target) {
var $target = $(option.target);
if ($target.is('button')) {
$target.addClass('shrbtn-disabled');
$target.attr('disabled', 'disabled');
}
}
//拼接请求URL
if(option.url == null){
if(option.param != null) {
option.url = "?method=" + option.action + "&" + option.param;
}
else {
option.url="?method=" + option.action;
}
}
//默认传输格式为json
if(option.dataType==null){
option.dataType = "json";
}
//默认请求超时时间为ajaxTimeout
if(option.timeout==null) {
option.timeout=this.ajaxTimeout;
}
//默认表单名称为form
/*if(option.form==null){
option.form="form";
}*/
//默认提交方式为异步方式
if(option.async==null){
option.async=true;
}
//默认阻塞界面
if(option.showBlock == null){
option.showBlock = true;
}
// add check data
this._addCommonExtParam( option );
this.dealPostParam( option );
//var timer=null;
var requestOption = {
url: option.url,
data: option.data,
/* 默认ajax数据交互格式为json */
dataType: option.dataType,
type: option.type,
async: option.async,
timeout: option.timeout,
success: function(obj, textStatus) {
if (option.showBlock == true) {
clearTimeout(timer);
$.block.hide();
}
if(obj == null){
option.success(null);
return ;
}
if (option.dataType == 'json') {
//自行处理返回
if(option.ignoreHandlerMessage && option.ignoreHandlerMessage == true){
option.success(obj, textStatus);
return;
}
if(obj.result == "success") {
var message = obj.successMessage;
if (!message) {
message = $.shrI18n.common.tips.operateSuccess;
}
shr.showSuccess({
message: message,
hideAfter: 3
});
//如果是portal跳转过来,top为0,否则为60px
if (isFromPortal()) {
$("ul[class='messenger messenger-fixed messenger-theme-air messenger-on-top messenger-theme-future']").css('top', 0);
} else {
$("ul[class='messenger messenger-fixed messenger-theme-air messenger-on-top messenger-theme-future']").css('top', '60px');
}
//调用回调函数
if(option.success) {
option.success(obj.data, obj.uiItems, obj.script);
}
} else if(obj.result == "error") {
var message = obj.summary;
// if (!$.isEmptyObject(obj.detailInfo)) {
// message = message + '
' + obj.detailInfo;
// }
if (!message) {
message = $.shrI18n.common.tips.operateFail;
}
shr.showError({message: message});
//调用回调函数
if(option.error) {
option.error(obj.data, obj.uiItems, obj.script);
}
}
} else {
if(option.success != null) {
shr.showInfo({
message: $.shrI18n.common.tips.operateSuccess,
hideAfter: 3
});
shr.stopAllMask();
//调用回调函数
if(option.success) {
option.success(obj);
}
}
}
},
error:function(response, textStatus, errorThrown) {
return shr.handleError(option, response, textStatus, errorThrown);
},
complete:function(jqXHR, textStatus){
if(option.complete && waf.isFunction(option.complete)){
option.complete.call(this, jqXHR, textStatus);
}
/*if (option.showBlock == true) {
clearTimeout(timer);
$.block.hide();
}*/
if (option.target) {
var $target = $(option.target);
if ($target.is('button')) {
$target.removeClass('shrbtn-disabled');
$target.removeAttr('disabled');
}
}
}
};
var messageOptions = {
//successMessage : '操作成功!',
errorMessage : $.shrI18n.common.tips.operateFail,
progressMessage : $.shrI18n.common.tips.operating,
showCloseButton: true,
singleton: true,
hideAfter: null
};
shr.msgHideAll();
//锁定BODY
if (option.showBlock == true) {
/*$.block.show({
text: '正在执行,请稍候...'
});*/
timer = setTimeout(function() {
$.block.show({
text: $.shrI18n.common.loadingText.runningPlsWait
});
}, shr.blockMinTime);
}
_top.Messenger().run(messageOptions, requestOption);
/*//锁定BODY
if(option.showBlock==true){
timer=setTimeout(function(){
waf.block.show({text:waf.localeResourceObj.AJAX_ASYNC_BLOCK_INFO});
},
500);
}*/
/*报出提交事件 */
/*$('#' + option.form).trigger("onSubmit");
提交
$('#' + option.form).ajaxSubmit(requestOption);*/
},
//检测数组中是否包含某个字符串
arrayIndexOf: function(arr,key){
if(!Array.isArray(arr)){
return -1;
}
var bol = -1;
arr.forEach(function(item,index){
if(item === key){
bol = index;
}
});
return bol;
},
/**
* 判断是否是一个json
*/
isJSON: function(str) {
if (typeof str == 'string') {
try {
var obj = JSON.parse(str);
if(typeof obj == 'object' && obj ){
return true;
}else{
return false;
}
} catch(e) {
return false;
}
}
},
doWithBatchAction: function(option) {
//shr.dealPostParam会修改options,防止影响外部参数引用
var option = $.extend(true,{},option);
// disible button
if (option.target) {
var $target = $(option.target);
if ($target.is('button')) {
$target.addClass('shrbtn-disabled');
$target.attr('disabled', 'disabled');
}
}
//拼接请求URL
if(option.url == null){
if(option.param != null) {
option.url = "?method=" + option.action + "&" + option.param;
}
else {
option.url="?method=" + option.action;
}
}
//默认传输格式为json
if(option.dataType==null){
option.dataType = "json";
}
//默认请求超时时间为ajaxTimeout
if(option.timeout==null) {
option.timeout=this.ajaxTimeout;
}
//默认表单名称为form
/*if(option.form==null){
option.form="form";
}*/
//默认提交方式为异步方式
if(option.async==null){
option.async=true;
}
//默认阻塞界面
if(option.showBlock == null){
option.showBlock = true;
}
// add check data
this._addCommonExtParam( option );
shr.dealPostParam( option );
//var timer=null;
var requestOption = {
url: option.url,
data: option.data,
/* 默认ajax数据交互格式为json */
dataType: option.dataType,
type: option.type,
async: option.async,
timeout: option.timeout,
success: function(obj, textStatus) {
if (option.showBlock == true) {
clearTimeout(timer);
$.block.hide();
}
if(obj == null){
option.success(null);
return ;
}
if (option.dataType == 'json') {
if(obj.result == "success") {
// var message = obj.successMessage;
// if (!message) {
// message = '操作成功!';
// }
// shr.showInfo({
// message: message,
// hideAfter: 3
// });
//调用回调函数
if(option.success) {
option.success(obj.data, obj.uiItems, obj.script);
}
} else if(obj.result == "error") {
var message = obj.summary;
// if (!$.isEmptyObject(obj.detailInfo)) {
// message = message + '
' + obj.detailInfo;
// }
if (!message) {
message = $.shrI18n.common.tips.operateFail;
}
shr.showError({message: message});
//调用回调函数
if(option.error) {
option.error(obj.data, obj.uiItems, obj.script);
}
}
} else {
if(option.success != null) {
// shr.showInfo({
// message: "操作成功!",
// hideAfter: 3
// });
//调用回调函数
if(option.success) {
option.success(obj);
}
}
}
},
error:function(response, textStatus, errorThrown) {
return shr.handleError(option, response, textStatus, errorThrown);
},
complete:function(jqXHR, textStatus){
if(option.complete && waf.isFunction(option.complete)){
option.complete.call(this, jqXHR, textStatus);
}
/*if (option.showBlock == true) {
clearTimeout(timer);
$.block.hide();
}*/
if (option.target) {
var $target = $(option.target);
if ($target.is('button')) {
$target.removeClass('shrbtn-disabled');
$target.removeAttr('disabled');
}
}
}
};
var messageOptions = {
//successMessage : '操作成功!',
errorMessage : $.shrI18n.common.tips.operateFail,
progressMessage : $.shrI18n.common.tips.operating,
showCloseButton: true,
singleton: true,
hideAfter: null
};
shr.msgHideAll();
//锁定BODY
if (option.showBlock == true) {
/*$.block.show({
text: '正在执行,请稍候...'
});*/
timer = setTimeout(function() {
$.block.show({
text: $.shrI18n.common.loadingText.runningPlsWait
});
}, shr.blockMinTime);
}
var messageFun;
if($.isFunction(_top.Messenger)){
messageFun = _top.Messenger();
}else{
messageFun = Messenger();
}
messageFun.run(messageOptions, requestOption);
/*//锁定BODY
if(option.showBlock==true){
timer=setTimeout(function(){
waf.block.show({text:waf.localeResourceObj.AJAX_ASYNC_BLOCK_INFO});
},
500);
}*/
/*报出提交事件 */
/*$('#' + option.form).trigger("onSubmit");
提交
$('#' + option.form).ajaxSubmit(requestOption);*/
},
/**
*此请求,要求success函数一定要进行回调重写
*/
doAjaxNeedSuccess: function(option) {
option.successResultSelfHandler = true;
return $.doAjax(option);
},
doAjax: function(option) {
//拼接请求URL
if(option.url == null && option.action){
if(option.param != null) {
option.url = "?method=" + option.action + "&" + option.param;
} else {
option.url= "?method=" + option.action;
}
}
if (option.data && !(option.data.method) && option.action) {
option.data.method = option.action;
}
//默认传输格式为json
if(option.dataType==null){
option.dataType = "json";
}
//默认请求超时时间为ajaxTimeout
if(option.timeout==null) {
option.timeout=this.ajaxTimeout;
}
//默认表单名称为form
/*if(option.form==null){
option.form="form";
}*/
//默认提交方式为异步方式
if(option.async==null){
option.async=true;
}
//默认阻塞界面
/*if(option.showBlock==null){
option.showBlock = true;
}*/
// add check data
this._addCommonExtParam( option );
//var timer=null;
var requestOption = {
url: option.url,
data: option.data,
/* 默认ajax数据交互格式为json */
dataType: option.dataType,
type: option.type,
async: option.async,
timeout: option.timeout,
error: function(response, textStatus, errorThrown) {
if(option.error && $.isFunction(option.error)){
return option.error.call(this, response, textStatus, errorThrown);
} else {
return shr.handleError(option, response, textStatus, errorThrown);
}
},
complete: function(jqXHR, textStatus){
if(option.complete && $.isFunction(option.complete)){
option.complete.call(this, jqXHR, textStatus);
}
if (option.showBlock == true) {
clearTimeout(timer);
$.block.hide();
}
}
};
if (option.success) {
requestOption.success = function(obj, textStatus) {
//解锁BODY
if (option.showBlock == true) {
clearTimeout(timer);
$.block.hide();
}
if(obj == null){
option.success(null);
return ;
}
if(option.successResultSelfHandler === true){
option.success(obj, textStatus);
return;
}
if (option.dataType == 'json') {
if(obj.result == "success") {
if(option.success != null) {
//调用回调函数
option.success(obj.data, obj.uiItems, obj.script);
}
} else if(obj.result == "error") {
//$('body').html(obj);
//var message = obj.summary + '
' + obj.detailInfo;
var message = obj.summary;
shr.showError({message: message});
if(option.error != null) {
option.error(obj);
}
} else {
option.success(obj);
}
} else {
if(option.success != null) {
//调用回调函数
option.success(obj);
}
}
};
}
//锁定BODY
if (option.showBlock == true) {
timer = setTimeout(function() {
$.block.show({
text: $.shrI18n.common.loadingText.runningPlsWait
});
}, shr.blockMinTime);
}
if(option.contentType){
requestOption.contentType = option.contentType;
}
if(option.headers){
requestOption.headers = option.headers;
}
return $.ajax(requestOption);
},
/**
* 判断是否是session失效,重定向到登录页面
*/
checkIsRedirectLogin: function(response) {
var content;
if (typeof response == 'string') {
content = response;
} else if (typeof response == 'object' && response.responseText) {
content = response.responseText;
}
if (content && content.indexOf('action="login?') != -1) {
shr.redirectLogin();
return true;
}
return false;
},
/**
* 重定向登录页面
*/
redirectLogin: function() {
_top.location.href = _top.location.href
},
doGet: function(option) {
//拼接请求URL
if(option.url == null){
if(option.param != null) {
option.url = "?method=" + option.action + "&" + option.param;
}
else {
option.url="?method=" + option.action;
}
}
//默认传输格式为json
if(option.dataType==null){
option.dataType = "html";
}
//默认请求超时时间为ajaxTimeout
if(option.timeout==null) {
option.timeout=this.ajaxTimeout;
}
//默认提交方式为异步方式
if(option.async==null){
option.async = true;
}
//添加shruicode
this._addShruicode( option.data );
//var timer=null;
var url = option.url;
var requestOption = {
url: option.url,
data: option.data,
/* 默认ajax数据交互格式为json */
dataType: option.dataType,
type: option.type,
async: option.async,
timeout: option.timeout,
success: function(obj, textStatus) {
//obj返回可能为空
var $response;
try {
$response = $(obj);
}catch (e){
console.log('response data exception: null data response.');
}
if ($response && $response.filter('meta[content=error-page]').length > 0) {
var regexp1 = /