element跨分页操作选择详解
作者:沫熙瑾年 发布时间:2023-07-02 16:38:47
标签:element,跨分页
本文实例为大家分享了element跨分页操作选择的具体代码,供大家参考,具体内容如下
业务需求:在批量导出或者批量删除的时候会涉及到跨分页导出或者批量删除,这是你会发现,当你选择后点击分页,发现之前选择的数据已经没有了,现在就是要满足分页点击分页后原始数据保留
<template>
<div>
<el-table
:data="tableData"
tooltip-effect="dark"
style="width: 100%;"
header-align="left"
border
ref="table"
row-key="serviceDateId"
@selection-change="handleSelectionChange"
@row-dblclick="toDetail"
@sort-change="sortChange"
>
<el-table-column type="selection" el-table-column width="50" fixed="left"></el-table-column>
<el-table-column label="序号" width="80" fixed="left">
<template slot-scope="{row,$index}">
<span>{{$index + 1}}</span>
</template>
</el-table-column>
<el-table-column label="服务日期" prop="serviceDate" sortable="custom" min-width="120" ></el-table-column>
<el-table-column label="服务对象" prop="vsoName" min-width="120"></el-table-column>
<el-table-column label="身份证号" prop="idCard" sortable="custom" min-width="200"></el-table-column>
<el-table-column label="服务内容" prop="serviceContentName" min-width="200"></el-table-column>
<el-table-column label="服务结果" prop="serviceResultName" min-width="100"></el-table-column>
<el-table-column label="志愿者" prop="volunteerName" sortable="custom" min-width="120" show-overflow-tooltip></el-table-column>
<el-table-column label="志愿者所属组织" prop="objName" min-width="200" show-overflow-tooltip></el-table-column>
<el-table-column fixed="right" label="操作" width="150" header-align="center">
<template slot-scope="{row,$index}">
<span @click="handleEdit(row)" class="table-btn" v-has="{class: '编辑'}">编辑</span>
<span @click="handleRemove($index, row)" class="table-btn"
v-has="{class: '删除'}">删除</span>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="form.pageNum"
:limit.sync="form.pageSize"
@pagination="getData(form)"
/>
</div>
</template>
<script>
export default {
data(){
return{
ruleForm: {
username: '',
password:''
},
form: {
pageNum: 1, // 分页页数
pageSize: 10, // 分页数量
},
multipleSelection: [], //多选的行数据
multipleSelectionAll:[],// 当前页选中的数据
idKey: 'idCard',
}
},
methods: {
setSelectRow() {
if (!this.multipleSelectionAll || this.multipleSelectionAll.length <= 0) {
return;
}
// 标识当前行的唯一键的名称
let idKey = this.idKey;
let selectAllIds = [];
let that = this;
this.multipleSelectionAll.forEach(row=>{
selectAllIds.push(row[idKey]);
})
this.$refs.table.clearSelection();
for(var i = 0; i < this.tableData.length; i++) {
if (selectAllIds.indexOf(this.tableData[i][idKey]) >= 0) {
// 设置选中,记住table组件需要使用ref="table"
this.$refs.table.toggleRowSelection(this.tableData[i], true);
}
}
},
// 记忆选择核心方法
changePageCoreRecordData () {
// 标识当前行的唯一键的名称
let idKey = this.idKey;
let that = this;
//如果总记忆中还没有选择的数据,那么就直接取当前页选中的数据,不需要后面一系列计算
if (!this.multipleSelectionAll.length) {
this.multipleSelectionAll = this.multipleSelection;
return;
}
// 总选择里面的key集合
let selectAllIds = [];
this.multipleSelectionAll.forEach(row=>{
selectAllIds.push(row[idKey]);
})
let selectIds = []
// 获取当前页选中的id
this.multipleSelection.forEach(row=>{
selectIds.push(row[idKey]);
// 如果总选择里面不包含当前页选中的数据,那么就加入到总选择集合里
if (selectAllIds.indexOf(row[idKey]) < 0) {
that.multipleSelectionAll.push(row);
}
})
let noSelectIds = [];
// 得到当前页没有选中的id
this.tableData.forEach(row=>{
if (selectIds.indexOf(row[idKey]) < 0) {
noSelectIds.push(row[idKey]);
}
})
noSelectIds.forEach(id=>{
if (selectAllIds.indexOf(id) >= 0) {
for(let i = 0; i< that.multipleSelectionAll.length; i ++) {
if (that.multipleSelectionAll[i][idKey] == id) {
// 如果总选择中有未被选中的,那么就删除这条
that.multipleSelectionAll.splice(i, 1);
break;
}
}
}
})
},
// 多选的行数据
handleSelectionChange(val) {
this.multipleSelection = val
setTimeout(()=>{
this.changePageCoreRecordData();
}, 50)
},
// 获取表格数据
getData(form) {
let parmas = _.cloneDeep(form);
parmas.liveArea = typeof(parmas.liveArea) === 'object'?parmas.liveArea.join(''):parmas.liveArea;
recordSearch(form).then(res => {
if (res.rows) {
this.tableData = res.rows;
this.total = res.total;
this.exportData = _.cloneDeep(form);
setTimeout(()=>{
this.setSelectRow();
}, 50)
}
else {
this.tableData = [];
this.total = 0;
}
})
}
},
mounted(){
this.getData(this.form)
}
}
</script>
<style lang="sass" scoped>
</style>
来源:https://blog.csdn.net/xy19950125/article/details/104772388


