阿拉伯数字转汉字
//方案一
NumberToChinese(num) {
var chnNumChar = [
"零",
"一",
"二",
"三",
"四",
"五",
"六",
"七",
"八",
"九"
];
var chnUnitSection = ["", "万", "亿", "万亿", "亿亿"];
var chnUnitChar = ["", "十", "百", "千"];
var unitPos = 0;
var strIns = "",
chnStr = "";
var needZero = false;
if (num === 0) {
return chnNumChar[0];
}
while (num > 0) {
var section = num % 10000;
if (needZero) {
chnStr = chnNumChar[0] + chnStr;
}
strIns = this.SectionToChinese(section);
strIns += section !== 0 ? chnUnitSection[unitPos] : chnUnitSection[0];
chnStr = strIns + chnStr;
needZero = section < 1000 && section > 0;
num = Math.floor(num / 10000);
unitPos++;
}
return chnStr;
},
lazyLoadScript(url) {
return new Promise((resolve, reject) => {
let script = document.createElement("script");
script.src = url;
script.type = "text/javascript";
let head = document.getElementsByTagName("head")[0];
head.appendChild(script);
script.onload = () => {
resolve();
};
script.onerror = err => {
reject(err);
};
});
},
//方案二
DX(n) {
if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(n)) return "数据非法";
if (n === 0) {
return "零";
}
let unit = "万千百拾亿千百拾万千百拾元角分";
let str = "";
n += "00";
let p = n.indexOf(".");
if (p >= 0) n = n.substring(0, p) + n.substr(p + 1, 2);
unit = unit.substr(unit.length - n.length);
for (var i = 0; i < n.length; i++) {
str += "零壹贰叁肆伍陆柒捌玖".charAt(n.charAt(i)) + unit.charAt(i);
}
return str
.replace(/零(千|百|拾|角)/g, "零")
.replace(/(零)+/g, "零")
.replace(/零(万|亿|元)/g, "$1")
.replace(/(亿)万|壹(拾)/g, "$1$2")
.replace(/^元零?|零分/g, "")
.replace(/元$/g, "元整");
},
其他常用
setSS: (key, value) => {
sessionStorage.setItem(key, JSON.stringify(value));
},
getSS: key => {
let value = sessionStorage.getItem(key);
try {
return JSON.parse(value);
} catch (err) {
return value;
}
},
delSS: key => {
sessionStorage.removeItem(key);
},
setLS: (key, value) => {
localStorage.setItem(key, JSON.stringify(value));
},
getLS: key => {
let value = localStorage.getItem(key);
try {
return JSON.parse(value);
} catch (err) {
return value;
}
},
delLS: key => {
localStorage.removeItem(key);
},
setCookie: (name, value) => {
const Days = 0.5;
const exp = new Date();
exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000);
document.cookie =
name + "=" + escape(value) + ";expires=" + exp.toGMTString();
},
getCookie: name => {
const reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
const arr = document.cookie.match(reg);
if (arr) {
return unescape(arr[2]);
} else {
return null;
}
},
delCookie: name => {
const exp = new Date();
exp.setTime(exp.getTime() - 1);
const cval = utils.getCookie(name);
if (cval != null) {
document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString();
}
},
downLoad: downLoadUrl => {
let a = document.createElement("a");
if (a.download) {
a.href = downLoadUrl;
if (document.createEvent) {
var evObj = document.createEvent("MouseEvents");
evObj.initEvent(
"click",
true,
true,
window,
1,
12,
345,
7,
220,
false,
false,
true,
false,
0,
null
);
a.dispatchEvent(evObj);
} else if (document.createEventObject) {
a.fireEvent("onmousemove");
}
} else {
window.open(downLoadUrl, "_blank");
}
},
postDownLoad: (url, options, fileName) => {
Message({
message: "开始下载",
type: "success"
});
axiosHttp()({
method: options.method || "post",
url: url,
responseType: "blob",
timeout: options.timeout || 10000,
params: options.params || {},
data: options.data || {}
})
.then(res => {
const blob = new Blob([res.data]);
// 兼容不同浏览器的URL对象
const url = window.URL || window.webkitURL || window.moxURL;
// 获取后台提供的文件名
let backendFileName = res.headers["content-disposition"];
if (/utf-8''/i.test(backendFileName)) {
backendFileName = backendFileName.split("-8''")[1];
} else if (backendFileName && backendFileName.length >= 2) {
backendFileName = backendFileName.split("=")[1];
}
backendFileName = decodeURIComponent(backendFileName);
// 兼容IE
if ("msSaveOrOpenBlob" in navigator) {
window.navigator.msSaveOrOpenBlob(blob, fileName || backendFileName);
return;
}
// 创建下载链接
const downloadHref = url.createObjectURL(blob);
// 创建a标签并为其添加属性
let downloadLink = document.createElement("a");
downloadLink.href = downloadHref;
downloadLink.download = fileName || backendFileName || "未知文件.txt";
// 触发点击事件执行下载
downloadLink.click();
})
.catch(_ => {
Message({
message: "下载失败",
type: "error"
});
});
},
imgView: downLoadUrl => {
window.open("../../#/imgView?url=" + downLoadUrl);
},
pdfView: downLoadUrl => {
window.open("../../#/pdfView?url=" + downLoadUrl);
},
format: (date, fmt) => {
// 格式化日期
var _date = new Date(date);
var o = {
"y+": _date.getFullYear(),
"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() // 毫秒
};
for (var k in o) {
if (new RegExp("(" + k + ")").test(fmt)) {
if (k === "y+") {
fmt = fmt.replace(
RegExp.$1,
("" + o[k]).substr(4 - RegExp.$1.length)
);
} else if (k === "S+") {
var lens = RegExp.$1.length;
lens = lens === 1 ? 3 : lens;
fmt = fmt.replace(
RegExp.$1,
("00" + o[k]).substr(("" + o[k]).length - 1, lens)
);
} else {
fmt = fmt.replace(
RegExp.$1,
RegExp.$1.length === 1
? o[k]
: ("00" + o[k]).substr(("" + o[k]).length)
);
}
}
}
return fmt;
},
parseUrl: () => {
// url获参
var param = {};
var matchs = window.location.href
.substring(window.location.href.indexOf("?") + 1)
.split("&");
matchs.forEach(element => {
var match = element.split("=");
param[match[0]] = match[1];
});
return param;
},
deepClone: obj => {
var _obj;
if (typeof obj === "object" && obj !== null) {
if (Object.prototype.toString.call(obj) === "[object Object]") {
_obj = {};
for (var key in obj) {
_obj[key] = utils.deepClone(obj[key]);
}
return _obj;
} else if (Object.prototype.toString.call(obj) === "[object Array]") {
_obj = [];
for (var _key in obj) {
_obj[_key] = utils.deepClone(obj[_key]);
}
return _obj;
} else {
return obj;
}
} else {
return obj;
}
},
/**
* 深度清空对象的value值
* @param {Object} obj 待清空对象
*/
deepClear: (obj) => {
for (let key in obj) {
if (Object.prototype.toString.call(obj[key]) === '[object Object]') {
utils.deepClear(obj[key])
} else if (Object.prototype.toString.call(obj[key]) === '[object Array]') {
obj[key] = []
} else {
obj[key] = null
}
}
},
/**
*
* @param {Int,Float} value 数值
* @param {Int} effLen 有效长度
* @param {Int} deciLen 保留小数点
*/
validateNumber(value, effLen, deciLen) {
if (!value) {
return {
isValid: false,
msg: null
};
}
let intLen = effLen - deciLen - 1;
// /(^[1-9][0-9]{0,12}(\.\d{1,2})?$)|(^[0-9]\.\d{1,2}?$)|(^[1-9][0-9]{0,12}$)/
let regk =
"/(^[1-9][0-9]{0," +
intLen +
"}(\\.\\d{1," +
deciLen +
"})?$)|(^[0-9]\\.\\d{1," +
deciLen +
"}?$)|(^[1-9][0-9]{0," +
intLen +
"}$)/";
let reg = this.evil(regk);
if (!reg.test(value + "")) {
return {
isValid: false,
msg: new Error(
"最多输入 " +
(effLen - deciLen) +
" 位正整数, " +
deciLen +
" 位小数"
)
};
} else {
return true;
}
},
evil(fn) {
var Fn = Function; // 一个变量指向Function,防止有些前端编译工具报错
return new Fn("return " + fn)();
},
arrayConcatUnrepeat(arr1, arr2, corekey) {
let result = [];
if (arr1.length && arr2.length) {
let arr = arr1.concat(arr2);
let obj = {};
for (let i = 0; i < arr.length; i++) {
if (!obj[arr[i][corekey]]) {
result.push(arr[i]);
obj[arr[i][corekey]] = true;
}
}
} else {
result = arr1 || arr2 ? arr2 : [];
}
return result;
},
luhmCheck: bankno => {
var lastNum = bankno.substr(bankno.length - 1, 1); // 取出最后一位(与luhm进行比较)
var first15Num = bankno.substr(0, bankno.length - 1); // 前15或18位
var newArr = [];
for (var i = first15Num.length - 1; i > -1; i--) {
// 前15或18位倒序存进数组
newArr.push(first15Num.substr(i, 1));
}
var arrJiShu = []; // 奇数位*2的积 <9
var arrJiShu2 = []; // 奇数位*2的积 >9
var arrOuShu = []; // 偶数位数组
for (var j = 0; j < newArr.length; j++) {
if ((j + 1) % 2 === 1) {
// 奇数位
if (parseInt(newArr[j]) * 2 < 9) {
arrJiShu.push(parseInt(newArr[j]) * 2);
} else {
arrJiShu2.push(parseInt(newArr[j]) * 2);
}
} else {
arrOuShu.push(newArr[j]);
}
}
var jishuChild1 = []; // 奇数位*2 >9 的分割之后的数组个位数
var jishuChild2 = []; // 奇数位*2 >9 的分割之后的数组十位数
for (var h = 0; h < arrJiShu2.length; h++) {
jishuChild1.push(parseInt(arrJiShu2[h]) % 10);
jishuChild2.push(parseInt(arrJiShu2[h]) / 10);
}
var sumJiShu = 0; // 奇数位*2 < 9 的数组之和
var sumOuShu = 0; // 偶数位数组之和
var sumJiShuChild1 = 0; // 奇数位*2 >9 的分割之后的数组个位数之和
var sumJiShuChild2 = 0; // 奇数位*2 >9 的分割之后的数组十位数之和
var sumTotal = 0;
for (var m = 0; m < arrJiShu.length; m++) {
sumJiShu = sumJiShu + parseInt(arrJiShu[m]);
}
for (var n = 0; n < arrOuShu.length; n++) {
sumOuShu = sumOuShu + parseInt(arrOuShu[n]);
}
for (var p = 0; p < jishuChild1.length; p++) {
sumJiShuChild1 = sumJiShuChild1 + parseInt(jishuChild1[p]);
sumJiShuChild2 = sumJiShuChild2 + parseInt(jishuChild2[p]);
}
// 计算总和
sumTotal =
parseInt(sumJiShu) +
parseInt(sumOuShu) +
parseInt(sumJiShuChild1) +
parseInt(sumJiShuChild2);
// 计算Luhm值
var k = parseInt(sumTotal) % 10 === 0 ? 10 : parseInt(sumTotal) % 10;
var luhm = 10 - k;
if (+lastNum === luhm && lastNum.length !== 0) {
return true;
} else {
return false;
}
},
// 显示当前日期 20180907
getNowDate() {
var y = new Date().getFullYear();
var m = new Date().getMonth() + 1;
m = m < 10 ? "0" + m : m;
var d = new Date().getDate();
d = d < 10 ? "0" + d : d;
return y + "" + m + "" + d;
},
// 时间戳更改为日期展示 2020-12-30
getDateFormat(time) {
if (time) {
var y = new Date(time).getFullYear();
var m = new Date(time).getMonth() + 1;
m = m < 10 ? "0" + m : m;
var d = new Date(time).getDate();
d = d < 10 ? "0" + d : d;
return y + "-" + m + "-" + d;
} else {
return ''
}
},
// 获取时间戳
getDateTime(dateTime) {
let date;
if (dateTime) {
date = new Date(dateTime);
} else {
date = new Date();
}
let month = date.getMonth() + 1;
let strDate = date.getDate();
if (month >= 1 && month <= 9) {
month = "0" + month;
}
if (strDate >= 0 && strDate <= 9) {
strDate = "0" + strDate;
}
return `${date.getFullYear()}-${month}-${strDate} ${date.getHours()}:${
date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes()
}:${date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds()}`;
},
// 阿拉伯数字转大写
DX(n) {
if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(n)) return "数据非法";
if (n === 0) {
return "零";
}
let unit = "万千百拾亿千百拾万千百拾元角分";
let str = "";
n += "00";
let p = n.indexOf(".");
if (p >= 0) n = n.substring(0, p) + n.substr(p + 1, 2);
unit = unit.substr(unit.length - n.length);
for (var i = 0; i < n.length; i++) {
str += "零壹贰叁肆伍陆柒捌玖".charAt(n.charAt(i)) + unit.charAt(i);
}
return str
.replace(/零(千|百|拾|角)/g, "零")
.replace(/(零)+/g, "零")
.replace(/零(万|亿|元)/g, "$1")
.replace(/(亿)万|壹(拾)/g, "$1$2")
.replace(/^元零?|零分/g, "")
.replace(/元$/g, "元整");
},
SectionToChinese(section) {
var chnNumChar = [
"零",
"一",
"二",
"三",
"四",
"五",
"六",
"七",
"八",
"九"
];
var chnUnitSection = ["", "万", "亿", "万亿", "亿亿"];
var chnUnitChar = ["", "十", "百", "千"];
var strIns = "",
chnStr = "";
var unitPos = 0;
var zero = true;
while (section > 0) {
var v = section % 10;
if (v === 0) {
if (!zero) {
zero = true;
chnStr = chnNumChar[v] + chnStr;
}
} else {
zero = false;
strIns = chnNumChar[v];
strIns += chnUnitChar[unitPos];
chnStr = strIns + chnStr;
}
unitPos++;
section = Math.floor(section / 10);
}
return chnStr;
},
NumberToChinese(num) {
var chnNumChar = [
"零",
"一",
"二",
"三",
"四",
"五",
"六",
"七",
"八",
"九"
];
var chnUnitSection = ["", "万", "亿", "万亿", "亿亿"];
var chnUnitChar = ["", "十", "百", "千"];
var unitPos = 0;
var strIns = "",
chnStr = "";
var needZero = false;
if (num === 0) {
return chnNumChar[0];
}
while (num > 0) {
var section = num % 10000;
if (needZero) {
chnStr = chnNumChar[0] + chnStr;
}
strIns = this.SectionToChinese(section);
strIns += section !== 0 ? chnUnitSection[unitPos] : chnUnitSection[0];
chnStr = strIns + chnStr;
needZero = section < 1000 && section > 0;
num = Math.floor(num / 10000);
unitPos++;
}
return chnStr;
},
lazyLoadScript(url) {
return new Promise((resolve, reject) => {
let script = document.createElement("script");
script.src = url;
script.type = "text/javascript";
let head = document.getElementsByTagName("head")[0];
head.appendChild(script);
script.onload = () => {
resolve();
};
script.onerror = err => {
reject(err);
};
});
},
hasClass(ele, cls) {
return ele && ele.className.match(new RegExp("(\\s|^)" + cls + "(\\s|$)"));
},
addClass(ele, cls) {
if (!this.hasClass(ele, cls)) ele.className += " " + cls;
},
removeClass(ele, cls) {
if (this.hasClass(ele, cls)) {
var reg = new RegExp("(\\s|^)" + cls + "(\\s|$)");
ele.className = ele.className.replace(reg, " ");
}
},
scroll() {
var scrollTop = document.getElementById("app").scrollTop - 88;
document.getElementById("app").scrollTop = scrollTop;
},
clearSession() {
sessionStorage.clear();
store.commit("delLoginInfo");
},
myToLocaleString(value) {
if (!value) {
return value;
}
let str = Number(value.split(".")[0]).toLocaleString();
if (value.split(".")[1]) {
str += "." + value.split(".")[1];
}
return str;
},
// input框输入数字转小数
plusOrMinus(values) {
let newValue;
if (!/[^0-9.-]/g.test(values)) {
newValue = values
.replace(/[^\-\d.]/g, "")
.replace(/\b(0+){2,}/g, "0")
.replace(/\{2,}/g, "-")
.replace(/^\./g, "")
.replace(/\.{2,}/g, ".")
.replace(".", "$#$")
.replace(/\./g, "")
.replace("$#$", ".");
if (
newValue.toString().indexOf(".") > 0 &&
Number(newValue.toString().split(".")[1].length) > 2
) {
newValue = parseInt(parseFloat(newValue) * 100) / 100;
}
if (newValue.toString().split("-").length - 1 > 1) {
newValue = parseFloat(newValue) || "";
}
if (
newValue.toString().split("-").length > 1 &&
newValue.toString().split("-")[0].length > 0
) {
newValue = parseFloat(newValue) || "";
}
if (
newValue.toString().length > 1 &&
(newValue.toString().charAt(0) === "0" ||
(newValue.toString().length > 2 &&
newValue.toString().charAt(0) === "-" &&
newValue.toString().charAt(1) === "0" &&
newValue.toString().charAt(2) !== ".")) &&
newValue.toString().indexOf(".") < 1
) {
newValue = parseFloat(newValue) || "";
}
// 判断整数位最多为9位
if (
newValue.toString().indexOf(".") > 0 &&
Number(newValue.toString().split(".")[0].length) > 9
) {
newValue =
newValue.toString().substring(0, 9) +
"." +
newValue.toString().split(".")[1];
} else if (
newValue.toString().indexOf(".") < 0 &&
Number(newValue.toString().split(".")[0].length) > 9
) {
newValue = newValue.toString().substring(0, 9);
}
} else {
newValue = values.replace(/[^0-9.-]/g, "");
}
return newValue;
},
/**
* 10000 => "10,000.00"
* 数字转换为千分符
*/
toThousandFilter(num, str = '', n = 2) {
if ([null, undefined, ''].includes(num)) return str
let _num = (+num || 0)
.toString()
.replace(/^-?\d+/g, m => m.replace(/(?=(?!\b)(\d{3})+$)/g, ","));
if (_num.indexOf(".") === -1 && n) {
_num = _num + ".00";
} else if (
_num.indexOf(".") !== -1 &&
_num.toString().split(".")[1].length === 1
) {
_num = _num + "0";
}
return _num;
},
/**
* 获取枚举值
* @param {Object} enumObj 枚举对象
*/
getEnumCodeOrName(enumObj, key = 'code') {
return Object.prototype.toString.call(enumObj) === '[object Object]' ? enumObj[key] : enumObj
},
/**
* 获取枚举值
* @param {String} code 枚举code
* @param {Array} enumList 枚举列表
*/
generateEnum(code, enumList) {
let target = enumList.find(item => item.code === code)
if (target) {
return {
code,
name: target.description || target.name
}
} else {
return null
}
},
/**
* 转换表格数据枚举值
* @param {Array} enumArr 需转换的枚举字段
* @param {Array} tableData 原始表单数据
*/
translateTableData(enumArr, tableData) {
if (!enumArr || !tableData) return [];
let _data = utils.deepClone(tableData);
enumArr.forEach(enumKey => {
_data.forEach(obj => {
obj[`${enumKey}Name`] = utils.getEnumCodeOrName(obj[enumKey], 'name')
obj[`${enumKey}Code`] = utils.getEnumCodeOrName(obj[enumKey], 'code')
})
})
return _data
},
addClass(ele, cls) {
ele.classList.add(cls);
},
removeClass(ele, cls) {
ele.classList.remove(cls);
},
throttle(method, time = 500) {
var timer = null;
var begin = new Date();
return function () {
var context = this;
var args = arguments;
var current = new Date();
clearTimeout(timer);
if (current - begin >= time) {
method.apply(context, args);
begin = current;
} else {
timer = setTimeout(function () {
method.apply(context, args);
}, time);
}
};
},
chainOperator(obj, path) {
return path.split(".").reduce((pre, item, index) => {
if (index === 0) {
return pre === null || pre === undefined ? "" : obj;
} else {
return pre[item] === null || pre[item] === undefined ? "" : pre[item];
}
}, obj);
},
/**
* 输入框输入金额自动计算金额单位
* @param {数值} val
*/
amountFormat(val) {
let num = val ? val.toString().split(".")[0] : '0';
let num1 = num.split(',')
let num2 = num1.join('')
let unit = '';
switch (num2.length) {
case 3:
unit = '百';
break;
case 4:
unit = '千';
break;
case 5:
unit = '万';
break;
case 6:
unit = '十万';
break;
case 7:
unit = '百万';
break;
case 8:
unit = '千万';
break;
case 9:
unit = '亿';
break;
case 10:
unit = '十亿';
break;
case 11:
unit = '百亿';
break;
case 12:
unit = '千亿';
break;
default:
unit = '';
break;
}
return unit
},
/**
* 输入框取消去掉千分符
* @param {数值} val
*/
removeThousand(val) {
let num = val ? val : '0';
let num1 = num.toString().split(".")
let num2 = num1[0].split(',')
let num3 = num2.join('')
let num4 = num3 + "." + (num1[1] ? num1[1] : '0')
return num4
},
moneyToCapital(n) {
if (n == 0) {
return "零";
}
if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(n)) return "";
var unit = "仟佰拾兆仟佰拾亿仟佰拾万仟佰拾元角分",
str = "";
n += "00";
var p = n.indexOf(".");
if (p >= 0) n = n.substring(0, p) + n.substr(p + 1, 2);
unit = unit.substr(unit.length - n.length);
for (var i = 0; i < n.length; i++)
str += "零壹贰叁肆伍陆柒捌玖".charAt(n.charAt(i)) + unit.charAt(i);
return str
.replace(/零(千|百|拾|角)/g, "零")
.replace(/(零)+/g, "零")
.replace(/零(万|亿|元)/g, "$1")
.replace(/(亿)万|壹(拾)/g, "$1$2")
.replace(/^元零?|零分/g, "")
.replace(/元$/g, "元整");
},
/**
* 获取分组合并行数
* @param {数据源} list
* @param {合并单元格的列} column
*/
groupMergeRow(list = [], column) {
let group = {};
list.map(item => {
let key = item[column];
let value = group[key];
if (value) {
group[key] = ++value;
} else {
group[key] = 1;
}
});
return group;
},
/**
* 获取分组顺序
* @param {数据源} list
* @param {合并单元格的列} column
*/
groupOrder(list = [], column) {
let group = {};
list.filter((item, index) => {
let key = item[column];
let value = group[key];
if (!value && value !== 0) {
group[key] = index;
}
});
return group;
},
/**
* 获取分组序号(当合并单元格的列是根据id合并的,就会出现序号合并,需要调用此函数获取序号)
* @param {数据源} list
* @param {合并单元格的列} column
*/
groupSn(list = [], column) {
//获取分组编号
const map = new Map();
Array.from(new Set(list.map(item => item[column]))).map((item, index) => {
map.set(item, index + 1);
});
return map;
},
/**
* 深度清空对象的value值
* @param {Object} obj 待清空对象
*/
deepClear(obj) {
for (let key in obj) {
if (Object.prototype.toString.call(obj[key]) === "[object Object]") {
utils.deepClear(obj[key]);
} else if (
Object.prototype.toString.call(obj[key]) === "[object Array]"
) {
obj[key] = [];
} else {
obj[key] = null;
}
}
},
// 计算最大值
calMax(arr) {
let max = Math.max(...arr)
let maxint = Math.ceil(max / 9) // 不让最高的值超过最上面的刻度
let maxval = maxint * 10 // 让显示的刻度是整数
// 为了防止数据为0时,Y轴不显示,给个最大值
if (maxval == 0) { maxval = 1 }
return Math.ceil(maxval)
},
// 计算最小值
calMin(arr) {
let min = Math.min(...arr);
let minint = Math.floor(min / 10)
let minval = minint * 10 //让显示的刻度是整数
return Math.floor(minval)
},
/**
* @description: 异步async异常捕获,不冒泡至控制台
* @param {Promise} promise 对象
* @param {Array} 路径 [err, res]
*/
asyncCatch(promise, rejectCallback) {
return promise
.then(res => {
return [null, res]
})
.catch(err => {
if (typeof rejectCallback === 'function') {
rejectCallback()
}
console.log(err)
return [err]
})
},
/**
* @description: 确认弹窗
* @param {String} prompt 提示语
*/
confirm(prompt) {
prompt = prompt || '确认删除?'
return MessageBox.confirm(prompt, { closeOnClickModal: false })
},
/**
* @description: 空值转换
*/
transformNone(val, defaultVal = '') {
return [null, undefined, ''].includes(val) ? defaultVal : val
},
/**
* @description: excel报表下载
*/
exportExcel(title, message, url, sendObj, method = 'post') {
let obj = utils.deepClone(sendObj)
Notification({
title: "提示",
message: message || `${title}报表下载中,因计算量大,需等待时间长`,
duration: 10000
})
let loading = Loading.service({
fullscreen: false,
text: '下载中...',
background: 'rgba(0, 0, 0, 0.7)'
})
axios({
method: method || "post",
url,
baseURL: baseURL,
responseType: "blob",
timeout: 600000,
headers: {
"Content-type": "application/json;charset=UTF-8",
Authorization: utils.getSS("Authorization") || null
},
data: JSON.stringify({
body: obj
})
})
.then(res => {
const blob = new Blob([res.data], { type: "application/x-xls" });
// for IE
if (window.navigator && window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveOrOpenBlob(blob, `${title}报表.xls`);
} else {
// 兼容不同浏览器的URL对象
const url = window.URL || window.webkitURL || window.moxURL;
// 创建下载链接
const downloadHref = url.createObjectURL(blob);
// 创建a标签并为其添加属性
let downloadLink = document.createElement("a");
downloadLink.href = downloadHref;
downloadLink.download = `${title}报表.xls`;
// 触发点击事件执行下载
downloadLink.click();
}
})
.catch(_ => {
Message({
message: '下载失败',
type: 'error'
})
})
.finally(() => {
loading.close()
})
}
本文介绍了在Vue项目中常用的开发工具函数,包括阿拉伯数字转汉字的实现,以及一系列其他实用工具方法,帮助提升开发效率。
204

被折叠的 条评论
为什么被折叠?



