/** * 网络请求封装 * 统一处理 Token 注入、错误提示、401 自动跳转登录 */ // 后台 API 基础地址,按环境配置 const BASE_URL = 'http://localhost:5030' // const BASE_URL = 'https://api.pli.shhmkjgs.cn' // 请求超时时间(毫秒) const TIMEOUT = 10000 /** * 封装 uni.request * @param {Object} options - 请求配置 * @param {string} options.url - 接口路径(不含 BASE_URL) * @param {string} [options.method='GET'] - 请求方法 * @param {Object} [options.data] - 请求参数 * @param {boolean} [options.auth=true] - 是否需要携带 Token * @returns {Promise} 响应数据 */ export function request(options) { const { url, method = 'GET', data, auth = true } = options const header = { 'Content-Type': 'application/json' } // 注入 Token if (auth) { const token = uni.getStorageSync('token') if (token) { header['Authorization'] = `Bearer ${token}` } } return new Promise((resolve, reject) => { uni.request({ url: BASE_URL + url, method, data, header, timeout: TIMEOUT, success: (res) => { const { statusCode, data: resData } = res // 401 未授权,清除登录态 if (statusCode === 401) { uni.removeStorageSync('token') uni.removeStorageSync('userInfo') return reject(new Error('未授权')) } // 其他非 2xx 状态码 if (statusCode < 200 || statusCode >= 300) { const msg = (resData && resData.message) || '请求失败' uni.showToast({ title: msg, icon: 'none' }) return reject(new Error(msg)) } resolve(resData) }, fail: (err) => { uni.showToast({ title: '网络异常,请稍后重试', icon: 'none' }) reject(err) } }) }) } /** * GET 请求快捷方法 */ export function get(url, data, options = {}) { return request({ url, method: 'GET', data, ...options }) } /** * POST 请求快捷方法 */ export function post(url, data, options = {}) { return request({ url, method: 'POST', data, ...options }) } /** * PUT 请求快捷方法 */ export function put(url, data, options = {}) { return request({ url, method: 'PUT', data, ...options }) } /** * DELETE 请求快捷方法 */ export function del(url, data, options = {}) { return request({ url, method: 'DELETE', data, ...options }) } export default { request, get, post, put, del }