cashier_wx/framework/11-api.js

256 lines
5.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import {
fill
} from "lodash"
import store from "../store"
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.data.code == 0) {
return res.data
} else {
return res.data
}
},
fill(err) {
uni.showToast({
title: err.message || err.msg,
icon: "none",
})
}
})
function requestrequest(options) {
return new Promise((resolve, reject) => {
uni.request({
...options,
success: res => {
resolve(res.data) //异步操作执行成功
// if (res.data.code == 1) {
// resolve(res.data) //异步操作执行成功
// } else {
// console.log(res,'请求的接口没有找到');
// resolve(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) {
// #ifdef MP-WEIXIN || MP-ALIPAY || APP-PLUS
uni.showLoading({
title: '加载中',
mask: true
})
// #endif
// #ifdef H5
uni.pro.showLoading({
title: '加载中',
mask: true
})
// #endif
}
if (options.type == 1) {
options.header = {
version: uni.conf.version,
type: uni.getSystemInfoSync().platform,
// #ifdef APP-PLUS
environment: 'app',
// #endif
// #ifdef H5
environment: 'h5',
// #endif
// #ifdef MP-WEIXIN
environment: 'wx',
// #endif
// #ifdef MP-ALIPAY
environment: 'alipay',
// environment: 'alipay',
// #endif
token: uni.cache.get('token'),
openId: uni.cache.get('miniAppOpenId'),
id: uni.cache.get('userInfo').id,
loginName: "",
clientType: ''
}
} else {
}
// #ifdef MP-WEIXIN || MP-ALIPAY || APP-PLUS
options.url = uni.conf.baseUrl + options.url
let res = await requestrequest(options);
// #endif
// #ifdef H5
let res = await uni.pro.request(options);
// #endif
if (res.code != 0) {
if (res.code == -4) {
// uni.showToast({
// title: res.message || res.msg,
// icon: "none",
// success: () => {
// // setTimeout(res => {
// // store.dispatch("loginEvent"); //获取shapid
// // }, 1000)
// }
// })
uni.$u.throttle(store.dispatch("loginEvent"), 1000); //获取shapid
} else if (res.code == 482) {
let nowTime = new Date() / 1000 | 0
let offset = parseInt(res.data.message) - parseInt(nowTime);
uni.cache.set('storage:offset-time', offset, -1)
return await request(options)
} else {
uni.showToast({
title: res.message || res.msg || res.error,
icon: "none",
success: () => {
setTimeout(res => {
if (options.toast) {
// #ifndef MP-WEIXIN || MP-ALIPAY
uni.pro.hideLoading()
// #endif
}
}, 2000)
}
})
return res
}
} else {
uni.hideLoading()
return res
}
} catch (err) {
uni.showToast({
title: err.message || err.msg,
icon: "none",
})
console.warn('uni.request fail [network]', options, err)
throw err;
} finally {
if (options.toast) {
setTimeout(res => {
uni.hideLoading()
}, 2000)
}
}
}
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, type = 1) {
return request({
url,
data,
toast,
type
})
}
/**
* 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', type = 1) {
return request({
url,
method,
data,
toast,
type
})
}
uni.api = {
request,
markFetch,
fetch,
get,
post
}