location.ts 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import axios from 'axios'
  2. import type {
  3. ApiResponse,
  4. LocationCapacityMonitorVO,
  5. LocationRequest,
  6. LocationResourceDataVO
  7. } from '../types'
  8. import { AUTH_INVALID_EVENT, getApiBaseUrl, getToken, removeToken } from '../utils/auth'
  9. const apiClient = axios.create({
  10. timeout: 10000,
  11. headers: {
  12. 'Content-Type': 'application/json'
  13. }
  14. })
  15. // 请求拦截器:添加 token 和 Source
  16. apiClient.interceptors.request.use(
  17. (requestConfig) => {
  18. const token = getToken()
  19. if (token) {
  20. requestConfig.headers.Authorization = token
  21. }
  22. requestConfig.baseURL = getApiBaseUrl()
  23. requestConfig.headers.Source = 'web'
  24. return requestConfig
  25. },
  26. (error) => {
  27. return Promise.reject(error)
  28. }
  29. )
  30. // 响应拦截器:处理业务错误
  31. apiClient.interceptors.response.use(
  32. (response) => {
  33. const { code, message } = response.data || {}
  34. if (code === 600) {
  35. removeToken()
  36. window.dispatchEvent(new CustomEvent(AUTH_INVALID_EVENT))
  37. return Promise.reject(new Error(message || '登录失效,请重新登录'))
  38. }
  39. if (code !== 200) {
  40. return Promise.reject(new Error(message || '请求失败'))
  41. }
  42. return response
  43. },
  44. (error) => {
  45. return Promise.reject(error)
  46. }
  47. )
  48. export const fetchLocationData = async (
  49. params: LocationRequest
  50. ): Promise<LocationResourceDataVO[]> => {
  51. const response = await apiClient.post<ApiResponse<LocationResourceDataVO[]>>(
  52. '/api/basic/location/resource/selectLocLevelLocation',
  53. params
  54. )
  55. return response.data.data
  56. }
  57. export const fetchCapacityMonitor = async (): Promise<LocationCapacityMonitorVO[]> => {
  58. const response = await apiClient.get<ApiResponse<LocationCapacityMonitorVO[]>>(
  59. '/api/basic/location/resource/getCapacityMonitor'
  60. )
  61. return response.data.data
  62. }