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' import { signatureGenerate } from '@/utils/signatureUtil.js' 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) } } const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone config.headers[' x-api-client-timezone'] = timeZone const userStore = useUserStore() const TOKEN = userStore.userInfo.token const { systemRandom, timestamp, signature } = signatureGenerate() if (!config.params) { config.params = {} } if (systemRandom) { config.headers['systemRandom'] = systemRandom } if (timestamp) { config.headers['tissuePaper'] = timestamp } if (signature) { config.headers['sign'] = signature } if (TOKEN) { config.headers['token'] = TOKEN } if (config.url == '/api/api/cms!get.action') { if (config.params.content_code == '001') { if (getStorage('lang') == 'CN' || getStorage('lang') == 'zh-CN') { config.params['language'] = 'zh-CN' } else { config.params['language'] = 'en' } } else { config.params['language'] = getStorage('lang') || 'en' } } else { 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 case 10: case 20: return Promise.reject(res.data) 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: i18n.global.t('interfaceNotFound'), type: 'fail', duration: 2000 }) break case 415: showToast({ message: i18n.global.t('httpProtocolMismatch'), type: 'fail', duration: 2000 }) break case 428: showToast({ message: i18n.global.t('VerificationCodeIsIllegal'), 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' || error.config.url != '/api/api/item!list.action' ) { showToast({ message: i18n.global.t(error.message) || i18n.global.t('serviceError'), type: 'fail', duration: 2000 }) } } } else { showToast({ message: i18n.global.t(error.message) || i18n.global.t('serviceError'), type: 'fail', duration: 2000 }) } return Promise.reject(error) } ) export default service