Files
panel/web/src/utils/http/interceptors.ts
T

87 lines
2.2 KiB
TypeScript

import type { AxiosError, AxiosResponse } from 'axios'
import type { RequestConfig } from '~/types/axios'
import { AxiosRejectError, resolveResError } from './helpers'
/** 请求拦截 */
export function reqResolve(config: RequestConfig) {
return config
}
/** 请求错误拦截 */
export function reqReject(error: AxiosError) {
return Promise.reject(error)
}
/** 响应拦截 */
export function resResolve(response: AxiosResponse) {
const { data, status, config, statusText } = response
if (status !== 200) {
const code = data?.code ?? status
const message = resolveResError(code, data?.message ?? statusText)
const { noNeedTip } = config as RequestConfig
if (!noNeedTip) {
if (code == 422) {
window.$message.error(message)
} else {
if (code != 401) {
window.$dialog.error({
title: '请求返回异常',
content: message,
maskClosable: false
})
}
}
}
return Promise.reject(new AxiosRejectError({ code, message, data: data || response }))
}
return Promise.resolve(data)
}
/** 响应错误拦截 */
export function resReject(error: AxiosError) {
if (!error || !error.response) {
const code = error?.code
/** 根据code处理对应的操作,并返回处理后的message */
const message = resolveResError(code, error.message)
window.$dialog.error({
title: '请求出现异常',
content: message,
maskClosable: false
})
return Promise.reject(new AxiosRejectError({ code, message, data: error }))
}
const { data, status, config } = error.response
let { code, message } = data as AxiosRejectError
code = code ?? status
message = message ?? error.message
message = resolveResError(code, message)
/** 需要错误提醒 */
const { noNeedTip } = config as RequestConfig
if (!noNeedTip) {
if (code == 422) {
window.$message.error(message)
} else {
if (code != 401) {
window.$dialog.error({
title: '请求返回异常',
content: message,
maskClosable: false
})
}
}
}
return Promise.reject(
new AxiosRejectError({
code,
message,
data: error.response?.data || error.response
})
)
}