vue element 表格合计行 合并

表格最下面合计一行的合并  详细代码在最下方

先看图片的效果是否符合自己的业务    ,符合的话就看看我找的的解决方案吧,搞这个真的头大

  先看这里     id="tables" :summary-method="getSummaries" show-summary   很重要!!!!!

<el-table :data="tableData" id="tables" :summary-method="getSummaries" show-summary>

再来个监听   下面的注释记得看一下

watch: {
		//监听tableData
		tableData: {
			// 立即监听
			immediate: true,
			handler() {
				this.$nextTick(() => {
					const tds = document.querySelectorAll('#tables .el-table__footer-wrapper tr>td');
				    // colSpan合并列  这里打印一下看一下
			    	console.log(tds)
					tds[0].colSpan = 3;  // 这里是要合并几行
					tds[0].style.textAlign = 'center';
					tds[1].style.display = 'none'; // 上述合并3行也就对应的隐藏到第3个格子
					tds[2].style.display = 'none';
// 这里注意一下  要合并几行就隐藏到第几个格子,我合并3个格子,第0个格子是 合计 字段不用隐藏,后面两个要隐藏因为是合并3个嘛,  我在这踩过坑 哭死
				});
			}
		}
	},

监听主要是合并哪些格子,下面是计算直接官网的方法进行没大改

getSummaries(param) {
		    const { columns, data } = param;
		    const sums = [];
		    columns.forEach((column, index) => {
				if (index === 0) {
					sums[index] = '合计:';
					return;
				}else if(index === 1||index === 2){//只有这里改了一下
					// sums[index] = 'N/A';
					return;
				}
		        const values = data.map(item => Number(item[column.property]));
		        if (!values.every(value => isNaN(value))) {
					sums[index] = values.reduce((prev, curr) => {
						const value = Number(curr);
						if (!isNaN(value)) {
							return prev + curr;
						} else {
							return prev;
						}
		            }, 0);
		        sums[index];
				} else {
					sums[index] = 'N/A';
				}
			});
			return sums;
		},

(详情代码) 最底部的合并   测试的你们直接复制试试就行

<template>
	<div>
		<el-table :data="tableData" border height="200" style="width: 100%; margin-top: 20px" id="tables" :summary-method="getSummaries" show-summary>
			<el-table-column prop="id" label="ID" width="180"></el-table-column>
			<el-table-column prop="name" label="姓名"></el-table-column>
			<el-table-column prop="amount1" label="数值 1(元)"></el-table-column>
			<el-table-column prop="amount2" label="数值 2(元)"></el-table-column>
			<el-table-column prop="amount3" label="数值 3(元)"></el-table-column>
		</el-table>
	</div>
</template>

<script>
export default {
	data() {
		return {
			tableData: [
				{
					id: '12987122',
					name: '王小虎',
					amount1: '234',
					amount2: '3.2',
					amount3: 10
				},
				{
					id: '12987123',
					name: '王小虎',
					amount1: '165',
					amount2: '4.43',
					amount3: 12
				},
				{
					id: '12987124',
					name: '王小虎',
					amount1: '324',
					amount2: '1.9',
					amount3: 9
				},
				{
					id: '12987125',
					name: '王小虎',
					amount1: '621',
					amount2: '2.2',
					amount3: 17
				},
				{
					id: '12987126',
					name: '王小虎',
					amount1: '539',
					amount2: '4.1',
					amount3: 15
				}
			]
		};
	},
	watch: {
		//监听table这个对象
		// tableData: {   // !!!!!!!注意这里注释的这段代码是方便理解  要合并几行 对应下面的
		// 	immediate: true,
		// 	handler() {
		// 		this.$nextTick(() => {
		// 			const tds = document.querySelectorAll('#tables .el-table__footer-wrapper tr>td');
		// 		// colSpan合并列
		// 		console.log(tds)
		// 			tds[0].colSpan = 3;
		// 			tds[0].style.textAlign = 'center';
		// 			tds[1].style.display = 'none';
		// 			tds[2].style.display = 'none';
		// 		});
		// 	}
		// },
		tableData: {
			// 立即监听
			immediate: true,
			handler() {
				this.$nextTick(() => {
					const tds = document.querySelectorAll('#tables .el-table__footer-wrapper tr>td');
				// colSpan合并列
				console.log(tds)
					tds[0].colSpan = 2;
					tds[0].style.textAlign = 'center';
					tds[1].style.display = 'none';
				});
			}
		}
	},
	methods: {
		getSummaries(param) {
			const { columns, data } = param;
			const sums = [];
			columns.forEach((column, index) => {
				// if (index === 0) {  // 上面注释的那段代码对应这段!!!!!!!!!!!
				// 	sums[index] = '总价';
				// 	return;
				// }else if(index === 1||index === 2){
				// 	return;
				// }
				if (index === 0) {
					sums[index] = '总价';
					return;
				}else if(index === 1){
					return;
				}
				
				const values = data.map(item => Number(item[column.property]));
				if (!values.every(value => isNaN(value))) {
					sums[index] = values.reduce((prev, curr) => {
						const value = Number(curr);
						if (!isNaN(value)) {
							return prev + curr;
						} else {
							return prev;
						}
					}, 0);
					sums[index] += ' 元';
				} else {
					sums[index] = 'N/A';
				}
			});

			return sums;
		}
	}
};
</script>

<style></style>

最终效果 

 

 

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值