element el-table表格切换分页保留分页数据+限制多选数量

el-table表格并没有相关的方法来禁用表头里面的多选按钮

在这里插入图片描述

那么我们可以另辟蹊径,来实现相同的多选+切换分页(保留分页数据)+ 限制多选数量的效果

javascript"><el-table
    :data="tableData"
    style="width: 100%">
    // 不使用el-talbe自带的多选功能
    //<el-table-column type="selection" width="55"></el-table-column>

	//自己单独建一个el-table-column 来设置选中状态
	<el-table-column fixed width="60">
       <template slot-scope="scope">
           <el-checkbox v-model="scope.row.isCheck"
              :disabled="selectable(scope.row)"
              @change="checkChange($event, scope.$index, scope.row)">
         </el-checkbox>
     </template>
    </el-table-column>
    <el-table-column
      label="日期"
      width="120">
      <template slot-scope="scope">{{ scope.row.date }}</template>
    </el-table-column>
</el-table>
javascript">//在获取表格数据以后 遍历表格,为每行数据添加上 isCheck 属性,并设置默认值false
this.tableData.forEach(item =>{
	item.isCheck = false;
})

实现多选功能 checkChange

javascript"> //事件有三个参数  
 // val el-checkbox change事件返回的值 代表 选中/不选中
 // index 当前tableData 所在的行
 // row 当前tableData 当前行的数据
 checkChange(val, index, row) {
 	  //通过val true/false ;来判断是 选中当前行/取消选中当前行
      if (val) {
        //选中 往多选数组里面推送
        this.multipleSelection.push(row);
      } else {
        //取消选中(删除) 拿到当前数据的唯一标识id 
        const { id } = row;
        let delIndex = this.multipleSelection.findIndex(
          (item) => item.id=== id
        );
        //删除 取消选中的数据
        if (delIndex !== -1) {
          this.multipleSelection.splice(delIndex, 1);
        }
      }
	  //重新设置 表格当前行的多选状态
      this.$set(this.tableData, index, { ...row, isCheck: !!val });
    },

实现 限制多选数量的功能 selectable(scope.row)

javascript">//我们在最上面的实例中定义了一个 el-checkbox的禁用方法  :disabled="selectable(scope.row)"

//限制最多只能选择5个
// 方法返回 true/false 来实现el-checkbox的禁用/选中功能
selectable(row) {
	  //限制多选最多只能选择5个
	  let limitNum = 5
      let ids = this.multipleSelection.map((item) => item.id);
      //判断当前行的唯一标识符 id,是否存在于多选数组中
      if (ids.includes(row.id)) {
        // 已选择的行,可取消禁用
        return false;
      } else if (ids.length >= limitNum  && !ids.includes(row.coilNo)) {
        // 超过最大选择条数,且当前行未被选中时,禁用
        return true;
      } else {
        // 其他情况下可选 取消禁用
        return false;
      }
}

实现切换分页保留分页数据功能

javascript">//获取表格数据
getTableData(){
	//模拟数据获取
	this.tableData = res.data || []

	//判断选中数组是否有值 有值(执行回显选中数据功能)
	if (this.multipleSelection.length > 0) {
         this.echoMultiple();
     }
}

//回显多选值
echoMultiple() {
	  //增加校验 如果当前tableData没有值 就不回显选中数据
      if (this.multipleSelection.length === 0 || this.tableData.length === 0) {
        return;
      }

      let ids = this.multipleSelection.map((item) => item.id) || [];
      this.tableData.forEach((item, index) => {
      	//遍历 tableData数值 找出符合要求的id
        if (ids.includes(item.id)) {
          // 为符合回显要求的数据 设置选中状态
          this.$set(this.tableData, index, { ...item, isCheck: true });
        }
      });
	  //避免视图不刷新 强制刷新视图
      this.$forceUpdate();
    }

http://www.niftyadmin.cn/n/5536958.html

相关文章

Linux arm板

NXP_IMX8MINI调试笔记 ARM板挂载PC端的文件夹 ARM板挂载PC端的文件夹 NFS网络挂载文件夹&#xff0c;用于文件传输 #192.168.1.11为PC端的IP地址 mount -t nfs -o nolock,nfsvers3 192.168.1.11:/home/yl/nfs nfs/静态IP永久设置 #在/etc/rc.local文件中添加 ifconfig eth0 …

JavaScript(6)——数据类型转换

为什么需要类型转换&#xff1f; JavaScript是弱数据类型&#xff1a;JavaScript不知道变量到底属于哪种数据类型&#xff0c;只有赋值了才清除 使用表单&#xff0c;prompt获取的数据默认为字符串类型&#xff0c;此时不能直接进行算数运算 隐式转换 某些运算符被执行时&am…

富格林:阻止欺诈落实盈利出金

富格林认为&#xff0c;现货黄金作为一种国际性的投资产品&#xff0c;价格在各种因素的综合影响下不断地波动变化&#xff0c;为投资者带来了获利出金机会的同时也伴随着一定的欺诈风险&#xff0c;想要落实盈利出金计划&#xff0c;还需要掌握正确的投资技巧。以下是富格林总…

Lesson 48 Do you like ... ? Do you want ... ?

Lesson 48 Do you like … ? Do you want … ? 词汇 fresh a. 新鲜的【食物】 搭配&#xff1a;fresh water 淡水    fresh man 新生    fresh air 新鲜空气    fresh egg 新鲜鸡蛋 例句&#xff1a;我们喜欢新鲜的空气。    We like fresh egg. egg n. 蛋【通…

C#面:ASP.NET Core ⽐ ASP.NET 更具优势的地⽅是什么?

ASP.NET Core相对于 ASP.NET 具有以下几个优势&#xff1a; 跨平台支持&#xff1a;ASP.NET Core是跨平台的&#xff0c;可以在Windows、Linux和macOS等多个操作系统上运行。这使得开发人员可以选择更适合他们的操作系统来进行开发和部署。更轻量级&#xff1a;ASP.NET Core是…

记一次 .NET某网络边缘计算系统 卡死分析

一&#xff1a;背景 1. 讲故事 早就听说过有什么 网络边缘计算&#xff0c;这次还真给遇到了&#xff0c;有点意思&#xff0c;问了下 chatgpt 这是干嘛的 ? 网络边缘计算是一种计算模型&#xff0c;它将计算能力和数据存储位置从传统的集中式数据中心向网络边缘的用户设备、…

Qt涂鸦板

Qt版本&#xff1a;Qt6 具体代码&#xff1a; 头文件 dialog.h #ifndef DIALOG_H #define DIALOG_H#include <QDialog>QT_BEGIN_NAMESPACE namespace Ui { class Dialog; } QT_END_NAMESPACEclass Dialog : public QDialog {Q_OBJECTpublic:Dialog(QWidget *parent n…

2018.06.28 -------2024.0628 java 开发工作六年,今天离职了!!总结

前言&#xff1a; 今天从开始有对自己的知识体系做一个完整的回顾&#xff01; 干了六、7 年 软件开发&#xff0c;可以说 所有的项目涉略过吧&#xff0c; 政治、医疗、教育、农业、工业这些方向我都做过软件。可以说非常的杂&#xff0c;展开来说就是 从政府网站、医院转诊、…