antd ProTable获取远程数据 批量选择翻页失效

更新
preserveSelectedRowKeys: true

const rowSelections = {
    selectedRowKeys,
    preserveSelectedRowKeys: true,
    onChange: (selectedRowKeys: any[], selectedRow: any[]) => {
      setSelectedRowKeys(selectedRowKeys);
      // if (props?.onComplete) props?.onComplete(selectedRowKeys);
    },
  };

旧版本

import React, { PureComponent } from 'react';
import { PageContainer } from '@ant-design/pro-layout';
import ProTable, { ActionType, ProColumns } from '@ant-design/pro-table';
import { Button } from 'antd';
import { search, account } from '@/services/account';

interface State {
  selectedRowKeys: any[];
}

export default class extends PureComponent<{}, State> {
  tableAction: React.MutableRefObject<ActionType> = React.createRef<ActionType>() as any;

  constructor(props:any) {
    super(props);
    this.state={
      selectedRowKeys: [],
    }
  }

  onCheckedBoxChange = (selectArr: any) => {
    this.setState({
      selectedRowKeys: [...this.state.selectedRowKeys, ...selectArr],
    });
  };

//表格全选功能时,根据是否全选中来对select进行合并,或者删去全部选中的数据
  onCheckedBoxAll = (id: any, selected: any) => {
    this.setState({
      selectedRowKeys: selected
        ? [...new Set([...this.state.selectedRowKeys, ...id])]
        : this.state.selectedRowKeys.filter((item) => !new Set(id).has(item)),
    });
  };

//行点击时,根据当前行的是否被选中true和false,对selectAll进行新增或删掉当前点击的行id
  onSelectclick = (id: any, selected: any) => {
    this.setState({
      selectedRowKeys: selected
        ? [...new Set([...this.state.selectedRowKeys, id])]
        : this.state.selectedRowKeys.filter((item) => item !== id),
    });
  };
  
  async handleSource(params: any) {
    const response = await search(params);
    return {
      data: response.dataSet,
      total: response.total,
      success: true,
    };
  }

  render() {
    const columns: ProColumns<account>[] = [
      {
        title: '账号',
        dataIndex: 'id',
      },
      {
        title: '姓名',
        dataIndex: 'name',
      },
      {
        title: '性别',
        dataIndex: 'gender',
        filters: undefined,
        valueEnum: {
          '': '全部',
          1: '男',
          2: '女',
          0: '-',
        },
        hideInSearch: true,
      },
      {
        title: '操作',
        align: 'left',
        valueType: 'option',
        render: (_, row) =>{
          return <>
            <a>操作</a>
          </>
        }
      },
    ];

    
	const { selectedRowKeys } = this.state
    const rowSelection = {
      selectedRowKeys,
      onSelect: (record: any, selected: any) => {
        this.onSelectclick(record.id, selected)
      },
      onSelectAll: (selected: any, selectedRows: any, changeRows: any) => {
        const allId = changeRows.map((item: any) => {
          return item.id;
        });
        this.onCheckedBoxAll(allId, selected);
      },
    };

    return (
      <PageContainer>
        <ProTable<account>
          rowKey="id"
          actionRef={this.tableAction}
          rowSelection={rowSelection}
          tableAlertRender={false}
          request={(params) => this.handleSource(params)}
          columns={columns}
          scroll={{ x: 'max-content' }}
          pagination={{
            pageSize: 10,
          }}
          tableAlertRender={
            !selectedRowKeys.length ? false : 
            ({ selectedRowKeys, selectedRows, onCleanSelected }) => (
            <Space size={24}>
              <span>
                已选 {selectedRowKeys.length}</span>
            </Space>
          )}
          toolBarRender={() => [
            <Button>
              新建账户
            </Button>,
            <Button
              key={2}
              type="primary"
            >
              批量新建
            </Button>
          ]}
        />
      </PageContainer>
    );
  }
}

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Vue的Table组件可以通过添加一个全选框来实现全选功能。以下是如何实现vue table全选的步骤。 1. 首先,在Table组件中添加一个全选的列。可以使用一个表头的checkbox来表示全选功能。在表头的checkbox上绑定一个点击事件。 2. 在data中添加一个变量,用来记录全选的状态,例如`isAllSelected: false`。 3. 在表头checkbox的点击事件中,根据点击状态切换全选的状态。例如,如果选中了表头的checkbox,则设置`isAllSelected`为true;如果取消选中,则设置`isAllSelected`为false。 4. 在表格的每一行中,添加一个checkbox用来表示该行是否被选中。使用一个数组来记录每一行的选中状态。例如,可以使用`selectedRows: []`来记录选中的行。 5. 在行的checkbox上绑定一个点击事件,在点击事件中切换该行的选中状态。如果该行的checkbox选中,则将该行的数据加入到`selectedRows`数组中;如果取消选中,则将该行的数据从`selectedRows`数组中移除。 6. 在渲染表格数据时,根据每一行的选中状态来设置checkbox的选中状态。可以使用`:checked`绑定属性来动态设置checkbox是否选中。 7. 在全选的checkbox中,可以通过监听`isAllSelected`的变化来自动选中或取消选中所有行的checkbox。 通过上述步骤,就可以在Vue的Table组件中实现全选功能。当点击表头的全选checkbox时,会触发全选事件,自动选中或取消选中所有行的checkbox。在渲染表格时,根据每一行的选中状态来设置checkbox的选中状态。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值