element-plus 表格跨页全选
<template>
<div class="app">
<div>
<el-checkbox v-model="crossPage">跨页全选</el-checkbox>
</div>
<el-table
ref="tableRef"
:data="dataRender"
row-key="id"
:columns="columns"
border
stripe
@select="onSelect"
@selection-change="onSelectionChange"
>
<el-table-column type="selection" />
<el-table-column
:prop="item.dataIndex"
:label="item.title"
:width="item.width"
v-for="item in columns"
:key="item.dataIndex"
/>
</el-table>
<div class="pagination">
<el-pagination
layout="total, prev, pager, next"
@current-change="onPageChange"
:total="pagination.total"
/>
</div>
<div>
<div v-if="crossPage">排除:{{ JSON.stringify(excludeSelected) }}</div>
<div v-else>已选择:{{ JSON.stringify(selection) }}</div>
</div>
</div>
</template>
<script setup lang="ts">
import { reactive, ref, watch, nextTick } from "vue";
import axios from "axios";
import { changeArr } from "../utils/arr-helper";
// 分页信息
const pagination = reactive({
current: 1,
pageSize: 10,
total: 5,
showTotal: true,
});
// 表头
const columns = [
{
title: "姓名",
dataIndex: "name",
width: 100,
},
{
title: "年龄",
dataIndex: "age",
width: 100,
},
{
title: "工资",
dataIndex: "salary",
width: 100,
},
{
title: "住址",
dataIndex: "address",
},
];
const dataRender = ref([]);
const syncDataRender = async () => {
const {
data: { data },
} = await axios.get("/api/user", {
params: {
current: pagination.current,
pageSize: pagination.pageSize,
},
});
dataRender.value = data.list;
pagination.total = data.total;
};
syncDataRender();
const onPageChange = async (current) => {
pagination.current = current;
syncDataRender();
};
// 跨页全选要立即选中当前页数据,即便翻页的也要选中,但是不能包含排除的
// 需要注意的是:当勾选了跨页全选后,已经选中的就不在作数,而是重点关注排除项
// 记录 excludeSelected
// 用户手动勾选触发
// 主要用于记录用户手动取消勾选的项,用于跨页全选时排除
const excludeSelected = ref([]);
const onSelect = (selection, row) => {
const isSelected = selection.findIndex((item) => item.id === row.id) > -1; // 本次是选中还是取消
if (crossPage.value) {
excludeSelected.value = changeArr({
arr: excludeSelected.value,
row,
action: isSelected ? "rm" : "push",
});
}
};
// 记录 selection
// 当选择项发生变化时会触发该事件(包含手动or 调用 tableRef.value.toggleRowSelection)
const selection = ref([]);
const onSelectionChange = (arg) => {
selection.value = arg;
};
// 当跨页全选时,要选中当前页的所有数据
const crossPage = ref(false);
const tableRef = ref(null);
watch(
() => crossPage.value,
() => {
if (crossPage.value) {
for (const element of dataRender.value) {
tableRef.value.toggleRowSelection(element, true);
}
} else {
excludeSelected.value = [];
}
}
);
// 跨页全选时,即便内容变化(如翻页)的也要选中,但是不能包含排除的
watch(
() => dataRender.value,
async () => {
// 这里要做还原选中状态
if (crossPage.value) {
for (const element of dataRender.value) {
const isExclude = excludeSelected.value.findIndex((item) => item.id === element.id) >-1;
if (!isExclude) {
await nextTick();
tableRef.value.toggleRowSelection(element, true);
}
}
}
}
);
</script>
<style>
.pagination {
display: flex;
justify-content: center;
align-items: center;
margin-top: 20px;
}
</style>

element-plus 表格跨页全选的更多相关文章
- Bootstrap table 跨页全选
此代码是针对于bootstrap table中分页的跨页全选. 以下是整个bootstrap的定义 <script type="text/javascript" src=&q ...
- A在SP.NET跨页多选
在ASP.NET跨页多选 本文介绍怎样在ASP.NET中实现多页面选择的问题.其详细思路非常easy:用隐藏的INPUT记住每次选择的项目,在进行数据绑定时.检查保存的值,再在DataGrid中进行选 ...
- Element UI表格组件技巧:如何简洁实现跨页勾选、跨页统计功能
业务场景 在使用Element UI的Table组件时,常常面对这样的业务需求: 表格数据的每一项都要提供勾选框,当切换分页时,能够记忆所有页面勾选的数据,以实现批量提交不同页面勾选数据的功能.并且, ...
- 当你的layui表格要做全选+删除功能【兼容ie8】
<!-- 全选 --> <div class="choose"> <input type="checkbox" id=" ...
- js 表格上checkbox 全选
<table class="layui-table"> <thead> <tr> <th width="75"> ...
- element ui表格常用功能如:导出 新增 删除 多选 跨页多选 固定表头 多级表头 合并行列 等常见需求
<template> <div class="table-cooperte"> <el-table :data="tableData&quo ...
- web跨页弹窗选值
最近在项目中看到这样一种效果——点击当前网页文本框,然后弹出一个缩小的网页,并在网页里选择或填写数据,然后又返回当前网页,小网页关闭.感觉非常不错,其实在以前网上也看见过,只是当时没有留心.今天抽时间 ...
- element-ui 表格翻页多选,数据回显
reserve-selection与row-key结合 <el-table :data="pageData" ref="goodsTable" size= ...
- Java 操作Word表格——创建嵌套表格、添加/复制表格行或列、设置表格是否禁止跨页断行
本文将对如何在Java程序中操作Word表格作进一步介绍.操作要点包括 如何在Word中创建嵌套表格. 对已有表格添加行或者列 复制已有表格中的指定行或者列 对跨页的表格可设置是否禁止跨页断行 创建表 ...
- C#/VB.NET 设置PDF跨页表格重复显示表头行
在创建表格时,如果表格内容出现跨页显示的时候,默认情况下该表格的表头不会在下一页显示,在阅读体验上不是很好.下面分享一个方法如何在表格跨页时显示表格的表头内容,在C#中只需要简单使用方法grid.Re ...
随机推荐
- @Autowired原理
例子. // <bean id="> id默认类名首字母小写 默认是单例 // @Scope(value = "prototype") @Repository ...
- 🎀OpenTelemetry探针介绍及使用
简介 OpenTelemetry(简称 Otel)是由 CNCF 主导的云原生可观测性标准框架,用于统一采集.处理和导出分布式系统中的遥测数据(如追踪.指标.日志).其核心目标是通过标准化协议和工具集 ...
- 容器化 MCP Server!
大家好!我是韩老师. 本文是 MCP 系列文章的第五篇,之前的四篇是: Code Runner MCP Server,来了! 从零开始开发一个 MCP Server! 一键安装 MCP Server! ...
- 零基础搭建AI作曲工具:基于Magenta/TensorFlow的交互式音乐生成系统
引言:当AI遇见莫扎特 "音乐是流动的建筑",当人工智能开始理解音符间的数学规律,音乐创作正经历着前所未有的范式变革.本文将手把手教你构建一套智能作曲系统,不仅能够生成古典钢琴小品 ...
- 代码随想录第二十五天 | Leecode 491. 非递减子序列、46. 全排列、47. 全排列 II
Leecode 491. 非递减子序列 题目描述 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 .你可以按 任意顺序 返回答案. 数组中可能含有重 ...
- 【记录】LangChain|Ollama结合LangChain使用的速通版(包含代码以及切换各种模型的方式)
官方教程非常长,我看了很认可,但是看完了之后呢就需要一些整理得当的笔记让我自己能更快地找到需求.所以有了这篇文章.[写给自己看的,里面半句废话的解释都没有,如果看不懂的话直接看官方教程再看我的] 我是 ...
- 从零开始搭建React+vite企业级项目框架
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- C/C++双叹号!!运算符
1.问题引入 在阅读https://github.com/amhndu/SimpleNES源代码中ppu.cpp中发现如下代码 m_bgPage = static_cast<CharacterP ...
- mp4文件下载,而不是在线播放
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- File与IO流之File练习
创建文件夹,并在其中创建文件 package Java_test; import java.io.*; public class Test { public static void main(Stri ...