Table: improve performance of summary-method (#11521)

pull/11536/head
Jikkai Xiao 2018-06-07 11:37:26 +08:00 committed by 杨奕
parent d1391e325c
commit 2b9be3c0fb
1 changed files with 33 additions and 29 deletions

View File

@ -6,36 +6,40 @@ export default {
mixins: [LayoutObserver], mixins: [LayoutObserver],
render(h) { render(h) {
const sums = []; let sums = [];
this.columns.forEach((column, index) => { if (this.summaryMethod) {
if (index === 0) { sums = this.summaryMethod({ columns: this.columns, data: this.store.states.data });
sums[index] = this.sumText; } else {
return; this.columns.forEach((column, index) => {
} if (index === 0) {
const values = this.store.states.data.map(item => Number(item[column.property])); sums[index] = this.sumText;
const precisions = []; return;
let notNumber = true; }
values.forEach(value => { const values = this.store.states.data.map(item => Number(item[column.property]));
if (!isNaN(value)) { const precisions = [];
notNumber = false; let notNumber = true;
let decimal = ('' + value).split('.')[1]; values.forEach(value => {
precisions.push(decimal ? decimal.length : 0); if (!isNaN(value)) {
notNumber = false;
let decimal = ('' + value).split('.')[1];
precisions.push(decimal ? decimal.length : 0);
}
});
const precision = Math.max.apply(null, precisions);
if (!notNumber) {
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return parseFloat((prev + curr).toFixed(Math.min(precision, 20)));
} else {
return prev;
}
}, 0);
} else {
sums[index] = '';
} }
}); });
const precision = Math.max.apply(null, precisions); }
if (!notNumber) {
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return parseFloat((prev + curr).toFixed(Math.min(precision, 20)));
} else {
return prev;
}
}, 0);
} else {
sums[index] = '';
}
});
return ( return (
<table <table
@ -61,7 +65,7 @@ export default {
class={ [column.id, column.headerAlign, column.className || '', this.isCellHidden(cellIndex, this.columns) ? 'is-hidden' : '', !column.children ? 'is-leaf' : '', column.labelClassName] }> class={ [column.id, column.headerAlign, column.className || '', this.isCellHidden(cellIndex, this.columns) ? 'is-hidden' : '', !column.children ? 'is-leaf' : '', column.labelClassName] }>
<div class={ ['cell', column.labelClassName] }> <div class={ ['cell', column.labelClassName] }>
{ {
this.summaryMethod ? this.summaryMethod({ columns: this.columns, data: this.store.states.data })[cellIndex] : sums[cellIndex] sums[cellIndex]
} }
</div> </div>
</td> </td>