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