let baseUrl = ''; if (process.env.NODE_ENV === 'development') { baseUrl = 'https://wuyeapi.bugtc.com'; // 开发环境 } else { baseUrl = 'https://wuyeapi.bugtc.com'; // 生产环境 } /** * 显示接口错误提示(自动处理长消息截断问题) * @param {string|Object} msg - 错误消息或含 msg 字段的错误对象 */ export function showApiError(msg) { const message = typeof msg === 'string' ? msg : (msg.msg || msg.message || '请求失败'); uni.showToast({ title: message || '请求失败', icon: 'error', duration: 2000 }); } export default function request(url, data = {}, method = "GET") { return new Promise((resolve, reject) => { uni.showLoading({ title: '请求中...', mask: true }); uni.request({ url: baseUrl + url, data: data, method: method, header: { "Authorization": "Bearer " + (uni.getStorageSync("token") || ''), "clientid": "resident", 'content-type': 'application/json' }, success: (res) => { uni.hideLoading(); // HTTP 失败 if (res.statusCode !== 200) { reject({ msg: `请求异常 ${res.statusCode}`, code: res.statusCode }); return; } const resData = res.data || {}; // token 过期 if (resData.code === 401) { uni.showToast({ title: '登录过期,请重新登录', icon: 'none' }); uni.clearStorageSync('token'); setTimeout(() => { uni.reLaunch({ url: '/pageSubPack/loginSub/pwd-login' }); }, 1500); reject({ msg: '登录过期', code: 401 }); return; } // 成功 if (resData.code === 200) { resolve(resData); } // 业务失败(code === 500 统一 showToast 展示完整 msg) else { if (resData.code === 500 && resData.msg) { uni.showToast({ title: resData.msg, icon: 'error', duration: 2500 }); } reject({ msg: resData.msg || '请求失败', code: resData.code, data: resData }); } }, fail: (err) => { uni.hideLoading(); reject({ msg: '网络异常', code: -1, raw: err }); } }); }); } export const get = (url, data = {}) => request(url, data, 'GET'); export const post = (url, data) => request(url, data, 'POST'); export const deleteMethod = (url, data) => request(url, data, 'DELETE'); export const putMethod = (url, data) => request(url, data, 'PUT'); // 上传 export const upload = (filePath, url) => { return new Promise((resolve, reject) => { uni.uploadFile({ url: baseUrl + url, filePath: filePath, name: 'file', header: { "Authorization": "Bearer " + (uni.getStorageSync("token") || ''), "clientid": "resident" }, success: (res) => { try { const data = JSON.parse(res.data); resolve(data.data || ''); // 直接返回图片地址 } catch (e) { resolve(''); } }, fail: (err) => { reject(err); } }); }); };