xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 13.4 kB
Source Map (JSON)
{"version":3,"file":"tbody.mjs","sources":["../../src/table/tbody.tsx"],"sourcesContent":["import { defineComponent, computed, PropType, toRefs } from 'vue';\nimport camelCase from 'lodash/camelCase';\nimport get from 'lodash/get';\nimport pick from 'lodash/pick';\nimport TrElement, { ROW_LISTENERS, TABLE_PROPS } from './tr';\nimport { useConfig } from '../hooks/useConfig';\nimport { useTNodeJSX } from '../hooks/tnode';\nimport useClassName from './hooks/useClassName';\nimport baseTableProps from './base-table-props';\nimport { TNodeReturnValue } from '../common';\nimport useRowspanAndColspan from './hooks/useRowspanAndColspan';\nimport { BaseTableProps, RowAndColFixedPosition } from './interface';\nimport { TdBaseTableProps } from './type';\nimport { VirtualScrollConfig } from '../hooks/useVirtualScrollNew';\n\nexport const ROW_AND_TD_LISTENERS = ROW_LISTENERS.concat('cell-click');\nexport interface TableBodyProps extends BaseTableProps {\n classPrefix: string;\n ellipsisOverlayClassName: string;\n // 固定列 left/right 具体值\n rowAndColFixedPosition: RowAndColFixedPosition;\n showColumnShadow: { left: boolean; right: boolean };\n tableElm: any;\n tableWidth: number;\n isWidthOverflow: boolean;\n virtualConfig: VirtualScrollConfig;\n // HTMLDivElement\n tableContentElm: any;\n cellEmptyContent: TdBaseTableProps['cellEmptyContent'];\n handleRowMounted: (rowData: any) => void;\n}\n\n// table 到 body 的相同属性\nexport const extendTableProps = [\n 'bordered',\n 'rowKey',\n 'rowClassName',\n 'rowAttributes',\n 'loading',\n 'empty',\n 'fixedRows',\n 'firstFullRow',\n 'lastFullRow',\n 'rowspanAndColspan',\n 'scroll',\n 'cellEmptyContent',\n 'pagination',\n 'attach',\n 'onCellClick',\n 'onPageChange',\n 'onRowClick',\n 'onRowDblclick',\n 'onRowMouseover',\n 'onRowMousedown',\n 'onRowMouseenter',\n 'onRowMouseleave',\n 'onRowMouseup',\n 'onScroll',\n 'onScrollX',\n 'onScrollY',\n];\n\nexport default defineComponent({\n name: 'XBody',\n\n props: {\n classPrefix: String,\n data: Array as PropType<TableBodyProps['data']>,\n columns: Array as PropType<TableBodyProps['columns']>,\n ellipsisOverlayClassName: String,\n rowAndColFixedPosition: Map as PropType<TableBodyProps['rowAndColFixedPosition']>,\n showColumnShadow: Object as PropType<TableBodyProps['showColumnShadow']>,\n // eslint-disable-next-line\n tableElm: {},\n tableWidth: Number,\n isWidthOverflow: Boolean,\n virtualConfig: Object as PropType<VirtualScrollConfig>,\n // eslint-disable-next-line\n tableContentElm: {},\n handleRowMounted: Function as PropType<TableBodyProps['handleRowMounted']>,\n renderExpandedRow: Function as PropType<TableBodyProps['renderExpandedRow']>,\n firstFullRow: [String, Function] as PropType<TableBodyProps['firstFullRow']>,\n lastFullRow: [String, Function] as PropType<TableBodyProps['lastFullRow']>,\n ...pick(baseTableProps, extendTableProps),\n },\n\n // eslint-disable-next-line\n setup(props: TableBodyProps) {\n const renderTNode = useTNodeJSX();\n const { data, columns, rowKey, rowspanAndColspan } = toRefs(props);\n const { t, globalConfig } = useConfig('table');\n const { tableFullRowClasses, tableBaseClass } = useClassName();\n const { skipSpansMap } = useRowspanAndColspan(data, columns, rowKey, rowspanAndColspan);\n\n const tbodyClasses = computed(() => [tableBaseClass.body]);\n\n return {\n t,\n globalConfig,\n renderTNode,\n tableFullRowClasses,\n tbodyClasses,\n tableBaseClass,\n skipSpansMap,\n };\n },\n\n render() {\n const renderEmpty = (columns: TableBodyProps['columns']) => {\n const tableWidth = this.bordered ? this.tableWidth - 2 : this.tableWidth;\n return (\n <tr class={[this.tableBaseClass.emptyRow, { [this.tableFullRowClasses.base]: this.isWidthOverflow }]}>\n <td colspan={columns.length}>\n <div\n class={[this.tableBaseClass.empty, { [this.tableFullRowClasses.innerFullRow]: this.isWidthOverflow }]}\n style={this.isWidthOverflow ? { width: `${tableWidth}px` } : {}}\n >\n {this.renderTNode('empty') || this.t(this.globalConfig.empty)}\n </div>\n </td>\n </tr>\n );\n };\n\n const getFullRow = (columnLength: number, type: 'first-full-row' | 'last-full-row') => {\n const tType = camelCase(type);\n const fullRowNode = this.renderTNode(tType);\n if (['', null, undefined, false].includes(fullRowNode)) return null;\n const isFixedToLeft = this.isWidthOverflow && this.columns.find((col) => col.fixed === 'left');\n const classes = [this.tableFullRowClasses.base, this.tableFullRowClasses[tType]];\n const tableWidth = this.bordered ? this.tableWidth - 2 : this.tableWidth;\n /** innerFullRow 和 innerFullElement 同时存在,是为了保证 固定列时,当前行不随内容进行横向滚动 */\n return (\n <tr class={classes} key={`key-full-row-${type}`}>\n <td colspan={columnLength}>\n <div\n class={{ [this.tableFullRowClasses.innerFullRow]: isFixedToLeft }}\n style={isFixedToLeft ? { width: `${tableWidth}px` } : {}}\n >\n <div class={this.tableFullRowClasses.innerFullElement}>{fullRowNode}</div>\n </div>\n </td>\n </tr>\n );\n };\n\n const columnLength = this.columns.length;\n const dataLength = this.data.length;\n const trNodeList: TNodeReturnValue[] = [];\n\n const properties = [\n 'classPrefix',\n 'ellipsisOverlayClassName',\n 'rowAndColFixedPosition',\n 'scroll',\n 'tableElm',\n 'tableContentElm',\n 'pagination',\n 'attach',\n ];\n this.data?.forEach((row, rowIndex) => {\n const trProps = {\n ...pick(this.$props, TABLE_PROPS),\n rowKey: this.rowKey || 'id',\n row,\n columns: this.columns,\n rowIndex: row.__VIRTUAL_SCROLL_INDEX || rowIndex,\n dataLength,\n skipSpansMap: this.skipSpansMap,\n virtualConfig: this.virtualConfig,\n ...pick(this.$props, properties),\n // 遍历的同时,计算后面的节点,是否会因为合并单元格跳过渲染\n };\n if (this.onCellClick) {\n trProps.onCellClick = this.onCellClick;\n }\n\n const trNode = (\n <TrElement\n v-slots={this.$slots}\n key={get(row, this.rowKey || 'id') || rowIndex}\n {...trProps}\n onRowMounted={this.handleRowMounted}\n ></TrElement>\n );\n trNodeList.push(trNode);\n\n // 执行展开行渲染\n if (this.renderExpandedRow) {\n const p = {\n row,\n index: rowIndex,\n columns: this.columns,\n tableWidth: this.tableWidth,\n isWidthOverflow: this.isWidthOverflow,\n };\n const expandedContent = this.renderExpandedRow(p);\n expandedContent && trNodeList.push(expandedContent);\n }\n });\n\n const list = [getFullRow(columnLength, 'first-full-row'), ...trNodeList, getFullRow(columnLength, 'last-full-row')];\n\n const isEmpty = !this.data?.length && !this.loading && !this.firstFullRow && !this.lastFullRow;\n\n // 垫上隐藏的 tr 元素高度\n const translate = `translateY(${this.virtualConfig?.translateY.value}px)`;\n const posStyle = this.virtualConfig?.isVirtualScroll.value\n ? {\n transform: translate,\n '-ms-transform': translate,\n '-moz-transform': translate,\n '-webkit-transform': translate,\n }\n : undefined;\n\n return (\n <tbody class={this.tbodyClasses} style={{ ...posStyle }}>\n {isEmpty ? renderEmpty(this.columns) : list}\n </tbody>\n );\n },\n});\n"],"names":["name","props","classPrefix","data","columns","ellipsisOverlayClassName","rowAndColFixedPosition","showColumnShadow","tableWidth","isWidthOverflow","virtualConfig","handleRowMounted","renderExpandedRow","firstFullRow","lastFullRow","pick","t","globalConfig","renderTNode","tableFullRowClasses","tbodyClasses","tableBaseClass","skipSpansMap","_createVNode","camelCase","rowKey","row","rowIndex","dataLength","trProps","_mergeProps","trNodeList","index","expandedContent","transform"],"mappings":"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"}