赞
踩
功能需求需要对表格进行列的合并,这里要实现的是一个list中包含多个list,要循环出多个list进行表格的渲染,处理列的合并,渲染在页面上
如上图所示:当编号、名称、负责人相同时,对这些列进行合并处理,接口返回的数据格式为:数组周干包含多个对象,每个对象中又包含一个数组,需要把对象中的数组渲染出来,并进行相同信息的列的合并
vue2、elementui中el–table的span-method方法
span-method方法介绍:
说明:合并行或列的计算方法,类型:Function({ row, column, rowIndex, columnIndex })
<el-table
:data="item.details"
:span-method="(param)=>spanMethod(param,index)"
:summary-method="getSummaries"
border
show-summary
style="width: 100%;min-height: 300px;"
>
由于是多个表格渲染,所以span-method需要处理多次,因此采用(param)=>spanMethod(param,index)的方式多传递一个参数进行处理
arr.forEach((li, idx) => {
let {departmentCode, departmentName} = li
this.listData.push({departmentCode, departmentName, details: []})
li.details.forEach(f => {
f.records.forEach(item => {
item.objTotal = f
this.listData[idx].details.push(item)
})
})
})
this.getSpanArr(this.listData)
getSpanArr(data) { data.map((item, idx) => { this.spanArr.push([]) for (let i = 0; i < item.details.length; i++) { if (i === 0) { this.spanArr[idx].push(1) this.pos = 0 } else { // 判断当前元素与上一个元素是否相同 if (item.details[i].jjflCode === item.details[i - 1].jjflCode) { this.spanArr[idx][this.pos] += 1 this.spanArr[idx].push(0) } else { this.spanArr[idx].push(1) this.pos = i } } } }) }, spanMethod({ row, column, rowIndex, columnIndex }, index) { if (columnIndex === 0 || columnIndex === 1 || columnIndex === 2) { const _row = this.spanArr[index][rowIndex] const _col = _row > 0 ? 1 : 0 return { // [0,0] 表示这一行不显示, [2,1]表示行的合并数 rowspan: _row, colspan: _col } } },
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。