1.type="index"
自定义显示内容
<el-table-column type="index" :index="indexMethod" label="序号"> </el-table-column>
最后一列的index位置显示汇总
indexMethod(index){ if (index === this.tableData.length - 1) { return '汇总' } else { return index + 1 } }
2.合并列
<el-table id="table" :data="tableData" :span-method="objectSpanMethod"></el-table>
合并最后一行的前面7列
objectSpanMethod({ row, column, rowIndex, columnIndex }) { if (rowIndex === this.tableData.length - 1) { if (columnIndex === 0) { return { rowspan: 1, colspan: 7 } } else if ([1,2,3,4,5,6].includes(columnIndex)) { return { rowspan: 0, colspan: 0 } } } }
3.合并行
<el-table id="table" :data="tableData" :span-method="objectSpanMethod"></el-table>
第一列的多行分别合并
spanMethod ({ row, column, rowIndex, columnIndex }) { if (columnIndex === 0) { if (rowIndex === 0) { return { rowspan: 3, colspan: 1 } } else if ([1, 2].includes(rowIndex)) { return { rowspan: 0, colspan: 0 } } else if (rowIndex === 3) { return { rowspan: 3, colspan: 1 } } else if ([4, 5].includes(rowIndex)) { return { rowspan: 0, colspan: 0 } } else if (rowIndex === 6) { return { rowspan: 8, colspan: 1 } } else if ([6, 7, 8, 9, 10, 11, 12, 13].includes(rowIndex)) { return { rowspan: 0, colspan: 0 } } else { return { rowspan: 1, colspan: 1 } } } }
4.合并属性相同的行,并生成合计
<el-table :data="tableData" :span-method="objectSpanMethod"></el-table>
接口返回的数据预处理
getData () { this.tableData = res.data.list this.tableMerge(res.data.list, 'date') this.tableCellMerge(res.data.list, 'amount', 'amountMerge') }
功能函数
tableMerge (tableData, mergeKey) { // 同一天的行合并 let rowSpanArr = [] let position = 0 for (let [index, item] of tableData.entries()) { if (index === 0) { rowSpanArr.push(1) position = 0 } else { if (item[mergeKey] === tableData[index - 1][mergeKey]) { rowSpanArr[position] += 1 rowSpanArr.push(0) } else { rowSpanArr.push(1) position = index } } } this.rowSpanArr = rowSpanArr }, tableCellMerge (tableData, cellName, cellNameMerge) { // 相同的金额累加到第一列 let list = this.rowSpanArr list.forEach((item, index) => { let tableItem = tableData[index] if (item > 1) { let amount = 0 for (let i = 0; i < item; i++) { amount += Number(tableData[index + i][cellName]) } tableItem[cellNameMerge] = amount } else if (item === 1) { tableItem[cellNameMerge] = tableItem[cellName] } this.$set(tableData, index, tableItem) }) }
span-method
处理
objectSpanMethod ({ row, column, rowIndex, columnIndex }) { if ([1, 2].includes(columnIndex)) { let rowSpan = this.rowSpanArr[rowIndex] return { rowspan: rowSpan, colspan: 1 } } }