siteFront/utils/request.js

124 lines
4.1 KiB
JavaScript
Raw Permalink Normal View History

2024-11-05 10:09:18 +08:00
import config from "@/config/config.js";
import CryptoJS from "crypto-js";
// 带 Token 请求
const httpTokenRequest = (opts) => {
uni.onNetworkStatusChange(function(res) {
if (!res.isConnected) {
uni.showToast({
title: '网络连接不可用!',
icon: 'none'
});
}
return false
});
let keyStr = randomString(32,'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
let ivStr = '8Z2wMy7amABbqsRC';
let str = keyStr +'/' + new Date().getTime();
let token = encrypt(str, keyStr, ivStr)
if (token === '' || token === undefined) {
uni.reLaunch({
url: '/pages/login/index'
});
} else {
let httpDefaultOpts = {
url: config.baseUrl + opts.url,
data: opts.data,
method: opts.method || 'GET',
header: opts.method === 'get' ? {
'tenantId':2,
'key':keyStr,
'X-Access-Token': token,
'X-Requested-With': 'XMLHttpRequest',
"Accept": "application/json",
"Content-Type": "application/json; charset=UTF-8"
} : {
'tenantId':2,
'key':keyStr,
'X-Access-Token': token,
'X-Requested-With': 'XMLHttpRequest',
'Content-Type': 'application/json; charset=UTF-8'
},
dataType: 'json',
}
let promise = new Promise(function(resolve, reject) {
uni.request(httpDefaultOpts).then(
(res) => {
if (res.statusCode == 200) {
//默认api接口正常返回0不正常返回1并给出错误提示
if (res.data.code == 0) {
resolve(res)
}else{
resolve(res)
uni.showToast({
icon:'none',
title:res.data.message
})
}
} else {
if (res.statusCode == 401) {
uni.showModal({
title: '提示',
content: '无权访问',
success: function (res) {
if (res.confirm) {
uni.reLaunch({
url: '/pages/login/index'
});
uni.clearStorageSync();
}
}
});
uni.clearStorageSync();
} else {
resolve(res)
}
}
}
).catch(
(response) => {
reject(response)
}
)
})
return promise
}
};
/**
* 随机字符串
* @param length
* @param chars
* @returns {string}
*/
const randomString = (length, chars) => {
var result = '';
for (var i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)];
return result;
}
/**
* 加密
* @param str
* @param keyStr
* @param ivStr
* @returns {*}
*/
const encrypt = (str, keyStr, ivStr) => {
const data = JSON.stringify(str);
const key = CryptoJS.enc.Utf8.parse(keyStr); // 密钥key 后台提供 - cbc模式 32位字符
const iv = CryptoJS.enc.Utf8.parse(ivStr); // iv 后台提供 - cbc模式 16位字符
const encryptedData = CryptoJS.AES.encrypt(data, key, {
iv,
mode: CryptoJS.mode.CBC, // 使用 CBC 模式
padding: CryptoJS.pad.Pkcs7, // 使用 PKCS7 填充
}).toString(); // 执行加密操作
return encryptedData;
}
// 导出去
export default httpTokenRequest;