import axios from 'axios'
|
// import qs from 'qs'
|
import { showToast, closeToast, showLoadingToast, showNotify } from 'vant'
|
import { BASE_URL, REQUEST_TIMEOUT, CONTENT_TYPE, CONTENT_TYPES, WITH_CREDENTIALS, METHODS } from '@/config'
|
import i18n from '@/i18n'
|
import { getStorage } from '@/utils/index'
|
// import store from '@/store'
|
import { useUserStore } from "@/store/user.js";
|
import store from '@/store/store'
|
import router from '@/router'
|
|
let isClose = false
|
const service = axios.create({
|
baseURL: BASE_URL,
|
withCredentials: WITH_CREDENTIALS,
|
timeout: REQUEST_TIMEOUT, // 请求超时时间
|
headers: {
|
[CONTENT_TYPE]: CONTENT_TYPES.URL_ENCODED
|
}
|
})
|
|
// 请求拦截
|
service.interceptors.request.use(config => {
|
if (!config) {
|
config = {}
|
}
|
if (!config.headers) {
|
config.headers = {}
|
}
|
if (config.method === METHODS.POST) {
|
if (config.data) {
|
// config.data = qs.stringify(config.data)
|
}
|
}else if(config.method == 'get' && config.data){
|
config.params = config.data
|
}
|
const userStore = useUserStore()
|
const TOKEN = userStore.userInfo.token
|
|
if (!config.params) {
|
config.params = {}
|
}
|
if (TOKEN) { // 携带token
|
// if (!config.headers['Authorization']) {
|
// config.headers['Authorization'] = `bearer ${TOKEN}`
|
// }
|
|
config.headers['token'] = TOKEN
|
// config.params['token'] = TOKEN
|
}
|
if(!config.params['not_language']) config.params['language'] = getStorage('lang') || "en"
|
|
if (config.loading) {
|
showLoadingToast({ forbidClick: true, duration: 0 })
|
isClose = true
|
}
|
|
return config
|
}, error => {
|
return Promise.reject(error)
|
})
|
|
// 响应拦截
|
service.interceptors.response.use(res => {
|
const userStore = useUserStore()
|
if (isClose) {
|
closeToast()
|
isClose = false
|
}
|
// console.log(res.config.returnType)
|
const { data: { code, data, msg, token } } = res
|
if (res.config['returnType'] === 'origin') { // 原样返回
|
return Promise.resolve(res.data)
|
}
|
switch (code / 1) {
|
case 0: // 正确响应
|
return Promise.resolve(data)
|
// case 401:
|
// case 402:
|
// case 407:
|
case 403: // 登录状态已过期,您可以继续留在该页面,或者重新登录
|
userStore.userInfo = {}
|
store.state.user.userInfo = {}
|
router.push({
|
path: '/login'
|
})
|
return
|
default: // 直接弹出消息
|
showToast(i18n.global.t(msg))
|
return Promise.reject(msg);
|
}
|
},
|
error => { // 网络状态监控
|
if (error && error.request) {
|
const status = error.request['status']
|
switch (status) {
|
case 401:
|
break;
|
case 424:
|
logout()
|
break
|
case 404:
|
showToast({ message: '接口未找到', type: 'fail', duration: 2000 })
|
break
|
case 415:
|
showToast({ message: 'HTTP协议不匹配,请确认', type: 'fail', duration: 2000 })
|
break
|
case 428:
|
showToast({ message: '验证码不合法', type: 'fail', duration: 2000 })
|
break
|
// case 500:
|
// showToast({ message: '服务未启动', type: 'fail', duration: 2000 })
|
// break
|
// default:
|
// showToast({ message: '服务错误', type: 'fail', duration: 2000 })
|
// break
|
default:
|
// console.log(error)
|
if (error.config.url != '/api/api/hobi!getRealtime.action') {
|
showToast({ message: i18n.global.t(error.message) || '服务错误', type: 'fail', duration: 2000 })
|
}
|
}
|
} else {
|
showToast({ message: i18n.global.t(error.message) || '服务错误', type: 'fail', duration: 2000 })
|
}
|
|
return Promise.reject(error)
|
}
|
)
|
|
export default service
|