c768618732d4949c36aaf8b42f566c82413e0f52dad97e8c9247c3cfb9bdda3e27891468fd5bf277b9b760af945a49bd495e0ee3f22b141545b9935071b042 2.8 KB

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