144 lines
3.6 KiB
JavaScript
144 lines
3.6 KiB
JavaScript
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/login?mode=pwd'
|
||
})
|
||
}, 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
|
||
}, {})
|
||
}
|