当前位置: 首页 > news >正文

vue3,element-plus 表格单选、多选、反选、全选

准备

定义数据

// 表格
const table = ref();
// 表格数据
import type { User } from "@/interface";
const tableData = ref<User[]>([]);
// 表格选集
const tableSelection = ref<User[]>([]);
// 表格选择行
const tableSelectedRow = ref<User>();

<template>:表格设置:隐藏表头全选框

<el-table
  ref="table"
  :data="tableData"
  :header-cell-class-name="handleHeaderCellClassName"
  @row-click="onTableRowClick"
  @selection-change="handleTableSelectionChange">
  <el-table-column type="selection" header-align="center" />
  <el-table-column prop="moniker" label="人员">
    <template #header>
      <el-input v-model="search" :prefix-icon="Search">
        <template #prepend>人员</template>
      </el-input>
    </template>
  </el-table-column>
</el-table>

<style scoped lang="scss">:

// 隐藏表头的全选框,el-table中需要设置 :header-cell-class-name="handleHeaderCellClassName"
::v-deep .hideCheckBox .cell {
  visibility: hidden;
}

<script>:

// 设置表格表头列的类名
const handleHeaderCellClassName = (row: any) => {
  // 隐藏表头的全选框,el-table中需要设置 :header-cell-class-name="handleHeaderCellClassName"
  // 通过设置类名hideCheckBox的样式实现,::v-deep .hideCheckBox .cell { visibility: hidden; }
  if (row.columnIndex === 0) {
    return "hideCheckBox";
  }
};

1、单选:

// 点击表格的行,实现单选
const onTableRowClick = (row: any, column: any) => {
  // 表格选集取消选中
  tableSelection.value.forEach((item) => {
    table.value.toggleRowSelection(item, false);
  });
  // 选中行
  table.value.toggleRowSelection(row, true);

  tableSelectedRow.value = row;
};

2、多选:

// 点击表格的行,实现单多选
const onTableRowClick = (row: any, column: any) => {
  // 如果点击的当前行在表格选集中,那么取消选中行,否则选中行
  if (tableSelection.value.includes(row)) {
    // 取消选中行
    table.value.toggleRowSelection(row, false);
  } else {
    // 选中行
    table.value.toggleRowSelection(row, true);
  }

  tableSelectedRow.value = row;
};

3、反选: 

// 反选
const onInverseSelectClick = () => {
  // 需选选集
  let needSelection: any = [];

  // 遍历表格数据
  tableData.value.forEach((data) => {
    // 已选行标识
    let rowSelected = false;
    // 遍历表格选集
    tableSelection.value.forEach((row) => {
      // 表格数据对象的 userName 值等于表格选集对象的 userName 值,说明该行已勾选,标识该行
      if (data.userName === row.userName) {
        rowSelected = true;
        // 退出当前表格选集循环
        return;
      }
    });
    // 将未选行对象加入需选选集
    if (!rowSelected) {
      needSelection.push(data);
    }
  });

  // 取消已选行
  tableSelection.value.forEach((row) => {
    table.value.toggleRowSelection(row, false);
  });

  // 勾选需选行,
  needSelection.forEach((row: any) => {
    table.value.toggleRowSelection(row, true);
  });
};

 4、全选:

// 全选
const onAllSelectClick = () => {
  // 全选
  table.value.toggleAllSelection();
};

效果:

单选

多选 

 

反选

 

全选

 

相关文章:

  • [深度学习]图像分类项目-食物分类
  • QuecPython 网络协议之TCP/UDP协议最祥解析
  • 实战经验:Gone 框架模块化改造中的 go work 反思
  • 10分钟打造专属AI助手!ToDesk云电脑/顺网云/海马云操作DeepSeek哪家强?
  • 信奥赛CSP-J复赛集训(模拟算法专题)(31):P2692 覆盖
  • 部署Jenkins
  • 提升通信清晰度:通过PoE交换机端口配置语音VLAN
  • CentOS 8.2 上安装 JDK 17 和 Nginx
  • 关于大模型中的Token概念小记
  • 滑动窗口:解决连续区间问题的黄金模板(练习笔记)
  • Elasticsearch:设置向量搜索
  • CentOS安装sshpass工具-自动化SSH密码认证
  • vue2中引入elementui
  • node-ddk,electron,截屏封装(js-web-screen-shot)
  • 【蓝桥杯】每日连续 Day9 前缀和
  • Xinference安装、使用详细笔记
  • 数据库原理13
  • tcl语法中的命令
  • </mirrorOf> Maven
  • 零基础入门网络爬虫第5天:Scrapy框架
  • 万科:一季度营收近380亿元,销售回款率超100%
  • 西藏阿里地区日土县连发两次地震,分别为4.8级和3.8级
  • 中方发布《不跪!》视频传递何种信息?外交部回应
  • 海尔·2025青岛马拉松两选手被终身禁赛:违规转让号码、穿戴他人号码
  • 从咖啡节到话剧、演唱会,上海虹口“文旅商体展”联动促消费
  • 王毅:坚持金砖团结合作,改革完善全球治理