Ant Design Table组件行合并及表格头下拉筛选

最近在项目中实现了一个Table 相同数据行合并及表格头下拉筛选的需求,这类需求平时在项目中比较少遇到,操作的方法也比较麻烦,因此记录下来方便以后遇到有迹可循。

实现效果

在这里插入图片描述
在这里插入图片描述

合并相同行数据

  1. 对dataSource数据进行处理,判断列scene字段是否有行数据相同,进行提取并添加新字段rowSpan,记录合并的行数
// 合并数组单元格
  createNewArr=data => {
    const dataSource = data.reduce((result, item) => {
      // 首先将name字段作为新数组result取出
      if (result.indexOf(item.scene) < 0) {
        result.push(item.scene)
      }

      return result
    }, []).reduce((result, scene) => {
      // 将name相同的数据作为新数组取出,并在其内部添加新字段**rowSpan**
      const children = data.filter(item => item.scene === scene)
      result = result.concat(
        children.map((item, index) => ({
          ...item,
          rowSpan: index === 0 ? children.length : 0, // 将第一行数据添加rowSpan字段
        }))
      )

      return result
    }, [])

    return dataSource
  }
  1. 改变columnsList中scene的render
  columnsList = [
    {
      title: '场景',
      dataIndex: 'scene',
      render: (text, record, index) => {
        const obj = {
          children: text,
          props: {
            rowSpan: record.rowSpan,
          },
        }

        return obj
      },
    },
  ]

表格头行筛选

在这里插入图片描述
很多人会忽视了ant Table组件的title是支持ReactNode的,所以其实我们可以针对表头做很多操作。
每次下拉选项改变时去调接口获取新数据

  columnsList = [
    {
      title: '场景',
      dataIndex: 'scene',
      render: (text, record, index) => {
        const obj = {
          children: text,
          props: {
            rowSpan: record.rowSpan,
          },
        }

        return obj
      },
    },
     {
      title: () => (
      <Select defaultValue='' style={{ width: 120 }} onChange={value => this.handleChangeStep('stepTable', value)}>
        <Select.Option value=''>阶段(全部)</Select.Option>
        <Select.Option value='first'>阶段(一审)</Select.Option>
        <Select.Option value='second'>阶段(二审)</Select.Option>
      </Select>),
      dataIndex: 'step',
      align: 'center',
      filtered: true,
    },
  ]

参考链接🔗:
https://blog.csdn.net/Dong8508/article/details/83898810

要将Ant Design表格中的一个首单元格标题(title)作为下拉菜单,可以按照以下步骤进操作: 1. 首先,确保已经正确安装并导入了Ant Design的相关依赖。 2. 在data中定义一个`dropdownMenuVisible`属性来控制下拉菜单的显示状态,以及一个`menuOptions`数组来存储下拉菜单选项。 ```vue <template> <div> <a-table :columns="columns" :data-source="dataSource" row-key="id"> <!-- 表格内容 --> </a-table> </div> </template> <script> // ... export default { data() { return { dropdownMenuVisible: false, menuOptions: [], // 下拉菜单选项 // ... }; }, // ... }; </script> ``` 3. 在表格的列配置中,将需要作为下拉菜单的首单元格标题(title)设置为自定义的渲染函数。 ```vue <script> // ... export default { // ... data() { // ... }, computed: { customTitleRender() { return (text, record, index) => { if (index === 0) { return ( <a-dropdown visible={this.dropdownMenuVisible} trigger={['click']} overlay={this.renderMenuOptions} on-visible-change={this.handleDropdownVisibleChange} > <a class="ant-dropdown-link" onClick={(e) => e.preventDefault()}> {text} <a-down-icon /> </a> </a-dropdown> ); } return text; }; }, renderMenuOptions() { return ( <a-menu slot="overlay"> {this.menuOptions.map((option) => ( <a-menu-item key={option.key}>{option.label}</a-menu-item> ))} </a-menu> ); }, }, // ... }; </script> ``` 4. 在自定义的渲染函数`customTitleRender`中,判断当前单元格是否是首单元格(index === 0),如果是,则使用`a-dropdown`包裹标题,并通过`overlay`属性指定下拉菜单的内容。同时,使用`visible`和`on-visible-change`属性来控制下拉菜单的显示和隐藏。 5. 在下拉菜单的内容中,通过`a-menu`和`a-menu-item`来渲染下拉菜单选项。你可以根据具体需求,使用`v-for`指令遍历`menuOptions`数组,生成对应的菜单项。 6. 在methods中实现相关的事件处理函数。 ```vue <script> // ... export default { // ... methods: { handleDropdownVisibleChange(visible) { this.dropdownMenuVisible = visible; }, // 其他事件处理函数 }, // ... }; </script> ``` 通过以上步骤,你可以将Ant Design表格中的一个首单元格标题(title)作为下拉菜单。请注意,以上代码仅为示例,你需要根据自己的实际需求进适当调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值