This commit is contained in:
parent
f9609c5543
commit
3f66ed73f1
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,45 @@
|
||||||
|
/*
|
||||||
|
* @Author: Billy
|
||||||
|
* @Date: 2022-03-15 15:18:55
|
||||||
|
* @LastEditors: Billy
|
||||||
|
* @LastEditTime: 2022-03-24 14:37:08
|
||||||
|
* @Description: 剪切板工具
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 把字符串粘贴到剪切板
|
||||||
|
* @param {string} text 要粘贴到剪切板的文字内容
|
||||||
|
*/
|
||||||
|
function copyStr(text) {
|
||||||
|
var aux = document.createElement("input");
|
||||||
|
aux.setAttribute("value", text);
|
||||||
|
document.body.appendChild(aux);
|
||||||
|
aux.select();
|
||||||
|
document.execCommand("copy");
|
||||||
|
document.body.removeChild(aux);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 把base64格式的图片粘贴到剪切板
|
||||||
|
* @param {string} base64 base64格式的图片
|
||||||
|
*/
|
||||||
|
async function copyImgBase64(base64) {
|
||||||
|
if (navigator.clipboard) {
|
||||||
|
const imgURL = base64;
|
||||||
|
const data = await fetch(imgURL);
|
||||||
|
const blob = await data.blob();
|
||||||
|
await navigator.clipboard.write([
|
||||||
|
new window.ClipboardItem({
|
||||||
|
[blob.type]: blob,
|
||||||
|
}),
|
||||||
|
]);
|
||||||
|
} else {
|
||||||
|
// 如果navigator.clipboard属性返回undefined,就说明当前浏览器不支持这个 API
|
||||||
|
console.log('当前浏览器不支持 navigator.clipboard');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default {
|
||||||
|
copyStr,
|
||||||
|
copyImgBase64
|
||||||
|
}
|
|
@ -2,7 +2,7 @@
|
||||||
* @Author: Billy
|
* @Author: Billy
|
||||||
* @Date: 2020-09-16 08:55:25
|
* @Date: 2020-09-16 08:55:25
|
||||||
* @LastEditors: Billy
|
* @LastEditors: Billy
|
||||||
* @LastEditTime: 2021-06-06 01:59:30
|
* @LastEditTime: 2022-01-18 16:13:51
|
||||||
* @Description: 下载工具函数
|
* @Description: 下载工具函数
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@
|
||||||
* @param {string} fileName 下载的文件保存本地时的文件名(含后缀)
|
* @param {string} fileName 下载的文件保存本地时的文件名(含后缀)
|
||||||
*/
|
*/
|
||||||
function downloadByAnchorTag(filePath, fileName = '') {
|
function downloadByAnchorTag(filePath, fileName = '') {
|
||||||
let anchorTag = document.createElement('a');
|
const anchorTag = document.createElement('a');
|
||||||
anchorTag.setAttribute('href', filePath);
|
anchorTag.setAttribute('href', filePath);
|
||||||
anchorTag.setAttribute('download', fileName);
|
anchorTag.setAttribute('download', fileName);
|
||||||
anchorTag.click();
|
anchorTag.click();
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
/*
|
||||||
|
* @Author: Billy
|
||||||
|
* @Date: 2020-09-20 01:12:40
|
||||||
|
* @LastEditors: Billy
|
||||||
|
* @LastEditTime: 2022-04-16 16:27:29
|
||||||
|
* @Description: 工具函数库
|
||||||
|
*/
|
||||||
|
|
||||||
|
const crypto = require("crypto");
|
||||||
|
|
||||||
|
// function ramdomStrEng(length = 10) {
|
||||||
|
// let s = '';
|
||||||
|
// for (let i = 0; i < length; i++)
|
||||||
|
// s += (Math.random() * 36 | 0).toString(36);
|
||||||
|
// return s;
|
||||||
|
// }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成uuid/guid
|
||||||
|
* @see https://stackoverflow.com/questions/105034/how-to-create-guid-uuid
|
||||||
|
* @returns {string} uuid 字符串
|
||||||
|
*/
|
||||||
|
function uuidv4() {
|
||||||
|
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
|
||||||
|
var r = Math.random() * 16 | 0,
|
||||||
|
v = c == "x" ? r : (r & 0x3 | 0x8);
|
||||||
|
return v.toString(16);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 把字符串单向加密
|
||||||
|
* @param {string} str 需要加密的字符串
|
||||||
|
* @returns {string} 加密后的字符串
|
||||||
|
*/
|
||||||
|
function createHmac(str) {
|
||||||
|
const secret = "qwertyuiop";
|
||||||
|
return crypto.createHmac("sha256", secret).update(str).digest("hex");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成一个随机的n位字符串(位数越长,越不可能重复)
|
||||||
|
* @param {number} n 位数
|
||||||
|
* @returns {string} 随机字符串
|
||||||
|
*/
|
||||||
|
function ramdomStr(n) {
|
||||||
|
if (n <= 50) {
|
||||||
|
let full = createHmac(String(Date.now()));
|
||||||
|
return full.slice(0, n);
|
||||||
|
} else {
|
||||||
|
throw new Error("位数n不能大于50");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
uuidv4,
|
||||||
|
createHmac,
|
||||||
|
ramdomStr
|
||||||
|
};
|
|
@ -2,30 +2,28 @@
|
||||||
* @Author: Billy
|
* @Author: Billy
|
||||||
* @Date: 2020-09-15 10:05:45
|
* @Date: 2020-09-15 10:05:45
|
||||||
* @LastEditors: Billy
|
* @LastEditors: Billy
|
||||||
* @LastEditTime: 2021-10-18 15:16:42
|
* @LastEditTime: 2021-08-17 09:27:21
|
||||||
* @Description: 文件相关帮助方法
|
* @Description: 文件相关帮助方法
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 格式化输出文件尺寸
|
* 格式化输出文件大小
|
||||||
* @param {Number} size 文件尺寸的数字(单位为Byte)
|
* @param {Number} size 文件大小(单位为字节)
|
||||||
* @param {Number} pointLength 小数点后的位数
|
* @param {Number} pointLength 小数点后的位数(默认2位)
|
||||||
* @param {Array} units 自定义单位数组
|
* @returns {string} 返回:如 1M
|
||||||
* 返回:字符串如 1M
|
* @todo 当结果大于1024TB时,会出现XXX.XXundefined的结果,即单位为undefined
|
||||||
*/
|
*/
|
||||||
function formatFileSize(
|
function formatFileSize(
|
||||||
size,
|
size,
|
||||||
pointLength = 2,
|
pointLength = 2
|
||||||
units = ["B", "K", "M", "G", "TB"]
|
|
||||||
) {
|
) {
|
||||||
// 格式化输出文件尺寸
|
const units = ["B", "KB", "MB", "G", "TB"];
|
||||||
let unit;
|
let unit;
|
||||||
while ((unit = units.shift()) && size > 1024) {
|
while ((unit = units.shift()) && size >= 1024) {
|
||||||
size = size / 1024;
|
size = size / 1024;
|
||||||
}
|
}
|
||||||
return (unit === "B" ? size : size.toFixed(pointLength)) + unit;
|
return (unit === "B" ? size : size.toFixed(pointLength)) + unit;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
formatFileSize
|
formatFileSize
|
||||||
};
|
};
|
|
@ -0,0 +1,27 @@
|
||||||
|
/*
|
||||||
|
* @Author: Billy
|
||||||
|
* @Date: 2022-03-17 11:49:58
|
||||||
|
* @LastEditors: Billy
|
||||||
|
* @LastEditTime: 2022-03-17 12:01:56
|
||||||
|
* @Description: 输入框优化函数
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 防抖函数
|
||||||
|
* @param {Function} fn 回调
|
||||||
|
* @param {number} delay 延迟时间(毫秒)
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
function debounce(fn, delay) {
|
||||||
|
let timerId;
|
||||||
|
return function (...args) {
|
||||||
|
if (timerId) clearTimeout(timerId);
|
||||||
|
timerId = setTimeout(() => {
|
||||||
|
fn.apply(this, args) // setTimout会发生this隐式丢失;改变this指向为调用debounce所指的对象
|
||||||
|
}, delay);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default {
|
||||||
|
debounce
|
||||||
|
}
|
|
@ -2,20 +2,20 @@
|
||||||
* @Author: ChileeHong
|
* @Author: ChileeHong
|
||||||
* @Date: 2021-03-01 17:10:55
|
* @Date: 2021-03-01 17:10:55
|
||||||
* @LastEditors: Billy
|
* @LastEditors: Billy
|
||||||
* @LastEditTime: 2022-01-07 14:23:39
|
* @LastEditTime: 2022-02-24 11:02:28
|
||||||
* @Description: 安全的route.push方法
|
* @Description: 安全的 route.push 方法
|
||||||
*/
|
*/
|
||||||
import router from '../router/_index'
|
import router from '../router/_index'
|
||||||
|
|
||||||
// 跟this.$router.push() 用法一致
|
// 跟this.$router.push() 用法一致
|
||||||
function savePush(location, onComplete, onAbort) {
|
function safePush(location, onComplete, onAbort) {
|
||||||
const current = router.currentRoute;
|
const current = router.currentRoute;
|
||||||
const {
|
const {
|
||||||
resolved
|
resolved
|
||||||
} = router.resolve(location);
|
} = router.resolve(location);
|
||||||
|
|
||||||
// console.log('current.path :>> ', current.path);
|
// console.log('current.path :>> ', current.path);
|
||||||
// console.log(' resolved.path :>> ', resolved.path);
|
// console.log('resolved.path :>> ', resolved.path);
|
||||||
// console.log('current.query :>> ', current.query);
|
// console.log('current.query :>> ', current.query);
|
||||||
// console.log('resolved.query :>> ', resolved.query);
|
// console.log('resolved.query :>> ', resolved.query);
|
||||||
// console.log('current.params :>> ', current.params);
|
// console.log('current.params :>> ', current.params);
|
||||||
|
@ -41,4 +41,4 @@ function savePush(location, onComplete, onAbort) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export default savePush
|
export default safePush
|
|
@ -2,7 +2,7 @@
|
||||||
* @Author: Billy
|
* @Author: Billy
|
||||||
* @Date: 2021-07-23 01:56:55
|
* @Date: 2021-07-23 01:56:55
|
||||||
* @LastEditors: Billy
|
* @LastEditors: Billy
|
||||||
* @LastEditTime: 2022-01-04 09:54:37
|
* @LastEditTime: 2022-04-27 15:13:26
|
||||||
* @Description: 树状结构帮助方法(v1.1)
|
* @Description: 树状结构帮助方法(v1.1)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -23,6 +23,20 @@ function treeNodesToArray(nodes = [], keyName = 'id', childAttrName = 'children'
|
||||||
return arr
|
return arr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 递归遍历树状数组
|
||||||
|
* @param {Array} nodes 树结构数组
|
||||||
|
* @param {string} childAttrName 子树节点数组的属性名
|
||||||
|
* @param {Function} func 回调方法(参数1: 节点,参数2: 父节点)
|
||||||
|
*/
|
||||||
|
function recurveTree(nodes = [], childAttrName = "children", func, parentNode = null) {
|
||||||
|
for (let node of nodes) {
|
||||||
|
func(node, parentNode)
|
||||||
|
if (node[childAttrName] && node[childAttrName].length)
|
||||||
|
recurveTree(node[childAttrName], childAttrName, func, node)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description 获取树结构数组内的某一层的所有元素的指定属性(N叉树的层序遍历)
|
* @description 获取树结构数组内的某一层的所有元素的指定属性(N叉树的层序遍历)
|
||||||
* @param {Array} nodes 树结构数组
|
* @param {Array} nodes 树结构数组
|
||||||
|
@ -92,7 +106,7 @@ function arrayToGroup(array, attrName) {
|
||||||
* @param {Function} func 操作函数(两个参数:level:层级(从1开始),node:节点)
|
* @param {Function} func 操作函数(两个参数:level:层级(从1开始),node:节点)
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
function setEveryLevelOfTree(nodes = [], childAttrName = "children", func) {
|
function loopEveryLevelOfTree(nodes = [], childAttrName = "children", func) {
|
||||||
if (!nodes) {
|
if (!nodes) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -121,7 +135,8 @@ function setEveryLevelOfTree(nodes = [], childAttrName = "children", func) {
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
treeNodesToArray,
|
treeNodesToArray,
|
||||||
|
recurveTree,
|
||||||
getLevelOfTree,
|
getLevelOfTree,
|
||||||
arrayToGroup,
|
arrayToGroup,
|
||||||
setEveryLevelOfTree
|
loopEveryLevelOfTree
|
||||||
}
|
}
|
Loading…
Reference in New Issue