const install = (Vue, vm) => {
|
// 是否正在刷新的标记
|
let isRefreshing = false
|
// 重试队列,每一项将是一个待执行的函数形式
|
let requests = []
|
|
// 请求拦截器
|
uni.$u.http.interceptors.request.use((config) => {
|
const Headtoken = vm.$store.state.token
|
// 判断有无token,有则加入请求头中
|
if (Headtoken) {
|
config.header['token'] = Headtoken;
|
}
|
return config;
|
}, config => {
|
return Promise.reject(config)
|
})
|
|
// 响应拦截器
|
uni.$u.http.interceptors.response.use((response) => {
|
if (response.data.code === 5112) {
|
if (!isRefreshing) {
|
isRefreshing = true
|
uni.login({
|
provider: 'weixin',
|
success: async function (loginRes) {
|
let { code } = loginRes;
|
uni.request({
|
url: vm.$baseUrl + 'web/account/wxLogin',
|
method: "GET",
|
data: { code },
|
success: (res) => {
|
console.log('res', res)
|
isRefreshing = false
|
vm.$store.commit('setToken', res.data.data.token)
|
vm.$store.commit('setUserInfo', res.data.data.userResponse)
|
// 已经刷新了token,将所有队列中的请求进行重试
|
requests.forEach(item => item(res.data.data.token))
|
requests = []
|
}
|
});
|
}
|
});
|
}
|
return new Promise((resolve) => {
|
requests.push(token => {
|
response.config.header['token'] = token
|
resolve(uni.$u.http.request(response.config));
|
})
|
})
|
}
|
if (response.data.code === 5113) {
|
uni.navigateTo({
|
url: '/pages/index/index'
|
});
|
return
|
}
|
if (response.data.code !== 200) {
|
uni.showToast({
|
title: response.data.message,
|
icon: "none",
|
duration: 2000
|
});
|
}
|
return response.data
|
}, (response) => {
|
return Promise.reject(response)
|
})
|
}
|
|
export default { install }
|