utils.ts 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import { BASE_API, MODE, NOT_OAUTH_BASIC_TOKEN, OAUTH_BASIC_TOKEN } from './config'
  2. type AuthHandlers = {
  3. getAccessToken?: () => string | undefined
  4. onUnauthorized?: () => void
  5. }
  6. let authHandlers: AuthHandlers = {}
  7. let unauthorizedHandled = false
  8. export function setAuthHandlers(handlers: AuthHandlers) {
  9. authHandlers = handlers
  10. }
  11. export function resetUnauthorizedHandled() {
  12. unauthorizedHandled = false
  13. }
  14. export function handleUnauthorized() {
  15. if (unauthorizedHandled) return
  16. unauthorizedHandled = true
  17. authHandlers.onUnauthorized?.()
  18. uni.showModal({
  19. title: '提示',
  20. content: '当前登录失效,请重新登录',
  21. showCancel: false,
  22. success() {
  23. uni.reLaunch({
  24. url: '/pages/login/index',
  25. })
  26. },
  27. })
  28. }
  29. export function resolveUrl(url: string) {
  30. // #ifdef MP
  31. return BASE_API + url
  32. // #endif
  33. // #ifdef H5
  34. if (MODE === 'development') return url
  35. return BASE_API + url
  36. // #endif
  37. return BASE_API + url
  38. }
  39. export function isWhiteList(url: string) {
  40. return [].some((item) => url.includes(item))
  41. }
  42. export function buildHeaders(url: string, extraHeader?: UniApp.RequestOptions['header']) {
  43. const headers: Record<string, any> = {
  44. ...(extraHeader || {}),
  45. }
  46. const accessToken = authHandlers.getAccessToken?.()
  47. if (url.includes('auth/mobile/token/sms')) {
  48. headers.Authorization = NOT_OAUTH_BASIC_TOKEN
  49. } else if (url.includes('auth/oauth/token')) {
  50. headers.Authorization = OAUTH_BASIC_TOKEN
  51. headers['TENANT-ID'] = '1'
  52. } else if (accessToken) {
  53. headers.Authorization = `Bearer ${accessToken}`
  54. }
  55. return headers
  56. }
  57. export function getErrorMessage(body: unknown) {
  58. if (body && typeof body === 'object') {
  59. const msg = (body as any).msg
  60. if (typeof msg === 'string' && msg.trim()) return msg
  61. }
  62. return '网络异常,请稍后再试'
  63. }
  64. export function normalizeHttpError(res: UniApp.RequestSuccessCallbackResult, url: string) {
  65. return {
  66. url,
  67. statusCode: res.statusCode ?? 0,
  68. data: res.data,
  69. header: res.header,
  70. }
  71. }