import apiConfig from '../config/api_config.js'; const request = (options) => { return new Promise((resolve, reject) => { const app = getApp(); // 使用统一的域名配置 const baseURL = apiConfig.fiberApiBaseURL; // 获取token const token = wx.getStorageSync('token'); // 构建请求头 const header = { 'Content-Type': 'application/json', ...options.header }; // 如果有token,添加到header if (token) { header.Authorization = `Bearer ${token}`; } wx.request({ url: `${baseURL}${options.url}`, method: options.method || 'GET', data: options.data, header: header, success: (res) => { // 首先检查是否是401错误 if (res.statusCode === 401 || res.data.code === 401) { // 清除登录信息 wx.removeStorageSync('token'); wx.removeStorageSync('userInfo'); // 立即跳转到登录页 wx.reLaunch({ url: '/pages/login/index' }); reject(res.data); return; } // 处理其他状态码 if (res.statusCode === 200) { // 支持两种响应格式: // 1. { code: 200, data: {...} } - 旧格式 // 2. { success: true, ... } - 新格式 // 3. 直接返回数据对象(如 OSS 凭证接口) // 检查是否是直接返回数据的接口(如 OSS 凭证接口) const isDirectDataResponse = options.url && ( options.url.includes('/oss/upload/signature') ); // 如果是直接返回数据的接口,直接 resolve if (isDirectDataResponse) { resolve(res.data); return; } if (res.data.code === 200 || res.data.success === true) { resolve(res.data); } else { // 检查是否是获取进度接口,如果是则不显示错误提示(没有进度是正常情况) const isProgressInfo = options.url && options.url.includes('/camp/progress/info'); if (!isProgressInfo) { // 其他业务错误才显示提示 wx.showToast({ title: res.data.message || '请求失败', icon: 'none' }); } // 无论是否显示提示,都 resolve,让调用方自己处理 resolve(res.data); } } else { // HTTP 状态码错误 wx.showToast({ title: '服务器错误', icon: 'none' }); reject(res); } }, fail: (err) => { wx.showToast({ title: '网络错误', icon: 'none' }); reject(err); } }); }); }; export default request;