x-php-Admin/src/utils/tool.js

229 lines
6.9 KiB
JavaScript
Raw Normal View History

2023-06-07 10:48:30 +00:00
/*
* @Descripttion: 工具集
*/
import CryptoJS from 'crypto-js';
import sysConfig from "@/config";
2023-07-07 00:33:06 +00:00
import store from '@/store'
2023-06-07 10:48:30 +00:00
const tool = {}
2023-07-07 00:33:06 +00:00
/* store */
tool.store = {
set(key, data) {
2023-07-29 08:42:26 +00:00
return store.commit('setCache', {
key: key,
value: data
});
2023-07-07 00:33:06 +00:00
},
get(key) {
2023-07-07 04:35:25 +00:00
if (!Object.prototype.hasOwnProperty.call(store.state.cache.cacheList, key)) {
store.state.cache.cacheList[key] = null;
2023-07-07 00:33:06 +00:00
}
2023-07-07 04:35:25 +00:00
return store.state.cache.cacheList[key];
2023-07-07 00:33:06 +00:00
},
remove(key) {
return store.commit('removeCache', key);
},
clear() {
return store.commit('clearCache');
}
}
2023-06-07 10:48:30 +00:00
/* localStorage */
tool.data = {
2023-07-07 00:33:06 +00:00
set(key, data, datetime = 0) {
//加密
if (sysConfig.LS_ENCRYPTION == "AES") {
data = tool.crypto.AES.encrypt(JSON.stringify(data), sysConfig.LS_ENCRYPTION_key)
}
2023-06-07 10:48:30 +00:00
let cacheValue = {
content: data,
datetime: parseInt(datetime) === 0 ? 0 : new Date().getTime() + parseInt(datetime) * 1000
}
return localStorage.setItem(key, JSON.stringify(cacheValue))
2023-07-07 00:33:06 +00:00
},
get(key) {
2023-06-07 10:48:30 +00:00
try {
const value = JSON.parse(localStorage.getItem(key))
if (value) {
let nowTime = new Date().getTime()
if (nowTime > value.datetime && value.datetime != 0) {
localStorage.removeItem(key)
return null;
}
2023-07-07 00:33:06 +00:00
//解密
if (sysConfig.LS_ENCRYPTION == "AES") {
value.content = JSON.parse(tool.crypto.AES.decrypt(value.content, sysConfig.LS_ENCRYPTION_key))
}
2023-06-07 10:48:30 +00:00
return value.content
}
return null
} catch (err) {
return null
}
2023-07-07 00:33:06 +00:00
},
remove(key) {
return localStorage.removeItem(key)
},
clear() {
return localStorage.clear()
}
2023-06-07 10:48:30 +00:00
}
/*sessionStorage*/
tool.session = {
2023-07-07 00:33:06 +00:00
set(table, settings) {
var _set = JSON.stringify(settings)
return sessionStorage.setItem(table, _set);
},
get(table) {
var data = sessionStorage.getItem(table);
try {
data = JSON.parse(data)
} catch (err) {
return null
}
return data;
},
remove(table) {
return sessionStorage.removeItem(table);
},
clear() {
return sessionStorage.clear();
}
2023-06-07 10:48:30 +00:00
}
/*cookie*/
tool.cookie = {
2023-07-07 00:33:06 +00:00
set(name, value, config = {}) {
var cfg = {
expires: null,
2023-07-29 08:42:26 +00:00
path: '/',
2023-07-07 00:33:06 +00:00
domain: null,
secure: false,
httpOnly: false,
...config
}
var cookieStr = `${name}=${escape(value)}`
if (cfg.expires) {
var exp = new Date()
exp.setTime(exp.getTime() + parseInt(cfg.expires) * 1000)
cookieStr += `;expires=${exp.toGMTString()}`
}
if (cfg.path) {
cookieStr += `;path=${cfg.path}`
}
if (cfg.domain) {
cookieStr += `;domain=${cfg.domain}`
}
document.cookie = cookieStr
},
get(name) {
var arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)"))
if (arr != null) {
return unescape(arr[2])
} else {
return null
}
},
remove(name) {
var exp = new Date()
exp.setTime(exp.getTime() - 1)
document.cookie = `${name}=;expires=${exp.toGMTString()}`
}
2023-06-07 10:48:30 +00:00
}
/* Fullscreen */
2023-07-07 00:33:06 +00:00
tool.screen = function(element) {
var isFull = !!(document.webkitIsFullScreen || document.mozFullScreen || document.msFullscreenElement || document.fullscreenElement);
if (isFull) {
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.msExitFullscreen) {
document.msExitFullscreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.webkitExitFullscreen) {
document.webkitExitFullscreen();
}
} else {
if (element.requestFullscreen) {
element.requestFullscreen();
} else if (element.msRequestFullscreen) {
element.msRequestFullscreen();
} else if (element.mozRequestFullScreen) {
element.mozRequestFullScreen();
} else if (element.webkitRequestFullscreen) {
element.webkitRequestFullscreen();
}
}
2023-06-07 10:48:30 +00:00
}
/* 复制对象 */
2023-07-07 00:33:06 +00:00
tool.objCopy = function(obj) {
return JSON.parse(JSON.stringify(obj));
2023-06-07 10:48:30 +00:00
}
/* 日期格式化 */
2023-07-07 00:33:06 +00:00
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;
2023-06-07 10:48:30 +00:00
}
/* 千分符 */
2023-07-07 00:33:06 +00:00
tool.groupSeparator = function(num) {
num = num + '';
if (!num.includes('.')) {
num += '.'
}
return num.replace(/(\d)(?=(\d{3})+\.)/g, function($0, $1) {
return $1 + ',';
}).replace(/\.$/, '');
2023-06-07 10:48:30 +00:00
}
/* 常用加解密 */
tool.crypto = {
2023-07-07 00:33:06 +00:00
//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("[X-PHP 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);
}
}
2023-06-07 10:48:30 +00:00
}
2023-07-07 00:33:06 +00:00
export default tool