diff --git a/packages/table/src/table-footer.js b/packages/table/src/table-footer.js index d6832a3a45..5774d86866 100644 --- a/packages/table/src/table-footer.js +++ b/packages/table/src/table-footer.js @@ -6,36 +6,40 @@ export default { mixins: [LayoutObserver], render(h) { - const sums = []; - this.columns.forEach((column, index) => { - if (index === 0) { - sums[index] = this.sumText; - return; - } - const values = this.store.states.data.map(item => Number(item[column.property])); - const precisions = []; - let notNumber = true; - values.forEach(value => { - if (!isNaN(value)) { - notNumber = false; - let decimal = ('' + value).split('.')[1]; - precisions.push(decimal ? decimal.length : 0); + let sums = []; + if (this.summaryMethod) { + sums = this.summaryMethod({ columns: this.columns, data: this.store.states.data }); + } else { + this.columns.forEach((column, index) => { + if (index === 0) { + sums[index] = this.sumText; + return; } - }); - const precision = Math.max.apply(null, precisions); - if (!notNumber) { - sums[index] = values.reduce((prev, curr) => { - const value = Number(curr); + const values = this.store.states.data.map(item => Number(item[column.property])); + const precisions = []; + let notNumber = true; + values.forEach(value => { if (!isNaN(value)) { - return parseFloat((prev + curr).toFixed(Math.min(precision, 20))); - } else { - return prev; + notNumber = false; + let decimal = ('' + value).split('.')[1]; + precisions.push(decimal ? decimal.length : 0); } - }, 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 (
{ - this.summaryMethod ? this.summaryMethod({ columns: this.columns, data: this.store.states.data })[cellIndex] : sums[cellIndex] + sums[cellIndex] }