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.
74 lines
1.5 KiB
74 lines
1.5 KiB
2 years ago
|
import Request from './request'
|
||
|
import apiList from './apis.js'
|
||
|
import store from '@/shopro/store/index.js'
|
||
|
|
||
|
const shoproRequest = new Request();
|
||
|
export default function http(
|
||
|
url,
|
||
|
data = {},
|
||
|
toastBefore = '', // 请求前加载提示
|
||
|
toastAfter = true, // 请求后错误提示
|
||
|
) {
|
||
|
let api = getApiPath(url);
|
||
|
/* 请求之前拦截器 */
|
||
|
shoproRequest.interceptor.request((config, cancel) => {
|
||
|
let token = uni.getStorageSync('token');
|
||
|
if (api.auth && !token) {
|
||
|
store.dispatch('showAuthModal');
|
||
|
uni.hideLoading()
|
||
|
throw (`暂未登录,已阻止此次API请求: '${api.url}'`);
|
||
|
}
|
||
|
token && shoproRequest.setConfig(config => {
|
||
|
config.header.token = token
|
||
|
})
|
||
|
if (toastBefore !== '') {
|
||
|
uni.showLoading({
|
||
|
title: toastBefore,
|
||
|
mask: true
|
||
|
});
|
||
|
}
|
||
|
return config
|
||
|
});
|
||
|
|
||
|
/* 请求之后拦截器 */
|
||
|
shoproRequest.interceptor.response((response) => {
|
||
|
uni.hideLoading();
|
||
|
if (response.code === 0) {
|
||
|
if (toastAfter) {
|
||
|
uni.showToast({
|
||
|
title: response.msg || '请求出错,稍后重试',
|
||
|
icon: 'none',
|
||
|
duration: 1000,
|
||
|
mask: true
|
||
|
});
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
// token过期注销
|
||
|
if (response.code === 401) {
|
||
|
store.dispatch('logout');
|
||
|
store.dispatch('showAuthModal');
|
||
|
throw (`登录已过期或注销,已阻止此次API请求: '${api.url}'`);
|
||
|
}
|
||
|
return response
|
||
|
})
|
||
|
|
||
|
return shoproRequest.request({
|
||
|
url: api.url,
|
||
|
data,
|
||
|
method: api.method
|
||
|
})
|
||
|
|
||
|
}
|
||
|
|
||
|
// 组装接口路径
|
||
|
function getApiPath(url) {
|
||
|
let apiArray = url.split(".");
|
||
|
let api = apiList;
|
||
|
apiArray.forEach(v => {
|
||
|
api = api[v];
|
||
|
});
|
||
|
return api;
|
||
|
}
|