导出弹窗的html

<template>
<Modal v-model="exportModal" width=400 :closable="false" :mask-closable="false">
<p slot="header" style="color:#000;text-align:left">
<span>数据导出</span>
</p>
<div style="text-align:center;height:150px;color:#2d8cf0;line-height: 50px;">
<!--<Icon type="load-c" size=28 class="demo-spin-icon-load"></Icon>-->
<div style="font-size:18px;margin-top:20px;">数据正在导出,请稍等...</div>
<Progress :percent="percent" />
</div>
<div slot="footer">
<Button type="primary" size="large" long @click="$emit('cancelExportData')"><Icon type="ios-download-outline" style="margin-right:5px;"></Icon>取消导出</Button>
</div>
</Modal>
</template> <script>
export default {
name: "my-export",
props: ["exportModal", "percent"],
}
</script> <style scoped> </style>

导出的js公共逻辑

/**
* 导出公共方法 以上参数必传
* that 当前页面的this
* name table表格声明的表格名称,ref
* filename 当前页面的名称
* columns 当前页面表格的title 当没有分页也时,可以不传
* data 当前页面表格的数据 当没有分页也时,可以不传
*
* */ export function exportDataTable(that,name,filename,columns,data) {
setTimeout(function(){
that.$refs[name].exportCsv({
filename: filename,
columns: columns,
data: data,
});
that.exportModal = false;
that.dataTotal = [];
that.percent = 0;
},1000);
} /**
* 导出请求的公共方法 以上参数必传
* that 当前页面的this
* num table表格数据的页码数
* param 请求的传参
* url 当前请求的变量名
* table name, filename, columns ,formData 组成的对象
* table.name table表格声明的表格名称,ref
* table.columns 当前页面表格的title
* table.filename 当前页面的名称
* table.formData 特殊处理的文字,需把英文的逗号转换成中文的
* counts 总页码
*
* */
export function getDataTotal(that, num, param, url, table, counts) {
let params = JSON.parse(JSON.stringify(param));
params.page = num;
params.per_page = '1000';
if (that.exportModal && num < global.EXPORT_20_PAGE + 1) {
let page = counts > global.EXPORT_20_PAGE * 1000 ? global.EXPORT_20_PAGE * 1000 : counts;
url(params)
.then(data => {
let list = [];
if (data.list) {
list = data.list;
} else {
list = data.data;
}
if (table.formData.length) {
table.formData.forEach(ele => {
list = transformData(list, ele)
});
}
that.dataTotal = that.dataTotal.concat(list);
that.percent = (that.dataTotal.length / page).toFixed(2) * 100;
if (list.length === 1000 && num < global.EXPORT_20_PAGE) {
num++;
getDataTotal(that, num, param, url, table, counts)
} else {
exportDataTable(that, table.name, table.filename, table.columns, that.dataTotal);
}
})
.catch(err => {
that.$Message.error(err);
});
} else {
that.dataTotal = [];
that.percent = 0;
}
} /**
* 把表格中英文的逗号转换成中文的逗号
* */ export function transformData(data, title) { data.forEach(ele => {
if (title) {
if (ele[title]) {
ele[title] = ele[title].replace(/,/g, ',').replace(/\s|\xA0/g,"")
}
} else {
for (let key in ele) {
if (ele[key]) {
ele[key] = ele[key].replace(/,/g, ',').replace(/\s|\xA0/g, "")
}
}
}
})
return data
}

导出方法的使用

<Button type="primary" class="fr" @click="exportData(1)">
<Icon type="ios-download-outline"></Icon>
导出
</Button> <script>
export default {
methods: {
//导出方法
exportData(num) {
this.exportModal = true;
let url, columns = [], table = [], param = {};
param = {
city: gm.city,
campus: gm.campus,
min_ymd: this.param.min_ymd,
max_ymd: this.param.max_ymd,
student_name: this.param.student_name,
source_from: this.param.source_from ? this.param.source_from : 0,
type: 1,
};
columns = [
{
title: '校区',
key: 'f_campus'
},
{
title: '收款日期',
key: 'f_ymd'
},
{
title: '学生姓名',
key: 'student_name'
},
{
title: '年级',
key: 'f_grade'
},
{
title: '收款金额',
key: 'nbf_prepay_total'
},
{
title: '收款类型',
key: 'f_tuifei_flag'
},
{
title: '资源来源',
key: 'f_source_from'
},
{
title: '收款人 ',
key: 'f_cuid'
},
{
title: '核录 ',
key: 'f_cuid'
},
{
title: '核录时间 ',
key: 'f_ctime',
width: 140,
},
{
title: '是否合单',
key: 'f_is_hedan'
},
{
title: '合单信息 ',
key: 'hd'
},
];
table = {
name: 'table1',//表格的ref
filename: '新签明细',//列表名称
columns: columns,//列表的title
formData: ['hd'],//字段中是否有英文逗号
};
url = yejiDetail; this.$getDataTotal(this, num, param, url, table, this.counts);
},
//取消导出
cancelExportData() {
this.exportModal = false;
this.dataTotal = [];
this.percent = 0
}
}
}
</script>

