mirror of
https://gitee.com/lab1024/smart-admin.git
synced 2025-11-14 06:33:47 +08:00
smart-app alpha 版本
This commit is contained in:
87
smart-app/src/lib/encrypt.js
Normal file
87
smart-app/src/lib/encrypt.js
Normal file
@@ -0,0 +1,87 @@
|
||||
import CryptoJS from 'crypto-js';
|
||||
import CryptoSM from 'sm-crypto';
|
||||
|
||||
function object2string(data) {
|
||||
if (typeof data === 'Object') {
|
||||
return JSON.stringify(data);
|
||||
}
|
||||
|
||||
let str = JSON.stringify(data);
|
||||
if (str.startsWith("'") || str.startsWith('"')) {
|
||||
str = str.substring(1);
|
||||
}
|
||||
if (str.endsWith("'") || str.endsWith('"')) {
|
||||
str = str.substring(0, str.length - 1);
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
// ----------------------- AES 加密、解密 -----------------------
|
||||
const AES_KEY = '1024abcd1024abcd1024abcd1024abcd';
|
||||
|
||||
const AES = {
|
||||
encryptData: function (data) {
|
||||
// AES 加密 并转为 base64
|
||||
let utf8Data = CryptoJS.enc.Utf8.parse(object2string(data));
|
||||
const key = CryptoJS.enc.Utf8.parse(AES_KEY);
|
||||
const encrypted = CryptoJS.AES.encrypt(utf8Data, key, {
|
||||
mode: CryptoJS.mode.ECB,
|
||||
padding: CryptoJS.pad.Pkcs7,
|
||||
});
|
||||
|
||||
return encrypted.toString();
|
||||
},
|
||||
|
||||
decryptData: function (data) {
|
||||
// 第一步:Base64 解码
|
||||
let words = CryptoJS.enc.Base64.parse(data);
|
||||
|
||||
// 第二步:AES 解密
|
||||
const key = CryptoJS.enc.Utf8.parse(AES_KEY);
|
||||
return CryptoJS.AES.decrypt({ ciphertext: words }, key, {
|
||||
mode: CryptoJS.mode.ECB,
|
||||
padding: CryptoJS.pad.Pkcs7,
|
||||
}).toString(CryptoJS.enc.Utf8);
|
||||
},
|
||||
};
|
||||
|
||||
// ----------------------- 国密SM4算法 加密、解密 -----------------------
|
||||
const SM4_KEY = '1024abcd1024abcd1024abcd1024abcd';
|
||||
|
||||
const SM4 = {
|
||||
encryptData: function (data) {
|
||||
// 第一步:SM4 加密
|
||||
let encryptData = CryptoSM.sm4.encrypt(object2string(data), SM4_KEY);
|
||||
// 第二步: Base64 编码
|
||||
return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(encryptData));
|
||||
},
|
||||
|
||||
decryptData: function (data) {
|
||||
// 第一步:Base64 解码
|
||||
let words = CryptoJS.enc.Base64.parse(data);
|
||||
let decode64Str = CryptoJS.enc.Utf8.stringify(words);
|
||||
|
||||
// 第二步:SM4 解密
|
||||
return CryptoSM.sm4.decrypt(decode64Str, SM4_KEY);
|
||||
},
|
||||
};
|
||||
|
||||
// ----------------------- 对外暴露: 加密、解密 -----------------------
|
||||
|
||||
// 默认使用SM4算法
|
||||
const EncryptObject = SM4;
|
||||
// const EncryptObject = AES;
|
||||
|
||||
/**
|
||||
* 加密
|
||||
*/
|
||||
export const encryptData = function (data) {
|
||||
return !data ? null : EncryptObject.encryptData(data);
|
||||
};
|
||||
|
||||
/**
|
||||
* 解密
|
||||
*/
|
||||
export const decryptData = function (data) {
|
||||
return !data ? null : EncryptObject.decryptData(data);
|
||||
};
|
||||
96
smart-app/src/lib/smart-request.js
Normal file
96
smart-app/src/lib/smart-request.js
Normal file
@@ -0,0 +1,96 @@
|
||||
/*
|
||||
* ajax请求
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-06 20:46:03
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
import { USER_TOKEN } from '/@/constants/local-storage-key-const';
|
||||
import { DATA_TYPE_ENUM } from '/@/constants/common-const';
|
||||
import { decryptData, encryptData } from './encrypt';
|
||||
import { useUserStore } from '/@/store/modules/system/user';
|
||||
|
||||
const baseUrl = import.meta.env.VITE_APP_API_URL;
|
||||
|
||||
function getUserToken() {
|
||||
let token = uni.getStorageSync(USER_TOKEN);
|
||||
if (token) {
|
||||
return token;
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* 通用请求封装
|
||||
*/
|
||||
export const request = function (url, method, data) {
|
||||
return new Promise((resolve, reject) => {
|
||||
uni.request({
|
||||
url: baseUrl + url, //拼接请求路径
|
||||
data: data,
|
||||
method: method,
|
||||
header: {
|
||||
'x-access-token': getUserToken(),
|
||||
},
|
||||
success: (response) => {
|
||||
// 如果是加密数据
|
||||
if (response.data.dataType === DATA_TYPE_ENUM.ENCRYPT.value) {
|
||||
response.data.encryptData = response.data.data;
|
||||
let decryptStr = decryptData(response.data.data);
|
||||
if (decryptStr) {
|
||||
response.data.data = JSON.parse(decryptStr);
|
||||
}
|
||||
}
|
||||
|
||||
const res = response.data;
|
||||
if (res.code && res.code !== 1) {
|
||||
// `token` 过期或者账号已在别处登录
|
||||
if (res.code === 30007 || res.code === 30008 || res.code === 30012) {
|
||||
uni.showToast({
|
||||
title: res.msg,
|
||||
icon: 'none',
|
||||
});
|
||||
useUserStore().clearUserLoginInfo();
|
||||
uni.navigateTo({ url: '/pages/login/login' });
|
||||
}
|
||||
|
||||
uni.showToast({
|
||||
title: res.msg,
|
||||
icon: 'none',
|
||||
});
|
||||
reject(response);
|
||||
} else {
|
||||
resolve(res);
|
||||
}
|
||||
},
|
||||
fail: (error) => {
|
||||
reject(error);
|
||||
},
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* get请求
|
||||
*/
|
||||
export const getRequest = (url) => {
|
||||
return request(url, 'GET');
|
||||
};
|
||||
|
||||
/**
|
||||
* post请求
|
||||
*/
|
||||
export const postRequest = (url, data) => {
|
||||
return request(url, 'POST', data);
|
||||
};
|
||||
|
||||
// ================================= 加密 =================================
|
||||
|
||||
/**
|
||||
* 加密请求参数的post请求
|
||||
*/
|
||||
export const postEncryptRequest = (url, data) => {
|
||||
return request(url, 'POST', { encryptData: encryptData(data) });
|
||||
};
|
||||
22
smart-app/src/lib/smart-sentry.js
Normal file
22
smart-app/src/lib/smart-sentry.js
Normal file
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
* 错误上报sentry
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2024-01-02 20:49:28
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
|
||||
export const smartSentry = {
|
||||
/**
|
||||
* sentry 主动上报
|
||||
*/
|
||||
captureError: (error) => {
|
||||
if (error.config && error.data && error && error.headers && error.request && error.status) {
|
||||
return;
|
||||
}
|
||||
// Sentry.captureException(error);
|
||||
console.error(error);
|
||||
},
|
||||
};
|
||||
30
smart-app/src/lib/smart-support.js
Normal file
30
smart-app/src/lib/smart-support.js
Normal file
@@ -0,0 +1,30 @@
|
||||
export const SmartLoading = {
|
||||
show: function (msg) {
|
||||
uni.showLoading({ title: msg ? msg : '加载中' });
|
||||
},
|
||||
|
||||
hide: function () {
|
||||
uni.hideLoading();
|
||||
},
|
||||
};
|
||||
|
||||
export const SmartToast = {
|
||||
success: (message) => {
|
||||
uni.showToast({
|
||||
title: message,
|
||||
icon: 'success',
|
||||
});
|
||||
},
|
||||
error: (message) => {
|
||||
uni.showToast({
|
||||
title: message,
|
||||
icon: 'error',
|
||||
});
|
||||
},
|
||||
toast: (message) => {
|
||||
uni.showToast({
|
||||
title: message,
|
||||
icon: 'none',
|
||||
});
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user