| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- import { BASE_API, MODE, NOT_OAUTH_BASIC_TOKEN, OAUTH_BASIC_TOKEN } from './config'
- type AuthHandlers = {
- getAccessToken?: () => string | undefined
- onUnauthorized?: () => void
- }
- let authHandlers: AuthHandlers = {}
- let unauthorizedHandled = false
- export function setAuthHandlers(handlers: AuthHandlers) {
- authHandlers = handlers
- }
- export function resetUnauthorizedHandled() {
- unauthorizedHandled = false
- }
- export function handleUnauthorized() {
- if (unauthorizedHandled) return
- unauthorizedHandled = true
- authHandlers.onUnauthorized?.()
- uni.showModal({
- title: '提示',
- content: '当前登录失效,请重新登录',
- showCancel: false,
- success() {
- uni.reLaunch({
- url: '/pages/login/index',
- })
- },
- })
- }
- export function resolveUrl(url: string) {
- // #ifdef MP
- return BASE_API + url
- // #endif
- // #ifdef H5
- if (MODE === 'development') return url
- return BASE_API + url
- // #endif
- return BASE_API + url
- }
- export function isWhiteList(url: string) {
- return [].some((item) => url.includes(item))
- }
- export function buildHeaders(url: string, extraHeader?: UniApp.RequestOptions['header']) {
- const headers: Record<string, any> = {
- ...(extraHeader || {}),
- }
- const accessToken = authHandlers.getAccessToken?.()
- if (url.includes('auth/mobile/token/sms')) {
- headers.Authorization = NOT_OAUTH_BASIC_TOKEN
- } else if (url.includes('auth/oauth/token')) {
- headers.Authorization = OAUTH_BASIC_TOKEN
- headers['TENANT-ID'] = '1'
- } else if (accessToken) {
- headers.Authorization = `Bearer ${accessToken}`
- }
- return headers
- }
- export function getErrorMessage(body: unknown) {
- if (body && typeof body === 'object') {
- const msg = (body as any).msg
- if (typeof msg === 'string' && msg.trim()) return msg
- }
- return '网络异常,请稍后再试'
- }
- export function normalizeHttpError(res: UniApp.RequestSuccessCallbackResult, url: string) {
- return {
- url,
- statusCode: res.statusCode ?? 0,
- data: res.data,
- header: res.header,
- }
- }
|