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

325 lines
8.4 KiB
JavaScript

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import {
go,
back,
showModal,
setStorageSync,
getStorageSync,
loading,
} from "./traoAPI";
import { WCUserLogin } from "./Interface";
import Taro from "@tarojs/taro";
import formdata from "./wxFormdata/formData";
import store from "../store";
import { tokenRefresh } from "../store/features/userInfo";
const global = store.getState().globalStore;
const global_requestUrlList = []; // 全局正在请求的url地址防止多次点击
// api调用失败重试次数
let api_retry_count = 0;
export const Ajax = (params) => {
const app = Taro.getApp();
const domain = global.domain;
// Taro.showLoading({
// title: "请求中...",
// mask: true,
// });
const whiteListLoading = [""]; // loading
// 防止多次点击
const requestUrlList = global_requestUrlList;
const whiteList = []; // 白名单:不自动重新请求
if (
requestUrlList.indexOf(params.url) > -1 &&
whiteList.indexOf(params.url) < 0
) {
return;
} else {
requestUrlList.push(params.url);
}
return new Promise((reslove, reject) => {
let token = getStorageSync("token");
Taro.request({
url: domain + params.url,
method: params.method || "GET",
header: {
Authorization: "Bearer " + token,
...params.header,
},
data: params.data,
success(res) {
console.log("res", res);
if (res.data.code == 401 || res.data.code == 403) {
// 自动重新登录
Taro.removeStorageSync("token");
loginReload(params);
return;
}
if (res.statusCode !== 200) {
Taro.showModal({
title: "提示",
content: String("错误码:" + res.statusCode),
showCancel: false,
});
return false;
}
if (res.data.code === 500) {
let msg =
typeof res.data.msg == "string"
? res.data.msg
: "系统异常,请联系管理人员";
if (msg == "请不要操作太快哦") {
reject(res);
return false;
}
Taro.showModal({
title: "提示",
content: String(res.data.msg),
showCancel: false,
});
// reject(res);
return false;
}
if (requestUrlList.length > 0) {
requestUrlList.splice(requestUrlList.indexOf(params.url), 1);
}
reslove(res);
},
fail(err) {
console.log(err);
go("/pages/errorpage/errorpage");
// Taro.showModal({
// title: "提示",
// content: "请检查网络是否连接",
// showCancel: false,
// });
},
complete() {
if (requestUrlList.length === 0) {
Taro.hideLoading();
}
// const requestUrlList = global_requestUrlList;
// const newRequestUrlList = requestUrlList.splice(
// requestUrlList.indexOf(params.url),
// 1
// );
},
});
});
};
export const AjaxUploadFile = (params, formData) => {
const app = Taro.getApp();
const domain = global.domain;
Taro.showLoading({
title: "请求中...",
mask: true,
});
return new Promise((reslove, reject) => {
let token = getStorageSync("token");
Taro.uploadFile({
filePath: params.filePath, // 上传文件地址
name: params.name || "file", // 上传文件字段
url: domain + params.url,
formData: {
...formData,
},
header: {
Authorization: "Bearer " + token,
...params.header,
},
success(res) {
let o = JSON.parse(res.data);
if (res.statusCode !== 200) {
Taro.showModal({
title: "提示",
content: "上传出错",
showCancel: false,
});
return false;
}
if (o.code !== 200) {
let msg =
typeof o.msg == "string" ? o.msg : "系统异常,请联系管理人员";
Taro.showModal({
title: "提示",
content: msg,
showCancel: false,
});
return false;
}
reslove(o);
},
fail() {
go("/pages/errorpage/errorpage");
// Taro.showModal({
// title: "提示",
// content: "请检查网络是否连接",
// showCancel: false,
// });
},
complete() {
Taro.hideLoading();
},
});
});
};
export const AjaxFormData = (params) => {
const app = Taro.getApp();
const domain = global.domain;
// 防止多次点击
const requestUrlList = global_requestUrlList;
const whiteList = ["/Api/MessageList"];
if (
requestUrlList.indexOf(params.url) > -1 &&
whiteList.indexOf(params.url) < 0
) {
return;
} else {
requestUrlList.push(params.url);
}
return new Promise((reslove, reject) => {
let token = getStorageSync("token");
Taro.request({
url: domain + params.url,
method: params.method || "GET",
header: {
Authorization: "Bearer " + token,
...params.header,
"content-type": params.data.contentType,
},
data: params.data.buffer,
success(res) {
if (res.data.code == 401 || res.data.code == 403) {
// 自动重新登录
Taro.removeStorageSync("token");
loginReload(params);
return;
}
if (res.statusCode !== 200) {
Taro.showModal({
t2: String("错误码:" + res.statusCode),
showCancel: false,
});
return false;
}
if (res.data.code !== 200) {
let msg =
typeof res.data.msg == "string"
? res.data.msg
: "系统异常,请联系管理人员";
if (msg == "请不要操作太快哦") {
reject(res);
return false;
}
const noTipsCodes = [5001, 5002, 5003];
if (noTipsCodes.indexOf(res.data.code) == -1) {
Taro.showModal({
title: "提示",
content: msg,
showCancel: false,
}).then(() => {
reject(res);
if (
res.data.code == 401 ||
res.data.code == 403 ||
res.data.msg === "登录状态已过期"
) {
// 自动重新登录
Taro.removeStorageSync("token");
loginReload(params);
return;
}
});
} else {
reject(res);
}
return false;
}
reslove(res);
},
fail(err) {
console.log(err);
go("/pages/errorpage/errorpage");
// Taro.showModal({
// title: "提示",
// content: "请检查网络是否连接",
// showCancel: false,
// });
},
complete() {
// Taro.hideLoading();
const requestUrlList = global_requestUrlList;
const newRequestUrlList = requestUrlList.splice(
requestUrlList.indexOf(params.url),
1
);
},
});
});
};
// 自动重新登录后,重新发起上一个请求
const AjaxReloadAPI = async (_params) => {
if (api_retry_count === 0) {
Ajax(_params);
}
if (api_retry_count < 3) {
api_retry_count = api_retry_count + 1;
Ajax(_params);
} else {
api_retry_count = 0; // 清空重新调用次数,
Taro.showModal({
title: "提示",
content: "接口请求失败,请联系管理员",
showCancel: false,
}).then((res) => {});
}
};
// 重新登陆后,发起上一个请求
const loginReload = async (_params) => {
Taro.showLoading({
title: "请求中...",
mask: true,
});
const { code } = await Taro.login();
const { data } = await Ajax({
// url: "/wx/user/login",
url: "/user/login?code=" + code,
data: { code: code },
method: "POST",
});
Taro.hideLoading();
if (data.code === 200) {
setStorageSync("isWelcome", true);
setStorageSync("mobile", data.data.mobile);
store.dispatch(tokenRefresh(data.data));
Ajax(_params);
} else {
Taro.showModal({
title: "提示",
content: "登录已过期,请重新登录",
showCancel: false,
}).then((res) => {
Taro.removeStorageSync("token");
Taro.clearStorage(); // 清空所有缓存
Taro.navigateTo({
url: "/pages/initiate/initiate",
});
});
}
};