猜你喜欢
- 引言您是否能编写命令行工具?也许您可以,但您能编写出真正好用的命令行工具吗?本文讨论使用 Python 来创建一个强健的命令行工具,并带有内
- INI是微软Windows操作系统中的文件扩展名。这些字母表示初始化。正如该术语所表示的,INI文件被用来对操作系统或特定程序初始化或进行参
- 这篇文章主要介绍了python框架django项目部署相关知识详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价
- 基本原理讲解:高斯模糊的算法高斯核函数的编写:构建权重矩阵,采用高斯二维分布函数的形式进行处理。需要注意的是,这里我没有特判当sigma =
- 条件语句主要有三种形式:分别为if语句、if...else语句和if...elif...else 语句1.if语句条件语句中常用的比较运算符
- python如何更新修改后的Python模块1.利用python的MySQLdb模块利用原生的sql语句进行更新的方法代码配置方法代码2.使
- 机器学习之随机森林,供大家参考,具体内容如下1、Bootstraping(自助法)  
- 我是使用源码编译的方式安装的,网上有的可以添加 ppa 源进行在线安装,但我试了行不通,所以还是采用源码安装1、安装编译依赖项sudo ap
- 因为是html格式的内容,直接截取内容的前多少字符显然不合适了。而如果直接去掉所有html格式然后再截取又无法达到想要的效果,再网上搜了一通
- PyQt5布局控件QFormLayout简介QFormLayout是label-field式的表单布局,顾明思议,就是实现表单方式的布局,表
- import md5 import sys def sumfile(fobj): m = md5.new() while True: d =
- 本文分析了python3新特性函数注释Function Annotations用法。分享给大家供大家参考,具体如下:Python 3.X新增
- 最近有个部署需求,需要读取py文件格式的配置项,我的实现思路是把配置文件解析到内存中。主要使用两种方法:importlib.import_m
- 其实图像识别技术与我们平时做的密码验证之类的没有什么区别,都是事先把要校验的数据入库,然后使用时将录入(识别)的数据与库中的数据做对比,只不
- 前言Yolov5比较Yolov4,Yolov3等其他识别框架,速度快,代码结构简单,识别效率高,对硬件要求比较低。这篇博客针对Python+
- 由于javascript是一种无类型语言,所以一个数组的元素可以具有任意的数据类型,同一个数组的不同元素可以具有不同的类型,数组的元素设置可
- 查看MySQL执行的语句想实时查看MySQL所执行的sql语句,类似mssql里的事件探查器。对my.ini文件进行设置,打开文件进行修改:
- Python 类的继承详解Python既然是面向对象的,当然支持类的继承,Python实现类的继承比JavaScript简单。Parent类
- Installing mysql (2.8.1) with native extensions /usr/local/lib/ruby/si
- 摘要:在学习与科研中,经常会遇到一些数学运算问题,使用计算机完成运算具有速度快和准确性高的优势。Python的Numpy包具有强大的科学运算