「这是我参与2022首次更文挑战的第8天,活动详情查看:2022首次更文挑战」。
在上一篇文章Vue导入文件封装中介绍了文件的导入功能,需要的小伙伴可以去看看哦!有了导入,自然就需要文件的导出和下载功能啦,一般也是封装一个工具类,在需要的页面中调用,这样就很方便啦。
文件的导出/下载
1.创建form对象
document.createElement('form')
2.设置样式
form.setAttribute('style', 'display:none');
3.设置上传类型
form.setAttribute('method', method);
4.设置上传的url
form.setAttribute('action', url);
5.设置传递的参数
let input = document.createElement('input');
input.type = 'hidden';
input.name = key;
input.value = postData[key];
form.appendChild(input);
6.全部代码,按需引入
/**
* 导出表格
*/
export function doExportExcel(url, postData, { method = 'post' } = {}) {
let form = document.createElement('form');
form.setAttribute('style', 'display:none');
form.setAttribute('method', method);
form.setAttribute('action', url);
for (let key in postData) {
let input = document.createElement('input');
input.type = 'hidden';
input.name = key;
input.value = postData[key];
form.appendChild(input);
}
let body = document.createElement('body');
body.style.display = "none";
document.body.appendChild(form);
form.submit();
form.remove();
}
7.组件调用
import { doExportExcel } from '@/utils/common.js';
doExportExcel(url, postData)// 先引用再调用
文件的下载
如果后台接口是post的话,可以用上面的导出的封装,如果是get的话,可以直接用a链接,设置href下载,更加方便。
window.open(url) get请求 下载文件
数字转中文
通常前端页面展示的时候UI设计的会出现展示中文的星期几,周几等等,但是一般后端会直接返回阿拉伯数字,这时候就需要前端自行转化了,写成一个公共方法就很方便啦!
const intToChinese = (value) => {
const str = String(value);
const len = str.length-1;
const idxs = ['','十','百','千','万','十','百','千','亿','十','百','千','万','十','百','千','亿'];
const num = ['零','一','二','三','四','五','六','七','八','九'];
return str.replace(/([1-9]|0+)/g, ( $, $1, idx, full) => {
let pos = 0;
if($1[0] !== '0'){
pos = len-idx;
if(idx == 0 && $1[0] == 1 && idxs[len-idx] == '十'){
return idxs[len-idx];
}
return num[$1[0]] + idxs[len-idx];
} else {
let left = len - idx;
let right = len - idx + $1.length;
if(Math.floor(right / 4) - Math.floor(left / 4) > 0){
pos = left - left % 4;
}
if( pos ){
return idxs[pos] + num[$1[0]];
} else if( idx + $1.length >= len ){
return '';
}else {
return num[$1[0]]
}
}
});
}
数字转大写金额
项目中有时候需要展示金额,而后台返回的是数字,就可以在common.js中封装一个工具类,需要转的时候直接调用就可以了
const digitUppercase = (n) => {
const fraction = ['角', '分'];
const digit = [
'零', '壹', '贰', '叁', '肆',
'伍', '陆', '柒', '捌', '玖'
];
const unit = [
['元', '万', '亿'],
['', '拾', '佰', '仟']
];
n = Math.abs(n);
let s = '';
for (let i = 0; i < fraction.length; i++) {
s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '');
}
s = s || '整';
n = Math.floor(n);
for (let i = 0; i < unit[0].length && n > 0; i++) {
let p = '';
for (let j = 0; j < unit[1].length && n > 0; j++) {
p = digit[n % 10] + unit[1][j] + p;
n = Math.floor(n / 10);
}
s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s;
}
return s.replace(/(零.)*零元/, '元')
.replace(/(零.)+/g, '零')
.replace(/^整$/, '零元整');
};