您好,欢迎来到99网。
搜索
您的当前位置:首页el-table 合并相同值单元格

el-table 合并相同值单元格

来源:99网

思路

先对table数据进行排序,让相同name的数据挨在一起,然后使用el-table的span-method进行合并

一、问题1

default-sort 默认排序失效

1. 原因

default-sort 生效时 数据还没有渲染进table

2. 尝试办法

  • nextTick()等待数据渲染结束,使用table的sort()方法手动排序,但是使用的vue3 setup,读取不到this
  • 给table绑定ref,但是也读不到

3. 解决办法

从接口接受数据后,直接用sort()给数据排序了

二、问题2

怎么进行数据合并

//获取到数据,进行排序
 tableData.value.sort((a, b) => { return a.ecuDid - b.ecuDid })
  1. <template>中table传入span-method方法,绑定合并行或列的计算方法:ecuNumSpanMethod函数
<el-table v-else="page1 === 'upgradeVehicleParts'" id="reportParts" :data="tableData" border style="width: 100%" :span-method="ecuNumSpanMethod">
	<el-table-column label=" 数量" align="center">
		<el-table-column label="名称" prop="ecuName"></el-table-column>
		<el-table-column label="地址" prop="ecuDid"></el-table-column>
		<el-table-column label="编号" prop="ecuNum"></el-table-column>
		<el-table-column label="数量" prop="count"></el-table-column>
	</el-table-column>
</el-table>
  1. ecuNumSpanMethod 函数
const ecuNumSpanMethod = ({
    row,
    column,
    rowIndex,
    columnIndex,
}) => {
    if (columnIndex === 0 || columnIndex === 1) {     
        const currentValue = row[column.property];
        const preRow = tableData.value[rowIndex-1];
        //上一行这一列的数据
        const preValue = preRow ? preRow[column.property] : null;
        // 如果当前值和上一行的值相同,则将当前单元格隐藏
        if(currentValue === preValue){
            return{rowspan:0,colspan:0}
        }else{
            let rowspan = 1
            // 计算应该合并的行数
            for (let i = rowIndex + 1; i < tableData.value.length; i++){
                const nextRow = tableData.value[i]
                const nextValue = nextRow[column.property]
                if (nextValue === currentValue){
                    rowspan++
                }else{
                    break
                }
            }
            return { rowspan, colspan: 1 }
        }
    }
}

三、span-method工作原理

  1. 这个方法中会从上至下 ,从左至右遍历每一个单元格。在每一个单元格中执行span-method绑定的函数(ecuNumSpanMethod ),下图是遍历单元格下标(rowIndex,columnIndex)
  2. 函数返回值解析return {rowspan,colspan},表示当前单元格变成rowspan行,colspan列。rowspan默认向下合并,colspan默认向右合并。剩下的单元格视觉上会顺位移动,但是用index取值还是变化前。

四、代码思路

把第一行第二列合并成两行一列

if(columnIndex === 1 && rowIndex === 0){
      return {
        rowspan: 2,
        colspan: 1,
      }
    }

if(columnIndex === 1 && rowIndex === 0){
      return {
        rowspan: 2,
        colspan: 1,
      }
    }
if(columnIndex === 1 && rowIndex === 1){
return {rowspan:0,colspan:0}
}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 99spj.com 版权所有 湘ICP备2022005869号-5

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务