/** * 公共帮助类 * 提供openTab,swapStyle,getWin,AjaxRequest,ExceptionWindow等方法 */ Ext.onReady(function(){ Ext.ns("Ext.Authority.share"); share = Ext.Authority.share; if(Ext.lib.Ajax.defaultPostHeader.indexOf(";charset=utf-8")<0){ Ext.lib.Ajax.defaultPostHeader += ";charset=utf-8"; } share.getPageSize = function(){ return 15; }; share.getPagecombodata = function(){ return [ [ 10, '每页10条' ], [ 15, '每页15条' ], [ 30, '每页30条' ], [ 50, '每页50条' ] ]; }; /** * 验证session状态 */ share.doAjaxAndSubmitFun = function(response){ if (typeof response.getResponseHeader == "function") { var sessionStatus = response.getResponseHeader("session-status"); // 登陆超时 if (sessionStatus == "timeout") { var win = window; share.showMessage({ message:"很抱歉,登录超时,请返回登录页重新登录!", fn:function(){ win.location = ctx + "/login/" + login_enterpriseId; } }); return false; } // 时间戳异常 if (sessionStatus == "authtimeout") { var win = window; share.showMessage({ message:"操作失败,请重试!", fn:function(){ win.location = ctx + "/login/" + login_enterpriseId; } }); return false; } // 服务器出错 if (sessionStatus == "pagenotfind") { share.showMessage({message: "很抱歉,您要访问的资源不存在!"}); return false; } // 无此权限 // 企业越权 if(sessionStatus == "noauthority" || sessionStatus == "illegalauthority"){ share.showMessage({message: "很抱歉,您无权访问此资源!"}); return false; } } return true; }; /** * 执行Ajax和Form的提交方法消息显示 */ share.showAjaxAndForm2SubmitMessage = function(options, success, response, settings){ if (settings.waiting) { settings.waiting.hide(); } var json = Ext.util.JSON.decode(response.responseText == "<pre></pre>" ? "" : response.responseText); if(json && json.o == 'timeout'){ var win = window; share.showMessage({ message:"很抱歉,登录超时,请返回登录页重新登录!", fn:function(){ win.location = ctx + "/login/" + login_enterpriseId; } }); return; } if(success){ var sign = share.doAjaxAndSubmitFun(response); if(!sign){ return false; } if (json.success) { // 执行成功 if (settings.showMsg) { // 显示提示信息 var message = '执行成功.'; if (json.msg) { // 服务器端传回的提示文字 message = json.msg; } // 提示信息 share.showMessage({ sign : true, message : message, fn : function(){ if (settings.success && typeof settings.success == "function") { // 成功回调函数 settings.success(json, settings.form); } else if(settings.exception && typeof settings.exception == "function"){ // 失败回调函数 settings.exception(json, settings.form); } } }); }else{ if (settings.success && typeof settings.success == "function") { // 成功回调函数 settings.success(json, settings.form); } else if(settings.exception && typeof settings.exception == "function"){ // 失败回调函数 settings.exception(json, settings.form); } } } } else { var sign = share.doAjaxAndSubmitFun(response); if(!sign){ return false; } if(json){ share.ExceptionWindow(json.exceptionMessage, json.solutionMsg); } if (settings.failure && typeof settings.failure == "function") { // 成功回调函数 settings.failure(settings.form); } } }; /** * 打开tabs */ share.openTab = function (node, path, parentTab, iconCls) { var id = node.id; var title = node.text; // 设置在哪个元素打开 var tabPanel = parentTab === undefined ? main.mainTabPanel : parentTab; var css = iconCls === undefined ? node.attributes.iconCls : iconCls; // 参数验证 if (!tabPanel || title == "" || path == "" || id == "") { share.showMessage({ sign : false, msg : "参数错误" }); return; } var url = encodeURI(encodeURI(path)); // tab页不存在的场合 var tab = tabPanel.get(id); var autoLoad = { url: url, params: { id: id + "_div" }, method: "GET", scripts: true, scope : this, nocache: true }; if (!tab) { var newTab = { id: id, title: title, iconCls: css, animate: true, closable: true, closeAction: 'hide', resizeTabs: true, hideBorders: true, autoLoad: autoLoad, tabWidth:150, layout: 'fit', listeners:{ close : function(){ if(id == 'enterprise_enterprise_self_go'){ share.swapStyle(style); } } } }; tabPanel.add(newTab).show(); // 限制最多能开30个tab if (tabPanel.items.length > 30) { var firstTab = tabPanel.get(tabPanel.items.items[1]); if (firstTab) { tabPanel.remove(firstTab); } } } else { // tab页已经存在的场合 tab.getUpdater().update(autoLoad); tabPanel.setActiveTab(tab); tab.show(); } }; /** * 设置系统主题 */ share.swapStyle = function (themeCss) { // 初始化提示方式 Ext.QuickTips.init(); // 设置表单项提示方式 Ext.form.Field.prototype.msgTarget = 'side'; // Ext.state.Manager.setProvider(new Ext.state.CookieProvider()); // 设置主题 var theme = themeCss === undefined ? Ext.state.Manager.get('Cxjava_theme') : themeCss; if (theme && theme != '') { // 实际改变风格样式的处理 Ext.util.CSS.swapStyleSheet('theme', ctx + '/resources/extjs/resources/css/xtheme-' + theme + ".css"); } else { Ext.util.CSS.swapStyleSheet('theme',ctx + '/resources/extjs/resources/css/xtheme-gray.css'); } }; /** * 获取顶级窗口 */ share.getWin = function () { var win = window; while (win != win.parent) { win = win.parent; } return win; }; /** * 封装Ext.form.BasicForm的submit方法 */ share.FormSubmit = function (settings) { // 表单对象 var form = settings.form === undefined ? {} : settings.form; // 参数对象 var method = settings.method === undefined ? 'GET' : settings.method; var timeout = settings.timeout === undefined ? 10000 : settings.timeout; settings.showWaiting = settings.showWaiting === undefined?true:settings.showWaiting; settings.showMsg = settings.showMsg === undefined?true:settings.showMsg; if(form && typeof(form) != "string" && !form.isValid()){ return; } // 发送请求 if (settings.showWaiting) { settings.waiting = Ext.Msg.wait('正在处理,请稍等...', '加载提示', ''); } form.submit({ url : settings.url, method : method, timeout : timeout, success : function (form, action) { share.showAjaxAndForm2SubmitMessage(action.options, true, action.response, settings); }, failure: function (form, action) { share.showAjaxAndForm2SubmitMessage(action.options, false, action.response, settings); } }); }; /** * 封装Ext.Ajax对象 */ share.AjaxRequest = function (settings) { // 参数对象 var params = settings.params === undefined ? {} : settings.params; var timeout = settings.timeout === undefined ? 12 * 1000 : settings.timeout; var method = settings.method === undefined ? 'GET' : settings.method; var isUpload = settings.isUpload === undefined ?false:settings.isUpload; var async = settings.async === undefined ?true:settings.async; var form = settings.form === undefined?'form':settings.form; var scope = settings.scope === undefined?'form':settings.scope; // 发送请求 if (settings.showWaiting) { settings.waiting = Ext.Msg.wait('正在处理,请稍等...', '加载提示', ''); } Ext.Ajax.request({ url: settings.url, params: params, method: method, isUpload: isUpload, form: form, async: async, scope: scope, timeout: timeout, callback: function (options, success, response) { share.showAjaxAndForm2SubmitMessage(options, success, response, settings); } }); }; /** * 异常显示 */ share.ExceptionWindow = function (message, solution) { var exceptionMessage = message === undefined ? '执行发生异常!' : message == '' ? '执行发生异常!' : message; var solutionMessage = solution === undefined ? '请稍后访问,若问题还未解决请联系技术人员!' : solution == '' ? '请稍后访问,若问题还未解决请联系技术人员!' : solution; var exceptionWindow = Ext.getCmp('exceptionWindow'); if (!exceptionWindow) { exceptionWindow = new Ext.Window({ id: 'exceptionWindow', title: '错误提示', width: 400, constrain: true, autoHeight: true, modal: true, layout: 'fit', items: [ new Ext.form.Label({ html: '<div style="padding:5px;color:red;">' + exceptionMessage + '</div>' }), new Ext.Panel({ title: '错误明细', autoScroll: true, height: 200, html: solutionMessage }) ] }).show(); } else { exceptionWindow.show(); } }; /** * 显示消息 */ share.showMessage = function(setting, closable){ Ext.Msg.show({ title: setting.sign?'操作提示':'错误提示', msg: setting.message, closable: !closable, buttons: Ext.Msg.OK, animEl: 'elId', icon: setting.sign?Ext.MessageBox.INFO:Ext.MessageBox.ERROR, fn:setting.fn }); }; /** * 毫秒数转为时间格式 */ share.milliseconds2date = function(value, fmt){ if(!value){ return ""; }; fmt = fmt?fmt:"yyyy-MM-dd HH:mm:ss"; var date = new Date(); date.setFullYear(1970,1,1); date.setTime(0); date.setMilliseconds(value); return date.pattern(fmt); }; /** * 获取权限 */ share.getAuthoritys = function(){ if(!share.authoritys){ share.AjaxRequest({ url : '../authority/all', method:'GET', async: false, success: function(action){ share.authoritys = action.entity; } }); } }; /** * 获取系统参数 */ share.getParameters = function(type){ var result = null; share.AjaxRequest({ url : '../parametermaps/' + type, method:'GET', async: false, success: function(action){ result = action.entity; } }); return result; }; /** * 鉴权--主方法 */ share.authentication = function(authname){ if(!share.authoritys){ share.getAuthoritys(); } for(var i = 0; i < share.authoritys.length; i++){ if(authname == share.authoritys[i]){ return true; } else if(authname == share.authoritys[i].substring(0,share.authoritys[i].length-1)){ return true; } } return false; }; /** * 鉴权--控件是否隐藏 */ share.authdomishidden = function(authname){ return !share.authentication(authname); }; /** * 鉴权--分隔符是否显示 */ share.authdistisshow = function(authname){ return share.authentication(authname)?'-':''; }; /** * 内部方法给格式化的月日补0 */ share.fix = function(n){ return n<10?"0"+n:n; }; /** * 时间格式化 */ share.dateformat = function(fmt,time){ var year = time.getFullYear(); var month = time.getMonth()+1; var date = time.getDate(); var hour = time.getHours(); var minute = time.getMinutes(); var second = time.getSeconds(); fmt = fmt.replace("yyyy",year); fmt = fmt.replace("yy",year%100); fmt = fmt.replace("MM",share.fix(month)); fmt = fmt.replace("dd",share.fix(date)); fmt = fmt.replace("hh",share.fix(hour)); fmt = fmt.replace("mm",share.fix(minute)); fmt = fmt.replace("ss",share.fix(second)); return fmt; }; /** * 用状态鉴别 */ share.checkStauts = function(array, value){ if(array && array.length>0){ for(var i=0;i<array.length;i++){ if(value == array[i]){ return true; } } } return false; }; /** * 按照状态提交信息(批量) */ share.checkStautsArray = function(setting){ var result = { params: new Array(), message: '' }; var smsc = setting.sm.getSelections(); if(!smsc.length){ share.showMessage({message:"对不起,请选择"+setting.title+"后再进行提交!"}); return; } for(var i = 0; i<smsc.length; i++){ var status = smsc[i].get(setting.fieldstatus); if(share.checkStauts(setting.array,status)){ result.params.push(smsc[i].get(setting.fieldid)); }else{ result.message+=smsc[i].get(setting.fieldname)+","; } } if(result.params.length){ if(result.message){ share.showMessage({ message:result.message+"等"+setting.title+"状态不符,将取消这些"+setting.title+"的操作!" }); }else{ setting.fn(result.params); } }else if(result.params.length==1){ share.showMessage({message:"对不起,"+setting.title+result.message+"状态不符!"}); }else { share.showMessage({message:"对不起,所选全部"+setting.title+"状态不符!"}); } }; /** * 将gridPanel中的数据导出到Excel文件中 */ share.ExportExcel = function(setting) { var url = setting.url?setting.url:ctx + '/clientUser/clientUsers.xls/'; var ds = setting.ds; if(!ds){ share.showMessage({ sign : false, message : '对不起,要导出的数据源不存在' }); return; } var tmpParam = Ext.ux.clone(ds.lastOptions); var isall = setting.isall === undefined ? true : setting.isall; if(!tmpParam.params){ tmpParam.params = ds.baseParams; } tmpParam.params.ignorepage = isall; if (!Ext.fly('frmDummy')) { var frm = document.createElement('form'); frm.id = 'frmDummy'; frm.name = id; frm.className = 'x-hidden'; document.body.appendChild(frm); } Ext.Ajax.request({ url: url, //将生成的xml发送到服务器端 method: 'GET', form: Ext.fly('frmDummy'), callback: function (option, success, response) { var json = Ext.util.JSON.decode(response.responseText); if(json.success){ document.location = ctx.substring(0,ctx.lastIndexOf('/')+1)+json.entity; }else{ share.showMessage({ sign : false, message : '对不起,要导出的数据源不存在' }); } }, params: tmpParam.params }); }; share.toColor16 = function(value){ return value.length==1?('0'+value):value; }; });