/** Shared request, configuration and session infrastructure. */ export const API_BASE_URL = '' const REQUEST_TIMEOUT = 10000 const SESSION_KEY = 'aiFinanceSession' const wait = (duration: number) => new Promise((resolve) => { setTimeout(() => resolve(), duration) }) export function saveSession(token: string, phone: string): void { uni.setStorageSync(SESSION_KEY, { token, phone, loggedInAt: Date.now() }) } export function getSession(): UTSJSONObject | null { const value = uni.getStorageSync(SESSION_KEY) if (value == null || typeof value != 'object') return null return value as UTSJSONObject } export function isLoggedIn(): boolean { return getSession() != null } export function clearSession(): void { uni.removeStorageSync(SESSION_KEY) } const apiMessage = (error: any | null, fallback: string): string => { if (error == null) return fallback const text = error.toString() return text.length > 0 ? text : fallback } const requestJson = (path: string, method: RequestMethod, payload: UTSJSONObject): Promise => { return new Promise((resolve, reject) => { uni.request({ url: API_BASE_URL + path, method, data: payload, timeout: REQUEST_TIMEOUT, success: (response) => { if (response.statusCode >= 200 && response.statusCode < 300) { if (response.data == null) resolve(new UTSJSONObject()) else resolve(response.data as UTSJSONObject) } else { reject('请求失败(' + response.statusCode.toString() + ')') } }, fail: (error) => { reject(apiMessage(error, '网络请求失败,请稍后重试')) } }) }) } export { apiMessage, requestJson, wait }