UNPKG

ivue-material-plus

Version:

A high quality UI components Library with Vue.js

123 lines (120 loc) 3.04 kB
import { defineComponent, h } from 'vue'; import useStyle from './styles.mjs'; import IvueColgroup from '../colgroup.mjs'; const prefixCls = "ivue-table-footer"; var TableFooter = defineComponent({ name: prefixCls, props: { border: { type: Boolean }, store: { required: true, type: Object }, summaryMethod: Function, sumText: { type: String }, defaultSort: { type: Object, default: () => { return { prop: "", order: "" }; } } }, setup(props) { const { columns, getCellClass, getCellStyle } = useStyle(props); const renderColgroup = () => { return h(IvueColgroup, { columns: columns.value }); }; const renderTd = () => { let sums = []; const data = props.store.states.data.value; if (props.summaryMethod) { sums = props.summaryMethod({ columns: columns.value, data }); } else { columns.value.forEach((column, index) => { if (index === 0) { sums[index] = props.sumText; return; } const values = data.map((item) => { return Number(item[column.property]); }); const precisions = []; let notNumber = true; values.forEach((value) => { if (!Number.isNaN(+value)) { notNumber = false; const decimal = `${value}`.split(".")[1]; precisions.push(decimal ? decimal.length : 0); } }); const precision = Math.max.apply(null, precisions); if (!notNumber) { sums[index] = values.reduce((prev, curr) => { const value = Number(curr); if (!Number.isNaN(+value)) { return Number.parseFloat( (prev + curr).toFixed(Math.min(precision, 20)) ); } else { return prev; } }, 0); } else { sums[index] = ""; } }); } return columns.value.map((column, cellIndex) => { return h( "td", { key: cellIndex, colspan: column.colSpan, rowspan: column.rowSpan, class: getCellClass(columns.value, cellIndex), style: getCellStyle(column, cellIndex) }, [ h( "div", { class: ["cell", column.labelClassName] }, [sums[cellIndex]] ) ] ); }); }; return { renderColgroup, renderTd }; }, render() { return h( "table", { class: prefixCls, cellspacing: "0", cellpadding: "0", border: "0" }, [this.renderColgroup(), h("tbody", [h("tr", {}, [this.renderTd()])])] ); } }); export { TableFooter as default }; //# sourceMappingURL=index.mjs.map