124 lines
4.1 KiB
JavaScript
124 lines
4.1 KiB
JavaScript
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;
|