Files
FreeERP.Applet/miniprogram/utils/https.js
2025-11-28 16:49:36 +08:00

274 lines
6.8 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.
/**
* 全局http工具集
* YangXB 2021.11.24
* */
import { base, http } from "./config";
import { getStorage, isArray, setStorage, ToastErr } from "./util";
/**
* 请求
* @param {*} url
* @param {*} options
* @param {*} config
*/
const request = (url, options, config = { showLoading: true, showError: true }) => {
// 获取缓存cookie
const header = { ...http.header };
const cookie = getStorage(base.cookieKey);
if (cookie && !header["Cookie"]) {
header["Cookie"] = cookie;
}
if (options["content-type"]) {
header["content-type"] = options["content-type"];
}
return new Promise((resolve, reject) => {
if (config.showLoading != false) {
wx.showLoading({ title: "加载中" });
}
url = `${url}`.startsWith("http") ? url : urlAddBaseUrl(url);
wx.request({
url: url,
method: options.method,
data: options.data,
header,
success(request) {
if (config.showLoading != false) {
wx.hideLoading();
}
// 写入缓存
if (!cookie) {
setStorage(base.cookieKey, request.header["Set-Cookie"]);
}
if (request.data.err_code === 0) {
//
} else {
if (config.showError != false) {
wx.showToast({
title: request.data.err_msg,
icon: "none",
});
}
if (request.data.err_code == 110000) {
const pages = getCurrentPages();
if (
!["pages/index/index", "pages/processEntry/processEntry", "pages/my/my"].includes(
pages[pages.length - 1].route
)
) {
wx.switchTab({ url: "/pages/index/index" });
}
}
}
resolve(request.data);
},
fail(error) {
if (config.showLoading != false) {
wx.hideLoading();
}
reject({ err_code: 44444, err_msg: error.data });
},
});
});
};
// 封装get方法
export const get = (url, data = {}, config) => {
return request(url, { method: "GET", data }, config);
};
// 封装post方法
export const post = (url, data = {}, config) => {
return request(url, { method: "POST", data }, config);
};
export const wxLogin = (config) => {
wx.login({
success: (res) => {
post("Applet/code2Sess", { code: res.code, name: "ch" }, config)
.then((res) => {
// 记录sessionKey
setStorage("session", {
openid: res.openid,
unionid: res.unionid,
time: Date.now() + 1000 * 3600 * 24, // 缓存一天过期
});
})
.catch((err) => {
ToastErr("服务失败:" + err.err_code);
});
},
});
};
// 检验微信前端登录状态
export const checkSession = () => {
wx.checkSession({
// 没有过期
success: () => {
// const session = wx.getStorageSync("session");
// console.log("checkSession生效", session);
// // 没有缓存,或者缓存已过期
// if (!session) {
// console.log("session缓存已不存在");
// wxLogin();
// } else {
// const time = session.time || 0;
// if (Date.now() > time) {
// console.log("session缓存已过期");
// wxLogin();
// }
// }
},
fail: () => {
console.log("checkSession失效");
// 已过期重新登录获取session_key
wxLogin();
},
});
};
export const loginStatus = () => {
return new Promise((resolve, reject) => {
post("Applet/loginStatus", {}, { showLoading: false })
.then((res) => {
setStorage("user_info", res.user_info);
setStorage("company_info", res.company_info);
setStorage("auth_info", res.auth_info);
setStorage("session_id", res.session_id);
resolve(res);
})
.catch((err) => {
login("", "", 4)
.then((res) => {
if (isArray(res.data)) {
post("Applet/loginOut").then((res) => {
checkSesskey({ showLoading: false, showError: false })
.then((res) => {})
.catch((err) => {
console.log("checkSesskey", err);
});
});
reject(res);
} else {
resolve(res);
}
})
.catch(() => {
reject(err);
});
});
});
};
/**
*
* @param {*} config { showLoading: true, showError: true }
*/
export const checkSesskey = (config) => {
return new Promise((resolve, reject) => {
post("Applet/checkSesskey", {}, config)
.then((res) => {
resolve(res);
})
.catch((err) => {
wxLogin(config);
reject(err);
});
});
};
// 后端登录
export const login = (encryptedData, iv, type, company_id) => {
return new Promise((resolve, reject) => {
const data = {
type: 2,
encryptedData,
iv,
};
if (company_id) {
data.companyID = company_id;
}
post("Applet/login", type == 4 ? { type } : data)
.then((res) => {
if (isArray(res.data)) {
resolve(res);
} else {
setStorage("user_info", res.user_info);
setStorage("company_info", res.companys_info);
setStorage("auth_info", res.auth_info);
loginStatus();
resolve(res);
}
})
.catch((err) => {
// 签名失败,重新登录
// if (err.err_code == 41444) {
// wxLogin();
// showModal("登录结果", "服务器开小差了,请重试");
// } else {
// showModal("登录结果", err.err_msg);
// }
// wx.removeStorageSync("loginExp");
if (type == 4) {
checkSesskey()
.then(() => {
resolve(res);
})
.catch(() => {
reject(err);
});
} else {
reject(err);
}
});
});
};
export const makeURL = (url, redirect = false, openID = false) => {
return (
base.apiHost +
(redirect ? "applet-wv?url=" : "") +
encodeURIComponent(url + (openID ? "?openID=" + wx.getStorageSync("session")["openid"] : "")) +
(redirect ? "&" : "?") +
"cookie=" +
encodeURI(wx.getStorageSync(base.cookieKey))
);
};
export const urlAddBaseUrl = (url) => {
if (typeof url == "string") {
if (url.startsWith("/")) {
url = url.substring(1);
}
}
return base.apiHost + url;
};
export const urlAddWebViewBaseUrl = (url) => {
if (typeof url == "string") {
if (url.startsWith("/")) {
url = url.substring(1);
}
}
return base.webViewBaseUrl + url;
};
/** formData请求 */
export const formDataRequest = (url, formData, config) => {
let data = formData.getData();
return request(
url,
{
method: "POST",
data: data.buffer,
"content-type": data.contentType,
},
config
);
};