ivue-material-plus
Version:
A high quality UI components Library with Vue.js
123 lines (120 loc) • 3.04 kB
JavaScript
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