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
| import type { AxiosProgressEvent, AxiosResponse, GenericAbortSignal } from 'axios'
| import request from './axios'
| import { useAuthStore } from '@/store'
|
| export interface HttpOption {
| url: string
| data?: any
| method?: string
| headers?: any
| onDownloadProgress?: (progressEvent: AxiosProgressEvent) => void
| signal?: GenericAbortSignal
| beforeRequest?: () => void
| afterRequest?: () => void
| }
|
| export interface Response<T = any> {
| data: T
| msg: string | undefined
| code: number,
| rows: []
| }
|
| function http<T = any>(
| { url, data, method, headers, onDownloadProgress, signal, beforeRequest, afterRequest }: HttpOption,
| ) {
| const successHandler = (res: AxiosResponse<Response<T>>) => {
| const authStore = useAuthStore()
| if (res.data.code === 200 ){
| return res.data
| }else{
| authStore.removeToken()
| window.location.reload()
| }
| return Promise.reject(res.data)
| }
|
| const failHandler = (error: Response<Error>) => {
| alert("failHandler")
| afterRequest?.()
| return { error: true, message: error?.msg || 'Error' };
| }
|
| beforeRequest?.()
|
| method = method || 'GET'
|
| const params = Object.assign(typeof data === 'function' ? data() : data ?? {}, {})
|
| return method === 'GET'
| ? request.get(url, { params, signal, onDownloadProgress }).then(successHandler, failHandler)
| : request.post(url, params, { headers, signal, onDownloadProgress }).then(successHandler, failHandler)
| }
|
| export function get<T = any>(
| { url, data, method = 'GET', onDownloadProgress, signal, beforeRequest, afterRequest }: HttpOption,
| ): Promise<Response<T>> {
| return http<T>({
| url,
| method,
| data,
| onDownloadProgress,
| signal,
| beforeRequest,
| afterRequest,
| })
| }
|
| export function post<T = any>(
| { url, data, method = 'POST', headers, onDownloadProgress, signal, beforeRequest, afterRequest }: HttpOption,
| ): Promise<Response<T>> {
| return http<T>({
| url,
| method,
| data,
| headers,
| onDownloadProgress,
| signal,
| beforeRequest,
| afterRequest,
| })
| }
|
| export default post
|
|