/**
|
* 通用工具类
|
*/
|
import CryptoJS from 'crypto-js'
|
import {validatenull} from "@/util/validate";
|
import {getStore} from "@/util/store";
|
import {getIcons} from "@/api/UI/Icons";
|
import store from "@/store/index"
|
|
export default class func {
|
|
static getSvgList() {
|
const fs = require('fs');
|
const path = require('path');
|
|
// 指定文件夹路径
|
const directoryPath = "../config/svg"; // 修改为你的文件夹路径
|
|
// 存储 .svg 文件路径的数组
|
let svgFiles = [];
|
|
// 读取文件夹
|
fs.readdir(directoryPath, (err, files) => {
|
if (err) {
|
return console.error('无法读取目录: ' + err);
|
}
|
|
// 遍历文件
|
files.forEach(file => {
|
// 检查文件后缀名
|
if (path.extname(file).toLowerCase() === '.svg') {
|
// 构建文件的完整路径
|
const filePath = path.join(directoryPath, file);
|
svgFiles.push(filePath);
|
}
|
});
|
|
// 输出结果
|
console.log(JSON.stringify(svgFiles, null, 2));
|
});
|
}
|
|
/**
|
* 单选表格行
|
* 时间戳格式化
|
*/
|
static formattedDate(val) {
|
// 创建一个 Date 对象
|
const date = new Date(val);
|
|
// 格式化时间的辅助函数
|
const formatNumber = (number) => String(number).padStart(2, '0');
|
|
// 提取并格式化年、月、日、小时、分钟和秒
|
const year = date.getFullYear();
|
const month = formatNumber(date.getMonth() + 1); // 月份从0开始,需要+1
|
const day = formatNumber(date.getDate());
|
const hours = formatNumber(date.getHours());
|
const minutes = formatNumber(date.getMinutes());
|
const seconds = formatNumber(date.getSeconds());
|
|
// 格式化为 YYYY-MM-DD HH:MM:SS
|
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
|
}
|
|
/**
|
* 单选表格行
|
* row 当前行数据
|
* CrudRef 表格ref绑定值
|
* lastIndex 判断二次点击index是否和第一次点击一致
|
* setLastIndex 更新lastIndex值
|
* setSelectList 将下拉框保存数组置空
|
*/
|
|
static rowClickHandler(row, CrudRef, lastIndex, setLastIndex, setSelectList) {
|
/*if (lastIndex === row.$index) {
|
setSelectList();
|
CrudRef.clearSelection();
|
} else {
|
setSelectList();
|
CrudRef.clearSelection();
|
CrudRef.toggleRowSelection(row);
|
}*/
|
setSelectList();
|
CrudRef.toggleSelection();
|
CrudRef.toggleRowSelection(row);//选中当前行
|
setLastIndex(row.$index);
|
}
|
|
/**
|
* 不为空
|
* @param val
|
* @returns {boolean}
|
* 不能判断数组和对象 如判断"null"、"undefined"会返回不为空
|
*/
|
static notEmpty(val) {
|
return !this.isEmpty(val);
|
}
|
|
/**
|
* 是否为定义
|
* @param val
|
* @returns {boolean}
|
*/
|
static isUndefined(val) {
|
return val === null || typeof val === 'undefined';
|
}
|
|
/**
|
* 为空
|
* @param val
|
* @returns {boolean}
|
* 不能判断数组和对象 如判断"null"、"undefined"会返回不为空
|
*/
|
static isEmpty(val) {
|
if (
|
val === null ||
|
typeof val === 'undefined' ||
|
(typeof val === 'string' && val === '' && val !== 'undefined')
|
) {
|
return true;
|
}
|
return false;
|
}
|
|
/**
|
* 判断对象为空
|
*/
|
|
static isEmptyObject(obj) {
|
if (obj) {
|
return Object.keys(obj).length === 0;
|
} else {
|
return true;
|
}
|
}
|
|
/**
|
* 强转int型
|
* @param val
|
* @param defaultValue
|
* @returns {number}
|
*/
|
static toInt(val, defaultValue) {
|
if (this.isEmpty(val)) {
|
return defaultValue === undefined ? -1 : defaultValue;
|
}
|
const num = parseInt(val, 0);
|
return Number.isNaN(num) ? (defaultValue === undefined ? -1 : defaultValue) : num;
|
}
|
|
/**
|
* Json强转为Form类型
|
* @param obj
|
* @returns {FormData}
|
*/
|
static toFormData(obj) {
|
const data = new FormData();
|
Object.keys(obj).forEach(key => {
|
data.append(key, Array.isArray(obj[key]) ? obj[key].join(',') : obj[key]);
|
});
|
return data;
|
}
|
|
/**
|
* date类转为字符串格式
|
* @param date
|
* @param format
|
* @returns {null}
|
*/
|
static format(date, format = 'YYYY-MM-DD HH:mm:ss') {
|
return date ? date.format(format) : null;
|
}
|
|
/**
|
* 根据逗号联合
|
* @param arr
|
* @returns {string}
|
*/
|
static join(arr) {
|
return arr ? arr.join(',') : '';
|
}
|
|
/**
|
* 根据逗号分隔
|
* @param str
|
* @returns {string}
|
*/
|
static split(str) {
|
return str ? String(str).split(',') : '';
|
}
|
|
/**
|
* 转换空字符串
|
* @param str
|
* @returns {string|*}
|
*/
|
static toStr(str) {
|
if (typeof str === 'undefined' || str === null) {
|
return "";
|
}
|
return str;
|
}
|
|
/**
|
* 判断是否为对象并不为空对象
|
* @param value
|
* @returns {Boolean}
|
*/
|
static isValuableObj(value) {
|
return typeof value === 'object' && value !== null && Object.keys(value).length > 0;
|
}
|
|
/**
|
* 获取流文件进行文件下
|
* @param value
|
* @returns {Boolean}
|
*/
|
static downloadFileByBlobHandler(res) {
|
if (res.headers['content-disposition']) {
|
const fileNames = res.headers['content-disposition'].split(";");
|
let characterSet = fileNames[2].split("filename*=")[1];
|
let fileName = decodeURI(fileNames[1].split("filename=")[1], characterSet); // 下载的文件名
|
let blob = new Blob([res.data], {
|
type: res.data.type + ";charset=utf-8",
|
});
|
const url = URL.createObjectURL(blob); // 生成下载链接
|
const link = document.createElement("a");
|
link.href = url;
|
link.download = fileName; // 指定文件名和格式
|
document.body.appendChild(link); // 添加下载链接到页面
|
link.click(); // 触发下载
|
document.body.removeChild(link); //删除下载
|
window.URL.revokeObjectURL(url); //释放掉blob对象
|
}
|
}
|
|
/**
|
* 获取流文件进行文件下
|
* @param value
|
* @returns {Boolean}
|
*/
|
static downloadFileByBlob(blobData, name) {
|
const url = URL.createObjectURL(blobData); // 生成下载链接
|
const link = document.createElement("a");
|
link.href = url;
|
link.download = name; // 指定文件名和格式
|
document.body.appendChild(link); // 添加下载链接到页面
|
link.click(); // 触发下载
|
document.body.removeChild(link); //删除下载
|
}
|
|
/**
|
* 将数组中的属性拼接成字符串
|
* @param {数组} array
|
* @param {属性} attr
|
* @returns
|
*/
|
static joinedString(array, attr) {
|
return array.reduce((accumulator, item) => {
|
return accumulator + (accumulator ? ',' : '') + item[attr];
|
}, '');
|
}
|
|
/**
|
* 比对数组中的对象的某个属性是否全部一致
|
* @param {数组} array
|
* @param {属性} attr
|
* @returns 一致返回fasle,不一致返回true
|
*/
|
static isAttrInconsistent(array, attr) {
|
return Object.values(array).some((item, index, array) => {
|
return item[attr] !== array[0][attr];
|
});
|
}
|
|
/**
|
* 3des加密
|
* @param message
|
* @param key
|
* @returns {string}
|
*/
|
encryptByDES(message, key) {
|
const keyHex = CryptoJS.enc.Utf8.parse(key);
|
const encrypted = CryptoJS.DES.encrypt(message, keyHex, {
|
mode: CryptoJS.mode.ECB,
|
padding: CryptoJS.pad.Pkcs7
|
});
|
return encrypted.toString();
|
}
|
|
/**
|
* HmacMD5加密
|
* @param message
|
* @param key
|
* @returns {string}
|
* @constructor
|
*/
|
static HmacMD5(message, key) {
|
const encrypted = CryptoJS.HmacMD5(message, key);
|
return encrypted.toString();
|
}
|
|
/**
|
* aes加密
|
* @param data
|
* @param secretKey
|
* @returns {string}
|
*/
|
static encryptData(data, secretKey) {
|
const key = CryptoJS.enc.Utf8.parse(secretKey);
|
const iv = CryptoJS.enc.Utf8.parse(secretKey.substr(0, 16)); // AES block size is 128 bits (16 bytes)
|
const encrypted = CryptoJS.AES.encrypt(data, key, {
|
iv: iv,
|
mode: CryptoJS.mode.CBC,
|
padding: CryptoJS.pad.Pkcs7
|
});
|
return encrypted.toString();
|
}
|
|
/* 根据name获取svg图标
|
* @param name
|
* @returns {string}
|
*/
|
static getSVGByName(name) {
|
let svgHtml = '';
|
if(name && name.indexOf(':')!=-1) {
|
let iconList = getStore({name: 'icons'});
|
if (iconList && iconList.length > 0) {
|
let libName = name.split(':')[0];
|
let currentLic = iconList.find(item => item.lable == libName);
|
if (currentLic.list) {
|
currentLic.list.find(item => {
|
if (item.name == name) {
|
svgHtml = item.content;
|
}
|
return item.name == name;
|
})
|
}
|
}else {
|
getIcons().then(res => {
|
this.iconList=res.data.data;
|
store.dispatch("setIcons", this.iconList);
|
if(this.iconList.length>0) {
|
this.activeName=this.iconList[0].lable;
|
}
|
})
|
}
|
}
|
return svgHtml;
|
}
|
}
|