// 表格合并算法
tableMergeMethod(columnArr, tableData) {
let column = {};
let position = 0;
let lastColumnName = null;
// 遍历合并的列数据
columnArr.forEach((prop) => {
column[prop] = [];
let lastColumn = lastColumnName === null ? null : column[lastColumnName];
// 遍历合并的行数据
tableData.forEach((row, rowIndex) => {
// 第N列第一行
column[prop][rowIndex] = [1, 1];
if (rowIndex === 0 || (lastColumn != null && lastColumn[rowIndex][0] > 0)) {
// 记录当前行号
position = rowIndex;
} else if (row[prop] === tableData[rowIndex - 1][prop]) {
// 当前行数据等于上一行,根据记录的行号,计算需要合并几行。
column[prop][position][0] += 1;
// 当前行 隐藏不显示
column[prop][rowIndex][0] = 0;
} else {
// 不相等之后,重置记录行号
position = rowIndex;
}
});
lastColumnName = prop;
});
return column;
},
方法封裝
接口數據返回時調用
// 獲取表格數據
getTableList() {
getAmountMaterialList(this.queryParams).then(res => {
this.tableData = res.data
let columnArr = ['deptName', 'recordContent', 'productionUnitName']
this.mergeArr = this.tableMergeMethod(columnArr, this.tableData);
})
},
// 合并單元格
arraySpanMethod({ row, column, rowIndex, columnIndex }) {
let arr = this.mergeArr[column.property] || [];
if (arr.length) return arr[rowIndex];
else[1, 1];
},
個人記錄