$http.ts 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. import { message } from 'ant-design-vue'
  2. import axios from 'axios'
  3. import qs from 'qs'
  4. // import { useTokenStore } from './token'
  5. // const { token } = useTokenStore()
  6. localStorage.getItem('__prescription_client__token')
  7. export type ResponseData = Record<string | number | symbol, unknown>
  8. export type RequestParams = Record<string | number, unknown>
  9. export interface ApiResponse<T> {
  10. Code: Number
  11. Data: T
  12. Msg: string | null
  13. }
  14. // 定义 API 响应的类型
  15. const http = axios.create({
  16. // baseURL: , // 域名配置
  17. headers: {
  18. 'Content-Type': 'application/json;charset=UTF-8'
  19. },
  20. withCredentials: true, // 跨域携带cookie
  21. timeout: 5 * 60 * 1000,
  22. paramsSerializer: function (params) {
  23. return qs.stringify(params, { arrayFormat: 'repeat' })
  24. }
  25. })
  26. // 请求拦截器
  27. http.interceptors.request.use(
  28. (config) => {
  29. if (localStorage.getItem('__token__')) {
  30. config.headers.Authorization = `Bearer ${localStorage.getItem('__token__')}`
  31. }
  32. return config
  33. },
  34. (error) => {
  35. return Promise.reject(error)
  36. }
  37. )
  38. // 响应拦截器
  39. http.interceptors.response.use(
  40. (response): any => {
  41. const { status, data } = response
  42. if (status >= 200 && status < 300) {
  43. if (data.Code !== 200) {
  44. return Promise.reject(data.Msg)
  45. }
  46. return Promise.resolve(data)
  47. } else {
  48. errorHandle(status)
  49. Promise.reject(data.Msg)
  50. }
  51. },
  52. (error) => {
  53. errorHandle(error.status)
  54. return Promise.reject(error)
  55. }
  56. )
  57. function errorHandle(status: number) {
  58. switch (status) {
  59. case 400:
  60. // 处理错误信息,例如抛出错误信息提示,或者跳转页面等处理方式。
  61. // return Promise.resolve(error)
  62. break
  63. case 401:
  64. //
  65. break
  66. case 403:
  67. // $post(`/api/update/token`, {
  68. // RefreshToken: token!.RefreshToken
  69. // })
  70. // .then(el => )
  71. localStorage.getItem('__prescription_client__token')
  72. break
  73. case 404:
  74. //
  75. break
  76. // ...
  77. default:
  78. throw new Error('未知错误')
  79. }
  80. }
  81. /**
  82. * @name get请求
  83. * @param url
  84. * @param param
  85. * @param config
  86. * @returns
  87. */
  88. export const $get = <T>(url: string, data: RequestParams = {}, config = {}): Promise<ApiResponse<T>> => {
  89. return new Promise((resolve) => {
  90. http
  91. .get<Promise<ApiResponse<T>>>(url, { params: data, ...config })
  92. .then((res: any) => {
  93. resolve(res)
  94. })
  95. .catch((error) => message.error(error))
  96. })
  97. }
  98. /**
  99. * @name post请求
  100. * @param url
  101. * @param param
  102. * @param config
  103. * @returns
  104. */
  105. export const $post = <T>(url: string, data: RequestParams = {}, config = {}): Promise<ApiResponse<T>> => {
  106. return new Promise((resolve) => {
  107. http
  108. .post<Promise<ApiResponse<T>>>(url, data, config)
  109. .then((res: any) => {
  110. resolve(res)
  111. })
  112. .catch((error) => message.error(error))
  113. })
  114. }
  115. /**
  116. * @name put请求
  117. * @param url
  118. * @param param
  119. * @param config
  120. * @returns
  121. */
  122. export const $put = <T>(url: string, data: RequestParams = {}, config = {}): Promise<ApiResponse<T>> => {
  123. return new Promise((resolve) => {
  124. http
  125. .put<Promise<ApiResponse<T>>>(url, data, config)
  126. .then((res: any) => {
  127. resolve(res)
  128. })
  129. .catch((error) => message.error(error))
  130. })
  131. }
  132. /**
  133. * @name delete请求
  134. * @param url
  135. * @param param
  136. * @param config
  137. * @returns
  138. */
  139. export const $delete = <T>(url: string, data: RequestParams = {}, config = {}): Promise<ApiResponse<T>> => {
  140. return new Promise((resolve) => {
  141. http
  142. .delete<Promise<ApiResponse<T>>>(url, { params: data, ...config })
  143. .then((res: any) => {
  144. resolve(res)
  145. })
  146. .catch((error) => message.error(error))
  147. })
  148. }