location.ts 1.5 KB

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