ant-table合并单元格

做项目的时候肯定少不了表格的展示,一般特殊要求就会要求合并单元格,前段时间些项目就遇到了,浅浅记录一下,只需要知道需要合并的数据集就行。

1.首先要写好基本的表头数据

2.首先你要获取到需要合并的数据所对应的起始索引以及需要合并的条数。方法如下:

this.mergeList就是我们上面说的需要合并的数据集

dataSource就是我们的表格数据(注意一点,需要和后端沟通好,需要合并的数据需要顺着一起返回,不能说是第一条数据和第三条数据合并,第二条不合并,这样是不行的)

//获取当前属性值的第一次出现位置
    findElem(array, attr, val) {
      for (var i = 0; i < array.length; i++) {
        if (array[i][attr] == val) {
          return i; //返回当前索引值
        }
      }
      return -1;
    },
    //获取需要合并的数据索引,合合并长度
    toMerge(dataSource) {
      let typeNum = {};
      this.mergeList.forEach((key) => {
        typeNum[key] = {};
        dataSource.forEach((item) => {
          let data = dataSource.filter((items) => item[key] == items[key]);
          if (data.length > 1) {
            typeNum[key][item[key]] = data.length;
          }
        });
      });
      let list = {};
      for (let k in typeNum) {
        list[k] = {};
        for (let i in typeNum[k]) {
          list[k][i] = this.findElem(dataSource, k, i);
        }
      }
      let ss = {};
      this.mergeList.forEach((item) => {
        ss[item] = [];
        for (let j in typeNum[item]) {
          ss[item].push({
            index: list[item][j],
            col: typeNum[item][j],
          });
        }
      });
      return ss;
    },

调用this.toMerge(dataSource)最后得到的结果是(dataSource:表格数据):

这个结果的意思是tag_category这个数据列不需要合并,tag_category_title在两个位置上需要合并,第一个位置从0开始合并四条数据,第二个位置从4开始合并6条数据

3.修改columns,使其完成合并

    //处理表格columns  实现合并
    toColums(dataSource) {
      let mergeOrder = this.toMerge(dataSource);
      console.log(mergeOrder);
      for (let k in mergeOrder) {
        this.columns.map((item, indexs) => {
          if (indexs < this.columns.length - 1) {
            item.width = 150;
          }
          if (item.dataIndex == k) {
            item.customRender = (text, row, index) => {
              const obj = {
                children: text,
                attrs: {},
              };
              mergeOrder[k].forEach((items) => {
                if (index == items.index) {
                  obj.attrs.rowSpan = items.col;
                }
                for (
                  let j = items.index + 1;
                  j < items.index + items.col;
                  j++
                ) {
                  if (index == j) {
                    obj.attrs.rowSpan = 0;
                  }
                }
              });
              return obj;
            };
          }
        });
      }
    },

4.调用toColums方法就可以实现啦

  this.toColums(this.dataList);//this.dataList就是表格数据

5.结果就长这样啦

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ant Design Vue的a-table组件默认不支持单元格合并,但是可以通过自定义渲染函数来实现单元格合并。以下是一个简单的示例代码: ```html <template> <a-table :columns="columns" :data-source="dataSource"></a-table> </template> <script> export default { data() { return { columns: [ { title: "姓名", dataIndex: "name", customRender: (text, row, index) => { const rowspan = row.age < 30 ? 2 : 1; // 根据条件设定行合并数 if (index % rowspan === 0) { return { children: text, attrs: { rowSpan: rowspan } }; } else { return { children: "", attrs: { rowSpan: 0 } }; } } }, { title: "年龄", dataIndex: "age" }, { title: "地址", dataIndex: "address" } ], dataSource: [ { name: "张三", age: 28, address: "北京市海淀区" }, { name: "李四", age: 32, address: "上海市浦东新区" }, { name: "王五", age: 25, address: "广州市天河区" }, { name: "赵六", age: 31, address: "深圳市福田区" } ] }; } }; </script> ``` 在上面的代码中,我们通过自定义渲染函数 `customRender` 来实现单元格的合并。在渲染姓名这一列时,根据条件设定行合并数,然后判断当前行是否是合并行的第一行,如果是就返回一个包含 `children` 和 `attrs` 属性的对象,其中 `children` 属性设置单元格显示的文本,`attrs` 属性设置单元格的 `rowspan` 属性。如果不是合并行的第一行,就返回一个空字符串和 `rowspan` 为 0 的 `attrs` 属性,表示该单元格不需要显示。 这样就能实现 Ant Design Vue 的 a-table 表格单元格合并了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值