gx
chenyc
2025-08-26 a9d053785b297a0df6ebdd2eaea842c0784c7d3b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import Axios, {
    AxiosError,
    AxiosResponse,
    AxiosRequestConfig,
    AxiosInstance
} from 'axios'
import { Session } from '@/utils/storage'
 
let controllers: AbortController[] = []
const BASE_URL = import.meta.env.VITE_BASIC_API
 
// const BASE_URL = 'https://hemobs.icoldchain.cn'
// const  BASE_URL='http://testbs.ihemodialysis.com'
const TIME_OUT = 10 * 1000
 
interface IResponseError {
    code: number,
    result: boolean,
    message: string
}
 
/**
 * 创建axios实例
 */
const instance: AxiosInstance = Axios.create({
    baseURL: BASE_URL,
    timeout: TIME_OUT
    // withCredentials: true
})
 
/**
 * 错误处理函数
 */
const errorMsgHandler = (code:any, data:any): string | undefined => {
    const { message } = data
    return message+'请求错误'
}
 
const errorHandle = (error:any): IResponseError => {
    const { data, status, statusText } = error.response
    const msg = errorMsgHandler(status, data) || `${status} error ${data ? data.message : statusText}`
    alert(msg)
    return {
        code: status,
        result: false,
        message: msg
    }
}
 
/**
 * 获取token,根据项目中后台的传递方式调整。这里使用的是cookie传递
 * **/
const getToken = (): string => {
    if (Session.get('token')) {
        return 'Bearer '+ `${Session.get('token')}`
    }
    return ''
}
 
// 前置拦截器(发起请求之前的拦截)
instance.interceptors.request.use((config: AxiosRequestConfig) => {
    config.headers && (config.headers['Authorization'] = getToken())
    const controller = new AbortController()
    config.signal = controller.signal
    controllers.push(controller)
    return config
})
 
// 后置拦截器(获取到响应时的拦截)
instance.interceptors.response.use(
    (response: AxiosResponse) => {
        const { data, status } = response
        console.log(status)
        const { message,code } = data
        // 请求正常时,仅返回需要用到的 data 信息即可
        if (code===200) return data.data
        // 1、对于一些请求正常,但后台处理失败的内容进行拦截,返回对应错误信息
        alert(message || '请求异常,请刷新重试')
        return Promise.reject(data.data)
 
    },
    (error: AxiosError) => {
        return error.response ? errorHandle(error) : Promise.reject(error)
    }
)
 
export const cancelRequest = () => {
    controllers.forEach(controller => {
        controller.abort()
    })
    controllers = []
}
 
const ajaxGet = (url: string, params?: any): Promise<AxiosResponse> => instance.get(url, { params })
const ajaxDelete = (url: string, params?: any): Promise<AxiosResponse> => instance.delete(url, { params })
const ajaxPost = (url: string, params: any, config?: AxiosRequestConfig): Promise<AxiosResponse> => instance.post(url, params, config)
const ajaxPut = (url: string, params: any, config?: AxiosRequestConfig): Promise<AxiosResponse> => instance.put(url, params, config)
const ajaxPatch = (url: string, params: any, config?: AxiosRequestConfig): Promise<AxiosResponse> => instance.patch(url, params, config)
 
 
export {
    ajaxGet,
    ajaxDelete,
    ajaxPost,
    ajaxPut,
    ajaxPatch
}