You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

330 lines
9.4 KiB

import app from "@/app.js"
import Cache from "../cache.js"
let settings = {
method: "get", // 默认请求方法
contentType: "application/json", // 传参格式
dataType: "json", // 返回值类型
baseUrl: app.baseUrl + '/api/app', // 请求根地址
}
let loadNum = 0; //加载框的数量
let loadingShow = () => {
loadNum++
uni.showLoading({
title: 'loading...'
});
}
let loadingHide = () => {
loadNum--
if (loadNum <= 0) {
uni.hideLoading();
}
}
function x(options = null) {
// 返回当前实例对象 无需手动return
return new x.fn.init(options);
}
x.fn = x.prototype = {
constructor: x,
config(options) {
// 解构并设置默认值
let {
baseUrl,
url,
data,
method,
contentType,
dataType
} = options;
// 请求头参数 写入token和language
let auth = null;
if (uni.getStorageSync('token')) {
auth = uni.getStorageSync('token');
}
let lang=uni.getStorageSync('language')
const header = auth ? {
'X-Requested-With': 'XMLHttpRequest',
lang: lang || 'en',
authorization: `bearer ${auth}`,
'content-type': 'application/x-www-form-urlencoded'
} : {
'X-Requested-With': 'XMLHttpRequest',
lang: lang || 'en',
'content-type': 'application/x-www-form-urlencoded'
};
this.header = header;
// 请求地址解析
if (url.startsWith('http')) { // 外部链接
this.url = url;
} else { // 本地相对路径
this.url = baseUrl + url;
}
if (data) this.data = data;
if (method) this.method = method;
if (contentType) this.contentType = contentType;
if (dataType) this.dataType = dataType;
},
init(options) {
// 将用户参数 写入配置信息
this.config(Object.assign(settings, options));
let { config = {} } = options
return new Promise((resolve, reject) => {
let reg=new RegExp('/','g')//g代表全部
let newMsg=options.url.replace(reg,'_');
// console.info(newMsg)
if(Cache.get(newMsg).data){
if(newMsg!='_user_walletImage'&& newMsg!='_user_getAuthInfo' && newMsg!='_user_withdrawalBalance'
&& newMsg!='_article_detail' && newMsg!='_contract_getSymbolDetail' && newMsg!='_categoryList' && newMsg!='_articleList'
&& newMsg!='_user_wdcode' && newMsg!='_register_Graph_che' && newMsg!='_register_sendEmailCode'
&& newMsg!='_exchange_storeEntrust' && newMsg!='_contract_holdPosition'
&& newMsg!='_college' && newMsg!='_exchange_getCoinInfo' && newMsg!='_user_primaryAuth' && newMsg!='_exchange_getCurrentEntrust'
&& newMsg!='_wallet_getBalance' && newMsg!='_contract_getMarketInfo'&& newMsg!='_contract_openNum'){
// resolve(Cache.get(newMsg).data);//获取缓存中的数据
}
uni.request({
url: this.url,
data: this.data,
method: this.method,
header: this.header,
dataType: this.dataType,
sslVerify: false,
success: (res) => {
// console.info(res)
let message = res.data.message
let code = res.data.code
if (code != 200) {
switch (code) {
case 1003: // 登陆失效 清除状态 重新登陆
// 清除session
uni.removeStorageSync('token');
uni.redirectTo({
url: "/pages/login/index",
});
break;
case 1021:
resolve(res.data);
break;
case 4001:
resolve(res.data);
break;
default:
reject(message);
break;
}
if (config.toast !== false&&message) {
uni.showToast({
title: message,
duration: 2000,
icon: 'none'
});
}
} else {
// console.info(Cache.set(newMsg,res.data))
Cache.set(newMsg,res.data);
// console.info(res.data)
resolve(res.data); // 直接返回数据
if (config.toast&&message) {
uni.showToast({
title: message,
duration: 2000,
icon: 'none'
});
}
}
},
fail: (err) => {
// console.log(err)
reject(err)
if (config.toast !== false) {
// uni.showToast({
// title: 'error reload!',
// icon: "none"
// });
}
if (err) {
throw new Error();
}
},
complete: (er) => {
// console.log()
reject(er)
}
})
}else{
// 提示状态
if (config.loading) {
loadingShow()
}
uni.request({
url: this.url,
data: this.data,
method: this.method,
header: this.header,
dataType: this.dataType,
sslVerify: false,
success: (res) => {
let message = res.data.message
let code = res.data.code
if (code != 200) {
switch (code) {
case 1003: // 登陆失效 清除状态 重新登陆
// 清除session
uni.removeStorageSync('token');
uni.redirectTo({
url: "/pages/login/index",
});
break;
case 1021:
resolve(res.data);
break;
case 4001:
resolve(res.data);
break;
default:
reject(message);
break;
}
if (config.toast !== false&&message) {
uni.showToast({
title: message,
duration: 2000,
icon: 'none'
});
}
} else {
Cache.set(newMsg,res.data);
resolve(Cache.get(newMsg).data); // 直接返回数据
if (config.toast&&message) {
uni.showToast({
title: message,
duration: 2000,
icon: 'none'
});
}
}
},
fail: (err) => {
reject(err)
if (config.toast !== false) {
uni.showToast({
title: 'error reload!',
icon: "none"
});
}
if (err) {
throw new Error();
}
},
complete: () => {
loadingHide()
}
})
}
})
},
// 使用promise封装同步化的确认框
confirmSync(content, fullfilled, rejected = null) {
let showCancel = false;
if (rejected instanceof Function) {
showCancel = true;
}
return new Promise(function (resolve, reject) {
uni.showModal({
content,
showCancel,
success(res) { // confirm or cancel
if (res.confirm) {
resolve(fullfilled()); // 执行动作 需要返回值 则标记到resolve中
} else if (res.cancel && rejected) {
reject(rejected()); // 执行动作 需要返回值 则标记到reject中
}
}
})
})
},
get(url, data = null, config = {}) {
return x({
method: "get",
url,
data,
config
})
},
post(url, data, config = {}) {
return x({
method: "post",
url,
data,
config
})
},
// data 为uni的chooseImage
uploadFile(url, data, config = {}) {
let auth = null;
if (uni.getStorageSync('token')) {
auth = uni.getStorageSync('token');
}
let lang=uni.getStorageSync('language')
let header = {
'X-Requested-With': 'XMLHttpRequest',
lang: lang || "en",
}
if (auth) header.authorization = `bearer ${auth}`;
if (config.loading !== false) {
loadingShow()
}
return new Promise((resolve, reject) => {
uni.uploadFile({
url: settings.baseUrl + url, //仅为示例,非真实的接口地址
filePath: data.tempFilePaths[0],
name: 'image',
formData: {},
sslVerify: false,
header,
success: (res) => {
resolve(JSON.parse(res.data))
},
fail: () => {
reject()
},
complete: () => {
loadingHide()
}
});
})
},
head() {
},
put() {
},
// ...
}
x.fn.init.prototype = x.fn, x.extend = x.fn.extend = function (obj, prop) {
if (!prop) { //如果未设置prop 则表示给this扩展一个对象的内容
prop = obj;
obj = this;
}
for (var i in prop) obj[i] = prop[i];
}, x.extend(x.fn);
export default x;