el-table 合并单元格

参考文章:vue3.0 el-table 动态合并单元格 - flyComeOn - 博客园

html 复制代码
<el-table :data="tableData" border empty-text="暂无数据" :header-cell-style="{ background: '#f5f7fa' }" class="parent-table" :span-method="objectSpanMethod">
javascript 复制代码
getAll().then((rsp) => {
			if (rsp.status === HTTPStatus.OK) {
				tableData.value = rsp.data
				const colFields = ['groupNo', 'name', 'description', 'operation']
				setTableRowSpan(tableData.value, colFields)
			}
		})
		.catch(() => {})

// 设置合并的行和列
const setTableRowSpan = (tableData, colFields) => {
	let lastItem = []
	// 循环需要合并的列
	colFields.forEach((field, index) => {
		tableData.forEach((item) => {
			// 存值,把合并字段存入行,为了合并单元格时检索列是否含有该字段
			item.mergeCell = colFields
			// 合并的字段出现的次数
			const rowSpan = `rowspan_${field}`
			// 比较上一次的存值和该轮的合并字段,判断是否合并到上个单元格
			if (colFields.slice(0, index + 1).every((e) => lastItem[e] === item[e])) {
				// 如果是,合并行;
				item[rowSpan] = 0 // 该轮合并字段数量存0
				// 上轮合并字段数量+1
				lastItem[rowSpan] += 1
			} else {
				//初始化进入&& 如果不是,完成一次同类合并,lastItem重新赋值,进入下一次计算
				item[rowSpan] = 1 // 该轮合并字段第一次出现,数量存1
				// 改变比较对象,重新赋值,进行下一次计算
				lastItem = item
			}
		})
	})
}
const objectSpanMethod = ({ row, column, rowIndex, columnIndex }) => {
	if (row.mergeCell.includes(column.property)) {
		const rowspan = row[`rowspan_${column.property}`]
		if (rowspan) {
			return { rowspan: rowspan, colspan: 1 }
		} else {
			return { rowspan: 0, colspan: 0 }
		}
	}
}
相关推荐
majingming1237 小时前
FUNCTION
java·前端·javascript
SuperEugene8 小时前
Axios 接口请求规范实战:请求参数 / 响应处理 / 异常兜底,避坑中后台 API 调用混乱|API 与异步请求规范篇
开发语言·前端·javascript·vue.js·前端框架·axios
子兮曰8 小时前
Bun v1.3.11 官方更新全整理:新增功能、关键修复与升级验证
javascript·node.js·bun
Setsuna_F_Seiei9 小时前
AI 对话应用之页面滚动交互的实现
前端·javascript·ai编程
wefly20179 小时前
从使用到原理,深度解析m3u8live.cn—— 基于 HLS.js 的 M3U8 在线播放器实现
java·开发语言·前端·javascript·ecmascript·php·m3u8
英俊潇洒美少年10 小时前
vue如何实现react useDeferredvalue和useTransition的效果
前端·vue.js·react.js
英俊潇洒美少年10 小时前
ref 底层到底是怎么变成响应式的?
vue.js
kyriewen1110 小时前
给浏览器画个圈:CSS contain 如何让页面从“卡成PPT”变“丝滑如德芙”
开发语言·前端·javascript·css·chrome·typescript·ecmascript
英俊潇洒美少年11 小时前
react19和vue3的优缺点 对比
前端·javascript·vue.js·react.js
多看书少吃饭12 小时前
Vue + Java + Python 打造企业级 AI 知识库与任务分发系统(RAG架构全解析)
java·vue.js·笔记