vue2-s-cli
Version:
脚手架
360 lines (336 loc) • 10.6 kB
JavaScript
// 获取相应日期
const getDate = (json) => {
let newDate = new Date(Number(json.times || 0));
let year = newDate.getFullYear() + "";
let month = newDate.getMonth() + 1;
let day = newDate.getDate();
let hour = newDate.getHours();
let minute = newDate.getMinutes();
let second = newDate.getSeconds();
let str = "";
// 不够10前面补0
month = month < 10 ? "0" + month : month + "";
day = day < 10 ? "0" + day : day + "";
hour = hour < 10 ? "0" + hour : hour + "";
minute = minute < 10 ? "0" + minute : minute + "";
second = second < 10 ? "0" + second : second + "";
switch (json.type) {
case "date":
str = `${year}-${month}-${day}`;
break;
case "minute":
str = `${year}-${month}-${day} ${hour}:${minute}`;
break;
case "second":
str = `${year}-${month}-${day} ${hour}:${minute}:${second}`;
break;
case "secondUnderline":
str = `${year}_${month}_${day} ${hour}_${minute}_${second}`;
break;
case "dateUnderline":
str = `${year}_${month}_${day}`;
break;
}
return str;
};
// 格式化日期
const formatDate = (date = new Date(), format = "YY-MM-DD hh:mm:ss") => {
const obj = {
YY: date.getFullYear() + "", // 年
MM: date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1 + "", // 月
DD: date.getDate() < 10 ? "0" + date.getDate() : date.getDate() + "", // 日
hh: date.getHours() < 10 ? "0" + date.getHours() : date.getHours() + "", // 时
mm: date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes() + "", // 分
ss: date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds() + "", // 秒
};
return [
{
id: format.indexOf("YY"),
v: obj.YY + format.charAt(format.indexOf("YY") + 2),
},
{
id: format.indexOf("MM"),
v: obj.MM + format.charAt(format.indexOf("MM") + 2),
},
{
id: format.indexOf("DD"),
v: obj.DD + format.charAt(format.indexOf("DD") + 2),
},
{
id: format.indexOf("hh"),
v: obj.hh + format.charAt(format.indexOf("hh") + 2),
},
{
id: format.indexOf("mm"),
v: obj.mm + format.charAt(format.indexOf("mm") + 2),
},
{
id: format.indexOf("ss"),
v: obj.ss + format.charAt(format.indexOf("ss") + 2),
},
]
.filter((v) => v.id > -1)
.reduce((a, b) => a + b.v, "");
};
/**
* 格式化时间
* @param {*} time 毫秒
* @param {*} format 格式
*/
const formatTime = (time, format = "hh:mm:ss") => {
const h = parseInt(time / 1000 / 60 / 60);
const m = parseInt((time / 1000 / 60) % 60);
const s = parseInt((time / 1000) % 60);
const obj = {
hh: h < 10 ? `0${h}` : `${h}`, // 时
mm: m < 10 ? `0${m}` : `${m}`, // 分
ss: s < 10 ? `0${s}` : `${s}`, // 秒
};
return [
{
id: format.indexOf("hh"),
v: obj.hh + format.charAt(format.indexOf("hh") + 2),
},
{
id: format.indexOf("mm"),
v: obj.mm + format.charAt(format.indexOf("mm") + 2),
},
{
id: format.indexOf("ss"),
v: obj.ss + format.charAt(format.indexOf("ss") + 2),
},
]
.filter((v) => v.id > -1)
.reduce((a, b) => a + b.v, "");
};
// 格式化数据
const formatLimit = (val, type) => {
let str = String(val || "");
switch (type) {
case "toThousands":
if (str.indexOf(".") > -1) {
str = str.replace(/(\d)(?=(\d{3})+\.)/g, "$1,");
} else {
str = str.replace(/(\d)(?=(?:\d{3})+$)/g, "$1,");
}
break;
}
return str;
};
/**
* 本地存储
* @param {*} key 存储对应的key名称
* @param {*} data 存储的数据
* @param {*} mode 默认false,false存sessionStorage,true存localStorage
*/
const saveStorege = (key, data, mode = false) => {
let saveData = data;
if (mode) {
localStorage.setItem(key, JSON.stringify(saveData));
} else {
let obj = sessionStorage.getItem(key);
if (obj) {
obj = JSON.parse(obj);
if (Object.prototype.toString.call(obj) === "[object Object]") {
saveData = { ...obj, ...data };
}
}
sessionStorage.setItem(key, JSON.stringify(saveData));
}
};
/**
* 获取浏览器本地存储数据
* @param {string} key 键值
* @param {boolen} mode 默认false,false取sessionStorage,true取localStorage
*/
const getStorage = (key, mode = false) => {
if (mode) {
return (localStorage.getItem(key) && JSON.parse(localStorage.getItem(key))) || null;
}
return (sessionStorage.getItem(key) && JSON.parse(sessionStorage.getItem(key))) || null;
};
// 获取path最后的路径
const getEndPath = (data) => {
const text = data.text;
const sign = data.sign;
const index = text.lastIndexOf(sign);
const str = text.substring(index, text.length);
return str;
};
// 获取url中的参数
const getUrlParam = (url, key) => {
let arr = {};
url.replace(/\??(\w+)=(\w+)&?/g, function (match, matchKey, matchValue) {
// 如果同名,只取最后一个
arr[matchKey] = matchValue;
});
if (!key) {
return arr;
} else {
for (const ele in arr) {
if (ele === key) {
return arr[ele];
}
}
return "";
}
};
// 替换url参数,如果存在则替换,不存在则增加
const replaceParamVal = (url, paramName, replaceVal) => {
let oUrl = url.toString();
if (oUrl.indexOf(paramName) > -1) {
// 存在
let re = eval("/(" + paramName + "=)([^&]*)/gi");
oUrl = oUrl.replace(re, paramName + "=" + replaceVal);
} else {
// 不存在
let sign = oUrl.indexOf("?") > -1 ? "&" : "?";
oUrl = `${oUrl}${sign}${paramName}=${replaceVal}`;
}
return oUrl;
};
// 获取元素到页面顶部的距离
const getElementToPageTop = (el) => {
if (el.offsetParent) {
return getElementToPageTop(el.offsetParent) + el.offsetTop;
}
return el.offsetTop;
};
const formatChinaNumber = (money) => {
//汉字的数字
let cnNums = new Array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"); //基本单位
let cnIntRadice = new Array("", "拾", "佰", "仟"); //对应整数部分扩展单位
let cnIntUnits = new Array("", "万", "亿", "兆"); //对应小数部分单位
let cnDecUnits = new Array("角", "分", "毫", "厘"); //整数金额时后面跟的字符
let cnInteger = "整"; //整型完以后的单位
let cnIntLast = "元"; //最大处理的数字
let maxNum = 999999999999999.9999; //金额整数部分
let integerNum; //金额小数部分
let decimalNum; //输出的中文金额字符串
let chineseStr = ""; //分离金额后用的数组,预定义
let parts;
if (money == "") {
return "";
}
money = parseFloat(money);
if (money >= maxNum) {
//超出最大处理数字
return "";
}
if (money == 0) {
chineseStr = cnNums[0] + cnIntLast + cnInteger;
return chineseStr;
} //转换为字符串
money = money.toString();
if (money.indexOf(".") == -1) {
integerNum = money;
decimalNum = "";
} else {
parts = money.split(".");
integerNum = parts[0];
decimalNum = parts[1].substr(0, 4);
} //获取整型部分转换
if (parseInt(integerNum, 10) > 0) {
let zeroCount = 0;
let IntLen = integerNum.length;
for (let i = 0; i < IntLen; i++) {
let n = integerNum.substr(i, 1);
let p = IntLen - i - 1;
let q = p / 4;
let m = p % 4;
if (n == "0") {
zeroCount++;
} else {
if (zeroCount > 0) {
chineseStr += cnNums[0];
} //归零
zeroCount = 0;
chineseStr += cnNums[parseInt(n)] + cnIntRadice[m];
}
if (m == 0 && zeroCount < 4) {
chineseStr += cnIntUnits[q];
}
}
chineseStr += cnIntLast;
} //小数部分
if (decimalNum != "") {
let decLen = decimalNum.length;
for (let i = 0; i < decLen; i++) {
let n = decimalNum.substr(i, 1);
if (n != "0") {
chineseStr += cnNums[Number(n)] + cnDecUnits[i];
}
}
}
if (chineseStr == "") {
chineseStr += cnNums[0] + cnIntLast + cnInteger;
} else if (decimalNum == "") {
chineseStr += cnInteger;
}
return chineseStr;
};
/**
* 递归遍历,替换字段名称
* @param {*} arr 需要处理的数组
* @param {*} filedArr 替换成的字段名对象
* @param {*} childs 遍历的子级数组
*/
const recursionReplaceFiled = (arr) => {
let initArr = arr || [];
// let banFiled = []; // 废弃字段
const len = initArr.length;
for (let i = 0; i < len; i++) {
let item = initArr[i] || {};
let members = item.members || [];
const sub_department = item.sub_department || [];
if (members.length) {
members.forEach((item) => {
item["leaf"] = true;
item["name"] = item.username || "";
});
item["sub_department"] = [...members, ...sub_department];
}
if (sub_department.length) {
recursionReplaceFiled(sub_department);
}
}
return initArr;
};
// 下载文件
const downloadFile = (data, isFetch = "true") => {
const fileName = data.fileName || "";
const fileUrl = data.fileUrl || "";
// 浏览器支持fetch则用blob下载,避免浏览器点击a标签,跳转到新页面预览的行为
if (window.fetch && isFetch) {
fetch(fileUrl)
.then((res) => res.blob())
.then((blob) => {
let a = document.createElement("a");
let url = window.URL.createObjectURL(blob);
a.href = url;
a.download = fileName;
a.click();
});
} else {
let a = document.createElement("a");
a.href = fileUrl;
a.target = "_blank";
a.download = fileName;
a.click();
}
};
export default {
formatDate, // 格式化-日期
formatTime, // 格式化-时间间隔
formatLimit, // 格式化-数据
saveStorege, // 本地存储
getStorage, // 获取本地存储数据
getEndPath, // 获取最后的路径
getUrlParam, // 获取url中的参数
replaceParamVal, // 替换url参数,如果存在则替换,不存在则增加
getElementToPageTop, // 获取元素到页面顶部的距离
formatChinaNumber, // 阿拉伯数字转换成中文大写数字
recursionReplaceFiled, // 递归遍历替换字段名称
downloadFile, // 下载文件
getDate
};