Element 表格合并单元格
原理
1、getData方法是从后台拿到的数据,通常返回的是一个数组;
2、spanArr是一个空的数组,用于存放每一行记录的合并数;
3、 pos是spanArr的索引。
如果是第一条记录(索引为0),向数组中加入1,并设置索引位置;
如果不是第一条记录,则判断它与前一条记录是否相等,
如果相等,则向spanArr中添入元素0,并将前一位元素+1,表示合并行数+1,
以此往复,得到所有行的合并数,0即表示该行不显示
3、 pos是spanArr的索引。
如果是第一条记录(索引为0),向数组中加入1,并设置索引位置;
如果不是第一条记录,则判断它与前一条记录是否相等,
如果相等,则向spanArr中添入元素0,并将前一位元素+1,表示合并行数+1,
以此往复,得到所有行的合并数,0即表示该行不显示
<script setup> let tableData = ref([]); let spanArr = ref([]); const getData = () => { let pos = ref(0); perceptionInfo({ id: id.value }) .then((res) => { tableData.value = res.data.data; // 合并单元格数据处理 tableData.value.forEach((n, i) => { if (i == 0) { spanArr.value.push(1); pos = 0; } else { if (n.category == tableData.value[i - 1].category) { spanArr.value[pos] += 1; spanArr.value.push(0); } else { spanArr.value.push(1); pos = i; } } }); }) }; // 合并单元格; const spanMethod = (row, column, rowIndex, columnIndex) => { if (row.columnIndex === 0) { const _row = spanArr.value[row.rowIndex]; const _col = _row > 0 ? 1 : 0; console.log(`rowspan:${_row} colspan:${_col}`); return { // [0,0] 表示这一行不显示, [2,1]表示行的合并数 rowspan: _row, colspan: _col, }; } }; </script>
效果如下: