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.

73 lines
1.9 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
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. }
  47. else if (response.data.ecode === 'APPE_A8K_ID_CARD_NOT_MOUNTED') {
  48. return Promise.reject(response.data)
  49. }
  50. else {
  51. console.log('接口出错', response.data)
  52. eventBus.emit('show-error-modal', response.data.data)
  53. return Promise.reject(response.data)
  54. }
  55. }
  56. return response
  57. },
  58. (error) => {
  59. eventBus.emit('show-error-modal', {
  60. messageLevel: 'Error',
  61. title: '网络请求失败',
  62. info: error.message
  63. })
  64. return Promise.reject(error)
  65. },
  66. )
  67. export default apiClient