import Fingerprint2 from 'fingerprintjs2';//获取浏览器唯一标识 const isEmail = (email) => { // let reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,})$/ let reg = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/ let result = reg.test(email) return result } const getUploadUrl = () => { let url = process.env.VUE_APP_BASE_URL || '' // let url = "http://18.167.251.121:10086" return url } function dataURLtoBlob(dataurl) {//吧data url转为blob对象 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 Blob([u8arr], { type: mime }); } function blobToFile(blob, fileName) {//给blob文件设置名字和日期 blob.lastModifiedDate = new Date(); blob.name = fileName; return blob; } //下载图片 function downloadIamge(imgsrc, name) { // 下载图片地址和图片名 var image = new Image() // 解决跨域 Canvas 污染问题 image.setAttribute('crossOrigin', 'anonymous') image.onload = function () { var canvas = document.createElement('canvas') canvas.width = image.width canvas.height = image.height var context = canvas.getContext('2d') context.drawImage(image, 0, 0, image.width, image.height) var url = canvas.toDataURL('image/jpeg') // 得到图片的base64编码数据 var a = document.createElement('a') // 生成一个a元素 var event = new MouseEvent('click') // 创建一个单击事件 a.download = name || 'generate' // 设置图片名称 a.href = url // 将生成的URL设置为a.href属性 a.target = '_blank' a.dispatchEvent(event) // 触发a的单击事件 } image.src = imgsrc } function dataURLtoFile(dataurl, filename) {//吧url转为文件对象,指定文件名称 var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n); while (n--) { u8arr[n] = bstr.charCodeAt(n); } var blob = dataURLtoBlob(dataurl); return blobToFile(blob, filename); } const base64toFile = (dataurl, filename = 'file') => {//转换base64 let arr = dataurl.split(',') let mime = arr[0].match(/:(.*?);/)[1] let suffix = mime.split('/')[1] let bstr = atob(arr[1]) let n = bstr.length let u8arr = new Uint8Array(n) while (n--) { u8arr[n] = bstr.charCodeAt(n) } return new File([u8arr], `${filename}.${suffix}`, { type: mime }) } function rgbToHsv([R, G, B]) {//根据rgb获取hsv R /= 255 G /= 255 B /= 255 const max = Math.max(R, G, B) const min = Math.min(R, G, B) const delta = max - min var H, S, V if (delta === 0) { H = 0; } else if (max === R) { H = ((G - B) / delta) % 6; } else if (max === G) { H = (B - R) / delta + 2; } else { // max === B H = (R - G) / delta + 4; } H = Math.round(H * 60); // 范围为 0-360 if (H < 0) { H = 360 + H } if (max === 0) { S = 0; } else { S = delta / max; } S = Math.round(S * 100); // 范围为 0-100 V = Math.round(max * 100); // 范围为 0-100 return [H, S, V] } const formatTime = (timestamp, fmt) => {//吧时间戳转为YYYY-MM-DD hh:mm:ss格式 // date = new Date(), fmt = 'MM/dd/yyyy'; let date = new Date(); date.setTime(timestamp * 1000); if (!fmt) { formatRule ? (fmt = formatRule) : (fmt = "YYYY-MM-DD hh:mm:ss"); } // console.log(formatRule) let 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(), // 毫秒 'a': date.getHours() > 12 ? 'PM' : 'AM' // 上午还是下午 }; if (/(Y+)/.test(fmt)) { fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length)); } if (/(a)/.test(fmt) && o['h+'] > 12) { o['h+'] = o['h+'] - 12 } for (let 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; } const isMoible = () => {//判断是否是移动端 let is_mobile = navigator.userAgent.toLowerCase().match(/(ipad|ipod|iphone|android|coolpad|mmp|smartphone|midp|wap|xoom|symbian|j2me|blackberry|wince)/i) != null; // alert(navigator.userAgent.toLowerCase()) var isiPad = /iPad/.test(navigator.platform) || (navigator.maxTouchPoints && navigator.maxTouchPoints > 2); if (is_mobile) { return true } else { return isiPad } } function getBrowserInfo() {//获取是什么浏览器 var agent = navigator.userAgent.toLowerCase(); var userAgent = navigator.userAgent; var regStr_ie = /msie [\d.]+;/gi; var regStr_ff = /firefox\/[\d.]+/gi var regStr_chrome = /chrome\/[\d.]+/gi; var regStr_saf = /safari\/[\d.]+/gi; var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1; //判断是否IE<11浏览器 var isEdge = userAgent.indexOf("Edge") > -1 && !isIE; //判断是否IE的Edge浏览器 //IE if (agent.indexOf("msie") > 0) { return agent.match(regStr_ie); } //firefox if (agent.indexOf("firefox") > 0) { return agent.match(regStr_ff); } //Chrome if (agent.indexOf("chrome") > 0) { return agent.match(regStr_chrome); } //Safari if (agent.indexOf("safari") > 0 && agent.indexOf("chrome") < 0) { return agent.match(regStr_saf); } } async function murmur(){//生成唯一标识 ,暂时没有使用 return await new Promise((resolve,reject)=>{ Fingerprint2.get(function (components) { const values = components.map(function ( component, index ) { if (index === 0) { //把微信浏览器里UA的wifi或4G等网络替换成空,不然切换网络会ID不一样 return component.value.replace(/\bNetType\/\w+\b/, ""); } return component.value; }); // 生成最终id murmur let murmur = Fingerprint2.x64hash128(values.join(""), 31); resolve(murmur) }); }) } export { isEmail, getUploadUrl, dataURLtoFile, blobToFile, base64toFile, rgbToHsv, formatTime, dataURLtoBlob, isMoible, downloadIamge, getBrowserInfo, murmur, }