el-table翻页记录勾选,正常记录取消勾选,不受翻页影响

server/2024/9/22 2:08:00/

注意:本帖为公开技术贴,不得用做任何商业用途

使用版本为vue2版本,vue3版本同理,请注意写法变更

本table在dialog中使用,会存在一个open方法作为打开dialog时的数据传输

<template><el-dialog title="xxxx选择" width="1200px" :visible.sync="value.flag" :before-close="handleClose" @open="handleOpen"><el-table :data="tableData" ref="multiTable" style="width: 100%" max-height="450" highlight-current-row border@select="handleSelectionChange" @row-click="handleRowClick" :row-key="getRowKeys"><el-table-column type="selection" width="55" :reserve-selection="true"></el-table-column><el-table-column label="序号" type="index" width="50" align="center"></el-table-column><el-table-column label="ID" prop="pointId" width="80" align="center"></el-table-column><el-table-column label="名称" prop="name"></el-table-column><el-table-column label="类型" prop="type" align="center"></el-table-column></el-table><!-- 分页 --><div class="th-pagination"><el-pagination @size-change="sizeChange" @current-change="pageChange" :current-page="paging.page":page-size="paging.size" :total="paging.total"layout="total, sizes, prev, pager, next, jumper"></el-pagination></div><span slot="footer" class="dialog-footer"><el-button @click="close" size="mini">取 消</el-button><el-button type="primary" @click="submit" size="mini">确 定</el-button></span></el-dialog>
</template><script>export default {name: '',data() {// 表格数据tableData: [],// 当前页勾选项tableCheckedData: [],// 分页paging: {page: 1,size: 10,total: 0},// 传入的勾选项selectedArray: [],}},mounted() {// 获取tableData数据,自己写// 如果是弹窗,可以不用再mounted钩子中写,// 写在开启dialog时调用的方法中即可// this.init()},methods: {// 初始化init() {this.getData();},async getData(data) {// 初始化表格数据tableDatathis.tableData= []//按照自己的接口获得,在此不做演示},// 显示多少条发生改变// pageSize,改变时调用sizeChange(val) {// 记录const selectedArr = this.$refs.multiTable.selection.map(v => { return v.pointId })// 数组去重this.selectedArray = Array.from(new Set(this.selectedArray.concat(selectedArr)))this.paging.size = val;this.handleOpen()},// 页数发生变化pageChange(val) {// 获取当前页选中const selectedArr = this.$refs.multiTable.selection.map(v => { return v.pointId })// 数组去重this.selectedArray = Array.from(new Set(this.selectedArray.concat(selectedArr)))this.paging.page = val;this.handleOpen()},//记录分页勾选时,必要配置,具体请看文档getRowKeys(row) {return row.pointId;},/***这里是重点,处理反复勾选,*正选,反选,勾选状态矫正,*/handleSelectionChange(list, item) {// list,当前页所有选中项,// item,点击的row对象this.tableCheckedData = listif (this.selectedArray && this.selectedArray.length > 0) {for (let i = 0; i < this.selectedArray.length; i++) {// 当点击row里面pointId与传入this.selectedArray中的// 数据(id),相匹配,则取消勾选,// 并改变传入的数据数组if (this.selectedArray[i] === item.pointId) {this.selectedArray.splice(i, 1)}}}},handleRowClick(row, event, column) {// 取消选中该行this.$refs.multiTable.toggleRowSelection(row);},// dialog开启时,调用的方法async handleOpen() {await this.getData(this.queryData);// 对比当前,所有,勾选项,进行勾选操作this.$nextTick(() => {this.$refs.multiTable.clearSelection()if (this.selectedArray) {for (let i = 0; i < this.selectedArray.length; i++) {for (let j = 0; j < this.tableData.length; j++) {if (this.selectedArray[i] === this.tableData[j].pointId) {                                this.$refs.multiTable.toggleRowSelection(this.tableData[j])}}}}})},// 处理关闭handleClose() {this.close()},// 关闭dialogclose() {const data = { flag: false, callback: null }this.paging.page = 1// 关闭dialog,请根据自己的情况改this.$emit('closeDialog', data)},submit() {// 当前勾选项const pointList = this.tableCheckedData// console.log('pointList: ', pointList);// 当前勾选let lastPageChecked = pointList.map(v => { return v.pointId })lastPageChecked = Array.from(new Set(lastPageChecked))const finalChecked = arrayDeDuplication(lastPageChecked.concat(this.selectedArray))const arrayCleaned = finalChecked.filter(item => item !== undefined);//if (arrayCleaned.length <= 0) {return this.$message.warning('请选择点位!')}// console.log('lastPageChecked: ', lastPageChecked);// console.log('arrayCleaned: ', arrayCleaned);//this.close()//},},
}
</script>

http://www.ppmy.cn/server/120071.html

相关文章

Maven 安装

Maven 安装 Maven 下载安装 下载MAVEN 选择版本注意&#xff1a; IDEA 2022 兼容maven 3.8.1及之前的所用版本 IDEA 2021 兼容maven 3.8.1及之前的所用版本 IDEA 2020 兼容Maven 3.6.3及之前所有版本 IDEA 2018 兼容Maven3.6.1及之前所有版本 打开MAVEN官网 下载需要的版本 Wi…

MySQL之内置函数

目录 一&#xff1a;日期函数 二:字符串函数 三&#xff1a;数学函数 四&#xff1a;其他函数 一&#xff1a;日期函数 举例: (1) mysql> select current_date(); ---------------- | current_date() | ---------------- | 2024-09-17 | ---------------- 1 row …

leetcode-560. 和为 K 的子数组

题目描述 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2示例 2&#xff1a; 输入&#xff1a;nums …

音视频入门基础:AAC专题(4)——ADTS格式的AAC裸流实例分析

音视频入门基础&#xff1a;AAC专题系列文章&#xff1a; 音视频入门基础&#xff1a;AAC专题&#xff08;1&#xff09;——AAC官方文档下载 音视频入门基础&#xff1a;AAC专题&#xff08;2&#xff09;——使用FFmpeg命令生成AAC裸流文件 音视频入门基础&#xff1a;AAC…

ftp服务的管理及安全优化

1.ftp介绍 ftp : file transfer proto 互联中最老牌的文件传输协议 2.vsftpd安装及启用 环境 #server 主机 &#xff1a; # R3 # 192.168.10.130 # selinux 关闭 # 火墙开启 # dnf 安装设定完成 # #client 主机 &#xff1a; # R4 # 192.168.10.131 # selinux 关闭 …

前端如何快速调试线上问题

主角登场 抓包工具&#xff1a;whistle&#xff0c;charles 此次博主会从中选择一个来讲 配个官网whistle 功能 可以抓包&#xff08;这不是我们这次讲的主题&#xff09;代理 【主讲】 以下都会围绕代理这个主题来讲&#xff0c;抓包工具是怎么运用到我们日常开发工作当中&…

【RabbitMQ】消息分发、事务

消息分发 概念 RabbitMQ队列拥有多个消费者时&#xff0c;队列会把收到的消息分派给不同的消费者。每条消息只会发送给订阅该队列订阅列表里的一个消费者。这种方式非常适合扩展&#xff0c;如果现在负载加重&#xff0c;那么只需要创建更多的消费者来消费处理消息即可。 默…

CMake中的PUBLIC、PRIVATE 和 INTERFACE用法

在CMake中&#xff0c;PUBLIC、PRIVATE 和 INTERFACE 是用于指定目标属性&#xff08;如编译选项、链接库、包含路径等&#xff09;的访问范围的关键字。它们主要用于target_link_libraries、target_include_directories、target_compile_definitions等命令中&#xff0c;影响到…