You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
327 lines
8.9 KiB
327 lines
8.9 KiB
|
|
// 加载配置
|
|
var GraceRequestConfig = require('@/GraceUI5/js/request/config.js');
|
|
var md5 = require('@/GraceUI5/js/md5.js');
|
|
|
|
// 核心工具定义
|
|
module.exports = {
|
|
|
|
// token 数据记录
|
|
token : '',
|
|
|
|
// 连接接服务器获得请求 token
|
|
getTokenFromApi : function (resolve, reject) {
|
|
new Promise(GraceRequestConfig.getToken).then((res)=>{
|
|
this.token = res;
|
|
// 将 token 保存在本地并记录获取时间
|
|
uni.setStorageSync(GraceRequestConfig.localTokenKeyName, this.token);
|
|
// 记录时间
|
|
var dateObj = new Date();
|
|
var cTime = dateObj.getTime();
|
|
cTime += '';
|
|
uni.setStorageSync('GraceRequestTokenTime', cTime);
|
|
resolve();
|
|
}).catch(()=>{
|
|
this.debug('api 获取 token 失败');
|
|
this.token = '';
|
|
reject();
|
|
});
|
|
},
|
|
|
|
// 获取 token
|
|
getToken : function(resolve, reject){
|
|
// 首先尝试从本地获取
|
|
var token = uni.getStorageSync(GraceRequestConfig.localTokenKeyName);
|
|
// 本地不存在 token 数据
|
|
if(!token || token == ''){
|
|
new Promise(this.getTokenFromApi.bind(this)).then((res)=>{
|
|
resolve();
|
|
}).catch(()=>{reject();});
|
|
}
|
|
// 存在 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
|
|
else{
|
|
new Promise(this.getTokenFromApi.bind(this)).then((res)=>{
|
|
resolve();
|
|
}).catch(()=>{
|
|
reject();
|
|
});
|
|
}
|
|
}
|
|
},
|
|
|
|
// 设置默认值补齐
|
|
requestInit : function(sets, withLoginToken){
|
|
if(!sets.data){sets.data = {};}
|
|
if(!sets.header){sets.header = {};}
|
|
if(!sets.timeout){sets.timeout = 60000;}
|
|
if(!sets.dataType){sets.dataType = 'json';}
|
|
sets.header.token = this.token;
|
|
if(withLoginToken){
|
|
var loginToken = this.checkLogin();
|
|
if(loginToken){sets.header.logintoken = loginToken;}
|
|
}
|
|
return sets;
|
|
},
|
|
|
|
// 服务端 token 错误处理
|
|
tokenErrorHandle : function (res) {
|
|
console.log(res);
|
|
if(res.data && res.data == 'token error'){
|
|
uni.removeStorageSync(GraceRequestConfig.localTokenKeyName);
|
|
}
|
|
},
|
|
|
|
// GET 请求 异步
|
|
get : function(url, sets, success, fail, complete, withLoginToken){
|
|
if(!sets){sets = {};}
|
|
if(!success){success = function(res){}}
|
|
if(!fail){fail = function(e){}}
|
|
if(!complete){complete = function(res){}}
|
|
if(!withLoginToken){withLoginToken = false;}
|
|
new Promise(this.getToken.bind(this)).then(()=>{
|
|
if(GraceRequestConfig.apiBaseUrl != ''){url = GraceRequestConfig.apiBaseUrl + url;}
|
|
sets = this.requestInit(sets, withLoginToken);
|
|
uni.request({
|
|
url : url,
|
|
data : sets.data,
|
|
timeout : sets.timeout,
|
|
dataType : sets.dataType,
|
|
header : sets.header,
|
|
method : 'GET',
|
|
success : (res)=>{
|
|
this.debug(res);
|
|
success(res.data);
|
|
this.tokenErrorHandle(res.data);
|
|
},
|
|
fail : (error)=>{fail(error.errMsg);},
|
|
complete : (res) =>{complete(res);}
|
|
});
|
|
}).catch((e)=>{
|
|
console.log(e);
|
|
this.tokenError();
|
|
});
|
|
},
|
|
|
|
// GET 请求 同步
|
|
getSync : async function(url, sets, withLoginToken) {
|
|
let res, error;
|
|
if(!withLoginToken){withLoginToken = false;}
|
|
return new Promise(this.getToken.bind(this)).then(async ()=>{
|
|
if(GraceRequestConfig.apiBaseUrl != ''){url = GraceRequestConfig.apiBaseUrl + url;}
|
|
sets = this.requestInit(sets, withLoginToken);
|
|
var [error, res] = await uni.request({
|
|
url : url,
|
|
data : sets.data,
|
|
timeout : sets.timeout,
|
|
dataType : sets.dataType,
|
|
header : sets.header,
|
|
method : 'GET'
|
|
});
|
|
if(error != null){ return false; }
|
|
this.debug(res);
|
|
this.tokenErrorHandle(res.data);
|
|
return res.data;
|
|
}).catch((e)=>{
|
|
console.log(e);
|
|
this.tokenError();
|
|
return ['', e];
|
|
});
|
|
},
|
|
|
|
// POST 请求 异步
|
|
post : function(url, sets, success, fail, complete, isSign, withLoginToken){
|
|
if(!sets){sets = {};}
|
|
if(!success){success = function(res){}}
|
|
if(!fail){fail = function(e){}}
|
|
if(!complete){complete = function(res){}}
|
|
if(!withLoginToken){withLoginToken = false;}
|
|
|
|
new Promise(this.getToken.bind(this)).then(()=>{
|
|
if(GraceRequestConfig.apiBaseUrl != ''){url = GraceRequestConfig.apiBaseUrl + url;}
|
|
sets = this.requestInit(sets, withLoginToken);
|
|
if(!sets.header['content-type']){
|
|
sets.header['content-type'] = GraceRequestConfig.postHeaderDefault;
|
|
}
|
|
if(isSign == true){
|
|
sets.data = this.sign(sets.data);
|
|
}else if(isSign == 'value'){
|
|
sets.data = this.signValue(sets.data);
|
|
}
|
|
uni.request({
|
|
url : url,
|
|
data : sets.data,
|
|
timeout : sets.timeout,
|
|
dataType : sets.dataType,
|
|
header : sets.header,
|
|
method : 'POST',
|
|
success : (res)=>{
|
|
this.debug(res);
|
|
success(res.data);
|
|
this.tokenErrorHandle(res.data);
|
|
},
|
|
fail : (error)=>{fail(error.errMsg);},
|
|
complete : (res) =>{complete(res);}
|
|
});
|
|
}).catch((e)=>{
|
|
console.log(e);
|
|
this.tokenError();
|
|
});
|
|
},
|
|
|
|
// POST 请求 同步
|
|
postSync : async function(url, sets, isSign, withLoginToken) {
|
|
let res, error;
|
|
if(!withLoginToken){withLoginToken = false;}
|
|
return new Promise(this.getToken.bind(this)).then(async ()=>{
|
|
if(GraceRequestConfig.apiBaseUrl != ''){url = GraceRequestConfig.apiBaseUrl + url;}
|
|
sets = this.requestInit(sets, withLoginToken);
|
|
if(!sets.header['content-type']){
|
|
sets.header['content-type'] = GraceRequestConfig.postHeaderDefault;
|
|
}
|
|
if(isSign == true){
|
|
sets.data = this.sign(sets.data);
|
|
}else if(isSign == 'value'){
|
|
sets.data = this.signValue(sets.data);
|
|
}
|
|
var [error, res] = await uni.request({
|
|
url : url,
|
|
data : sets.data,
|
|
timeout : sets.timeout,
|
|
dataType : sets.dataType,
|
|
header : sets.header,
|
|
method : 'POST'
|
|
});
|
|
if(error != null){ return false; }
|
|
this.tokenErrorHandle(res.data);
|
|
return res.data;
|
|
}).catch((e)=>{
|
|
console.log(e);
|
|
this.tokenError();
|
|
return ['', e];
|
|
});
|
|
},
|
|
|
|
// 文件上传
|
|
upload : function(url, filePath, fileType, sets, success, fail, complete, withLoginToken){
|
|
if(!sets){sets = {};}
|
|
if(!success){success = function(res){}}
|
|
if(!fail){fail = function(e){}}
|
|
if(!complete){complete = function(res){}}
|
|
if(!withLoginToken){withLoginToken = false;}
|
|
new Promise(this.getToken.bind(this)).then(()=>{
|
|
if(GraceRequestConfig.apiBaseUrl != ''){url = GraceRequestConfig.apiBaseUrl + url;}
|
|
// 初始化 sets
|
|
if(!sets.name){sets.name = 'file';}
|
|
if(!sets.header){sets.header = {};}
|
|
if(!sets.formData){sets.formData = {};}
|
|
sets.header.token = this.token;
|
|
if(withLoginToken){
|
|
var loginToken = this.checkLogin();
|
|
if(loginToken){sets.header.loginToken = loginToken;}
|
|
}
|
|
// 开始上传
|
|
uni.uploadFile({
|
|
url : url,
|
|
filePath : filePath,
|
|
name : sets.name,
|
|
formData : sets.formData,
|
|
header : sets.header,
|
|
success : (res)=>{
|
|
success(res.data);
|
|
this.tokenErrorHandle(res.data);
|
|
},
|
|
fail : (error)=>{fail(error);},
|
|
complete : (res) =>{complete(res);}
|
|
});
|
|
}).catch((e)=>{
|
|
console.log(e);
|
|
this.tokenError();
|
|
});
|
|
},
|
|
|
|
// debug 函数
|
|
debug : function (content) {
|
|
if(!GraceRequestConfig.debug){return ;}
|
|
console.log(content);
|
|
},
|
|
|
|
// token 错误
|
|
tokenError : function () {
|
|
uni.showToast({title:"请求失败,请重启应用重试", icon:"none"});
|
|
},
|
|
|
|
// 签名算法
|
|
sign : function (data) {
|
|
var keys = [];
|
|
Object.keys(data).sort().map((key) => {keys.push(key);});
|
|
keys.push(this.token);
|
|
var sign = md5.md5(keys.join('-'));
|
|
data.gracesign = sign;
|
|
return data;
|
|
},
|
|
|
|
// signValue
|
|
signValue : function(data){
|
|
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;
|
|
}
|
|
},
|
|
|
|
// 记录 用户 token 到本地
|
|
// 格式 loginToken-uid
|
|
writeLoginToken : function (token, uid) {
|
|
var loginToken = token+'-'+uid;
|
|
uni.setStorageSync(GraceRequestConfig.userTokenKeyName, loginToken);
|
|
return ;
|
|
}
|
|
|
|
}
|