/** * workcase_wechat API 封装 * 使用 uni.request 替代 axios */ /* eslint-disable @typescript-eslint/no-explicit-any */ declare const uni: { getStorageSync: (key: string) => any removeStorageSync: (key: string) => void setStorageSync: (key: string, data: any) => void request: (options: any) => void uploadFile: (options: any) => void showToast: (options: any) => void reLaunch: (options: any) => void } import type { ResultDomain } from '../types' import { BASE_URL as CONFIG_BASE_URL } from '../config' // API 基础配置 const BASE_URL = CONFIG_BASE_URL // 通用请求方法 export function request(options: { url: string method?: 'GET' | 'POST' | 'PUT' | 'DELETE' data?: any header?: Record }): Promise> { return new Promise((resolve, reject) => { const token = uni.getStorageSync('token') as string uni.request({ url: BASE_URL + options.url, method: options.method || 'GET', data: options.data, header: { 'Content-Type': 'application/json', ...(token ? { 'Authorization': `Bearer ${token}` } : {}), ...options.header }, success: (res: any) => { if (res.statusCode === 200) { resolve(res.data as ResultDomain) } else if (res.statusCode === 401) { // Token 过期或无效,清除缓存并跳转到授权页面 handleTokenExpired() reject(new Error('登录已过期,请重新登录')) } else { reject(new Error(`请求失败: ${res.statusCode}`)) } }, fail: (err: any) => { reject(err) } }) }) } // 处理 Token 过期 function handleTokenExpired() { // 清除所有登录信息 uni.removeStorageSync('token') uni.removeStorageSync('userInfo') uni.removeStorageSync('loginDomain') uni.removeStorageSync('wechatId') uni.removeStorageSync('nickname') // 提示用户 uni.showToast({ title: '登录已过期,正在重新登录', icon: 'none', duration: 2000 }) // 刷新页面,触发自动登录 setTimeout(() => { uni.reLaunch({ url: '/pages/index/index' }) }, 2000) } // 文件上传方法 export function uploadFile(options: { url: string filePath: string name?: string formData?: Record header?: Record }): Promise> { return new Promise((resolve, reject) => { const token = uni.getStorageSync('token') as string uni.uploadFile({ url: BASE_URL + options.url, filePath: options.filePath, name: options.name || 'file', formData: options.formData, header: { ...(token ? { 'Authorization': `Bearer ${token}` } : {}), ...options.header }, success: (res: any) => { try { if (res.statusCode === 200) { const result = typeof res.data === 'string' ? JSON.parse(res.data) : res.data resolve(result as ResultDomain) } else if (res.statusCode === 401) { // Token 过期或无效 handleTokenExpired() reject(new Error('登录已过期,请重新登录')) } else { reject(new Error(`上传失败: ${res.statusCode}`)) } } catch (error) { reject(new Error('解析响应失败')) } }, fail: (err: any) => { reject(err) } }) }) } // 导出清除登录信息的方法,供其他地方使用 export function clearLoginInfo() { uni.removeStorageSync('token') uni.removeStorageSync('userInfo') uni.removeStorageSync('loginDomain') uni.removeStorageSync('wechatId') uni.removeStorageSync('nickname') }