This commit is contained in:
魏啾
2024-04-30 18:07:59 +08:00
parent b72c4d7af1
commit 56863dd624
1369 changed files with 156460 additions and 0 deletions

214
framework/11-api.js Normal file
View File

@@ -0,0 +1,214 @@
const preCacheKeyClearFetch = 'storage:clear:fetch:'
uni.pro.interceptor('request', {
config(paramOptions) {
let options = Object.assign({}, paramOptions)
options.url = uni.conf.baseUrl + paramOptions.url
this.options = options
return options
},
success(res) {
if (res.code >= 400) {
return res.data
} else {
return res.data
}
}
})
async function request(options) {
let networkType = ''
uni.getNetworkType({
success: (res) => {
networkType = res.networkType
}
});
if (networkType == 'none') {
uni.showToast({
title: '网络异常,请检查网络',
icon: 'none'
})
return false;
}
try {
if (options.toast) {
uni.pro.showLoading({
title: '加载中',
mask: true
})
}
const system = uni.getSystemInfoSync();
const platformInfo = {
'ios': 2,
'android': 1
}
options.header = {
type: platformInfo[system.platform],
userId: uni.getStorageSync('userId'),
token: uni.getStorageSync('token'),
myLoginName: uni.getStorageSync('myLoginName'),
version: uni.conf.version,
'content-type': 'application/json'
}
let res = await uni.pro.request(options)
if (res.code >= 400) {
if (options.toast) {
uni.showToast({
title: res.message || res.msg,
icon: "none",
success() {
setTimeout(res => {
// if (options.toast) {
uni.hideLoading()
// }
}, 2000)
}
})
}
if (res.code == 400) {
return Promise.reject(res.message)
} else if (res.code == 401) {
uni.showToast({
title: res.message || res.msg,
icon: "none",
success: () => {
uni.cache.clear();
uni.removeStorageSync("token");
uni.removeStorageSync("userId");
uni.removeStorageSync('myLoginName')
uni.pro.redirectTo("login/login");
}
})
} else if (res.code == 482) {
let nowTime = new Date() / 1000 | 0
let offset = parseInt(res.message) - parseInt(nowTime);
uni.cache.set('storage:offset-time', offset, -1)
return await request(options)
} else if (res.code == 422) {
return Promise.reject(res.message)
}
} else {
console.log(res)
// if (options.toast) {
// uni.showToast({
// title: res.message || res.msg,
// icon: "none",
// success: () => {
// setTimeout(res => {
// if (options.toast) {
// // #ifdef MP-WEIXIN
// uni.hideLoading()
// // #endif
// // #ifndef MP-WEIXIN
// uni.pro.hideLoading()
// // #endif
// }
// },2000)
// }
// })
// }
return res
}
} catch (err) {
console.warn('uni.request fail [network]', options, err)
throw err;
} finally {
if (options.toast) {
uni.pro.hideLoading()
}
}
}
function isExpire(url) {
return uni.cache.get(preCacheKeyClearFetch + url)
}
/**
* 标记fetch过期会重新请求
* @author NanQi
* @param {String} url 标记的URL
*/
function markFetch(url) {
uni.cache.set(preCacheKeyClearFetch + url, true)
}
/**
* 拉取数据(get请求,带缓存)
* @author NanQi
* @param {String} url 请求的URL
* @param {Object} data 请求参数
* @param {Boolean} toast 是否显示toast
* @param {Number} expire 缓存过期时间(秒)
* @return {Promise} Promise对象
*/
async function fetch(url, data, toast = true, expire = uni.conf.default_expire) {
let param = ''
if (data) {
param += ':' + uni.utils.md5(uni.utils.sortTransform(data));
}
const cacheKey = 'memory:fetch:' + url + param;
const cacheVal = uni.cache.get(cacheKey);
if (!isExpire(url) && cacheVal) {
return Promise.resolve(cacheVal);
} else {
if (isExpire(url)) {
uni.cache.remove(preCacheKeyClearFetch + url)
}
try {
const res = await get(url, data, toast);
uni.cache.remove(cacheKey);
uni.cache.set(cacheKey, res, expire);
return res;
} catch (err) {
const res = uni.cache.getStorageData(cacheKey);
if (res) {
return Promise.resolve(res);
} else {
throw err;
}
}
}
}
/**
* 获取数据(get请求,不带缓存)
* @author NanQi
* @param {String} url 请求的URL
* @param {Object} data 请求参数
* @param {Boolean} toast 是否显示toast
* @return {Promise} Promise对象
*/
function get(url, data, toast = true) {
return request({
url,
data,
toast
})
}
/**
* post请求
* @author NanQi
* @param {String} url 请求的URL
* @param {Object} data 请求参数
* @param {Boolean} toast 是否显示toast
* @param {String} method 请求方式,默认POST
* @return {Promise} Promise对象
*/
function post(url, data, toast = true, method = 'POST') {
return request({
url,
method,
data,
toast
})
}
uni.api = {
request,
markFetch,
fetch,
get,
post
}