create-iking-admin
Version:
金合技术中台脚手架
125 lines (115 loc) • 3.61 kB
text/typescript
/*
* @Author : wfl
* @LastEditors : wfl
* @description :
* @updateInfo :
* @Date : 2024-02-29 14:41:18
* @LastEditTime : 2024-03-11 12:19:13
*/
import axios from 'axios'
import router from '@main/router'
import useSettingsStore from '@main/store/modules/settings'
import useUserStore from '@main/store/modules/user'
const { remberRoute } = systemConfig
const { msgWarning } = useMessage()
function toLogin(statu = true) {
// useUserStore().clearCache()
const query = (statu && remberRoute)
? {
redirect:
router.currentRoute.value.path !== '/login'
? router.currentRoute.value.fullPath
: undefined,
}
: {}
router.push({
path: '/login',
query,
})
// location.href = `${location.href}`
}
const api = axios.create({
baseURL: (import.meta.env.DEV && import.meta.env.VITE_OPEN_PROXY === 'true') ? '/api/' : import.meta.env.VITE_APP_API_BASEURL,
timeout: 1000 * 20,
responseType: 'json',
})
api.interceptors.request.use(
(request) => {
// 全局拦截请求发送前提交的参数
const settingsStore = useSettingsStore()
const userStore = useUserStore()
// 设置公共请求头
if (request.headers) {
request.headers['Accept-Language'] = settingsStore.settings.app.defaultLang
request.headers.Authorization
= userStore.token || ikStore.local.getItem(ELocal.TOKEN)
if (userStore.isLogin) {
// const menuId = ikStore.local.getItem('menuid')
// request.headers['menu-id'] = menuId
// request.headers['X-TENANT']
// = userStore?.tenant?.code || ikStore.local.getItem(ELocal.TENANT)?.code
// request.headers['X-ORG']
// = userStore?.organiza?.select || ikStore.local.getItem(ELocal.ORGANIZA)?.select
}
// 设置域标识
setDomainHeader(request.headers)
}
// 是否将 POST 请求参数进行字符串化处理
if (request.method === 'post') {
// request.data = qs.stringify(request.data, {
// arrayFormat: 'brackets',
// })
}
return request
},
)
api.interceptors.response.use(
(response: any) => {
/**
* 全局拦截请求发送后返回的数据,如果数据有报错则在这做全局的错误提示
*/
if (
response.status === 200
|| response.data.status === 1
|| response.data.code === 0
) {
if (
!excludeUrl.includes(response?.config?.url)
&& !response.data.success
) {
msgWarning(response.data.msg)
return Promise.resolve(response.data)
}
}
else {
// TODO:返回登录页的条件
useUserStore().logout()
}
return Promise.resolve(response.data)
},
(error) => {
let message = error.message
if (message === 'Network Error') {
msgWarning('网络错误,请稍后重试')
}
else if (message.includes('timeout')) {
msgWarning('请求超时,请稍后重试')
toLogin()
return Promise.reject(error)
}
// 登录过期,返回登录页
else if (message.includes('401')) {
message = '登录失效, 即将返回登录页面'
useUserStore().logout()
}
else if (message.includes('Request failed with status code')) {
message = `请求[${error?.config?.url}]${message.substr(message.length - 3)}异常`
msgWarning(message)
}
else {
msgWarning(message)
}
return Promise.reject(error)
},
)
export default api