上一篇博客说到:table表格内不同项的层级求和,上一篇用的是watch的方法,这个方法代码繁琐,十分消耗性能,今天用一种全新的方法来解决这个问题:
我这边呢是有多个大分类,分类1 分类2 分类3,然后每个分类下又有小分类,需要统计每个小分类的总额,然后统计每个大分类的总额,放到合计里面去!(这个根据个人的业务代码需求肯定是不一样的,大家根据自己需求进行更改,我这边只写自己的)
/**
* 修改单元格自动计算父级值
*/
makeDataRelation(){
//行号
let column = this.selectedCell.columnIndex;
//第几列
let thisLv = this.tableData[this.selectedCell.rowIndex].computeLevel;
//列号
let thisRowIndex = this.selectedCell.rowIndex;
//小分类
if(thisLv > 1){
this.computeParentValue(thisRowIndex,thisLv)
}
//大分类求和
if(thisLv > 0){
this.tableData[27][column] =this.tableData[0][column] + this.tableData[5][column] + this.tableData[6][column] + this.tableData[26][column]
}
},
computeParentValue(rowIndex,thisLv){
if(thisLv > 1){
let obj = this.searchIdenticalLevel(rowIndex,thisLv);
let sameLevelIndexArr = obj.sameLevelIndexArr;
let parentIndex = obj.parentIndex;
let parentValue = 0;
//子类求和
for (let i = 0; i < sameLevelIndexArr.length; i++) {
let el = this.tableData[sameLevelIndexArr[i]];
parentValue += el[this.selectedCell.columnIndex];
}
//求和赋值给大类
this.tableData[parentIndex][this.selectedCell.columnIndex] = parentValue;
this.computeParentValue(parentIndex,--thisLv);
}
},
searchIdenticalLevel(rowIndex,thisLv){
let obj = {
parentIndex:0,
sameLevelIndexArr: []
};
let startIndex = 0;
let endIndex = this.tableData.length-1;
for (let i = rowIndex-1; i < rowIndex; i--) {
if(this.tableData[i].computeLevel < thisLv){
startIndex = i+1;
obj.parentIndex = i;
break
}
}
for (let i = rowIndex+1; i < this.tableData.length; i++) {
if(this.tableData[i].computeLevel < thisLv){
endIndex = i-1;
}
}
for (let i = startIndex; i <= endIndex; i++) {
if(this.tableData[i].computeLevel == thisLv){
obj.sameLevelIndexArr.push(i)
}
}
return obj;
},
这边只提供一个思路,具体还是要看实际情况的!