A8000
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
2.1 KiB

8 months ago
8 months ago
8 months ago
7 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
  1. import axios, {
  2. AxiosInstance,
  3. AxiosResponse,
  4. InternalAxiosRequestConfig,
  5. AxiosHeaders,
  6. } from 'axios'
  7. import { getServerInfo } from './getServerInfo'
  8. import { eventBus } from '../eventBus'
  9. const serverInfo = getServerInfo()
  10. // 创建 Axios 实例
  11. const apiClient: AxiosInstance = axios.create({
  12. baseURL: serverInfo.httpUrl, // 设置请求的根路径
  13. timeout: 60000,
  14. headers: {
  15. 'Content-Type': 'application/json',
  16. },
  17. })
  18. // 请求拦截器
  19. apiClient.interceptors.request.use(
  20. (config: InternalAxiosRequestConfig<any>) => {
  21. const token = sessionStorage.getItem('token')
  22. // 使用 AxiosHeaders.from() 创建 headers,如果 headers 为空
  23. if (!config.headers) {
  24. config.headers = AxiosHeaders.from({}) // 确保 config.headers 是 AxiosHeaders 类型
  25. }
  26. if (token) {
  27. config.headers.set(
  28. 'Authorization',
  29. `Bearer ${encodeURIComponent(token)}`,
  30. ) // 使用 set 方法设置 Authorization
  31. }
  32. return config
  33. },
  34. (error) => {
  35. return Promise.reject(error)
  36. },
  37. )
  38. // 响应拦截器
  39. apiClient.interceptors.response.use(
  40. (response: AxiosResponse<any>) => {
  41. if (response.data && response.data.dataType === 'ZAppPromopt') {
  42. if (response.data.ecode === 'USR_NOT_EXIT') {
  43. return Promise.resolve(response.data)
  44. } else if (response.data.ecode === 'USR_PASSWORD_ERROR') {
  45. return Promise.resolve(response.data)
  46. } else {
  47. console.log('接口出错', response.data)
  48. eventBus.emit('show-error-modal', {
  49. type: response.data.data.type,
  50. info: response.data.data.info,
  51. detailInfos: response.data.data.detailInfos,
  52. ecode: response.data.data.ecode,
  53. stackInfo: response.data.data.stackInfo,
  54. })
  55. return Promise.reject(response.data)
  56. }
  57. }
  58. return response
  59. },
  60. (error) => {
  61. eventBus.emit('show-error-modal', {
  62. type: 'Error',
  63. info: '网络请求失败',
  64. detailInfos: [
  65. {
  66. name: '错误详情',
  67. description: error.message,
  68. },
  69. ],
  70. })
  71. return Promise.reject(error)
  72. },
  73. )
  74. export default apiClient