// src/utils/request.js import config from '@/config' import { getToken, removeToken } from '@/utils/auth' import { toast, showConfirm, tansParams } from '@/utils/common' // 移除对 store 的依赖 const request = (configObj = {}) => { // 确保配置对象有效 configObj.header = configObj.header || {} // 获取token - 只从本地存储获取 const token = getToken() || '' // 仅当token存在且未明确禁止时才添加 if (token && configObj.header.isToken !== false) { configObj.header['Authorization'] = 'Bearer ' + token } else if (!token) { console.log('请求未携带Token: 未登录状态访问公开API', configObj.url) } // 完整URL处理 let fullUrl = configObj.url if (!fullUrl.startsWith('http')) { fullUrl = (configObj.baseUrl || config.baseUrl || '') + fullUrl } return new Promise((resolve, reject) => { uni.request({ method: configObj.method || 'get', url: fullUrl, data: configObj.data, header: configObj.header, success: (res) => { // 处理401认证失败 if (res.statusCode === 401) { const errorMsg = res.data?.msg || '认证失败,请重新登录' console.warn('认证失败:', configObj.url, errorMsg) // 清除无效token removeToken() // 显示登录提示 toast(errorMsg) // 跳转到登录页面 uni.navigateTo({ url: '/pages/login' }) reject(new Error(errorMsg)) } // 处理其他成功响应 else if (res.statusCode >= 200 && res.statusCode < 300) { resolve(res.data) } // 处理其他错误 else { const errorMsg = res.data?.msg || `请求失败 (${res.statusCode})` toast(errorMsg) reject(new Error(errorMsg)) } }, fail: (err) => { let message = '网络连接异常' if (err.errMsg.includes('timeout')) message = '请求超时' toast(message) reject(err) } }) }) } // 添加便捷方法 request.get = (url, params, config = {}) => { return request({ url, params, method: 'get', ...config }) } request.post = (url, data, config = {}) => { return request({ url, data, method: 'post', ...config }) } export default request