element ui 的table单元格合并

element ui中的table表格数据是动态生成的,如果说后台要求我们对单元格进行合并,这个时候需要借助一个api,:span-method="arraySpanMethod",arraySpanMethod为我们自己编写的合并单元格的方法。

下图是我在项目中合并的单元格

数据都是从那后拿到的,话不多说直接上代码教大家

1.先在data中定义数据,合并几列就定义几个数组和索引

      spanArr: [], //合并医院
      pos: 0, //合并医院索引
      dateArr: [], //合并日期
      dateIndex: 0, //合并日期索引
      deptArr: [], //合并送检科室
      deptIndex: 0, //合并送检科室索引
      cateArr: [], //合并项目分类
      cateIndex: 0, //合并项目分类索引
      patientArr: [], //合并患者类别
      patientIndex: 0, //合并患者类别索引

 2.接下来定义合并的函数,并编写代码

merge方法中的data是你table的数据源,我这里的逻辑是以第一行为基准一层层对比

 // 初始化合并行数组
    mergeInit() {
      this.spanArr = []; //合并医院
      this.pos = 0; //合并医院索引
      this.dateArr = []; //合并日期
      this.dateIndex = 0; //合并日期索引
      this.deptArr = []; //合并送检科室
      this.deptIndex = 0; //合并送检科室索引
      this.cateArr = []; //合并项目分类
      this.cateIndex = 0; //合并项目分类索引
      this.patientArr = []; //合并患者类别
      this.patientIndex = 0; //合并患者类别索引
    }, 
//  合并表格
    merge(data) {
      this.mergeInit();
      if (data.length > 0) {
        for (var i = 0; i < data.length; i++) {
          if (i === 0) {
            //第一行必须存在,以第一行为基准
            this.spanArr.push(1); //合并医院
            this.pos = 0;

            this.dateArr.push(1); //合并日期
            this.dateIndex = 0;

            this.deptArr.push(1); //合并送检科室
            this.deptIndex = 0;

            this.cateArr.push(1); //合并项目分类
            this.cateIndex = 0;

            this.patientArr.push(1); //合并患者类别
            this.patientIndex = 0;
          } else {
            // 判断当前元素与上一元素是否相同
            // 合并医院列
            if (data[i].request_org_name == data[i - 1].request_org_name) {
              this.spanArr[this.pos] += 1;
              this.spanArr.push(0);
            } else {
              this.spanArr.push(1);
              this.pos = i;
            }

            // 合并日期列
            if (
              data[i].date == data[i - 1].date &&
              data[i].request_org_name == data[i - 1].request_org_name
            ) {
              this.dateArr[this.dateIndex] += 1;
              this.dateArr.push(0);
            } else {
              this.dateArr.push(1);
              this.dateIndex = i;
            }

            // 合并送检科室列
            if (
              data[i].request_dept_name == data[i - 1].request_dept_name &&
              data[i].date == data[i - 1].date
            ) {
              this.deptArr[this.deptIndex] += 1;
              this.deptArr.push(0);
            } else {
              this.deptArr.push(1);
              this.deptIndex = i;
            }

            // 合并患者类别
            if (
              data[i].patient_class == data[i - 1].patient_class &&
              data[i].request_dept_name == data[i - 1].request_dept_name
            ) {
              this.patientArr[this.patientIndex] += 1;
              this.patientArr.push(0);
            } else {
              this.patientArr.push(1);
              this.patientIndex = i;
            }

            // 合并项目分类
            if (
              data[i].exam_item_category == data[i - 1].exam_item_category &&
              data[i].patient_class == data[i - 1].patient_class && 
              data[i].request_dept_name == data[i - 1].request_dept_name
            ) {
              this.cateArr[this.cateIndex] += 1;
              this.cateArr.push(0);
            } else {
              this.cateArr.push(1);
              this.cateIndex = i;
            }
          }
        }
      }
    },

 最后进行单元格的合并啦

//  合并单元格
    arraySpanMethod({ row, column, rowIndex, columnIndex }) {
      const len = this.tableData.length;
      const t=this.columns.length
      if (columnIndex === 0) {
        //第一列 医院
        const _row_1 = this.spanArr[rowIndex];
        const _col_1 = _row_1 > 0 ? 1 : 0;
        return {
          rowspan: _row_1,
          colspan: _col_1,
        };
      } else if (columnIndex === 1) {
        // 第二列 日期
        const _row_2 = this.dateArr[rowIndex];
        const _col_2 = _row_2 > 0 ? 1 : 0;
        return {
          rowspan: _row_2,
          colspan: _col_2,
        };
        // 第三列 科室
      } else if (columnIndex === 2) {
        const _row_3 = this.deptArr[rowIndex];
        const _col_3 = _row_3 > 0 ? 1 : 0;
        return {
          rowspan: _row_3,
          colspan: _col_3,
        };
        // 第五轮 项目分类
      } else if (columnIndex === 4) {
        const _row_4 = this.cateArr[rowIndex];
        const _col_4 = _row_4 > 0 ? 1 : 0;
        return {
          rowspan: _row_4,
          colspan: _col_4,
        };
        // 第四列 患者类别
      } else if (columnIndex === 3) {
        const _row_5 = this.patientArr[rowIndex];
        const _col_5 = _row_5 > 0 ? 1 : 0;
        return {
          rowspan: _row_5,
          colspan: _col_5,
        };
      } else if (columnIndex === t) {
        const _row_6 = len;
        const _col_6 = 1;
        return {
          rowspan: _row_6,
          colspan: _col_6,
        };
      }else if(rowIndex === len){
        return {
          rowspan:1,
          colspan:1
        }
      }
    },

  • 12
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
在使用ElementUI中的表格合并单元格时,可以按照以下步骤进行操作: 1. 首先,在data中定义需要合并的列的数组和索引。例如,定义column1Arr和column1Index来表示需要合并的第一列的数据和索引,以此类推。\[2\] 2. 接下来,编写合并逻辑的方法。可以使用mergeTable方法来实现合并。在该方法中,可以遍历spanName数组,并在tableData中进行比较,判断当前行与上一行是否相同。如果相同,则将上一行的合并数加1,当前行的合并数设为0;如果不相同,则将当前行的合并数设为1,并更新索引。\[3\] 3. 最后,在表格中使用elementUI中提供的合并方法。可以使用arraySpanMethod方法来指定合并的规则。在该方法中,可以根据columnIndex的值来判断是否需要合并,如果是需要合并的列,则返回合并的行数和列数;否则返回1行1列。\[1\] 通过以上步骤,就可以实现在ElementUI的表格中合并单元格的功能。 #### 引用[.reference_title] - *1* *3* [elementUItable单元格合并,通用版](https://blog.csdn.net/weixin_46103180/article/details/126969260)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Element UItable 单元格合并](https://blog.csdn.net/beijixing333y/article/details/125389547)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值