1.有关file
/**
* @功能描述: 求次幂
* @参数:num = 1 代表 1024
* num = 2 代表 1024*1024
* num = 3 代表 1024*1024*1024 依次类推
* @返回值:
* @param {*} num
*/
const pow1024 = (num) => {
return Math.pow(1024, num);
};
/**
* @功能描述: byte单位换算
* @参数: byte
* @返回值:
*/
export const calcFileSize = (size) => {
if (!size) return "";
if (size < pow1024(1)) {
return size + " B";
}
if (size < pow1024(2)) {
return (size / pow1024(1)).toFixed(2) + " KB";
}
if (size < pow1024(3)) {
return (size / pow1024(2)).toFixed(2) + " MB";
}
if (size < pow1024(4)) {
return (size / pow1024(3)).toFixed(2) + " GB";
}
return (size / pow1024(4)).toFixed(2) + " TB";
};
// 文件下载
export const downloadFile = (url) => {
// 移除旧的节点
const oldNode = document.querySelector("#g-exportOrder-iframe");
if (oldNode) {
document.body.removeChild(document.querySelector("#g-exportOrder-iframe"));
}
// 生成新节点,进行下载
const iframe = document.createElement("iframe");
iframe.style.display = "none";
iframe.id = "g-exportOrder-iframe";
iframe.src = url;
document.body.appendChild(iframe);
};
// 文件格式转换
// 将base64转换为blob(二进制)
export const dataURLtoBlob = (dataurl) => {
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);
}
return new Blob([u8arr], { type: mime });
};
// 将blob转换为file
export const blobToFile = (theBlob, fileName) => {
theBlob.lastModifiedDate = new Date();
theBlob.name = fileName;
return theBlob;
};
2.有关moment
/**
* @功能描述: 格式化时间
* @参数: date:时间戳number pattern:格式
* @返回值:
*/
export const dateFormat = (date, pattern = "YYYY-MM-DD HH:mm:ss") => {
if (!date) return "";
if (date.length < 12) {
date = date * 1000;
}
return moment(date).format(pattern);
};
/**
* @功能描述: 将时长(s)格式化为时分秒数
* @参数: date:时长秒数 pattern:格式 时分秒/分秒
* @返回值:
*/
export const formatSecond = (seconds, pattern = "HH:mm:ss") => {
if (!seconds) return "";
let after = moment({
hour: 0,
minute: 0,
second: 0,
})
.add("seconds", seconds)
.format(pattern);
return after || "";
};
/**
* @功能描述: 当前时间
* @参数: date:时长秒数 pattern:格式 时分秒/分秒
* @返回值:
*/
export const fetchCurrentTime = (pattern = "YYYY-MM-DD HH:mm") => {
let now = moment().format(pattern);
return now || "";
};
/**
* @功能描述: 将GM时间格式化为字符串时间 ( 一般为日期选择器daterange情况下)
* @参数: dateArr 数组 pattern:格式 时分秒/分秒
* @返回值:
*/
export const getDateParams = (dateArr = [], pattern = "YYYY-MM-DD") => {
return dateArr.map((ele) => {
if (!ele) return;
let time = String(new Date(ele).getTime());
time.length > 10 && (time = time.slice(0, time.length - 3)); // 毫秒 => 秒级时间戳
return dateFormat(time, pattern); // 格式化为YYYY-MM-DD
});
};
const Common_Format_Type = "YYYY-MM-DD";
// 当前系统的时间往前推一天
export const LastDayDate = moment()
.day(moment().day() - 1)
.format(Common_Format_Type);
// 当前时间往前推一周
export const LastWeekDayDate = moment()
.day(moment().day() - 7)
.format(Common_Format_Type);
// 当前时间(包含今天)往前推一周
export const LastSixDayDate = moment()
.day(moment().day() - 6)
.format(Common_Format_Type);
// 当前系统的时间
export const TodayDate = moment().format(Common_Format_Type);
// 当前时间往前推两周的时间
export const LastTwoWeekDayDate = moment()
.day(moment().day() - 14)
.format(Common_Format_Type);
3.vue过滤器
在template中,用管道符 | 使用
例:{{ stampStr | dateformat }}
// 利用插值表达式调用
Vue.filter("dateformat", function (date, pattern = "YYYY-MM-DD HH:mm:ss") {
if (!date) return "";
let len = String(date).length;
if (len < 12) {
// 秒级时间戳转为毫秒级时间戳
date = date * 1000;
}
return moment(date).format(pattern);
});
4.有关对象/数组
/**
* 判断一个对象是否存在key,如果传入第二个参数key,则是判断这个obj对象是否存在key这个属性
* 如果没有传入key这个参数,则判断obj对象是否有键值对
*/
export const hasKey = (obj, key) => {
if (key) return key in obj;
else {
let keysArr = Object.keys(obj);
return keysArr.length;
}
};
/**
* @param {*} obj1 对象
* @param {*} obj2 对象
* @description 判断两个对象是否相等,这两个对象的值只能是数字或字符串
*/
export const objEqual = (obj1, obj2) => {
const keysArr1 = Object.keys(obj1);
const keysArr2 = Object.keys(obj2);
if (keysArr1.length !== keysArr2.length) return false;
else if (keysArr1.length === 0 && keysArr2.length === 0) return true;
/* eslint-disable-next-line */ else
return !keysArr1.some((key) => obj1[key] != obj2[key]);
};
// 判断两个简单类型数组是否相同
export const isEqualList = (arr1 = [], arr2 = []) => {
let arrStr1 = JSON.stringify(arr1.sort());
let arrStr2 = JSON.stringify(arr2.sort());
let res = arrStr1 === arrStr2;
return res;
};
其他
// 计算百分比
export const calcPercent = (currentSec, total) => {
if (!currentSec) return "0%";
let rate = ((currentSec / total) * 100).toFixed(2) + "%";
return rate;
};
/**
* @returns {String} 当前浏览器名称
*/
export const getExplorer = () => {
const ua = window.navigator.userAgent;
const isExplorer = exp => {
return ua.indexOf(exp) > -1;
};
if (isExplorer("MSIE")) return "IE";
else if (isExplorer("Firefox")) return "Firefox";
else if (isExplorer("Chrome")) return "Chrome";
else if (isExplorer("Opera")) return "Opera";
else if (isExplorer("Safari")) return "Safari";
};