// utils/request.js import { config } from '@/common/config.js' // 引入配置文件 // 请求基地址 const baseURL = config.apiBaseUrl /** * 封装 uni.request 请求方法 * @param {Object} options - 请求配置 * @param {string} options.url - 请求路径 * @param {string} [options.method='GET'] - 请求方法 * @param {Object} [options.data={}] - 请求数据 * @param {Object} [options.header={}] - 请求头 * @param {number} [options.timeout=15000] - 超时时间(ms) * @param {boolean} [options.showLoading=true] - 是否显示加载提示 * @returns {Promise} 返回 Promise 对象 */ export const request = (options) => { // 合并配置参数 const mergedOptions = { url: 'http://test.xyz' + `${baseURL}${options.url}`, method: options.method || 'GET', data: options.data || {}, header: { 'Content-Type': 'application/json', 'token': uni.getStorageSync('token'), ...options.header }, timeout: options.timeout || 15000, showLoading: options.showLoading !== false, // 默认显示加载提示 ...options } // 显示加载提示 if (mergedOptions.showLoading) { uni.showLoading({ title: '加载中...', mask: true }) } console.log(mergedOptions) return new Promise((resolve, reject) => { // 发送请求 uni.request({ ...mergedOptions, success: (res) => { // 这里可根据后端接口结构调整 if (res.data.code === 1) { resolve(res.data) }else { // 业务错误处理 handleBusinessError(res.data) reject(res.data) } }, fail: (err) => { // 网络错误处理 handleNetworkError(err) reject(err) }, complete: () => { // 关闭加载提示 if (mergedOptions.showLoading) { uni.hideLoading() } } }) }) } // 处理业务错误 function handleBusinessError(data) { const errorMsg = data.msg || '业务处理失败' uni.showToast({ title: errorMsg, icon: 'none', duration: 2000 }) // console.error(`业务错误: ${errorMsg}`, data) } // 处理 HTTP 错误 function handleHttpError(statusCode) { const errorMap = { 400: '请求参数错误', 401: '未授权,请登录', 403: '拒绝访问', 404: '请求资源不存在', 405: '请求方法不允许', 500: '服务器内部错误' } const errorMsg = errorMap[statusCode] || `服务器错误,状态码: ${statusCode}` uni.showToast({ title: errorMsg, icon: 'none', duration: 2000 }) // console.error(`HTTP错误: ${errorMsg}`) } // 处理网络错误 function handleNetworkError(err) { let errorMsg = '网络连接失败' if (err.errMsg && err.errMsg.includes('timeout')) { errorMsg = '请求超时,请稍后重试' } uni.showToast({ title: errorMsg, icon: 'none', duration: 2000 }) // console.error(`网络错误: ${errorMsg}`, err) } /** * GET 请求快捷方法 * @param {string} url - 请求路径 * @param {Object} [data={}] - 请求参数 * @param {Object} [options={}] - 其他配置 */ export const get = (url, data = {}, options = {}) => { return request({ url, data, method: 'GET', ...options }) } /** * POST 请求快捷方法 * @param {string} url - 请求路径 * @param {Object} [data={}] - 请求数据 * @param {Object} [options={}] - 其他配置 */ export const post = (url, data = {}, options = {}) => { return request({ url, data, method: 'POST', ...options }) }