UNPKG

tdesign-vue-next

Version:
1 lines 11.9 kB
{"version":3,"file":"tfoot.mjs","sources":["../../../components/table/tfoot.tsx"],"sourcesContent":["import { SetupContext, h, defineComponent, PropType, toRefs } from 'vue';\nimport { isString } from 'lodash-es';\nimport { isFunction } from 'lodash-es';\nimport { get } from 'lodash-es';\nimport { BaseTableCellParams, RowspanColspan, TableRowData, TdBaseTableProps } from './type';\nimport { formatRowAttributes, formatRowClassNames } from './utils';\nimport { getColumnFixedStyles } from './hooks/useFixed';\nimport { useTNodeJSX } from '../hooks/tnode';\nimport useRowspanAndColspan, { getCellKey } from './hooks/useRowspanAndColspan';\nimport { RowAndColFixedPosition } from './interface';\nimport useClassName from './hooks/useClassName';\nimport { Styles } from '../common';\n\nexport interface TFootProps {\n rowKey: string;\n // 是否固定表头\n isFixedHeader: boolean;\n // 固定列 left/right 具体值\n rowAndColFixedPosition: RowAndColFixedPosition;\n footData: TdBaseTableProps['footData'];\n columns: TdBaseTableProps['columns'];\n rowAttributes: TdBaseTableProps['rowAttributes'];\n rowClassName: TdBaseTableProps['rowClassName'];\n // 表尾吸底内容宽度\n thWidthList?: { [colKey: string]: number };\n footerSummary?: TdBaseTableProps['footerSummary'];\n rowspanAndColspanInFooter: TdBaseTableProps['rowspanAndColspanInFooter'];\n\n // 是否虚拟滚动\n virtualScroll?: boolean;\n}\n\nexport default defineComponent({\n name: 'TFoot',\n\n props: {\n rowKey: String,\n isFixedHeader: Boolean,\n rowAndColFixedPosition: Map as PropType<TFootProps['rowAndColFixedPosition']>,\n footData: Array as PropType<TFootProps['footData']>,\n columns: Array as PropType<TFootProps['columns']>,\n rowAttributes: [Array, Object, Function] as PropType<TFootProps['rowAttributes']>,\n rowClassName: [Array, String, Object, Function] as PropType<TFootProps['rowClassName']>,\n thWidthList: [Object] as PropType<TFootProps['thWidthList']>,\n footerSummary: [String, Function] as PropType<TFootProps['footerSummary']>,\n rowspanAndColspanInFooter: Function as PropType<TFootProps['rowspanAndColspanInFooter']>,\n virtualScroll: Boolean,\n },\n\n // eslint-disable-next-line\n setup(props: TFootProps, context: SetupContext) {\n const renderTNode = useTNodeJSX();\n const classnames = useClassName();\n const { footData, columns, rowKey, rowspanAndColspanInFooter } = toRefs(props);\n const { skipSpansMap } = useRowspanAndColspan(footData, columns, rowKey, rowspanAndColspanInFooter);\n const renderTFootCell = (p: BaseTableCellParams<TableRowData>) => {\n const { col, row } = p;\n if (isFunction(col.foot)) {\n return col.foot(h, p);\n }\n if (isString(col.foot) && context.slots[col.foot]) {\n return context.slots[col.foot](p) || col.foot;\n }\n return col.foot || get(row, col.colKey);\n };\n\n return {\n skipSpansMap,\n ...classnames,\n renderTFootCell,\n renderTNode,\n };\n },\n\n render() {\n if (!this.columns) return null;\n // 虚拟滚动情况下,不使用 sticky 定位,外部通过 affix 实现 footer\n const theadClasses = [this.tableFooterClasses.footer, { [this.tableFooterClasses.fixed]: this.isFixedHeader }];\n const footerDomList = this.footData?.map((row, rowIndex) => {\n const trAttributes = formatRowAttributes(this.rowAttributes, { row, rowIndex, type: 'foot' });\n // 自定义行类名\n const customClasses = formatRowClassNames(\n this.rowClassName,\n { row, rowIndex, type: 'foot' },\n this.rowKey || 'id',\n );\n return (\n <tr {...trAttributes} key={rowIndex} class={customClasses}>\n {this.columns.map((col, colIndex) => {\n // 合并单元格过滤\n const cellSpans: RowspanColspan = {};\n let spanState = null;\n if (this.skipSpansMap.size) {\n const cellKey = getCellKey(row, this.rowKey, col.colKey, colIndex);\n spanState = this.skipSpansMap.get(cellKey) || {};\n spanState?.rowspan > 1 && (cellSpans.rowspan = spanState.rowspan);\n spanState?.colspan > 1 && (cellSpans.colspan = spanState.colspan);\n if (spanState.skipped) return null;\n }\n const tdStyles = getColumnFixedStyles(\n col,\n colIndex,\n this.rowAndColFixedPosition,\n this.tableColFixedClasses,\n );\n const style: Styles = { ...tdStyles.style };\n if (this.thWidthList?.[col.colKey]) {\n style.width = `${this.thWidthList[col.colKey]}px`;\n }\n return (\n <td {...{ key: col.colKey, ...cellSpans }} class={tdStyles.classes} style={style}>\n {this.renderTFootCell({\n row,\n rowIndex,\n col,\n colIndex,\n })}\n </td>\n );\n })}\n </tr>\n );\n });\n const footerSummary = this.renderTNode('footerSummary');\n // 都不存在,则不需要渲染 footer\n if (!footerSummary && (!this.footData || !this.footData.length)) return null;\n return (\n // 虚拟滚动下,不显示 footer,但预留元素,用于高度计算\n <tfoot ref=\"tFooterRef\" class={theadClasses} style={{ visibility: this.virtualScroll ? 'hidden' : 'visible' }}>\n {footerSummary && (\n <tr class={this.tableFullRowClasses.base}>\n <td colspan={this.columns.length}>\n <div class={this.tableFullRowClasses.innerFullElement}>{footerSummary}</div>\n </td>\n </tr>\n )}\n {footerDomList}\n </tfoot>\n );\n },\n});\n"],"names":["defineComponent","name","props","rowKey","String","isFixedHeader","Boolean","rowAndColFixedPosition","Map","footData","Array","columns","rowAttributes","Object","Function","rowClassName","thWidthList","footerSummary","rowspanAndColspanInFooter","virtualScroll","setup","context","renderTNode","useTNodeJSX","classnames","useClassName","_toRefs","toRefs","_useRowspanAndColspan","useRowspanAndColspan","skipSpansMap","renderTFootCell","p","col","row","isFunction","foot","h","isString","slots","get","colKey","_objectSpread","render","_this$footData","_this","theadClasses","tableFooterClasses","footer","_defineProperty","fixed","footerDomList","map","rowIndex","trAttributes","formatRowAttributes","type","customClasses","formatRowClassNames","_createVNode","_mergeProps","colIndex","_this$thWidthList","cellSpans","spanState","size","_spanState","_spanState2","cellKey","getCellKey","rowspan","colspan","skipped","tdStyles","getColumnFixedStyles","tableColFixedClasses","style","width","concat","key","classes","length","visibility","tableFullRowClasses","base","innerFullElement"],"mappings":"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"}