| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340 | 
							- // 加载配置
 
- import GraceRequestConfig from '@/custom/graceRequestConfig.js';
 
- import md5 from '@/Grace6/js/md5.js';
 
- // 核心工具定义
 
- export default {
 
- 	// token 数据记录
 
- 	token: '',
 
- 	// 
 
- 	getTokenFromApi: function(count) {
 
- 		return new Promise((resolve, reject) => {
 
- 			this.debug('第 ' + count + ' 次 token 请求');
 
- 			let p = GraceRequestConfig.getToken();
 
- 			p.then((res) => {
 
- 				this.token = res;
 
- 				resolve(res);
 
- 			}).catch((err) => {
 
- 				reject('token error');
 
- 			});
 
- 		});
 
- 	},
 
- 	// 获取 token
 
- 	getToken: function(count) {
 
- 		return new Promise((resolve, reject) => {
 
- 			// 首先尝试从本地获取
 
- 			var token = uni.getStorageSync(GraceRequestConfig.localTokenKeyName);
 
- 			// 本地不存在 token 数据
 
- 			// 执行 token 请求函数获取 token 
 
- 			if (!token || token == '') {
 
- 				let p = this.getTokenFromApi(1);
 
- 				p.then((res) => {
 
- 					this.token = res;
 
- 					resolve(res);
 
- 				}).catch((err) => {
 
- 					let p2 = this.getTokenFromApi(2);
 
- 					p2.then((res) => {
 
- 						this.token = res;
 
- 						resolve(res);
 
- 					}).catch((err) => {
 
- 						reject(err);
 
- 					});
 
- 				});
 
- 			}
 
- 			// 存在 token 数据
 
- 			else {
 
- 				// 检查 token 有效期
 
- 				var expiredTime = GraceRequestConfig.expiredTime;
 
- 				expiredTime *= 1000;
 
- 				var tokenTime = Number(uni.getStorageSync('GraceRequestTokenTime'));
 
- 				tokenTime += expiredTime;
 
- 				var dateObj = new Date();
 
- 				var cTime = dateObj.getTime();
 
- 				// 有效期内
 
- 				if (tokenTime > cTime) {
 
- 					this.token = token;
 
- 					resolve(token);
 
- 				}
 
- 				// 获取新的 token
 
- 				else {
 
- 					let p = this.getTokenFromApi(1);
 
- 					p.then((res) => {
 
- 						this.token = res;
 
- 						resolve(res);
 
- 					}).catch((err) => {
 
- 						let p2 = this.getTokenFromApi(2);
 
- 						p2.then((res) => {
 
- 							this.token = res;
 
- 							resolve(res);
 
- 						}).catch((err) => {
 
- 							reject(err);
 
- 						});
 
- 					});
 
- 				}
 
- 			}
 
- 		});
 
- 	},
 
- 	// 设置默认值补齐
 
- 	requestInit: function(sets, withLoginToken, url) {
 
- 		if (!sets.data) {
 
- 			sets.data = {};
 
- 		}
 
- 		if (!sets.header) {
 
- 			sets.header = {};
 
- 		}
 
- 		if (!sets.timeout) {
 
- 			sets.timeout = GraceRequestConfig.expiredTime;
 
- 		}
 
- 		if (!sets.dataType) {
 
- 			sets.dataType = 'json';
 
- 		}
 
- 		sets.header.token = this.token;
 
- 		if (withLoginToken) {
 
- 			var loginToken = this.checkLogin();
 
- 			if (loginToken) {
 
- 				sets.header.logintoken = loginToken;
 
- 			}
 
- 		}
 
- 		if (GraceRequestConfig.apiBaseUrl != '') {
 
- 			sets.requestUrl = GraceRequestConfig.apiBaseUrl + url;
 
- 		} else {
 
- 			sets.requestUrl = url;
 
- 		}
 
- 		return sets;
 
- 	},
 
- 	// 服务端 token 错误处理
 
- 	tokenErrorHandle: function(res) {
 
- 		if (res.data && res.data == 'token error') {
 
- 			uni.removeStorageSync(GraceRequestConfig.localTokenKeyName);
 
- 			return true;
 
- 		}
 
- 		return false;
 
- 	},
 
- 	// 请求基础函数
 
- 	base: function(url, sets, withLoginToken, type, isSign) {
 
- 		return new Promise(async (resolve, reject) => {
 
- 			let p = this.getToken();
 
- 			p.then((token) => {
 
- 				if (this.befor != null) {
 
- 					this.befor();
 
- 					this.befor = null;
 
- 				}
 
- 				sets = this.requestInit(sets, withLoginToken, url);
 
- 				if (type == 'POST') {
 
- 					if (!sets.header['content-type']) {
 
- 						sets.header['content-type'] = GraceRequestConfig.postHeaderDefault;
 
- 					}
 
- 				}
 
- 				if (!isSign) {
 
- 					isSign = false;
 
- 				}
 
- 				if (isSign) {
 
- 					sets.data = this.sign(sets.data);
 
- 				}
 
- 				uni.request({
 
- 					url: sets.requestUrl,
 
- 					data: sets.data,
 
- 					timeout: sets.timeout,
 
- 					dataType: sets.dataType,
 
- 					header: sets.header,
 
- 					method: type
 
- 				}).then((data) => {
 
- 					if (this.after != null) {
 
- 						this.after();
 
- 						this.after = null;
 
- 					}
 
- 					resolve(data.data);
 
- 				}).catch((err) => {
 
- 					if (this.after != null) {
 
- 						this.after();
 
- 						this.after = null;
 
- 					}
 
- 					reject(err)
 
- 				});
 
- 			}).catch((err) => {
 
- 				if (this.after != null) {
 
- 					this.after();
 
- 					this.after = null;
 
- 				}
 
- 				reject(err)
 
- 			});
 
- 		});
 
- 	},
 
- 	// GET 请求
 
- 	get: function(url, sets, withLoginToken) {
 
- 		return new Promise((resolve, reject) => {
 
- 			if (!sets) {
 
- 				sets = {};
 
- 			}
 
- 			if (!withLoginToken) {
 
- 				withLoginToken = false;
 
- 			}
 
- 			let p = this.base(url, sets, withLoginToken, 'GET');
 
- 			p.then((res) => {
 
- 				if (this.tokenErrorHandle(res)) {
 
- 					let p2 = this.base(url, sets, withLoginToken, 'GET');
 
- 					p2.then((res2) => {
 
- 						resolve(res2);
 
- 					}).catch((err) => {
 
- 						reject(err);
 
- 					});
 
- 				} else {
 
- 					resolve(res);
 
- 				}
 
- 			}).catch((err) => {
 
- 				reject(err);
 
- 			});
 
- 		});
 
- 	},
 
- 	// POST 请求
 
- 	post: function(url, sets, isSign, withLoginToken) {
 
- 		return new Promise((resolve, reject) => {
 
- 			if (!sets) {
 
- 				sets = {};
 
- 			}
 
- 			if (!isSign) {
 
- 				isSign = false;
 
- 			}
 
- 			if (!withLoginToken) {
 
- 				withLoginToken = false;
 
- 			}
 
- 			let p = this.base(url, sets, withLoginToken, 'POST', isSign);
 
- 			p.then((res) => {
 
- 				if (this.tokenErrorHandle(res)) {
 
- 					let p2 = this.base(url, sets, withLoginToken, 'POST', isSign);
 
- 					p2.then((res2) => {
 
- 						resolve(res2);
 
- 					}).catch((err) => {
 
- 						reject(err);
 
- 					});
 
- 				} else {
 
- 					resolve(res);
 
- 				}
 
- 			}).catch((err) => {
 
- 				reject(err);
 
- 			});
 
- 		});
 
- 	},
 
- 	// upload
 
- 	upload: function(url, filePath, fileType, sets, withLoginToken) {
 
- 		return new Promise(async (resolve, reject) => {
 
- 			let p = this.getToken();
 
- 			p.then((token) => {
 
- 				if (this.befor != null) {
 
- 					this.befor();
 
- 					this.befor = null;
 
- 				}
 
- 				sets = this.requestInit(sets, withLoginToken, url);
 
- 				if (!sets.name) {
 
- 					sets.name = 'file';
 
- 				}
 
- 				uni.uploadFile({
 
- 					url: sets.requestUrl,
 
- 					filePath: filePath,
 
- 					name: sets.name,
 
- 					formData: sets.data,
 
- 					header: sets.header,
 
- 				}).then((data) => {
 
- 					if (this.after != null) {
 
- 						this.after();
 
- 						this.after = null;
 
- 					}
 
- 					resolve(data.data);
 
- 				}).catch((err) => {
 
- 					if (this.after != null) {
 
- 						this.after();
 
- 						this.after = null;
 
- 					}
 
- 					reject(err)
 
- 				});
 
- 			}).catch((err) => {
 
- 				if (this.after != null) {
 
- 					this.after();
 
- 					this.after = null;
 
- 				}
 
- 				reject(err)
 
- 			});
 
- 		});
 
- 	},
 
- 	// debug 函数
 
- 	debug: function(content) {
 
- 		if (!GraceRequestConfig.debug) {
 
- 			return;
 
- 		}
 
- 		console.log(content);
 
- 	},
 
- 	// 签名算法
 
- 	sign: function(data) {
 
- 		if (data.gracesign) {
 
- 			delete data.gracesign;
 
- 		}
 
- 		var vals = [];
 
- 		Object.keys(data).sort().map((key) => {
 
- 			vals.push(data[key]);
 
- 		});
 
- 		vals.push(this.token);
 
- 		var sign = md5.md5(vals.join('-'));
 
- 		data.gracesign = sign;
 
- 		return data;
 
- 	},
 
- 	// 登录检查
 
- 	// 登录后在本地保存一个 token
 
- 	checkLogin: function(notLoginDo) {
 
- 		var loginToken = uni.getStorageSync(GraceRequestConfig.userTokenKeyName);
 
- 		if (!loginToken || loginToken == '') {
 
- 			loginToken = '';
 
- 			if (notLoginDo) {
 
- 				uni.showToast({
 
- 					title: "请登录",
 
- 					icon: "none",
 
- 					mask: true
 
- 				});
 
- 				setTimeout(() => {
 
- 					notLoginDo();
 
- 				}, 1500);
 
- 			}
 
- 			return false;
 
- 		}
 
- 		return loginToken;
 
- 	},
 
- 	// 跳转到登录页面
 
- 	gotoLogin: function(path, opentype) {
 
- 		if (!path) {
 
- 			path = '../login/login';
 
- 		}
 
- 		if (!opentype) {
 
- 			opentype = 'redirect';
 
- 		}
 
- 		switch (opentype) {
 
- 			case 'redirect':
 
- 				uni.redirectTo({
 
- 					url: path
 
- 				});
 
- 				break;
 
- 			case 'navigate':
 
- 				uni.navigateTo({
 
- 					url: path
 
- 				});
 
- 				break;
 
- 			case 'switchTab':
 
- 				uni.switchTab({
 
- 					url: path
 
- 				});
 
- 				break;
 
- 		}
 
- 	}
 
- }
 
 
  |