Appearance
qApiPlugin
配置
import { router } from '@/router/index'
import qqtApi from '@qqt-product/api'
//项目api模块
import { CustomLoginModule } from '../api/index'
//pina
import { useUserStore } from '@/stores/user'
//TS
import { MapObject } from '@/types/index'
import type { InternalAxiosRequestConfig, AxiosResponse, AxiosRequestHeaders } from '@qqt-product/api'
import { message } from 'ant-design-vue'
function clearUserStore() {
const userStore = useUserStore()
const { setToken, setSrmVersion, setUserInfo, setCompanySet, setUserOrg } = userStore
// 重置 user 状态管理Pinia
setToken('')
setSrmVersion('')
setUserInfo({})
setCompanySet({})
setUserOrg({})
}
/*
常量
*/
const BASE_URL = '/els'
const TIME_OUT = 600000
const Funerr = (error: MapObject) => {
const { push } = router
const userStore = useUserStore()
if (error.response) {
// const data = error.response.data
// const token = localStorage.getItem("TOKEN");
// console.log("------异常响应------", token);
console.log('------异常响应------', error.response.status)
switch (error.response.status) {
case 403:
message.warning('拒绝访问')
break
case 520:
if (userStore.token) {
clearUserStore()
message.warning(
{
content: '很抱歉,登录已过期,请重新登录!',
onClose() {
push('/user/login')
},
},
2000,
)
}
break
case 404:
// alert('很抱歉,资源未找到!')
message.warning('很抱歉,资源未找到!')
break
case 504:
// alert('网络超时')
message.warning('网络超时')
break
case 401:
message.warning('网络超时')
break
default:
message.warning('网络超时')
break
}
}
return Promise.reject(error)
}
const resErr = (data: MapObject) => {
const { push } = router
const { code } = data
if (code === 520 || code === 530) {
clearUserStore()
// alert(message)
message.warning({
content: data.message,
onClose() {
push('/user/login')
},
})
} else if (code === 510) {
// 接口权限拦截
// clearUserStore()
// alert(message)
message.warning(data.message)
// message.warning({
// content: data.message,
// onClose() {
// push('/user/login')
// },
// })
} else {
return true
}
}
const api = qqtApi.createApi({
baseURL: BASE_URL,
timeout: TIME_OUT,
headers: {
'Content-Type': 'application/json',
},
module: { CustomLoginModule },
interceptors: {
requestInterceptors: (config: InternalAxiosRequestConfig) => {
const userStore = useUserStore()
const configUrl = Number(config.url?.toString().indexOf('els/dict/findDictItems'))
const language = localStorage.getItem('default_language') || 'zh'
if (userStore.token) {
if (!config.headers) {
config.headers = <AxiosRequestHeaders>{}
}
config.headers['X-Access-Token'] = userStore.token || '' // 让每个请求携带自定义 token 请根据实际情况自行修改
config.headers['language'] = language // 让每个请求携带自定义 token 请根据实际情况自行修改
}
if (configUrl < 0) {
config.params = {
_t: new Date().getTime() / 1000,
...config.params,
}
}
return config
},
requestInterceptorsCatch: (err: MapObject) => {
console.log('请求失败的拦截')
return err
},
responseInterceptors: (res: AxiosResponse) => {
resErr(res.data)
return res.data
},
responseInterceptorsCatch: (err: MapObject) => {
console.log('响应失败的拦截')
Funerr(err)
return err
},
},
})
export default api
该代码为v6包的配置方法,可以自行根据自己项目配置