import { isFunction } from 'lodash'; import { computed, defineComponent, PropType } from '@vue/composition-api'; import { fixStyle, flexWidth } from '../../utils/dom'; import { IndexColumn } from '@/lib/types'; import { SCROLL_WIDTH } from '@/lib/constants/dom-fixed'; import './index.scss'; import { useStoreInject } from '@/lib/store'; import { BOTTOM_BLOCK } from '@/lib/constants/dom-class'; export const BottomBar = defineComponent({ name: 'BottomBar', props: { rowHeight: { require: true, type: Number, }, leftWidth: { require: true, type: Number, }, rightWidth: { require: true, type: Number, }, scrollWidth: { require: true, type: Number, }, leftColumns: { require: true, type: Array as PropType, }, rightColumns: { require: true, type: Array as PropType, }, scrollColumns: { require: true, type: Array as PropType, }, scrollLeft: { require: true, type: Number, }, height: { require: true, type: Number, }, }, setup() { const { state } = useStoreInject(); return { total: computed(() => { const totalCount = state.featureConfig.totalBar.totalCount; if (isFunction(totalCount)) { return totalCount(state.view.rowIndex2Id.length); } else { return state.view.rowIndex2Id.length; } }), columnTotal: computed(() => state.columnTotal), }; }, render() { const { height, scrollLeft, leftColumns, rightColumns, scrollColumns, leftWidth, rightWidth, scrollWidth, // 展示 total, columnTotal, } = this; const getGroupStyle = (width: number) => fixStyle({ ...flexWidth(width), height }); const renderColumnTotal = (columns) => (
{columns.map((column) => { if (typeof column.totalRender === 'function') { return (
{column.totalRender(columnTotal[column.id])}
); } else if (typeof column.totalFormatter === 'function') { return (
{column.totalFormatter(columnTotal[column.id])}
); } else { return (
{columnTotal[column.id]}
); } })}
); return (
{total}
{leftColumns.length > 0 ? renderColumnTotal(leftColumns) : null}
{scrollColumns.length > 0 ? renderColumnTotal(scrollColumns) : null}
{rightColumns.length > 0 ? renderColumnTotal(rightColumns) : null}
); }, });