/*压缩类型:标准*/ /*********************************************** JS文件说明: 该文件是系统中最基础的JS文件,所有页面必须首先载入该文件。 该文件提供了一些常用的方法,并提供了跨浏览器的JS替代方案。 作者:叶中奇 版本:1.0 2006-4-3 ***********************************************/ Com_RegisterFile("common.js"); //默认的静态资源类型 var staticResourceRegexes = [/\.html(?:\?|$)/i,/\.js(?:\?|$)/i,/\.css(?:\?|$)/i, /\.jpg(?:\?|$)/i,/\.png(?:\?|$)/i,/\.gif(?:\?|$)/i,/\.jpg(?:\?|$)/i,/\.tmpl(?:\?|$)/i, /\.eot(?:\?|$)/i,/\.svg(?:\?|$)/i,/\.ttf(?:\?|$)/i,/\.woff(?:\?|$)/i]; function isStaticResource(url){ for(var i = 0; i1){ var length = Com_Parameter.possibleResourceSites.length; var masterSite = Com_Parameter.possibleResourceSites[0]; if( isStaticResource(url) ){ if(pollIndex++<0){ pollIndex = 0;//reset } var candidateSite = Com_Parameter.possibleResourceSites[pollIndex % length]; var _url; if(url.startsWith(masterSite)){ //如果是访问主站,替换成轮询的站点 _url = url.replace(masterSite,candidateSite); }else if(url.startsWith('/')){ //如果以/开头,表示网站根路径,追加备选站点前缀即可 _url = candidateSite+url; } /* if(window.console && console.log){ console.log('poll choose site from '+url+' to '+_url); } */ return _url?_url:url; } } return url; } /*********************************************** 功能:引入JS文件 参数 fileList:文件名列表,用|分隔多值 contextPath:文件路径,默认值为"js/" extendName:文件扩展名,默认从文件名中获取 ***********************************************/ function Com_IncludeFile(fileList, contextPath, extendName, isOuter){ Com_Parameter.JsFileMapping = Com_Parameter.JsFileMapping || {}; var i, j, fileType; contextPath = contextPath || "js/"; isOuter = isOuter || false; var topList = ["jquery.js"]; function isInTopList(f) { for (var i = 0; i < topList.length; i ++) { if (f.indexOf(topList[i]) > -1) { return true; } } return false; } fileList = fileList.split("|"); var outFiles = [], jsFiles = [], cssFiles = []; for(i=0; i-1) fileType = fileList[i].substring(j+1); else fileType = "js"; }else{ fileType = extendName; } //缓存处理 if(fileList[i].indexOf('s_cache=')<0){ if(fileList[i].indexOf("?")>=0){ fileList[i] = fileList[i] + "&s_cache=" + Com_Parameter.Cache; }else{ fileList[i] = fileList[i] + "?s_cache=" + Com_Parameter.Cache; } } switch(fileType){ case "js": case "jsp": var fileId = (function(fileName){ if(fileName.indexOf("/")>-1){ fileName = fileName.substring(fileName.lastIndexOf("/")+1); } if(fileName.indexOf("?")>-1){ fileName = fileName.substring(0,fileName.lastIndexOf("?")); } fileName = fileName.replace(/[\.\=]/g,"_"); return fileName; })(fileList[i]); if(isOuter){ jsFiles.push(fileList[i]); outFiles.push(""); Com_Parameter.JsFileMapping[fileList[i]]=fileList[i]; }else{ if (isInTopList(fileList[i])) { jsFiles.unshift(Com_Parameter.ResPath+fileList[i]); outFiles.unshift(""); Com_Parameter.JsFileMapping[fileList[i]]=Com_Parameter.ResPath+fileList[i]; } else { jsFiles.push(Com_Parameter.ResPath+fileList[i]); outFiles.push(""); Com_Parameter.JsFileMapping[fileList[i]]=Com_Parameter.ResPath+fileList[i]; } } break; case "css": if(isOuter){ cssFiles.push(fileList[i]); outFiles.push(""); }else{ cssFiles.push(Com_Parameter.ResPath+fileList[i]); outFiles.push(""); } } } } var dojoConfig = window.dojoConfig || {}; if(dojoConfig.offline){ //避免影响范围过大,暂时只在离线页面中使用新的Com_IncludeFile逻辑 Com_IncludeJSFiles(jsFiles); Com_IncludeCSSFiles(cssFiles); }else{ if(outFiles.length>0){ var _string = outFiles.join("\r\n"); document.writeln(_string); } } } function Com_IncludeJSFiles(srcArray){ for(var i = 0;i < srcArray.length;i++){ _create(srcArray[i]); } function _create(src){ var xmlhttp = {}; if (window.XMLHttpRequest) {// 所有浏览器 xmlhttp = new XMLHttpRequest(); } else if (window.ActiveXObject) {// IE5 和 IE6 xmlhttp = new ActiveXObject( "Microsoft.XMLHTTP"); } xmlhttp.open("GET", siteSelect(src), false); xmlhttp.onreadystatechange = function(){ if (xmlhttp.readyState == 4) { // Complete if (xmlhttp.status == 200 || xmlhttp.status == 0) { // OK response var responseText = xmlhttp.responseText; if(window.execScript){ window.execScript(responseText); }else if(window.eval){ window.eval(responseText); } } } }; xmlhttp.send(null); } } function Com_IncludeCSSFiles(cssArray){ for(var i = 0;i < cssArray.length;i++){ _create(cssArray[i]); } function _create(url){ var head = document.getElementsByTagName('head')[0], css = document.createElement('link'); css.type = 'text/css'; css.rel = 'stylesheet'; css.href = siteSelect(url); head.appendChild(css); } } /*********************************************** 功能:新建文档函数 参数: modelName:模板域模型 strUrl:必选,创建的url,其中id参数用参数!{id},显示名参数用!{name} ***********************************************/ function Com_NewFile(modelName,strUrl){ if(modelName==null || strUrl==null) return; var href = location.href; var method = Com_GetUrlParameter(href,"method"); if(Com_GetUrlParameter(href,"method")=="add"){ var i=strUrl.indexOf("?"); if(i>0) strUrl = strUrl.substring(i); var paraList = strUrl.split("&"); var hasValue = false; for(i=0;i0){ var paramName = paraList[i].substring(0,j); var paramValue = Com_GetUrlParameter(href,paramName); if(paramValue!=null && paramValue!="") { hasValue = true; break; } } } if(!hasValue) { var strUrl = Dialog_Template(modelName,strUrl,false,true); if(strUrl==null) {Com_Parameter.CloseInfo=null;Com_CloseWindow();} else window.open(strUrl,"_self"); } }else if(method.indexOf("list")>0){ Dialog_Template(modelName,strUrl); } } /*********************************************** 功能:新建文档函数,选择简单分类 参数: modelName:分类域模型 strUrl:必选,创建的url,其中id参数用参数!{id},显示名参数用!{name} add by wubing date:2009-07-30 ***********************************************/ function Com_NewFileFromSimpleCateory(modelName,strUrl){ if(modelName==null || strUrl==null) return; var href = location.href; var method = Com_GetUrlParameter(href,"method"); if(Com_GetUrlParameter(href,"method")=="add"){ var i=strUrl.indexOf("?"); if(i>0) strUrl = strUrl.substring(i); var paraList = strUrl.split("&"); var hasValue = false; for(i=0;i0){ var paramName = paraList[i].substring(0,j); var paramValue = Com_GetUrlParameter(href,paramName); if(paramValue!=null && paramValue!="") { hasValue = true; break; } } } if(!hasValue) { var strUrl = Dialog_SimpleCategoryForNewFile(modelName,strUrl,false,true); if(strUrl==null) {Com_Parameter.CloseInfo=null;Com_CloseWindow();} else window.open(strUrl,"_self"); } }else if(method.indexOf("list")>0){ Dialog_SimpleCategoryForNewFile(modelName,strUrl); } } /*********************************************** 功能:注册js文件 参数: fileName:文件名 ***********************************************/ function Com_RegisterFile(fileName){ fileName = "js/" + fileName; if(Com_ArrayGetIndex(Com_Parameter.JsFileList, fileName)==-1) Com_Parameter.JsFileList[Com_Parameter.JsFileList.length] = fileName; } /*********************************************** 功能:注册js文件,该方法只在合并js中自动调用, 参见java类 com.landray.kmss.sys.ui.util.PcJsOptimizeUtil 参数: fileName:文件名 与Com_RegisterFile的区别在于不会添加前置的js/,因为在合并JS的地方,业务已经指定了前缀 ***********************************************/ function New_Com_RegisterFile(fileName, ctx){ if(fileName){ fileName = ctx?ctx+fileName:fileName; if(Com_ArrayGetIndex(Com_Parameter.JsFileList, fileName)==-1){ Com_Parameter.JsFileList[Com_Parameter.JsFileList.length] = fileName; } } } /*********************************************** 功能:获取数组中指定关键字的位置 参数: arr:数组 key:关键字 返回:关键字所在的位置,找不到则返回-1 ***********************************************/ function Com_ArrayGetIndex(arr, key){ for(var i=0; i-1){ return true; } return false; } //MAC 电脑 function isInWeChatWorkMAC(){ var ua = window.navigator.userAgent; ua = ua.toLowerCase(); if(ua.indexOf('mac ')>-1 && ua.indexOf('wxwork')>-1 ){ return true; } return false; } function wechatwork_closeWindows(){ var localUrl = encodeURIComponent(window.location.href.split('#')[0]); var url = Com_Parameter.ContextPath+"third/wxwork/jsapi/wxJsapi.do?method=pcJsapiSignature&pUrl="+localUrl+"&url="+localUrl; $.ajax({ type: "POST", url: url, async:false, dataType: "json", success: function(signInfo){ wx.config({ debug : false, beta : true, appId : signInfo.appId, timestamp : signInfo.timestamp, nonceStr : signInfo.noncestr, signature : signInfo.signature, jsApiList : ['openDefaultBrowser'] }); wx.ready(function(){ // 关闭页面 wx.closeWindow(); }); } }); } function isInDingTalk(){ var ua = window.navigator.userAgent; ua = ua.toLowerCase(); if(ua.indexOf('dingtalk-win')>-1){ return true; } return false; } /*********************************************** 功能:设置窗口的标题 参数: Title:标题文本 ***********************************************/ function Com_SetWindowTitle(Title){ try{ document.title = Title; }catch(err){ } } Com_Parameter.IE = (typeof window.ActiveXObject != "undefined"); //全局变量,判断当前浏览器是否为IE浏览器 /*********************************************** 功能:往某个对象中添加一个事件 参数: obj:对象,如:window、document等 eventType:事件名称,不以on开始,比如:"load"、"mouseover" func:需要执行的函数 ***********************************************/ function Com_AddEventListener(obj, eventType, func){ if(Com_Parameter.IE) obj.attachEvent("on"+eventType, func); else obj.addEventListener(eventType, func, false); } /*********************************************** 功能:往某个对象中删除一个事件 参数: obj:对象,如:window、document等 eventType:事件名称,不以on开始,比如:"load"、"mouseover" func:已经添加的函数 ***********************************************/ function Com_RemoveEventListener(obj, eventType, func){ if(Com_Parameter.IE) obj.detachEvent("on"+eventType, func); else obj.removeEventListener(eventType, func, false); } /*********************************************** 功能:打开一个新窗口 参数: url:窗口路径,若Com_Parameter.IsAutoTransferPara设置为True,则自动往URL中添加当前窗口的参数 target: null/"":在下一个帧中打开,若在第一帧调用则打开第三帧页面 1/2/3/4:在指定的帧打开(见首页界面说明) string:目标帧名称 winStyle: 当在首页帧结构集中打开,仅当打开第4帧时该参数有效,其值可为: "max":新开窗口最大化 "mid":新开窗口跟视图窗口各分一半的空间 "min":新开窗口最小化 若不是在首页真结构集打开时,跟window.open的参数一样 keepUrl: 是否保留原有url,默认值为false(不保留) 返回:新窗口对象 ***********************************************/ function Com_OpenWindow(url, target, winStyle, keepUrl){ //这个判断会影响钉钉工作台的数据导出模块iframe加载问题,所以暂时注释-by王雄峰 /*if(isInDingTalk()){ //修复 #129594 target="_self"; }*/ if(!keepUrl){ if(Com_Parameter.IsAutoTransferPara) url = Com_CopyParameter(url, new Array("forward", "s_path")); if(!(url.indexOf("https://")==0 || url.indexOf("http://")==0)){ url = Com_SetUrlParameter(url, "s_css", Com_Parameter.Style); } } // tomcat7对于大括号的支持问题 url = url.replace("{", "%7B").replace("}", "%7D"); // 门户组件链接点击后置灰处理 #185789 if(window.on_openWindowEvent){ on_openWindowEvent(url); } var eventObj = Com_GetEventObject(); if(eventObj!=null && eventObj.shiftKey==true){ target = "_blank"; document.selection.empty(); } if(target=="1" || target=="2" || target=="3" || target=="4") { target = parseInt(target, 10); } if(target==null || target=="" || target==1 || target==2 || target==3 || target==4){ var win = Com_RunMainFrameFunc("Frame_OpenWindow", url, target, winStyle); if(win==null) { target = Com_GetUrlParameter(location.href, "s_target"); if(target==null) target = "_blank"; win = window.open(url, target); } return win; }else{ if(winStyle==null || winStyle=="") return window.open(url, target); else return window.open(url, target, winStyle); } } /*********************************************** 功能:拷贝当前URL的参数拷贝到指定的URL中 参数: url:目标URL 返回:拷贝后的新的URL ***********************************************/ function Com_CopyParameter(url, except){ if(location.search=="") return url; var paraList = location.search.substring(1).split("&"); var i, j, k, para, value; copyParameterOutLoop: for(i=0; i 0) { var promiseAllCount = 0; var def = $.Deferred(); for (var i = 0; i < promises.length; i++) { promises[i].then(function (result) { if (!result) { def.resolve(false); } promiseAllCount++; if (promiseAllCount === promises.length) { def.resolve(true); } }) } def.then(function (result) { if (result) { return __Submit(); }else{ if (Com_Submit.ajaxCancelSubmit) { Com_Submit.ajaxCancelSubmit(formObj); } Com_Parameter.isSubmit = false; return false; } }) return } } function __Submit(){ // 预提交处理 var url = Com_Parameter.ContextPath + 'sys/ui/resources/user.jsp'; try { Com_Parameter.preOldSubmit = Com_GetEventObject();//校验会话的异步操作导致事件被改变,保存提交之前的事件,其他业务可能需要用到 } catch (e) { // TODO: handle exception } //校验会话 if (typeof (seajs) != 'undefined' && typeof (top['seajs']) != 'undefined') { try { //Com_EventPreventDefault(); //var validate_result = false; // 获取RTF域内容,处理提交时是否有包含非法值 if (typeof (CKEDITOR) != 'undefined') { for (instance in CKEDITOR.instances) { CKEDITOR.instances[instance].updateElement(); } } seajs.use('lui/dialog', function (dialog) { $.ajax({ url: url, type: 'POST', dataType: 'text', data: $(formObj).serializeArray(), async: true, error: function (data) { //dialog.alert('会话校验失败,'+data); alert(Com_Parameter.ServiceNotAvailTip + data.statusText); // 如果校验失败,执行回调方法 for (var i = 0; i < Com_Parameter.event["submit_failure_callback"].length; i++) { Com_Parameter.event["submit_failure_callback"][i](); } Com_Parameter.isSubmit = false; }, success: function (data) { if (data) { data = data.replace(/[\r\n]/g, ""); } if (data.indexOf("invalid_value") == 0) { // 校验非法值 if (data.substr("invalid_value".length).indexOf("