app配置以及其他方法(src/common.js)

一、app公用ajax方法

根据业务逻辑定义了公共ajax方法,token注入、请求体处理,以及返回消息处理

	 * ajax方法
	 * @param {Object} setting
	 */
	app.ajax = function(setting) {
		var defaultSetting = {
			dataType: setting.dataType || 'json', //服务器返回json格式数据
			type: (setting.url.lastIndexOf('.json') > -1 ? 'get' : (setting.type || 'post')),
			timeout: setting.timeout || 15000, //超时时间设置为15秒;
			async: true,
			showWaiting: setting.showWaiting || false,
			success: function(resp, status, xhr) {
				app.log(/\/([\w\.]+)$/.exec(setting.url)[1] + '返回数据:' + JSON.stringify(resp));
				switch(resp.flag) {
					case '2000':
						mui.isFunction(setting.success) && setting.success(resp.result, resp.message);
						break;
					case '777': //token自动续期
						app.ajax({
							url: app.api['login'],
							data: JSON.parse(localStorage.lastLogin),
							success: function(data) {
								if(data.contents == '3') { //未激活
									localStorage.activateToken = data['access_token'];
									app.closeWaiting();
									mui.confirm(lang.activate[0], '', [lang.activate[1], lang.activate[2]], function(e) {
										if(e.index == 0) {
											userLogin(data);
										} else if(e.index == 1) {
											vm.openWindow({ url: '../activate/activate.html', styles: { top: 0 } });
										}
									});
								} else if(data.contents == '4') {
									localStorage.activateToken = data['access_token'];
									app.closeWaiting();
									mui.alert(lang.activate[0], '', lang.activate[2], function(e) {
										if(e.index == 0)
											vm.openWindow({ url: '../activate/activate.html', styles: { top: 0 } });
									});
								} else {
									userLogin(data);
								}

								function userLogin(data) {
									if(localStorage.adminToken != null)
										localStorage.adminToken = data['access_token'];
									else localStorage.token = data['access_token'];
									app.ajax(setting);
								}
							},
							error: function() {
								mui.toast(lang.loginFailed)
								if (window.plus) mui.fire(plus.webview.getWebviewById('browser_main'), 'logout');
							}
						});
						break;
					case '778':
						alert(resp.message);
						if (window.plus)
							mui.fire(plus.webview.getWebviewById('browser_main'), 'logout');
						else mui.plusReady(function() {
							mui.fire(plus.webview.getWebviewById('browser_main'), 'logout');
						})
						break;
					case '401':
					case '200':
					case '204':
					case '400':
					case '404':
					case '429':
					case '500':
					default:
						if (resp.message.indexOf("Token无效")>-1) {
							app.ajax({
								url: app.api.getDevices,
								data: {
									psize: 100,
								},
								success: function(d) {
									var devices = d.items.map(function(item) {
										return item.cid
									});
									if (devices.indexOf(app.getUser().uid)==-1) {
										mui.toast(lang.lastCid+app.getUser().uid+lang.removed+devices[0]);
										var u = JSON.parse(localStorage.user);
										u.uid = devices[0];
										localStorage.user = JSON.stringify(u);
									}
								}
							})
						} else if(resp.message != '访问过于频繁')
							mui.toast(resp.message);
						mui.isFunction(setting.error) && setting.error(resp.result);
						break;
				}
			},
			complete: function(xhr, status) {
				if(setting.showWaiting && setting.closeWaiting != false) {
					app.closeWaiting();
				}
				var resp = xhr.response;
				if(status === 'success' && defaultSetting.dataType.toLowerCase() === 'json') {
					resp = JSON.parse(resp);
				}
				if(typeof setting.complete == 'function') setting.complete(resp);
			},
			error: function(xhr, type, errorThrown) {
				var errorMsg = {
					'timeout': lang.timeout,
					'error': lang.error,
					'parsererror': lang.parsererror
				};
				mui.toast((errorMsg[type] || lang.ajaxError));
				if(typeof setting.error == 'function') setting.error(xhr, type, errorThrown);
			}
		};
		setting.beforeSend && (defaultSetting.beforeSend = setting.beforeSend);
		defaultSetting.data = setting.data || {};

		if(setting.url && skipAPI.indexOf(setting.url) == -1 && !defaultSetting.data.cid) {
			var user = app.getUser();
			user && (defaultSetting.data.cid = user.uid);
		}
		for (var i in defaultSetting.data) {
			if (defaultSetting.data[i]==null) delete defaultSetting.data[i];
		}
		defaultSetting.headers = {
			flag: app.config.flag,
			lang: navigator.language.slice(0, 2)
		};
		if(localStorage.adminToken != null) {
			defaultSetting.headers.token = localStorage.adminToken;
		} else if(localStorage.token != null) {
			defaultSetting.headers.token = localStorage.token;
		}
		if(setting.headers) mui.extend(true, defaultSetting.headers, setting.headers);
		if(setting.showWaiting) app.showWaiting(typeof setting.showWaiting === 'string' ? setting.showWaiting : undefined);
		app.log('token:' + defaultSetting.headers.token);
		app.log('正在请求api:' + setting.url);
		app.log('发送数据:' + JSON.stringify(defaultSetting.data));
		mui.ajax(setting.url, defaultSetting);
	};

