Przeglądaj źródła

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

Jikkai Xiao 7 lat temu
rodzic
commit
2b9be3c0fb
1 zmienionych plików z 32 dodań i 28 usunięć
  1. 32 28
      packages/table/src/table-footer.js

+ 32 - 28
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 (
       <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] }>
                   <div class={ ['cell', column.labelClassName] }>
                     {
-                      this.summaryMethod ? this.summaryMethod({ columns: this.columns, data: this.store.states.data })[cellIndex] : sums[cellIndex]
+                      sums[cellIndex]
                     }
                   </div>
                 </td>