/** * API 请求封装 * 基于 uni.request 封装,支持拦截器、错误处理等 */ // API 基础配置 const BASE_URL = process.env.NODE_ENV === 'production' ? 'https://xcsq.wxinh5.com' : 'http://xcsq.wxinh5.host' // 请求拦截器 const requestInterceptor = (config) => { // 可以在这里添加全局请求头、token 等 return config } // 响应拦截器 const responseInterceptor = (response) => { // 统一处理响应数据 return response } // 错误处理 const handleError = (error) => { console.error('API 请求错误:', error) // 根据错误类型进行处理 if (error.errMsg && error.errMsg.includes('timeout')) { uni.showToast({ title: '请求超时,请稍后重试', icon: 'none', duration: 2000 }) } else if (error.errMsg && error.errMsg.includes('fail')) { uni.showToast({ title: '网络请求失败,请检查网络', icon: 'none', duration: 2000 }) } return Promise.reject(error) } /** * 通用请求方法 * @param {Object} options - 请求配置 * @returns {Promise} - 返回 Promise */ export const request = (options = {}) => { return new Promise((resolve, reject) => { // 合并配置 const config = { url: '', method: 'POST', data: {}, header: { 'Content-Type': 'application/json' }, timeout: 10000, ...options } // 处理完整 URL if (!config.url.startsWith('http')) { config.url = `${BASE_URL}${config.url}` } // 应用请求拦截器 const finalConfig = requestInterceptor(config) // 执行请求 uni.request({ ...finalConfig, success: (response) => { // 应用响应拦截器 const result = responseInterceptor(response) // 根据 HTTP 状态码处理 if (response.statusCode >= 200 && response.statusCode < 300) { resolve(result.data) } else { // 创建包含状态码和响应数据的错误对象 const error = new Error(`HTTP ${response.statusCode}: ${response.errMsg || '请求失败'}`) error.statusCode = response.statusCode error.response = response error.data = result.data || response.data reject(error) } }, fail: (error) => { handleError(error).catch(reject) } }) }) } /** * GET 请求 * @param {string} url - 请求地址 * @param {Object} params - 请求参数 * @param {Object} options - 其他配置 * @returns {Promise} */ export const get = (url, params = {}, options = {}) => { return request({ url, method: 'GET', data: params, ...options }) } /** * POST 请求 * @param {string} url - 请求地址 * @param {Object} data - 请求数据 * @param {Object} options - 其他配置 * @returns {Promise} */ export const post = (url, data = {}, options = {}) => { return request({ url, method: 'POST', data, ...options }) } /** * PUT 请求 * @param {string} url - 请求地址 * @param {Object} data - 请求数据 * @param {Object} options - 其他配置 * @returns {Promise} */ export const put = (url, data = {}, options = {}) => { return request({ url, method: 'PUT', data, ...options }) } /** * DELETE 请求 * @param {string} url - 请求地址 * @param {Object} params - 请求参数 * @param {Object} options - 其他配置 * @returns {Promise} */ export const del = (url, params = {}, options = {}) => { return request({ url, method: 'DELETE', data: params, ...options }) } export default { request, get, post, put, del }