import baseUrl from './BaseUrl.js' export default function request(url, data = {}, method = 'GET') { return new Promise((resolve, reject) => { // uni.showLoading({ // title: '请求中...', // mask: true // }) uni.request({ url: baseUrl + url, data: data, method: method, timeout: 15000, header: { Authorization: 'Bearer ' + (uni.getStorageSync('token') || ''), clientid: 'butler', 'content-type': 'application/json' }, success: res => { // uni.hideLoading() // HTTP 失败 if (res.statusCode !== 200) { reject({ msg: `请求异常 ${res.statusCode}`, code: res.statusCode }) return } const resData = res.data || {} // token 过期 if (resData.code === 401) { uni.showToast({ title: '登录过期,请重新登录', icon: 'none' }) clearAccountStorage() setTimeout(() => { uni.reLaunch({ url: '/pageSubPack/loginSub/pwd-login' }) }, 1500) reject({ msg: '登录过期', code: 401 }) return } // 成功 if (resData.code === 200) { resolve(resData) } // 业务失败 else { reject({ msg: resData.msg || '请求失败', code: resData.code, data: resData }) } }, fail: err => { // uni.hideLoading() reject({ msg: '网络异常', code: -1, raw: err }) } }) }) } export const get = (url, data) => request(url, data, 'GET') export const post = (url, data) => request(url, data, 'POST') export const put = (url, data) => request(url, data, 'PUT') // export const deleteMethod = (url, data) => request(url, data, 'DELETE'); // export const putMethod = (url, data) => request(url, data, 'PUT'); // 上传 export const upload = (filePath, url, fileName) => { return new Promise((resolve, reject) => { const uploadTask = uni.uploadFile({ url: baseUrl + url, filePath: filePath, name: 'file', fileName: fileName, header: { Authorization: 'Bearer ' + (uni.getStorageSync('token') || ''), clientid: 'butler' }, success: res => { try { const data = JSON.parse(res.data) resolve(data.data || '') } catch (e) { resolve('') } }, fail: err => { reject(err) } }) }) } /** * 过滤请求参数:移除值为 null / undefined / 空字符串 的字段 * 用于避免将空参数拼接到 URL 或请求体中 * @param {Object|null|undefined} params - 原始请求参数 * @returns {Object} 过滤后的干净参数对象,只保留有效值 */ /** * 清除账号相关缓存(退出登录/切换账号/登录过期时调用) * 只清除账号绑定的 key,保留设备级和应用级 key(如 push_cid、hasShowGuide、rememberPwd 等) */ export function clearAccountStorage() { const keys = [ 'token', 'userId', 'userPermission', 'currentVillage', 'currentVillageId', 'home_banner_cache', 'tempChangePwdParams' ] keys.forEach(key => uni.removeStorageSync(key)) } export function filterParams(params) { if (!params) return {} return Object.keys(params).reduce((acc, key) => { const value = params[key] if (value !== null && value !== undefined && value !== '') { acc[key] = value } return acc }, {}) }