/** * uni-app 网络请求封装 * @author steelwei */ import { BASE_URL, CLIENT_ID, PLATFORM_CODE, TENANT_ID } from './config' import { getToken, clearAuth } from './auth' /** * 通用请求方法 * @param {Object} options - 请求配置 * @param {string} options.url - 请求路径(不含 BASE_URL) * @param {string} [options.method='GET'] - 请求方法 * @param {Object} [options.data] - 请求数据 * @param {Object} [options.header] - 额外请求头 * @param {boolean} [options.needToken=true] - 是否需要携带 Token * @returns {Promise} */ export default function request(options = {}) { const { url, method = 'GET', data, header = {}, needToken = true } = options // 构建请求头 const headers = { 'Content-Type': 'application/json;charset=utf-8', 'clientid': CLIENT_ID, 'X-Platform-Code': PLATFORM_CODE, ...header } // 携带 Token if (needToken) { const token = getToken() if (token) { headers['Authorization'] = 'Bearer ' + token } } return new Promise((resolve, reject) => { uni.request({ url: BASE_URL + url, method: method.toUpperCase(), data, header: headers, success: (res) => { const statusCode = res.statusCode const result = res.data // HTTP 状态码错误 if (statusCode === 401) { // Token 过期或未登录 clearAuth() uni.showToast({ title: '登录已过期,请重新登录', icon: 'none' }) setTimeout(() => { uni.reLaunch({ url: '/pages/login/login' }) }, 1500) return reject(new Error('未授权')) } if (statusCode !== 200) { const msg = result?.msg || `请求失败(${statusCode})` uni.showToast({ title: msg, icon: 'none' }) return reject(new Error(msg)) } // 业务状态码 if (result.code !== undefined && result.code !== 200) { const msg = result.msg || '操作失败' uni.showToast({ title: msg, icon: 'none' }) return reject(new Error(msg)) } resolve(result) }, fail: (err) => { uni.showToast({ title: '网络异常,请稍后重试', icon: 'none' }) reject(err) } }) }) }