Files
aida_front/src/tool/util.js

219 lines
6.0 KiB
JavaScript
Raw Normal View History

2024-01-15 17:05:55 +08:00
import Fingerprint2 from 'fingerprintjs2';//获取浏览器唯一标识
2024-01-15 13:20:53 +08:00
const isEmail = (email) => {
2024-03-22 15:45:06 +08:00
// 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,}$/
2024-01-15 13:20:53 +08:00
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
2023-01-06 16:00:15 +08:00
}
2024-03-15 09:21:17 +08:00
function dataURLtoBlob(dataurl) {//吧data url转为blob对象
2024-01-15 13:20:53 +08:00
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 });
2023-01-06 16:00:15 +08:00
}
2024-03-15 09:21:17 +08:00
function blobToFile(blob, fileName) {//给blob文件设置名字和日期
2024-01-15 13:20:53 +08:00
blob.lastModifiedDate = new Date();
blob.name = fileName;
return blob;
2023-01-06 16:00:15 +08:00
}
2023-11-08 09:31:40 +08:00
//下载图片
2024-01-15 13:20:53 +08:00
function downloadIamge(imgsrc, name) { // 下载图片地址和图片名
2023-11-08 09:31:40 +08:00
var image = new Image()
// 解决跨域 Canvas 污染问题
image.setAttribute('crossOrigin', 'anonymous')
image.onload = function () {
2024-01-15 13:20:53 +08:00
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的单击事件
2023-11-08 09:31:40 +08:00
}
image.src = imgsrc
}
2024-03-15 09:21:17 +08:00
function dataURLtoFile(dataurl, filename) {//吧url转为文件对象指定文件名称
2024-01-15 13:20:53 +08:00
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);
2023-01-06 16:00:15 +08:00
}
2024-03-15 09:21:17 +08:00
const base64toFile = (dataurl, filename = 'file') => {//转换base64
2024-01-15 13:20:53 +08:00
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
})
2023-01-06 16:00:15 +08:00
}
2024-03-15 09:21:17 +08:00
function rgbToHsv([R, G, B]) {//根据rgb获取hsv
2024-01-15 13:20:53 +08:00
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
2023-09-12 10:11:27 +08:00
if (delta === 0) {
2024-01-15 13:20:53 +08:00
H = 0;
2023-09-12 10:11:27 +08:00
} else if (max === R) {
2024-01-15 13:20:53 +08:00
H = ((G - B) / delta) % 6;
2023-09-12 10:11:27 +08:00
} else if (max === G) {
2024-01-15 13:20:53 +08:00
H = (B - R) / delta + 2;
2023-09-12 10:11:27 +08:00
} else { // max === B
2024-01-15 13:20:53 +08:00
H = (R - G) / delta + 4;
2023-09-12 10:11:27 +08:00
}
H = Math.round(H * 60); // 范围为 0-360
2024-01-15 13:20:53 +08:00
if (H < 0) {
H = 360 + H
2023-10-12 17:09:05 +08:00
}
2023-09-12 10:11:27 +08:00
if (max === 0) {
2024-01-15 13:20:53 +08:00
S = 0;
2023-09-12 10:11:27 +08:00
} else {
2024-01-15 13:20:53 +08:00
S = delta / max;
2023-09-12 10:11:27 +08:00
}
2024-01-15 13:20:53 +08:00
S = Math.round(S * 100); // 范围为 0-100
V = Math.round(max * 100); // 范围为 0-100
return [H, S, V]
}
2023-01-06 16:00:15 +08:00
2024-03-15 09:21:17 +08:00
const formatTime = (timestamp, fmt) => {//吧时间戳转为YYYY-MM-DD hh:mm:ss格式
2024-01-15 13:20:53 +08:00
// date = new Date(), fmt = 'MM/dd/yyyy';
let date = new Date();
date.setTime(timestamp * 1000);
2023-01-06 16:00:15 +08:00
2024-01-15 13:20:53 +08:00
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)));
}
}
2023-01-06 16:00:15 +08:00
2024-01-15 13:20:53 +08:00
return fmt;
2023-01-06 16:00:15 +08:00
}
2024-03-15 09:21:17 +08:00
const isMoible = () => {//判断是否是移动端
2024-01-15 13:20:53 +08:00
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);
2024-01-15 13:20:53 +08:00
if (is_mobile) {
return true
} else {
return isiPad
2024-01-15 13:20:53 +08:00
}
2023-01-06 16:00:15 +08:00
}
2024-01-15 13:20:53 +08:00
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);
}
}
2024-03-15 09:21:17 +08:00
async function murmur(){//生成唯一标识 ,暂时没有使用
2024-01-15 17:05:55 +08:00
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)
});
})
}
2024-01-15 13:20:53 +08:00
export {
isEmail,
getUploadUrl,
dataURLtoFile,
blobToFile,
base64toFile,
rgbToHsv,
formatTime,
dataURLtoBlob,
isMoible,
2023-11-08 09:31:40 +08:00
downloadIamge,
2024-01-15 13:20:53 +08:00
getBrowserInfo,
2024-01-15 17:05:55 +08:00
murmur,
2023-01-06 16:00:15 +08:00
}