protable 表格列作为搜索条件,设置为select,如何实现 ChatGPT 说:

ProTable@ant-design/pro-components)中,可以将某一列作为 搜索条件,并且 设置为 Select 下拉框,方法如下:


✅ 方案 1:在 valueType 设置 select

🛠 代码示例

import { ProTable } from '@ant-design/pro-components';
import { Select } from 'antd';

const columns = [
  {
    title: '用户状态',
    dataIndex: 'status',
    valueType: 'select',  // 指定为 select 类型
    fieldProps: {
      options: [
        { label: '正常', value: 'active' },
        { label: '禁用', value: 'banned' },
        { label: '待审核', value: 'pending' },
      ],
    },
  },
  {
    title: '用户名',
    dataIndex: 'username',
  },
];

const dataSource = [
  { id: 1, username: '张三', status: 'active' },
  { id: 2, username: '李四', status: 'banned' },
];

export default function Demo() {
  return (
    <ProTable
      rowKey="id"
      columns={columns}
      dataSource={dataSource}
      search={{ labelWidth: 'auto' }} // 开启搜索表单
    />
  );
}

 

✅ 说明

  • valueType: 'select' 指定列的搜索框为 Select
  • fieldProps.options 提供 Select 的选项
  • 这样 搜索框就会自动变成 Select 下拉选择

✅ 方案 2:自定义 renderFormItem

如果你希望更复杂的 Select 组件(比如从 API 获取数据),可以使用 renderFormItem 来自定义:

{
  title: '用户状态',
  dataIndex: 'status',
  renderFormItem: (_, { type, defaultRender, ...rest }, form) => {
    if (type === 'form') return null; // 确保仅在搜索框生效
    return (
      <Select {...rest} placeholder="请选择用户状态">
        <Select.Option value="active">正常</Select.Option>
        <Select.Option value="banned">禁用</Select.Option>
        <Select.Option value="pending">待审核</Select.Option>
      </Select>
    );
  },
}

 

✅ 适用于
  • 动态获取下拉选项(如从后端 API 加载数据)
  • 更复杂的 UI 需求

🎯 总结

方式适用场景优点
方案 1:valueType: 'select' 选项固定 简单快捷
方案 2:renderFormItem 自定义 Select 选项动态加载 适合从 API 获取数据

如果你的下拉框选项是 固定的,推荐 方案 1
如果你的下拉框选项是 从 API 动态获取,推荐 方案 2 🚀。

posted @ 2025-03-12 21:46  走走停停走走  Views(598)  Comments(0)    收藏  举报