table合并

一下表格基于element-ui的table进行举栗子。

一:行单元格合并(一行左右相邻的单元格)

接上一篇合计行相邻右侧的单元格合并。

<el-table
    :data="tableData"
    border
    style="width: 100%"
	id='tableID'
>
</el-table>
<script>
watch:{
	tableData:{
		immediate:true,
		handler(){
			setTimeout(()=>{
				const tds=document.querySelectAll('#tableID .el-table__footer-wrapper tr>td');
				tds[0].colSpan=2;
				tds[0].style.textAlign='right';
				tds[1].style.display='none';
			},0)
		}
	}
}
</script>
<style>
.el-table >>> .el-table__fixed{
	display:flex;
	flex-direction:colum;
}
.el-table >>> .el-table__fixed-footer-wrapper,
.el-table >>> .el-table__fixed-body-wrapper,
.el-table >>> .el-table__fixed-header-wrapper{
	position:initial;
}
.el-table >>> .el-table__fixed-body-wrapper{
	order:1,	
}
.el-table >>> .el-table__fixed-footer-wrapper tbody td.el-table_cell{
	border-top:none;
	background:black;
	color:white;
	font-weight:bolder;
}
.el-table >>> .el-table__fixed::before{
	height:0
}
</style>

二:列单元格合并(同一列上下相邻单元格)

若是没有规律的合并,需要看后端能否确认哪些能合并,并返给前端一个标志类型的字段,前端判断相同类型的进行合并。
举个栗子:
后端返回类型字段为minitorType=‘类型一’;
table表绑定方法 :span-methods=‘objectSpanMethod’

objectSpanMethod({row,column,rowIndex,columnIndex}){
//这里假设后端返回类型字段为minitorType需要展示在第一列
	if(columnIndex===0){
		const _row=this.filterData(this.tableData).one[rowIndex];
		const _col=_row > 0 ? 1 : 0;
		return {
			rowspan:_row,
			colspan:_col,
		}
	}
}
filterData(arr){
	let spanOneArr=[];
	let conOne=0;
	arr.forEach((ITEM,I)=>{
		if(I === 0){
			spanOneArr.push(1)
		}else{
			if(item.minitorType === arr[I-1].minitorType){
			//第一列需要合并相同内容的判断
				spanOneArr[conOne]+=1;
				spanOneArr.push(0)
			}else{//不同
				spanOneArr.push(1);
				conOne=I
			}
		}
	})
	return {
		one:spanOneArr,
	}
}

三:表格嵌套合并及数据格式

在这里插入图片描述

1:数据格式需要为双数组嵌套形式
栗子:
res:{
	data:{
		datalist{
		[
			{//第一行外层数据,对应后面的大格子
				objname:'第一行',
				wraplevel:'AAA',
				wrapnum:'10',
				wrapratio:'0.3',
				//innerList对应里面的小格子数据第234列
				innerList:[
					smalllevel:'AAA',
					smallnum:'10',
					smallratio:'0.3',
				]
			}]
	}code:'200',
	message:'查询成功!'
}

对应的dom部分

//table
  <el-table
    :data="datalist"
    border
    style="width: 100%">
    <el-table-column
      prop="objname"
      label="名称"
      width="180">
    </el-table-column>
    <el-table-column
      prop="name"
      label="小级"
      width="180">
      《template slot-scope='innertemp'》
      		 <el-table
		    :data="innertemp.row.innerList"
		    :show-header='false'
		    >
		    		<el-table-column
			      	prop="smalllevel"
			      	label="小级">
			    	</el-table-column>
		    </el-table>
      </template>
    </el-table-column>
     <el-table-column
      prop="name"
      label="小级数量"
      width="180">
      《template slot-scope='innertemp'》
      		 <el-table
		    :data="innertemp.row.innerList"
		    :show-header='false'
		    >
		    		<el-table-column
			      	prop="smallnum"
			      	label="小级数量">
			    	</el-table-column>
		    </el-table>
      </template>
    </el-table-column>
     <el-table-column
      prop="smallratio"
      label="小级比例"
      width="180">
      《template slot-scope='innertemp'》
      		 <el-table
		    :data="innertemp.row.innerList"
		    :show-header='false'
		    >
		    		<el-table-column
			      	prop="smallratio"
			      	label="小级比例">
			    	</el-table-column>
		    </el-table>
      </template>
    </el-table-column>
    <el-table-column
      prop="wrapname"
      label="大级">
    </el-table-column>
    <el-table-column
      prop="wrapnum"
      label="大级数量">
    </el-table-column>
    <el-table-column
      prop="wrapratio"
      label="大级比例">
    </el-table-column>
  </el-table>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值