// import CryptoJS from "crypto-js" import { JSEncrypt } from 'jsencrypt' const encryptKey = "WfJTKO9S4eLkrPz2JKrAnzdb" const encryptIV = "D076D35C" /** * 登录密码加密,公钥直接写死在方法里 * @param data: 待加密数据 * @returns 加密结果 */ export function encryptLoginPassword(data){ const secret = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjh2ei17z5k2r4VzbqoSCE6RmYzWySJTgVQYulgfVM+vqcDoUE4cFB4XCFA2lHWjjpsuJP1EtwKlvUgxo5okr3x/a88o8eERxBynnVQZbEYpKteW5aqSEb/g1yPLWnKV88b/ED445ITYbZZuInRo5lkCvd6QEjL6d2Fch6mEo5awYXC4/S4BJf9YlYRhGzR7wpiXCLvyBHQ4iSIIDNpmrPBPQzGP0rx09aDu54kz/42CR6SX2OqXSi4ZoieqkPFl/iuX4RoD/NKKR+haDn1UzoD3k1WzHSTBFFs27rxRpxfBUZzfXQeskgKyw/Slcl3jUFizczsY4CLgTRrfey48Q6QIDAQAB'; // 新建JSEncrypt对象 let encryptor = new JSEncrypt(); // 设置公钥 encryptor.setPublicKey(secret); // 加密数据 return encryptor.encrypt(data); } /** * 对称加密 * @param secret:加密公钥 * @param data: 待加密数据 * @returns 加密结果 */ export function encryptData(secret, data){ // 新建JSEncrypt对象 let encryptor = new JSEncrypt(); // 设置公钥 encryptor.setPublicKey(secret); // 加密数据 return encryptor.encrypt(data); } // 深度复制 export function deepClone (obj) { let result = Array.isArray(obj) ? [] : {} for (let key in obj) { if (obj.hasOwnProperty(key)) { if (typeof obj[key] === "object") { result[key] = deepClone(obj[key]) } else { result[key] = obj[key] } } } return result } // // 3DES加密 // export function desEncrypt (str, key = encryptKey, iv = encryptIV) { // var cryptoKey = CryptoJS.enc.Utf8.parse(key) // var cryptoIv = CryptoJS.enc.Utf8.parse(iv.substr(0, 8)) // var encodeStr = CryptoJS.TripleDES.encrypt(str, cryptoKey, { // iv: cryptoIv, // mode: CryptoJS.mode.CBC, // padding: CryptoJS.pad.Pkcs7 // }) // return encodeStr.toString() // } // // 3DES解密 // export function desDecrypt (str, key = encryptKey, iv = encryptIV) { // var cryptoKey = CryptoJS.enc.Utf8.parse(key) // var cryptoIv = CryptoJS.enc.Utf8.parse(iv.substr(0, 8)) // var decryptStr = CryptoJS.TripleDES.decrypt(str, cryptoKey, { // iv: cryptoIv, // mode: CryptoJS.mode.CBC, // padding: CryptoJS.pad.Pkcs7 // }) // return decryptStr.toString(CryptoJS.enc.Utf8) // } // 随机生成由字母+数字的字符串 export function randomWord (randomFlag, min, max) { // randomFlag: Boolean 是否随机个数 // min 最少个数 // max 最大个数 var str = "" var range = min var arr = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"] // 随机产生 if (randomFlag) { range = Math.round(Math.random() * (max - min)) + min } var pos = "" for (var i = 0; i < range; i++) { pos = Math.round(Math.random() * (arr.length - 1)) str += arr[pos] } return str } // 判断数组中是否存在相同值 export function hasRepeatValue (arr, key = null) { if (key) arr = arr.map(d => d[key]) if (arr.length) { let nameNum = arr.reduce((pre, cur) => { if (cur in pre) { pre[cur]++ } else { pre[cur] = 1 } return pre }, {}) return Object.values(nameNum).findIndex(d => d > 1) < 0 } return true } // 获取cookie值 export function getCookie (name, defaultValue) { const result = new RegExp("(^| )" + name + "=([^;]*)(;|$)") return result[0] === document.cookie.match(result[1]) ? unescape(result[0][2]) : defaultValue } /** * base64转化unicode */ export function b64DecodeUnicode(str) { let uni; try { // atob 经过 base-64 编码的字符串进行解码 uni = decodeURIComponent(atob(str).split('').map(function (c) { return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); }).join('')); } catch (e) {} return uni; } // base64ToFile export function base64ToFile (base64Data, tempfilename, contentType) { contentType = contentType || "" var sliceSize = 1024 var byteCharacters = atob(base64Data) var bytesLength = byteCharacters.length var slicesCount = Math.ceil(bytesLength / sliceSize) var byteArrays = new Array(slicesCount) for (var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) { var begin = sliceIndex * sliceSize var end = Math.min(begin + sliceSize, bytesLength) var bytes = new Array(end - begin) for (var offset = begin, i = 0; offset < end; ++i, ++offset) { bytes[i] = byteCharacters[offset].charCodeAt(0) } byteArrays[sliceIndex] = new Uint8Array(bytes) } var file = new File(byteArrays, tempfilename, { type: contentType }) return file } // 将base64转换为文件 export function dataURLtoFile (dataurl, filename) { var arr = dataurl.split(",") var mime = arr[0].match(/:(.*?);/)[1] var bstr = atob(arr[1]) var n = bstr.length var u8arr = new Uint8Array(n) while (n--) { u8arr[n] = bstr.charCodeAt(n) } return new File([u8arr], filename, { type: mime }) } // 将图片转换为Base64 export function getImgToBase64 (url, callback, outputFormat) { var canvas = document.createElement("canvas") var ctx = canvas.getContext("2d") var img = new Image() img.crossOrigin = "Anonymous" img.onload = function () { canvas.height = img.height canvas.width = img.width ctx.drawImage(img, 0, 0) var dataURL = canvas.toDataURL(outputFormat || "image/png") callback(dataURL) canvas = null } img.src = url } // 转换级联下拉数据 export function loopOptions (list, option = {}) { option = { value: "id", label: "name", children: "children", ...option } if (list instanceof Array && list.length) { return list.map((d, i) => { d.value = d[option.value] || i + 1 d.label = d[option.label] if (d[option.children]) { d[option.children] = loopOptions(d[option.children], option) } return d }) } return [] } // 通过Id获取级联数据id数组 export function getTreeIds (tree, currentId, key = "id") { let parent = {} let pid = {} const loop = (list, level) => { if (list instanceof Array && list.length) { for (let index = 0; index < list.length; index++) { const d = list[index] parent[level] = d.id if (d[key] === currentId) { for (let idx = 1; idx <= level; idx++) { pid[idx] = parent[idx] } break } else if (d.children) { loop(d.children, level + 1) } } } } loop(tree, 1) let result = [] Object.keys(pid).sort((a, b) => a - b).forEach(k => { result.push(pid[k]) }) return result } // 秒转换时分秒 export function transverterMss (result) { var h = Math.floor(result / 3600) < 10 ? "0" + Math.floor(result / 3600) : Math.floor(result / 3600) var m = Math.floor((result / 60 % 60)) < 10 ? "0" + Math.floor((result / 60 % 60)) : Math.floor((result / 60 % 60)) var s = Math.floor((result % 60)) < 10 ? "0" + Math.floor((result % 60)) : Math.floor((result % 60)) return h + ":" + m + ":" + s } // 获取日期时间戳 export function getTime (dayNum) { var myDate = new Date() var lw = new Date(myDate - 1000 * 60 * 60 * 24 * dayNum)// 最后一个数字多少天前的意思 var lastY = lw.getFullYear() var lastM = lw.getMonth() + 1 var lastD = lw.getDate() var startdate = lastY + "-" + (lastM < 10 ? "0" + lastM : lastM) + "-" + (lastD < 10 ? "0" + lastD : lastD) var b = startdate.split(/\D/) var date = new Date(b[0], b[1] - 1, b[2]) var time = date.getTime() return time } // 获取几天之前日期 export function getData (dayNum) { var myDate = new Date() var lw = new Date(myDate - 1000 * 60 * 60 * 24 * dayNum)// 最后一个数字多少天前的意思 var lastY = lw.getFullYear() var lastM = lw.getMonth() + 1 var lastD = lw.getDate() var startdate = lastY + "-" + (lastM < 10 ? "0" + lastM : lastM) + "-" + (lastD < 10 ? "0" + lastD : lastD) return startdate } // 日期转换时间戳 export function getNewTime (dayNum) { var b = dayNum.split(/\D/) var date = new Date(b[0], b[1] - 1, b[2]) var time = date.getTime() return time } /* * 获取URL参数 * * */ export function getURLParams(variable) { let str = window.location.href.split("?")[1]; if (!str) return null; let ar = str.split("&"); let obj = {}; let data; for (var i = 0; i < ar.length; i++) { var pair = ar[i].split("="); pair[1] = decodeURIComponent(pair[1]) if (pair[0] == variable) { data = pair[1] return pair[1] } if (pair[0]) { obj[pair[0]] = pair[1] } } return variable ? data : obj }