继ProTable自定义搜索-input输入框

上一章分享了关于ProTable表格组件的封装,这一章我们来分享下针对ProTable组件的 自定义搜索组件

 

NpTableContext这个方法  在上一章中可以看的比较详细,在这里就不多做注释了。

地址:封装ProTable组件__琉的博客-CSDN博客

import { NpTableContext } from '@/components/CustomTable';

import { SearchOutlined } from '@ant-design/icons';

import ProForm, { ProFormText } from '@ant-design/pro-form';

import type { FilterDropdownProps } from 'antd/lib/table/interface';

import { useContext } from 'react';

const ColumnSearchInputProps = <T,>(inputName: string) => {

  return {

    filterDropdown: ({ setSelectedKeys, confirm }: FilterDropdownProps) => {

      // eslint-disable-next-line react-hooks/rules-of-hooks

      const onSearhParamsChanged = useContext(NpTableContext).onSearhParamsChanged;

      const handleOnReset = async (values = {}) => {

        values[inputName] = undefined;

        setSelectedKeys([]);

//调用ProTable组件内的onSearhParamsChanged事件  进行重置

        onSearhParamsChanged?.(values);

        confirm({ closeDropdown: true });

      };

      return (

        <ProForm<T>

          onReset={handleOnReset}

          autoFocusFirstInput={true}

          isKeyPressSubmit={true}

          style={{ padding: 8 }}

          onFinish={async (values) => {

            values[inputName] = values[inputName] ? values[inputName].trim() : undefined;

            setSelectedKeys(values[inputName] ? [0] : []);

//调用ProTable组件内的onSearhParamsChanged事件  进行搜索

            onSearhParamsChanged?.({ ...values });

            confirm({ closeDropdown: true });

          }}

        >

          <ProFormText width="sm" name={inputName} />

        </ProForm>

      );

    },

    filterIcon: (filtered: React.ReactNode | ((filtered: boolean) => React.ReactNode)) => (

      <SearchOutlined style={{ color: filtered ? '#1890ff' : undefined }} />

    ),

  };

};

export default ColumnSearchInputProps;

使用方法:

引入 ColumnSearchInputProps组件  在Column中使用即可,下一章会分享其他自定义搜索组件,有其他搜索组件可以 以这个例子为模板 扩展其他的搜索方式。

const Column: ProColumnType = [

        {

            title: '序号',

            dataIndex: 'index',

            sorter: true//排序

            ...ColumnSearchInputProps<{ index: string }>('index'),

        },

    ]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要将ProTable搜索输入框改为时间选择框,您可以按照以下步骤进行操作: 1. 在ProTable的columns数组中,找到您想要替换为时间选择框的列定义,并将其dataIndex字段更改为一个唯一的键,例如将'dataEndDate'改为'endDate'。 ```jsx const columns: ProColumns<API.BatteryInformationControl>[] = [ { title: "截止日期", dataIndex: 'endDate', // 将dataIndex字段改为endDate fixed: 'left', align: "center", width: 150, // 其他列定义 } ]; ``` 2. 在组件中创建一个新的状态变量来存储时间选择框的值。例如,您可以使用useState钩子创建一个名为`selectedEndDate`的状态变量,并在时间选择框的onChange事件处理程序中更新它。 ```jsx const [selectedEndDate, setSelectedEndDate] = useState(dayjs()); const onEndDateChange = (date) => { setSelectedEndDate(date); }; ``` 3. 使用ProTablesearch属性来自定义搜索输入框。将搜索输入框替换为时间选择框,并与新的状态变量和onChange事件处理程序关联。 ```jsx <ProTable // ...其他属性 search={{ filterType: 'light', render: (text, props) => ( <DatePicker value={selectedEndDate} onChange={onEndDateChange} style={{ width: '100%' }} /> ), }} > {columns.map((column) => ( <ProTable.Column {...column} /> ))} </ProTable> ``` 最终的代码示例: ```jsx import { useState } from 'react'; import { DatePicker, ProTable } from 'antd'; const YourComponent = () => { const [selectedEndDate, setSelectedEndDate] = useState(dayjs()); const onEndDateChange = (date) => { setSelectedEndDate(date); }; const columns: ProColumns<API.BatteryInformationControl>[] = [ { title: "截止日期", dataIndex: 'endDate', fixed: 'left', align: "center", width: 150, // 其他列定义 } ]; return ( <div> <ProTable // ...其他属性 search={{ filterType: 'light', render: (text, props) => ( <DatePicker value={selectedEndDate} onChange={onEndDateChange} style={{ width: '100%' }} /> ), }} > {columns.map((column) => ( <ProTable.Column {...column} /> ))} </ProTable> </div> ); }; export default YourComponent; ``` 请根据您的代码结构和需求进行相应的修改。希望对您有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值