el-table 单元格同时合并行和列span-method,表头合并header-cell-style

合并行、列

注意要写 else 的判断,否则被合并列/行的数据会往下一个列/行的单元格填充,

// 表格合并单元格
const objectSpanMethod = ({ row, column, rowIndex, columnIndex }) => {
	if (columnIndex === 0 || columnIndex === 1) { // 合并第 0 列和第 1 列,这里只需要操作第 0、1 列的单元格
		if (rowIndex === 0) { // 从第几行开始
			return [1, 1]     // 合并的行数,合并的列数,设为0则直接不显示(即省略某行,某列的值)
		}
		else if (rowIndex === 1) {  // 从第 1 行开始
			if (columnIndex === 0) { //如果是第 0 列
				return [2, 2] // 合并 2 行,2 列
			} else {
				return [0, 0]
			}
		}
		else if (rowIndex === 3) {
			return [2, 1]
		}
		else { // 合并几行,就省略几行的值,这里需要省略第 2、4 行的值
			return [0, 0]
		}
	}
}

 表头合并

使用 span-method 方法,隐藏第 0 列,让第 1 列占据两个单元格的宽度

const handerMethod = ({ row, column, rowIndex, columnIndex }) => {
	if (row[0].level == 1) {
		// 必须是row[0]=0 row[1]=2才会生效
		row[0].colSpan = 0
		row[1].colSpan = 2
		if (columnIndex === 0) {
			return { display: 'none' }
		}
	}
}

完整代码

<template>
	<div>
		<el-table
			:header-cell-style="handerMethod" 
			:data="tableData" 
			border 
			style="width: 50%"
			:span-method="objectSpanMethod">
			<!-- 第 0 列 -->
			<el-table-column prop="col1" label="表头1"/>
		
			<!-- 第 1 列 -->
			<el-table-column prop="col2" label="表头1"/>
		
			<!-- 第 2 列 -->
			<el-table-column prop="col3" label="表头2" />

			<!-- 第 3 列 -->
			<el-table-column prop="col4" label="表头3" />
		</el-table>
	</div>
</template>

<script setup>
import { reactive } from "vue";
// 表格数据
const tableData = reactive([
	{
		col1: 'col1',
		col2: 'col2',
		col3: 'col3',
		col4: 'col4',
	}, {
		col1: 'col1+2',
		col2: 'col2',
		col3: 'col3',
		col4: 'col4',
	}, {
		col1: 'col1+2',
		col2: 'col2',
		col3: 'col3',
		col4: 'col4',
	}, {
		col1: 'col1',
		col2: 'col2',
		col3: 'col3',
		col4: 'col4',
	}, {
		col1: 'col1',
		col2: 'col2',
		col3: 'col3',
		col4: 'col4',
	},
])
// 表格合并单元格
const objectSpanMethod = ({ row, column, rowIndex, columnIndex }) => {
	if (columnIndex === 0 || columnIndex === 1) { // 合并第 0 列和第 1 列
		if (rowIndex === 0) { // 从第几行开始
			return [1, 1]     // 合并的行数,合并的列数,设为0则直接不显示
		}
		else if (rowIndex === 1) {  // 从第 1 行开始
			if (columnIndex === 0) { //如果是第 0 列
				return [2, 2] // 合并 2 行,2 列
			} else {
				return [0, 0]
			}
		}
		else if (rowIndex === 3) {
			return [2, 1]
		}
		else { // 合并几列,就省略几列的值
			return [0, 0]
		}
	}
}
const handerMethod = ({ row, column, rowIndex, columnIndex }) => {
	if (row[0].level == 1) {
		// 必须是row[0]=0 row[1]=2才会生效
		row[0].colSpan = 0
		row[1].colSpan = 2
		if (columnIndex === 0) {
			return { display: 'none' }
		}
	}
}
</script>

<style lang="scss" scoped>
</style>

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
element-ui的表格el-table本身并不支持动态合并单元格行和列),但可以通过自定义表格的slot-scope和span-method来实现动态合并单元格的功能。首先,我们需要在表格定义时添加span-method属性,并指定一个方法来计算单元格合并行数和列数。例如: ```html <el-table :data="tableData" :span-method="mergeCells"> ... </el-table> ``` 然后,在methods中定义mergeCells方法来计算单元格合并行数和列数。该方法有四个参数分别是({row, column, rowIndex, columnIndex}),我们可以根据需要通过判断行索引和列索引来返回合适的行数和列数,例如合并第一行的两列可以这样实现: ```javascript methods: { mergeCells({row, column, rowIndex, columnIndex}) { if (rowIndex === 0 && columnIndex < 2) { return { rowspan: 1, colspan: 2 }; } } } ``` 这样就实现了动态合并第一行的两个单元格。如果想要合并其他行或列,可以根据需要进行判断和返回。 给表头添加斜线可以通过自定义表头的样式来实现。可以通过CSS的`::before`或`::after`伪元素来添加斜线样式。例如,给第一列的表头添加斜线可以这样实现: ```html <el-table ...> <el-table-column label="姓名"> <template slot="header" slot-scope="scope"> <div class="header-wrapper"> <div class="header-content"> <span>{{scope.column.label}}</span> </div> </div> </template> </el-table-column> ... </el-table> ``` 然后在样式中定义斜线效果: ```css <style> .header-content::before { content: ""; display: block; border-bottom: 1px solid #333; transform: skew(-45deg); width: 80%; margin-left: 10%; } </style> ``` 这样就实现了给第一列的表头添加斜线的效果。可以根据需要调整斜线的样式和位置来达到期望的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值