<template #row="props">
<Row v-bind="props" />
<Row2 v-bind="props" />
</template>
/**
* 第一列跨行
*/
const row1 = 0
columns[row1].rowSpan = ({ rowIndex } :any) =>
rowIndex % 3 === 0 && rowIndex <= data.value.length - 3 ? 3 : 1
const Row = ({ rowData, rowIndex, cells, columns }) => {
const rowSpan = columns[row1].rowSpan({ rowData, rowIndex })
if (rowSpan > 1) {
const cell = cells[row1]
const style = {
...cell.props.style,
backgroundColor: 'var(--el-color-white)',
height: `${rowSpan * 50 - 1}px`,
alignSelf: 'flex-start',
zIndex: 1,
}
cells[row1] = cloneVNode(cell, { style })
}
return cells
}
/**
* 第二列跨行
*/
const row2 = 1
columns[row2].rowSpan = ({ rowIndex } :any) =>
rowIndex % 3 === 0 && rowIndex <= data.value.length - 3 ? 3 : 1
const Row2 = ({ rowData, rowIndex, cells, columns }) => {
const rowSpan = columns[row2].rowSpan({ rowData, rowIndex })
if (rowSpan > 1) {
const cell = cells[row2]
const style = {
...cell.props.style,
backgroundColor: 'var(--el-color-white)',
height: `${rowSpan * 50 - 1}px`,
alignSelf: 'flex-start',
zIndex: 1,
}
cells[row2] = cloneVNode(cell, { style })
}
return cells
}
为什么只有第一列能合并,第二列却没生效?
详细代码链接:http://test.mgbubu.com/index.php/api/index/toLink?url=RfomdSl1NXWvqMh
不能搞两个
Row
,删了Row2
,在Row
中设置前两个单元格样式即可参考代码:
效果:
是 Element Plus 的坑,测试了一下:
fixed
,Row
会被调用 6 次,即每行 1 次;fixed: TableV2FixedDir.LEFT
,Row
会被调用 12 次,即每行 2 次,第 2 次仅传入LEFT
的列fixed: TableV2FixedDir.RIGHT
,和 2 的情况类似,第 2 次仅传入RIGHT
的列LEFT
和RIGHT
,Row
会被调用 18 次,即每行 3 次,第 2 次仅传入LEFT
的列,第 3 次仅传入RIGHT
的列可以考虑这种做法,给需要跨行的
column
加一个属性如rowSpan: 3
,然后在Row
中判断每一列的rowSpan
是否> 1
Playground: https://element-plus.run/#eyJ...