ZBLOG

在 Vue 3 中使用 Ant Design Vue 的 a-table 实现全选分页功能,可以通过更新 rowSelection 的配置来实现。具体来说,当你选择当前页面的所有行时,你需要记录所有已选择的行,并且能够在切换页面时保持这些选择状态。

下面是一个简单的示例,展示了如何实现全选分页:

<template>
  <a-table
    :columns="columns"
    :data-source="paginatedData"
    :scroll="{ x: columns.reduce((sum, col) => sum + (col.width || 0), 0) > 1800 ? 'max-content' : undefined }"
    :pagination="{
      current: currentPage,
      pageSize: pageSize,
      total: totalRecords,
      onShowSizeChange: handlePageSizeChange,
      onChange: handlePageChange,
      showQuickJumper: true,
      showSizeChanger: true,
      showTotal: (total, range) => `显示 ${range[0]} ~ ${range[1]} 条记录,共 ${total} 条记录`
    }"
    :row-selection="rowSelection"
    :row-key="record => record.customerId"
    style="padding: 5px"
    bordered
  />
</template>

<script setup>
import { ref, computed } from 'vue';

const columns = [
  {
    title: 'Customer Name',
    dataIndex: 'customerName',
    width: 200
  },
  {
    title: 'Age',
    dataIndex: 'age',
    width: 100
  },
];

const rawData = [
  { customerId: 1, customerName: 'John Doe', age: 25 },
  { customerId: 2, customerName: 'Jane Smith', age: 30 },
  // Add more data as needed
];

const currentPage = ref(1);
const pageSize = ref(10);
const selectedRowKeys = ref([]);
const totalRecords = ref(rawData.length);

const paginatedData = computed(() => {
   const start = (currentPage.value - 1) * pageSize.value;
   return rawData.slice(start, start + pageSize.value);
});

const rowSelection = {
   selectedRowKeys: selectedRowKeys.value,
   onChange(selectedKeys) {
     selectedRowKeys.value = selectedKeys;
   },
   onSelectAll(selected, selectedRows) {
     if (selected) {
       // 如果选择所有项,将其添加到已选中的行中
       const allSelectedKeys = paginatedData.value.map(item => item.customerId);
       selectedRowKeys.value.push(...allSelectedKeys.filter(key => !selectedRowKeys.value.includes(key)));
     } else {
       // 如果取消选择所有项,从已选中的行中移除它们
       const allSelectedKeys = paginatedData.value.map(item => item.customerId);
       selectedRowKeys.value = selectedRowKeys.value.filter(key => !allSelectedKeys.includes(key));
     }
   }
};

const handlePageSizeChange = (current, size) => {
   pageSize.value = size;
};

const handlePageChange = (page) => {
   currentPage.value = page;

   // 在页面变化时保持所选项的状态,可以根据需求调整逻辑
};

</script>

实现说明

  1. 数据分页:使用 computed 属性计算出当前页面的数据 (paginatedData)。

  2. 全选逻辑

    • onSelectAll 中,如果用户全选了当前页的数据,则将这些数据的键值(如 customerId)添加到 selectedRowKeys 中。
    • 如果用户取消全选,则从 selectedRowKeys 中删除这些键值。
  3. 保持状态:可以在翻页的时候,选择状态不会丢失,但是如果需要在不同页面间共享选择状态,需要相应地修改逻辑以适配整个数据集。

请根据实际需求和数据结构进行调整!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=21902

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?