Files
account/resources/mobile/utils/tool.js
2026-01-18 17:42:46 +08:00

208 lines
5.2 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.
/*
* @Descripttion: 工具集
* @version: 1.2
* @LastEditors: sakuya
* @LastEditTime: 2022年5月24日00:28:56
*/
import CryptoJS from 'crypto-js';
import sysConfig from "@/config";
const tool = {}
/* localStorage */
tool.data = {
set(key, data, datetime = 0) {
//加密
if(sysConfig.LS_ENCRYPTION == "AES"){
data = tool.crypto.AES.encrypt(JSON.stringify(data), sysConfig.LS_ENCRYPTION_key)
}
let cacheValue = {
content: data,
datetime: parseInt(datetime) === 0 ? 0 : new Date().getTime() + parseInt(datetime) * 1000
}
return uni.setStorageSync(key, JSON.stringify(cacheValue))
},
get(key) {
try {
const value = JSON.parse(uni.getStorageSync(key))
if (value) {
let nowTime = new Date().getTime()
if (nowTime > value.datetime && value.datetime != 0) {
uni.removeStorageSync(key)
return null;
}
//解密
if(sysConfig.LS_ENCRYPTION == "AES"){
value.content = JSON.parse(tool.crypto.AES.decrypt(value.content, sysConfig.LS_ENCRYPTION_key))
}
return value.content
}
return null
} catch (err) {
return null
}
},
remove(key) {
return uni.removeStorageSync(key)
},
clear() {
return uni.clearStorageSync()
}
}
/*sessionStorage - 仅在 H5 环境下可用*/
// #ifdef H5
tool.session = {
set(table, settings) {
const _set = JSON.stringify(settings)
return sessionStorage.setItem(table, _set)
},
get(table) {
const data = sessionStorage.getItem(table)
try {
return JSON.parse(data)
} catch (err) {
return null
}
},
remove(table) {
return sessionStorage.removeItem(table)
},
clear() {
return sessionStorage.clear()
}
}
/*cookie - 仅在 H5 环境下可用*/
tool.cookie = {
set(name, value, config = {}) {
const cfg = {
expires: null,
path: null,
domain: null,
secure: false,
httpOnly: false,
...config
}
let cookieStr = `${name}=${encodeURIComponent(value)}`
if (cfg.expires) {
const exp = new Date()
exp.setTime(exp.getTime() + parseInt(cfg.expires) * 1000)
cookieStr += `;expires=${exp.toUTCString()}`
}
if (cfg.path) {
cookieStr += `;path=${cfg.path}`
}
if (cfg.domain) {
cookieStr += `;domain=${cfg.domain}`
}
document.cookie = cookieStr
},
get(name) {
const arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)"))
if (arr != null) {
return decodeURIComponent(arr[2])
}
return null
},
remove(name) {
const exp = new Date()
exp.setTime(exp.getTime() - 1)
document.cookie = `${name}=;expires=${exp.toUTCString()}`
}
}
// #endif
// #ifndef H5
// 非 H5 环境下提供空实现,避免调用报错
tool.session = {
set() { console.warn('sessionStorage 仅在 H5 环境下可用') },
get() { return null },
remove() {},
clear() {}
}
tool.cookie = {
set() { console.warn('cookie 仅在 H5 环境下可用') },
get() { return null },
remove() {}
}
// #endif
/* 复制对象 */
tool.objCopy = function (obj) {
return JSON.parse(JSON.stringify(obj));
}
/* 日期格式化 */
tool.dateFormat = function (date, fmt='yyyy-MM-dd hh:mm:ss') {
date = new Date(date)
var o = {
"M+" : date.getMonth()+1, //月份
"d+" : date.getDate(), //日
"h+" : date.getHours(), //小时
"m+" : date.getMinutes(), //分
"s+" : date.getSeconds(), //秒
"q+" : Math.floor((date.getMonth()+3)/3), //季度
"S" : date.getMilliseconds() //毫秒
};
if(/(y+)/.test(fmt)) {
fmt=fmt.replace(RegExp.$1, (date.getFullYear()+"").substr(4 - RegExp.$1.length));
}
for(var k in o) {
if(new RegExp("("+ k +")").test(fmt)){
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
}
}
return fmt;
}
/* 千分符 */
tool.groupSeparator = function (num) {
num = num + '';
if(!num.includes('.')){
num += '.'
}
return num.replace(/(\d)(?=(\d{3})+\.)/g, function ($0, $1) {
return $1 + ',';
}).replace(/\.$/, '');
}
/* 常用加解密 */
tool.crypto = {
//MD5加密
MD5(data){
return CryptoJS.MD5(data).toString()
},
//BASE64加解密
BASE64: {
encrypt(data){
return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(data))
},
decrypt(cipher){
return CryptoJS.enc.Base64.parse(cipher).toString(CryptoJS.enc.Utf8)
}
},
//AES加解密
AES: {
encrypt(data, secretKey, config={}){
if(secretKey.length % 8 != 0){
console.warn("[SCUI error]: 秘钥长度需为8的倍数否则解密将会失败。")
}
const result = CryptoJS.AES.encrypt(data, CryptoJS.enc.Utf8.parse(secretKey), {
iv: CryptoJS.enc.Utf8.parse(config.iv || ""),
mode: CryptoJS.mode[config.mode || "ECB"],
padding: CryptoJS.pad[config.padding || "Pkcs7"]
})
return result.toString()
},
decrypt(cipher, secretKey, config={}){
const result = CryptoJS.AES.decrypt(cipher, CryptoJS.enc.Utf8.parse(secretKey), {
iv: CryptoJS.enc.Utf8.parse(config.iv || ""),
mode: CryptoJS.mode[config.mode || "ECB"],
padding: CryptoJS.pad[config.padding || "Pkcs7"]
})
return CryptoJS.enc.Utf8.stringify(result);
}
}
}
export default tool