import config from "@/config"; export default function request ( { url = '', method = 'GET', data = {}, showLoading = false, header = {} , needToken = false, // 需要token showToast = true // 默认显示失败的提示 } ) { if (showLoading) uni.showLoading({title: '加载中'}) if(needToken) { const token = uni.getStorageSync('token') if (token) { header['X-Access-Token'] = token }else { uni.showToast({ title: '请先登录', icon: 'none' }) uni.reLaunch({ url: '/subPages/login/login' }) return } } return new Promise((resolve, reject) => { uni.request({ url: config.baseURL + url, method, data, header: { 'Content-Type': 'application/x-www-form-urlencoded', ...header }, success: (res) => { console.log(`Success ${method} ${url}`, res); // 优先处理业务逻辑响应 if (res.statusCode === 200 && res.data) { // 业务成功 if (res.data.code === 200 ) { resolve(res.data) return } // 业务失败但有具体错误信息 const errorMsg = res.data.message || '请求失败' if (showToast) { uni.showToast({ title: errorMsg, icon: 'none' }) } reject({ code: res.data.code, message: errorMsg, data: res.data }) return } // 处理HTTP状态码错误(无有效响应体的情况) const error = { code: res.statusCode, message: '网络请求错误' } switch (res.statusCode) { case 401: case 403: uni.removeStorageSync('token') uni.reLaunch({ url: '/subPages/login/login' }) error.message = '登录已过期,请重新登录' break; case 404: error.message = '资源不存在' break; case 500: error.message = '服务器错误' break; } if (showToast) { uni.showToast({ title: error.message, icon: 'none' }) } reject(error) }, fail: (err) => { console.log(`Fail ${method} ${url}`, err); const errorMsg = err.errMsg || '请求失败' if (showToast) { uni.showToast({ title: errorMsg, icon: 'none' }) } reject({ code: -1, message: errorMsg, data: err }) }, complete: () => { if (showLoading) { uni.hideLoading() } } }) }) }