二、信鸽方法配置

//信鸽推送
mui.plusReady(function() {
	var _BARCODE = 'XGPush', B = window.plus.bridge;
	window.plus.XGPush = {
		unregister: function() {
			return B.execSync(_BARCODE, "unregister", []);
		},
		getToken: function() {
			return B.execSync(_BARCODE, "getToken", []);
		},
		//arg123是内容,分三行显示,extra是额外信息用于点击后处理
		createMessage: function(arg1, arg2, arg3, title, extra) {
			return B.execSync(_BARCODE, "createMessage", [arg1, arg2, arg3, title, extra]);
		},
	};
	if (mui.os.android) {
		window.plus.XGPush.register = function(sc, ec) {
			return B.exec(_BARCODE, "register", [B.callbackId(sc, ec)]);
		}
	} else {  //ios下register为关键词
		window.plus.XGPush.register = function(sc, ec) {
			return B.exec(_BARCODE, "registers", [B.callbackId(sc, ec)]);
		}
	}
})

三、特定对象获取定义

Object.defineProperty(window, 'lsUserInfo', {
	get: function() {
		return localStorage.userInfo ? JSON.parse(localStorage.userInfo) : {
			"info": {
				"cowner": "",
				"usex": 0,
				"ubirthday": "",
				"ephoto": './userimg.png',
				"bgphoto": './back.png',
				"clink": "",
				"cendtime": '',
			},
			"devList": {
				"list": []
			}
		};
	}
});

四、定义全局变量

window.User = function (uid, role, clink) {
	this.uid = uid;
	this.role = role || 'normal';
	this.clink = clink || '';
}

五、定义全局函数方法

	/**
	 * 获取User
	 */
	app.getUser = function() {
		return JSON.parse(localStorage.user || '{}');
	};

六、公共样式(src/common.css)

stylus预处理器设置的全局变量处理

//调小英文字体
html:lang(en) {
	font-size: 110%;
}
七、接口统一配置

配置app的所有接口

if(app.config.isDebug) {
		//app.config.apiDomain = 'http://che.ijiashequ.cn:8010/loveApi';
		//app.config.apiDomain = 'http://192.168.33.81/loveApi'; //API吴长
		//app.config.apiDomain ='http://192.168.33.152:8088/api';//API刘本地
		//app.config.apiDomain ='http://192.168.33.93:8080/api';//API郑本地
		app.config.apiDomain = 'http://192.168.33.158:8007/loveApiIn'; //API裴本地
		//app.config.apiDomain = 'http://192.168.33.114/api';//谢API本地
		//app.config.apiDomain = 'http://192.168.33.92:8080/api'; //张磊测试
	}
	//常用正则表达式
	app.Reg = {};
	app.Reg.MODULE_NAME = /([\w-]+)\.html/; //匹配模块名
	app.Reg.HTTP_URL = /^((https|http)?:\/\/)/; //校验http url
	app.Reg.IS_MOBILE = /^1[3|4|5|7|8]\d{9}$/; //手机号码
	app.Reg.EMAIL = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/; //邮箱
	//所有api接口 http://192.168.33.8:7070/svnpro/weixin/car_guard/doc/车卫士通用版业务接口.doc
	app.api = {
		'getcaruserinfo': '/carguard/user/getCarUserInfo.do', //?name=030650611(车辆用户信息)
		'updatecaruserinfo': '/carguard/user/updateCarUserInfo.do', //?id=16775&num=15001914584&name=德忠
		'getcarusermap': '/carguard/user/getCarUserMapInfo.do', //?name=030619991(首页地理位置+幻灯片宣传信息)
		'getRealTimePosition': '/cheway/point/getRealTimePosition.do', //?cid=030650611(获取实时位置信息)
		'getcardaydistance': '/carguard/user/getCarTance.do', //?cid=030619991(今日历程<单位:千米>)
		'getlastwarninfo': '/carguard/warn/searchLastWarn.do', //?name=030619991(告警记录列表)
		'getwarninfo': '/carguard/warn/searchWarn.do', //?name=030619991&lastId=11111<告警最大内码>(告警记录列表)
		'setwarninfo': '/carguard/warn/setCarWarnByHaved.do', //?id=4907999(设置已读的告警记录)
		'getAlertsRecord': '/cheway/alert/getAlertsRecord.do', //获取一天的告警记录列表
		'saveSuperCare': '/carguard/other/saveSuperCare.do', //?cid=030619991&val=0<0 撤防 1 设防>(设置超级设防和撤防状态)
		'getSuperCare': '/carguard/other/getSuperCare.do', //?cid=030619991(獲取超级设防和撤防状态)
		'saveNormalCare': '/carguard/other/saveNormalCare.do', //?cid=030619991&type=0<0:设防,1:撤防>(设置设防和撤防状态)
		'getNormalCare': '/carguard/other/getNormalCare.do', //?cid=030619991(獲取设防和撤防状态)
    }
上次更新: 2/21/2020, 6:25:58 PM