// API基础配置 const BASE_URL = import.meta.env.VITE_API_BASE_URL || 'https://sales.violin-work.online/api/v1' // 请求拦截器 const request = (url, method, query = {}, data = {}) => { const token = uni.getStorageSync('token') const userId = uni.getStorageSync('userId') || '' const username = uni.getStorageSync('username') || '' const role = uni.getStorageSync('role') || '' // 特殊情况:入库和库存调整需要 form-urlencoded 格式 const useFormData = (url.includes('/stock/in') || url.includes('/stock/adjust')) && Object.keys(data).length > 0 // GET 请求用 query 参数,其他请求有 data 时发 data,没 data 时发空对象 let requestData = {} if (method === 'GET') { requestData = query } else if (Object.keys(data).length > 0) { requestData = data } return new Promise((resolve, reject) => { uni.request({ url: BASE_URL + url, method: method, data: requestData, header: { 'Content-Type': useFormData ? 'application/x-www-form-urlencoded' : 'application/json', 'Authorization': token ? `Bearer ${token}` : '', 'X-User-Id': userId, 'X-Username': username, 'X-User-Role': role }, success: (res) => { if (res.data.code === 0) { resolve(res.data.data) } else { uni.showToast({ title: res.data.message || '请求失败', icon: 'none' }) reject(res.data) } }, fail: (err) => { uni.showToast({ title: '网络请求失败', icon: 'none' }) reject(err) } }) }) } export default { request }