e2e858dfe6be145228567edb83458760549c2ba2b6dfaa087aa207239cb88647caf428306f88d10fa93ba6570ef86f7ea986f053584f40588204c6b07b8233 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. 'use strict';
  2. Object.defineProperty(exports, '__esModule', { value: true });
  3. var vue = require('vue');
  4. var layoutObserver = require('../layout-observer.js');
  5. var tokens = require('../tokens.js');
  6. var styleHelper = require('./style-helper.js');
  7. var index = require('../../../../hooks/use-namespace/index.js');
  8. var TableFooter = vue.defineComponent({
  9. name: "ElTableFooter",
  10. props: {
  11. fixed: {
  12. type: String,
  13. default: ""
  14. },
  15. store: {
  16. required: true,
  17. type: Object
  18. },
  19. summaryMethod: Function,
  20. sumText: String,
  21. border: Boolean,
  22. defaultSort: {
  23. type: Object,
  24. default: () => {
  25. return {
  26. prop: "",
  27. order: ""
  28. };
  29. }
  30. }
  31. },
  32. setup(props) {
  33. const parent = vue.inject(tokens.TABLE_INJECTION_KEY);
  34. const ns = index.useNamespace("table");
  35. const { getCellClasses, getCellStyles, columns } = styleHelper["default"](props);
  36. const { onScrollableChange, onColumnsChange } = layoutObserver["default"](parent);
  37. return {
  38. ns,
  39. onScrollableChange,
  40. onColumnsChange,
  41. getCellClasses,
  42. getCellStyles,
  43. columns
  44. };
  45. },
  46. render() {
  47. const { columns, getCellStyles, getCellClasses, summaryMethod, sumText } = this;
  48. const data = this.store.states.data.value;
  49. let sums = [];
  50. if (summaryMethod) {
  51. sums = summaryMethod({
  52. columns,
  53. data
  54. });
  55. } else {
  56. columns.forEach((column, index) => {
  57. if (index === 0) {
  58. sums[index] = sumText;
  59. return;
  60. }
  61. const values = data.map((item) => Number(item[column.property]));
  62. const precisions = [];
  63. let notNumber = true;
  64. values.forEach((value) => {
  65. if (!Number.isNaN(+value)) {
  66. notNumber = false;
  67. const decimal = `${value}`.split(".")[1];
  68. precisions.push(decimal ? decimal.length : 0);
  69. }
  70. });
  71. const precision = Math.max.apply(null, precisions);
  72. if (!notNumber) {
  73. sums[index] = values.reduce((prev, curr) => {
  74. const value = Number(curr);
  75. if (!Number.isNaN(+value)) {
  76. return Number.parseFloat((prev + curr).toFixed(Math.min(precision, 20)));
  77. } else {
  78. return prev;
  79. }
  80. }, 0);
  81. } else {
  82. sums[index] = "";
  83. }
  84. });
  85. }
  86. return vue.h(vue.h("tfoot", [
  87. vue.h("tr", {}, [
  88. ...columns.map((column, cellIndex) => vue.h("td", {
  89. key: cellIndex,
  90. colspan: column.colSpan,
  91. rowspan: column.rowSpan,
  92. class: getCellClasses(columns, cellIndex),
  93. style: getCellStyles(column, cellIndex)
  94. }, [
  95. vue.h("div", {
  96. class: ["cell", column.labelClassName]
  97. }, [sums[cellIndex]])
  98. ]))
  99. ])
  100. ]));
  101. }
  102. });
  103. exports["default"] = TableFooter;
  104. //# sourceMappingURL=index.js.map