axios 封装请求
用于统一管理 接口请求
如果需要在此文件中用于其他方法的文件可以:
//
import { getIMEI } from './utils'
// getIMEI() 来进行使用
const baseURL = '你请求的接口地址';
let Token:string = '';
let RefreshToken:string = '';
let UserId:string = '';
let UserPhone:string = '';
let openid:string = "";
const version:string = '3.3.2';
let systemInfo:object | string = "";
let requestlist : Array<any> = []
let is_freshing: boolean = false
let is_login: boolean = false
let is_loginroutet:boolean = false
// 以上是声明的变量用的是ts
// type RequestMethod = "OPTIONS" | "GET" | "HEAD" | "POST" | "PUT" | "DELETE" | "TRACE" | "CONNECT" | undefined
namespace RequestFunc {
//request请求
type RequestData<T> = {
/** 请求方式 */
methodType?: 'GET' | 'POST'
/** 传递的数据 */
data?: T
/** 路径 */
url: string
}
//请求设置
export type RequestConfig = {
/** 父路径 */
baseUrl?: string
/** 请求头 */
header?: any
/** 传递的data数据类型 */
dataType?: string
}
//返回数据类型
type RequestReturnData<T> = {
code: 200 | 500 | number
data: T
}
/**
* request请求
*/
export type request = <R = AnyObject, T = AnyObject>(
data: RequestData<T>,
config?: RequestConfig,
) => Promise<RequestReturnData<R>>
}
uni.getSystemInfo({
success(res) {
systemInfo = JSON.stringify(res);
}
});
const request: RequestFunc.request = (
{ methodType = 'GET', data = {}, url = '' },
{ baseUrl = baseURL, header = {}, dataType = 'json' } = {},
) => {
// 接口请求所带的共同的参数
Token = uni.getStorageSync('LastLoginUserToken');
RefreshToken = uni.getStorageSync('LastLoginRefreshToken');
UserId = uni.getStorageSync('LastLoginUserUserId');
UserPhone = uni.getStorageSync('LastLoginUserPhone');
let allheader = {
'content-type': 'application/json',
'Token': Token,
'UserId': UserId,
'IMEI': getIMEI(),
'LoginName': UserPhone,
'Client': 'PPGHZ', //systemInfo,
'Version': version,
};
return new Promise((resolve, reject) => {
uni.request({
method: methodType,
url: baseUrl + url,
data: data,
header: Object.assign(allheader,header),
dataType: dataType,
success:response => {
let res = response as any;
if(res.data.ReturnCode == -10) {
if(!is_loginroutet) {
uni.navigateTo({
url: '/pages/login/index',
});
}
is_loginroutet = true
handleReLogin()
if(!is_login) {
// refreshLoginRequst()
}
} else if (res.data.ReturnCode == -20) {
if(!is_freshing) {
refreshTokenRequst()
}
resolve(new Promise(resolve => {
requestlist.push(() => {
if(methodType==='GET') {
resolve(get(url,data))
} else {
resolve(post(url,data))
}
})
}))
}
else {
resolve(res.data);
}
},
fail:err => {
reject(err)
}
})
});
}
function handleReLogin() {
setTimeout(() => {
is_loginroutet = false
},3000)
}
//get请求
export const get = <R = AnyObject, T = AnyObject>(
url: string,
data?: T,
config?: RequestFunc.RequestConfig,
) =>
request<R, T>(
{
methodType: 'GET',
url: url,
data,
},
config,
)
//post请求
export const post = <R = AnyObject, T = AnyObject>(
url: string,
data?: T,
config?: RequestFunc.RequestConfig,
) =>
request<R, T>(
{
methodType: 'POST',
url: url,
data,
},
config,
)
const refreshTokenRequst = () => {
is_freshing = true
Token = uni.getStorageSync('LastLoginUserToken');
RefreshToken = uni.getStorageSync('LastLoginRefreshToken');
let header = {
'content-type': 'application/json',
'IMEI': openid,
'LoginName': UserPhone,
'Client': 'PPGHZ', //systemInfo,
'Version': version,
}
post("Token/RefreshToken",{
Token: Token,
RefreshToken: RefreshToken
}).then(res => {
is_freshing = false
let d:any = res
if(d.ReturnCode > 0) {
Token = d.ReturnData.Token
RefreshToken = d.ReturnData.RefreshToken
uni.setStorageSync('LastLoginRefreshToken',RefreshToken);
uni.setStorageSync('LastLoginUserToken',Token);
if(requestlist.length>0){
requestlist.map((cb:any) => cb())
requestlist = []
}
}
}).catch(error => {
console.log(error)
is_freshing = false
})
}