(function (win, doc, $, undefined) { "use strict"; UXUN.local_member="UXUN_LOCAL_MEMBER"; UXUN.local_phoneNo="UXUN_HISTORY_PHONENO"; UXUN._templateCache = {};//模板缓存 if(!window.console){ window.console = {}; } if(!window.console.log){ window.console.log = function(msg){}; } function UXUN(element){ var self = this, _method, _selecter, events=self.events, handlers=self.eventHandlers; self.templates={}; if(!element){ element = doc.body; } self.root = $(element); for(var temp in events){ var spaceIndex = temp.indexOf(' '); _method = temp.substr(0,spaceIndex); _selecter = temp.slice(spaceIndex-temp.length+1); self.root.on(_method,_selecter,proxy(handlers[events[temp]])); } function proxy(method){ return function(event){ try{ if(this.tagName.toUpperCase()!="INPUT"){ doc.activeElement.blur(); } }catch(e){ console.log(e.name); console.log(e.message); } method.call(self,event,$(this)); }; } } UXUN.loginError=function(data){ if( typeof(showLoginAlert) !== 'undefined'){ showLoginAlert(); }else{ UXUN.loginOut(); // UXUN.toast("请引用密码控件相关的js文件"); } UXUN.clearUser(); }; UXUN.extend = function(subClassProto){ var DEFAULT_VERSION = "8.0"; var ua = navigator.userAgent.toLowerCase(); var isIE = ua.indexOf("msie")>-1; var safariVersion; if(isIE){ safariVersion = ua.match(/msie ([\d.]+)/)[1]; } // if(safariVersion < DEFAULT_VERSION ){ if(parseInt(safariVersion,10) < parseInt(DEFAULT_VERSION,10)){ UXUN.toast("系统不支持此版本的浏览器"); return; }else if(safariVersion == DEFAULT_VERSION ){ return UXUN.extendByIE8(subClassProto); }else{ return UXUN.extendOther(subClassProto); } }; UXUN.extendByIE8 = function extend(subClassProto) { var ParentClass = this; if (!subClassProto || typeof subClassProto.constructor !== 'function') { throw new Error("sub class has no constructor"); } var SubClassConstructor = subClassProto.constructor; delete subClassProto.constructor; SubClassConstructor._Parent = function(context, _args){ var args = Array.prototype.slice.call(_args); ParentClass.apply(context, args); }; SubClassConstructor.prototype = $.extend({},ParentClass.prototype, subClassProto); SubClassConstructor.extend = extend; SubClassConstructor.prototype.constructor = SubClassConstructor; return SubClassConstructor; }; UXUN.extendOther = function extend(subClassProto) { var ParentClass = this; if (!subClassProto || typeof subClassProto.constructor !== 'function') { throw new Error("sub class has no constructor"); } var SubClassConstructor = subClassProto.constructor; delete subClassProto.constructor; for (var key in subClassProto) { if (!subClassProto[key] || !subClassProto[key].value) { subClassProto[key] = { value: subClassProto[key], enumerable: true, writable: true, configurable: true }; } } subClassProto._super = { value: ParentClass.prototype, enumerable: false, writable: false, configurable: false }; Object.defineProperty(SubClassConstructor, "_Parent", { value: function (context, _args) { var args = Array.prototype.slice.call(_args); ParentClass.apply(context, args); }, enumerable: false, writable: false, configurable: false }); SubClassConstructor.prototype = Object.create(ParentClass.prototype, subClassProto); SubClassConstructor.extend = extend; SubClassConstructor.prototype.constructor = SubClassConstructor; return SubClassConstructor; }; UXUN.prototype={ constructor:UXUN, events:{}, eventHandlers:{}, requestCallbacks:{}, request:function(options, showLoading,isLogin) { var loop = function () {}, self = this; var defaultOptions = { async: true, data: {}, type: "POST", dataType: "json", cache: false, headers: { 'Content-Type': "application/x-www-form-urlencoded;charset=utf-8" }, timeout: 10000, repeatTimes: 0 }, _success = self.requestCallbacks[options.success], _error = self.requestCallbacks[options.error], _complete = self.requestCallbacks[options.complete]; if (!options.url) { return UXUN.toast("请求地址错误"); } defaultOptions.url = options.url; for (var key in defaultOptions) { if (undefined === options[key] || 'undefined' === options[key]) { options[key] = defaultOptions[key]; } } if (showLoading) { UXUN.showLoading(options.timeout); } for (var key1 in options) { if (undefined === options[key1] || 'undefined' === options[key1] || null === options[key1] || "null" === options[key1]) { options[key1] = ""; } } var proxy = function (param0, param1, param2) { var requestData = this?this.data:""; if (showLoading) { UXUN.hideLoading(); } // console.log("响应报文:" + options.url, ": \n", JSON.stringify(param0, null, '\t')); if (param0.retcode == getApplication('LOGIN_TIME_OUT')|| param0.retcode == getApplication('NOT_LOGIN')) { if(isLogin){ UXUN.loginError(param0); }else{ UXUN.clearUser(); } } if (param1 === 'success' || param1 === 'SUCCESS') { if (_success) { //_success.apply(self, arguments); _success.call(self, param0, UXUN.urlToJson(requestData)); } } else { if ("timeout" === param1) { //return mui.toast(param0.status + ":服务器请求超时"); } else if ("error" === param1) { return UXUN.toast("网络异常,请稍后再试"); } else if ("abort" === param1) { //return mui.toast(param0.status + ":请求被中断"); return; } else if ("parsererror" === param1) { return UXUN.toast("网络异常,请稍后再试"); } else if (!UXUN.isNotNull(param1)) { return UXUN.toast("网络异常,请稍后再试"); } else { //失败 if (_error) { //_error.apply(self, arguments); _error.call(self, param0, UXUN.urlToJson(requestData)); } //return mui.toast(param0.status + ":服务器错误,请联系管理员"); } } }; if (options.success && !_success) { throw new Error("success callback [" + options.success + "] not define in requestCallbacks, please check your code."); } else if (!_success) { _success = loop; } if (options.error && !_error) { throw new Error("error callback [" + options.error + "] not define in requestCallbacks, please check your code."); } else if (!_error) { _error = loop; } options.error = options.success = proxy; var data = options.data; if (undefined !== data && !data.bankcode) { var bankcode = win.getApplication('bankcode'); if (options.data instanceof Object || options.data instanceof Array) { options.data.bankcode = bankcode; } else { options.data += "&bankcode=" + bankcode; } } if (undefined !== data && !data.channel) { var channel = win.getApplication('channel'); if (options.data instanceof Object || options.data instanceof Array) { options.data.channel = channel; } else { options.data += "&channel=" + channel; } } if (options.url && options.url.indexOf(UXUN.BASE_EMALLAPP) === -1) { options.url = win.getService(options.url); } // console.log("请求报文:" + options.url, ": \n", JSON.stringify(options, null, '\t')); $.ajax(options.url, options); }, render:function (tplId, data, element, isAppend) { var tpl = UXUN._templateCache[tplId], html, tempObj = doc.getElementById(tplId); if (!tpl) { if(!tempObj) return; tpl = _.template(tempObj.innerHTML); UXUN._templateCache[tplId] = tpl; } html = tpl(data); if (element&&$(element).length>0) { if (isAppend) { $(element).append(html); } else { $(element).html(html); } } } }; win.UXUN = UXUN; }(window, document,$));