xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 9.36 kB
Source Map (JSON)
{"version":3,"file":"tfoot.mjs","sources":["../../src/table/tfoot.tsx"],"sourcesContent":["import { SetupContext, h, defineComponent, PropType, toRefs } from 'vue';\nimport isString from 'lodash/isString';\nimport isFunction from 'lodash/isFunction';\nimport get from 'lodash/get';\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\nexport default defineComponent({\n name: 'XFoot',\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 },\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 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 <tfoot ref=\"tFooterRef\" class={theadClasses}>\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":["name","props","rowKey","isFixedHeader","rowAndColFixedPosition","footData","columns","rowAttributes","footerSummary","rowspanAndColspanInFooter","setup","isFunction","isString","skipSpansMap","renderTFootCell","renderTNode","row","rowIndex","type","_createVNode","_mergeProps","style","col","colIndex"],"mappings":"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"}