这是针对我们公司后台获取数据缓慢,切容易崩掉的处理。

vue中的iviewUI导出1W条列表数据每次只导出2000条的逻辑的更多相关文章

  1. VUE中父组件向子组件传递数据 props使用

    VUE中,子组件是不能直接访问父组件的数据(一般来说,当然如果你要破坏原则也是可以),如下< <body> <div id="fathercomponent" ...

  2. Vue中如何使用axios请求跨域数据

    1.axios不支持jsonp,因为axios的作者觉得jsonp不太友好,推荐用CORS方式更为干净: 2.在使用axios发送请求时,服务器端设置 res.header("Access- ...

  3. 解决Vue中文本输入框v-model双向绑定后数据不显示的问题

    前言 项目中遇到一个问题就是在Vue中双向绑定对象属性时,手动赋值属性后输入框的数据不实时更新的问题. <FormItem label="地址" prop="eve ...

  4. Vue中使用computed与watch结合实现数据变化监听

    目的:当数据变化时,为其中重要数据增加边框,实现闪烁以达到提醒目的.数据格式如下,只有在未处理火警/故障时增加闪烁边框.可以使用watch进行深度监听.数据格式已定,也非常明确要监听的数据是有两个.既 ...

  5. 你真的会玩SQL吗?删除重复数据且只保留一条

    在网上看过一些解决方法 我在此给出的方法适用于无唯一ID的情形 表:TB_MACVideoAndPicture 字段只有2个:mac,content mac作为ID,正常情况下mac数据是唯一的,由于 ...

  6. ECharts折线图多个折线每次只显示一条

    echart 两条折线图如何默认只显示一条,另一条隐藏呢 只需要在legend后加上, selectedMode: 'single', selectedMode [ default: true ] 图 ...

  7. Oracle删除重复数据并且只留其中一条数据

    数据库操作中,经常会因为导数据造成数据重复,需要进行数据清理,去掉冗余的数据,只保留正确的数据 一:重复数据根据单个字段进行判断 1.首先,查询表中多余的数据,由关键字段(name)来查询. sele ...

  8. Vue中实现一个无限加载列表

    参考 https://www.jianshu.com/p/0a3aebd63a14 一个需要判断的地方就是加载中再次触发滚动的时候,不要获取数据. <!DOCTYPE html> < ...

  9. Vue学习笔记【21】——Vue中的动画(v-for 的列表过渡)

    定义过渡样式:  <style>    .list-enter,    .list-leave-to {      opacity: 0;      transform: translat ...

随机推荐

  1. js 模拟call、apply、bind实现

    1.模拟call实现 Function.prototype.myCall = function (context) { var context = context || window // 给 con ...

  2. PL/SQL学习笔记之触发器

    一:触发器响应的事件 数据库操作(DML)语句(DELETE,INSERT,UPDATE) 数据库定义(DDL)语句(CREATE,ALTER或DROP) 数据库操作(SERVERERROR,登录,注 ...

  3. zip压缩解压

    zip在linux中使用相对不太频繁,但是在window中使用频繁! zip参数 -q //不显示指令的执行过程,静默执行-r //递归处理文件-T //检测zip文件是否可用-u //更新文件,根据 ...

  4. ceph 生成rpm包

    概述 从ceph的源码build出rpm包: #git clone --recursive https://github.com/ceph/ceph.git #./instal-dep.sh 以上两点 ...

  5. 记一次数据库参数compatible降级[转]

    转:http://dbzone.iteye.com/blog/1042455 众所周知,Oracle参数compatible 主要用于启用Oracle针对某一版本的新特性.但此参数设置时,只能往上调, ...

  6. runtime MethodSwizzle 实践之扩展 NIAttributedLabel

    runtime MethodeSwizzle 提供 简单的方法交换已知类的  Method IMP. Method 可以是 外部可访问的 public 或者 private Method .所谓的属性 ...

  7. 机器学习笔记十三:Ensemble思想(上)

    从上面几篇的决策树開始,就能够開始进入到集成学习(ensemble learning)了,与其说集成学习是一种算法,倒不如说集成学习是一种思想. 集成学习的思想也是非常自然非常符合人类直观理解的. 用 ...

  8. Android 全局弹出版本更新 Dialog 思考和解决办法

    Android 针对版本更新,需要做全局的弹出(需求:版本更新只需要在 App 内全局弹出就可以),思路是使用 AlertDialog ,然后设置 setType 为 TYPE_ALERT_WINDO ...

  9. python thrift使用实例

    前言 Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架.本文将从 Python开发人员角度简单介绍 Apache Thrift 的架构.开发和使 ...

  10. ElasticSearch性能优化策略【转】

    ElasticSearch性能优化主要分为4个方面的优化. 一.服务器部署 二.服务器配置 三.数据结构优化 四.运行期优化 一.服务器部署 1.增加1-2台服务器,用于负载均衡节点 elasticS ...