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 = { ...(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, } }