{"version":3,"file":"index.mjs","sources":["../../../../../../src/components/ivue-table/table-footer/index.ts"],"sourcesContent":["import { defineComponent, h, PropType } from 'vue';\r\nimport useStyle from './styles';\r\nimport IvueColgroup from '../colgroup';\r\n\r\n// type\r\nimport { TableFooter, Props } from './types';\r\nimport type { TableColumnCtx } from '../table-column/defaults';\r\n\r\nconst prefixCls = 'ivue-table-footer';\r\n\r\nexport default defineComponent({\r\n  name: prefixCls,\r\n  props: {\r\n    /**\r\n     * 是否带有纵向边框\r\n     *\r\n     * @type {Boolean}\r\n     */\r\n    border: {\r\n      type: Boolean,\r\n    },\r\n    /**\r\n     * store\r\n     *\r\n     * @type {Object}\r\n     */\r\n    store: {\r\n      required: true,\r\n      type: Object as PropType<TableFooter['store']>,\r\n    },\r\n    /**\r\n     * 自定义的合计计算方法\r\n     *\r\n     * @type {Function}\r\n     */\r\n    summaryMethod: Function as PropType<TableFooter['summaryMethod']>,\r\n    /**\r\n     * 合计行第一列的文本\r\n     *\r\n     * @type {String}\r\n     */\r\n    sumText: {\r\n      type: String,\r\n    },\r\n    /**\r\n     * 默认的排序列的 prop 和顺序。\r\n     *\r\n     * @type {Object}\r\n     */\r\n    defaultSort: {\r\n      type: Object as PropType<TableFooter['defaultSort']>,\r\n      default: () => {\r\n        return {\r\n          prop: '',\r\n          order: '',\r\n        };\r\n      },\r\n    },\r\n  },\r\n  setup(props: Props) {\r\n    const { columns, getCellClass, getCellStyle } = useStyle(props);\r\n\r\n    // methods\r\n\r\n    // 渲染 colgroup\r\n    const renderColgroup = () => {\r\n      return h(IvueColgroup, {\r\n        columns: columns.value,\r\n      });\r\n    };\r\n\r\n    // 渲染td\r\n    const renderTd = () => {\r\n      let sums = [];\r\n\r\n      // 没行的数据\r\n      const data = props.store.states.data.value;\r\n\r\n      // 自定义的合计计算方法\r\n      if (props.summaryMethod) {\r\n        sums = props.summaryMethod({\r\n          columns: columns.value,\r\n          data,\r\n        });\r\n      }\r\n      // 没有自定义的合计计算方法\r\n      else {\r\n        columns.value.forEach((column: TableColumnCtx, index: number) => {\r\n          // 合计行第一列的文本\r\n          if (index === 0) {\r\n            sums[index] = props.sumText;\r\n\r\n            return;\r\n          }\r\n\r\n          const values = data.map((item) => {\r\n            return Number(item[column.property]);\r\n          });\r\n\r\n          const precisions: number[] = [];\r\n          let notNumber = true;\r\n\r\n          values.forEach((value) => {\r\n            if (!Number.isNaN(+value)) {\r\n              notNumber = false;\r\n\r\n              const decimal = `${value}`.split('.')[1];\r\n\r\n              precisions.push(decimal ? decimal.length : 0);\r\n            }\r\n          });\r\n\r\n          const precision = Math.max.apply(null, precisions);\r\n\r\n          // 是数字\r\n          if (!notNumber) {\r\n            sums[index] = values.reduce((prev, curr) => {\r\n              const value = Number(curr);\r\n\r\n              // 是数字\r\n              if (!Number.isNaN(+value)) {\r\n                // 保留两位小数\r\n                return Number.parseFloat(\r\n                  (prev + curr).toFixed(Math.min(precision, 20))\r\n                );\r\n              } else {\r\n                return prev;\r\n              }\r\n            }, 0);\r\n          }\r\n          // 不是数字\r\n          else {\r\n            sums[index] = '';\r\n          }\r\n        });\r\n      }\r\n\r\n      return columns.value.map((column, cellIndex) => {\r\n        return h(\r\n          'td',\r\n          {\r\n            key: cellIndex,\r\n            colspan: column.colSpan,\r\n            rowspan: column.rowSpan,\r\n            class: getCellClass(columns.value, cellIndex),\r\n            style: getCellStyle(column, cellIndex),\r\n          },\r\n          [\r\n            h(\r\n              'div',\r\n              {\r\n                class: ['cell', column.labelClassName],\r\n              },\r\n              [sums[cellIndex]]\r\n            ),\r\n          ]\r\n        );\r\n      });\r\n    };\r\n\r\n    return {\r\n      renderColgroup,\r\n      renderTd,\r\n    };\r\n  },\r\n  render() {\r\n    return h(\r\n      'table',\r\n      {\r\n        class: prefixCls,\r\n        cellspacing: '0',\r\n        cellpadding: '0',\r\n        border: '0',\r\n      },\r\n      [this.renderColgroup(), h('tbody', [h('tr', {}, [this.renderTd()])])]\r\n    );\r\n  },\r\n});\r\n"],"names":[],"mappings":"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"}