diff --git a/packages/components/table/__tests__/table-column.spec.ts b/packages/components/table/__tests__/table-column.spec.ts index 3a18120227..ee2564d462 100644 --- a/packages/components/table/__tests__/table-column.spec.ts +++ b/packages/components/table/__tests__/table-column.spec.ts @@ -66,25 +66,43 @@ describe('table column', () => { it('fixed', async () => { const wrapper = createTable( - 'fixed label="test1"', + 'fixed label="test1" width="100px"', 'fixed="right" label="test2"', 'fixed="left" label="test3"' ) await nextTick() + const leftFixedHeaderColumns = wrapper.findAll( + '.el-table__header .el-table-fixed-column--left' + ) + const leftFixedBodyColumns = wrapper.findAll( + '.el-table__body .el-table-fixed-column--left' + ) + const rightFixedHeaderColumns = wrapper.findAll( + '.el-table__header .el-table-fixed-column--right' + ) + const rightFixedBodyColumns = wrapper.findAll( + '.el-table__body .el-table-fixed-column--right' + ) + expect(leftFixedHeaderColumns).toHaveLength(2) + expect(leftFixedBodyColumns).toHaveLength(10) + expect(rightFixedHeaderColumns).toHaveLength(1) + expect(rightFixedBodyColumns).toHaveLength(5) + expect(leftFixedHeaderColumns.at(0).text()).toBe('test1') + expect(leftFixedHeaderColumns.at(1).text()).toBe('test3') + expect(leftFixedHeaderColumns.at(1).classes()).toContain('is-last-column') + expect(rightFixedHeaderColumns.at(0).text()).toBe('test2') + expect(rightFixedHeaderColumns.at(0).classes()).toContain( + 'is-first-column' + ) + expect(getComputedStyle(leftFixedHeaderColumns.at(0).element).left).toBe( + '0px' + ) + expect(getComputedStyle(leftFixedHeaderColumns.at(1).element).left).toBe( + '100px' + ) expect( - wrapper - .findAll('.el-table__fixed th:not(.is-hidden)') - .map((node) => node.text()) - ).toEqual(['test1', 'test3']) - - expect( - wrapper - .findAll('.el-table__fixed-right th:not(.is-hidden)') - .map((node) => node.text()) - ).toEqual(['test2']) - expect( - wrapper.find('.el-table__body-wrapper').attributes('style') - ).toBeFalsy() + getComputedStyle(rightFixedHeaderColumns.at(0).element).right + ).toBe('0px') wrapper.unmount() }) @@ -1017,12 +1035,10 @@ describe('table column', () => { }) await nextTick() - expect(Object.keys(wrapper.find('.el-table__fixed')).length).toEqual(0) + expect(wrapper.find('.el-table-fixed-column--left').exists()).toBeFalsy() wrapper.vm.fixed = true await nextTick() - expect( - Object.keys(wrapper.find('.el-table__fixed')).length - ).toBeGreaterThan(0) + expect(wrapper.find('.el-table-fixed-column--left').exists()).toBeTruthy() wrapper.unmount() }) diff --git a/packages/components/table/src/table-body/index.ts b/packages/components/table/src/table-body/index.ts index 1586e99cc9..13cfdb8ee4 100644 --- a/packages/components/table/src/table-body/index.ts +++ b/packages/components/table/src/table-body/index.ts @@ -63,7 +63,9 @@ export default defineComponent({ } }, render() { - const data = this.store.states.data.value || [] + const { wrappedRowRender, store } = this + const data = store.states.data.value || [] + const columns = store.states.columns.value return h( 'table', { @@ -73,10 +75,10 @@ export default defineComponent({ border: '0', }, [ - hColgroup(this.store.states.columns.value), + hColgroup(columns), h('tbody', {}, [ data.reduce((acc: VNode[], row) => { - return acc.concat(this.wrappedRowRender(row, acc.length)) + return acc.concat(wrappedRowRender(row, acc.length)) }, []), ]), ] diff --git a/packages/components/table/src/table-body/styles-helper.ts b/packages/components/table/src/table-body/styles-helper.ts index 7658ff0604..24f310ec5f 100644 --- a/packages/components/table/src/table-body/styles-helper.ts +++ b/packages/components/table/src/table-body/styles-helper.ts @@ -1,5 +1,9 @@ import { getCurrentInstance } from 'vue' - +import { + getFixedColumnOffset, + getFixedColumnsClass, + ensurePosition, +} from '../util' import type { TableColumnCtx } from '../table-column/defaults' import type { Table } from '../table/defaults' import type { TableBodyProps } from './defaults' @@ -7,24 +11,7 @@ import type { TableBodyProps } from './defaults' function useStyles(props: Partial>) { const instance = getCurrentInstance() const parent = instance.parent as Table - const isColumnHidden = (index) => { - if (props.fixed === 'left') { - return index >= props.store.states.fixedLeafColumnsLength.value - } else if (props.fixed === 'right') { - return ( - index < - props.store.states.columns.value.length - - props.store.states.rightFixedLeafColumnsLength.value - ) - } else { - return ( - index < props.store.states.fixedLeafColumnsLength.value || - index >= - props.store.states.columns.value.length - - props.store.states.rightFixedLeafColumnsLength.value - ) - } - } + const getRowStyle = (row: T, rowIndex: number) => { const rowStyle = parent.props.rowStyle if (typeof rowStyle === 'function') { @@ -74,15 +61,23 @@ function useStyles(props: Partial>) { column: TableColumnCtx ) => { const cellStyle = parent.props.cellStyle + let cellStyles = cellStyle ?? {} if (typeof cellStyle === 'function') { - return cellStyle.call(null, { + cellStyles = cellStyle.call(null, { rowIndex, columnIndex, row, column, }) } - return cellStyle + const fixedStyle = getFixedColumnOffset( + columnIndex, + props.fixed, + props.store + ) + ensurePosition(fixedStyle, 'left') + ensurePosition(fixedStyle, 'right') + return Object.assign({}, cellStyles, fixedStyle) } const getCellClass = ( @@ -91,12 +86,10 @@ function useStyles(props: Partial>) { row: T, column: TableColumnCtx ) => { - const classes = [column.id, column.align, column.className] - - if (isColumnHidden(columnIndex)) { - classes.push('is-hidden') - } - + const fixedClasses = column.isSubColumn + ? [] + : getFixedColumnsClass(columnIndex, props.fixed, props.store) + const classes = [column.id, column.align, column.className, ...fixedClasses] const cellClassName = parent.props.cellClassName if (typeof cellClassName === 'string') { classes.push(cellClassName) @@ -164,7 +157,6 @@ function useStyles(props: Partial>) { getCellClass, getSpan, getColspanRealWidth, - isColumnHidden, } } diff --git a/packages/components/table/src/table-column/defaults.ts b/packages/components/table/src/table-column/defaults.ts index 8808cd5fae..80427518ad 100644 --- a/packages/components/table/src/table-column/defaults.ts +++ b/packages/components/table/src/table-column/defaults.ts @@ -58,6 +58,7 @@ interface TableColumnCtx { filterable: boolean | FilterMethods | Filters order: string isColumnGroup: boolean + isSubColumn: boolean columns: TableColumnCtx[] getColumnIndex: () => number no: number diff --git a/packages/components/table/src/table-column/index.ts b/packages/components/table/src/table-column/index.ts index 28b0388081..1a4a3714e7 100644 --- a/packages/components/table/src/table-column/index.ts +++ b/packages/components/table/src/table-column/index.ts @@ -78,6 +78,7 @@ export default defineComponent({ filteredValue: [], filterPlacement: '', isColumnGroup: false, + isSubColumn: false, filterOpened: false, // sort 相关属性 sortable, diff --git a/packages/components/table/src/table-footer/index.ts b/packages/components/table/src/table-footer/index.ts index 7cc3ec5573..199e06fc41 100644 --- a/packages/components/table/src/table-footer/index.ts +++ b/packages/components/table/src/table-footer/index.ts @@ -1,5 +1,5 @@ import { defineComponent, h } from 'vue' -import { hGutter, hColgroup } from '../h-helper' +import { hColgroup } from '../h-helper' import useStyle from './style-helper' import type { Store } from '../store' @@ -42,31 +42,40 @@ export default defineComponent({ }, }, setup(props) { - const { hasGutter, getRowClasses, columns } = useStyle( - props as TableFooter - ) + const { hasGutter, getCellClasses, getCellStyles, columns, gutterWidth } = + useStyle(props as TableFooter) return { - getRowClasses, + getCellClasses, + getCellStyles, hasGutter, + gutterWidth, columns, } }, render() { + const { + hasGutter, + gutterWidth, + columns, + getCellStyles, + getCellClasses, + summaryMethod, + sumText, + } = this + const data = this.store.states.data.value let sums = [] - if (this.summaryMethod) { - sums = this.summaryMethod({ - columns: this.columns, - data: this.store.states.data.value, + if (summaryMethod) { + sums = summaryMethod({ + columns, + data, }) } else { - this.columns.forEach((column, index) => { + columns.forEach((column, index) => { if (index === 0) { - sums[index] = this.sumText + sums[index] = sumText return } - const values = this.store.states.data.value.map((item) => - Number(item[column.property]) - ) + const values = data.map((item) => Number(item[column.property])) const precisions = [] let notNumber = true values.forEach((value) => { @@ -100,25 +109,23 @@ export default defineComponent({ border: '0', }, [ - hColgroup(this.columns, this.hasGutter), + hColgroup(columns, hasGutter), h( 'tbody', { - class: [{ 'has-gutter': this.hasGutter }], + class: [{ 'has-gutter': hasGutter }], }, [ h('tr', {}, [ - ...this.columns.map((column, cellIndex) => + ...columns.map((column, cellIndex) => h( 'td', { key: cellIndex, colspan: column.colSpan, rowspan: column.rowSpan, - class: [ - ...this.getRowClasses(column, cellIndex), - 'el-table__cell', - ], + class: getCellClasses(columns, cellIndex, hasGutter), + style: getCellStyles(column, cellIndex, hasGutter), }, [ h( @@ -131,7 +138,13 @@ export default defineComponent({ ] ) ), - this.hasGutter && hGutter(), + hasGutter && + h('td', { + class: 'el-table__fixed-right-patch el-table__cell', + style: { + width: `${gutterWidth}px`, + }, + }), ]), ] ), diff --git a/packages/components/table/src/table-footer/style-helper.ts b/packages/components/table/src/table-footer/style-helper.ts index 4af925cff3..9ef118a8ae 100644 --- a/packages/components/table/src/table-footer/style-helper.ts +++ b/packages/components/table/src/table-footer/style-helper.ts @@ -1,6 +1,11 @@ import { computed, getCurrentInstance } from 'vue' +import { + getFixedColumnOffset, + getFixedColumnsClass, + ensurePosition, + ensureRightFixedStyle, +} from '../util' import useMapState from './mapState-helper' - import type { Table } from '../table/defaults' import type { TableColumnCtx } from '../table-column/defaults' import type { TableFooter } from '.' @@ -8,60 +13,67 @@ import type { TableFooter } from '.' function useStyle(props: TableFooter) { const instance = getCurrentInstance() const table = instance.parent as Table - const store = table.store - const { - leftFixedLeafCount, - rightFixedLeafCount, - columnsCount, - leftFixedCount, - rightFixedCount, - columns, - } = useMapState() + const { columns } = useMapState() const hasGutter = computed(() => { - return !props.fixed && !table.layout.gutterWidth + return ( + !props.fixed && + table.layout.gutterWidth > 0 && + table.layout.height.value && + table.layout.bodyScrollHeight.value > table.layout.bodyHeight.value + ) }) - const isCellHidden = ( - index: number, + + const gutterWidth = computed(() => { + return table.layout.gutterWidth + }) + const getCellClasses = ( columns: TableColumnCtx[], - column: TableColumnCtx + cellIndex: number, + hasGutter: boolean ) => { - if (props.fixed || props.fixed === 'left') { - return index >= leftFixedLeafCount.value - } else if (props.fixed === 'right') { - let before = 0 - for (let i = 0; i < index; i++) { - before += columns[i].colSpan - } - return before < columnsCount.value - rightFixedLeafCount.value - } else if (!props.fixed && column.fixed) { - // hide cell when footer instance is not fixed and column is fixed - return true - } else { - return ( - index < leftFixedCount.value || - index >= columnsCount.value - rightFixedCount.value - ) - } - } - const getRowClasses = (column: TableColumnCtx, cellIndex: number) => { - const classes = [column.id, column.align, column.labelClassName] + const column = columns[cellIndex] + const classes = [ + 'el-table__cell', + column.id, + column.align, + column.labelClassName, + ...getFixedColumnsClass(cellIndex, column.fixed, props.store), + ] if (column.className) { classes.push(column.className) } - if (isCellHidden(cellIndex, store.states.columns.value, column)) { - classes.push('is-hidden') - } if (!column.children) { classes.push('is-leaf') } + if (hasGutter && cellIndex === columns.length - 1) { + classes.push('last') + } return classes } + const getCellStyles = ( + column: TableColumnCtx, + cellIndex: number, + hasGutter: boolean + ) => { + const fixedStyle = getFixedColumnOffset( + cellIndex, + column.fixed, + props.store + ) + ensureRightFixedStyle(fixedStyle, hasGutter) + ensurePosition(fixedStyle, 'left') + ensurePosition(fixedStyle, 'right') + return fixedStyle + } + return { hasGutter, - getRowClasses, + gutterWidth, + getCellClasses, + getCellStyles, columns, } } diff --git a/packages/components/table/src/table-header/index.ts b/packages/components/table/src/table-header/index.ts index 60fcecbd23..222654722d 100644 --- a/packages/components/table/src/table-header/index.ts +++ b/packages/components/table/src/table-header/index.ts @@ -65,7 +65,14 @@ export default defineComponent({ const { tableLayout, onColumnsChange, onScrollableChange } = useLayoutObserver(parent) const hasGutter = computed(() => { - return !props.fixed && tableLayout.gutterWidth + return ( + !props.fixed && + tableLayout.gutterWidth > 0 && + tableLayout.bodyScrollHeight.value > tableLayout.bodyHeight.value + ) + }) + const gutterWidth = computed(() => { + return tableLayout.gutterWidth }) onMounted(() => { nextTick(() => { @@ -104,6 +111,7 @@ export default defineComponent({ columns: storeData.columns, filterPanels, hasGutter, + gutterWidth, onColumnsChange, onScrollableChange, columnRows, @@ -123,6 +131,26 @@ export default defineComponent({ } }, render() { + const { + columns, + isGroup, + hasGutter, + columnRows, + gutterWidth, + getHeaderCellStyle, + getHeaderCellClass, + getHeaderRowClass, + getHeaderRowStyle, + handleHeaderClick, + handleHeaderContextMenu, + handleMouseDown, + handleMouseMove, + handleSortClick, + handleMouseOut, + store, + $parent, + } = this + let rowSpan = 1 return h( 'table', { @@ -132,113 +160,135 @@ export default defineComponent({ class: 'el-table__header', }, [ - hColgroup(this.columns, this.hasGutter), + hColgroup(columns, hasGutter), h( 'thead', { - class: { 'is-group': this.isGroup, 'has-gutter': this.hasGutter }, + class: { 'is-group': isGroup, 'has-gutter': hasGutter }, }, - this.columnRows.map((subColumns, rowIndex) => + columnRows.map((subColumns, rowIndex) => h( 'tr', { - class: this.getHeaderRowClass(rowIndex), + class: getHeaderRowClass(rowIndex), key: rowIndex, - style: this.getHeaderRowStyle(rowIndex), + style: getHeaderRowStyle(rowIndex), }, - subColumns.map((column, cellIndex) => - h( - 'th', - { - class: this.getHeaderCellClass( - rowIndex, - cellIndex, - subColumns, - column - ), - colspan: column.colSpan, - key: `${column.id}-thead`, - rowSpan: column.rowSpan, - style: this.getHeaderCellStyle( - rowIndex, - cellIndex, - subColumns, - column - ), - onClick: ($event) => this.handleHeaderClick($event, column), - onContextmenu: ($event) => - this.handleHeaderContextMenu($event, column), - onMousedown: ($event) => - this.handleMouseDown($event, column), - onMousemove: ($event) => - this.handleMouseMove($event, column), - onMouseout: this.handleMouseOut, - }, - [ - h( - 'div', - { - class: [ - 'cell', - column.filteredValue && - column.filteredValue.length > 0 - ? 'highlight' - : '', - column.labelClassName, - ], - }, - [ - column.renderHeader - ? column.renderHeader({ + subColumns + .map((column, cellIndex) => { + if (column.rowSpan > rowSpan) { + rowSpan = column.rowSpan + } + return h( + 'th', + { + class: getHeaderCellClass( + rowIndex, + cellIndex, + subColumns, + column + ), + colspan: column.colSpan, + key: `${column.id}-thead`, + rowSpan: column.rowSpan, + style: getHeaderCellStyle( + rowIndex, + cellIndex, + subColumns, + column, + hasGutter + ), + onClick: ($event) => handleHeaderClick($event, column), + onContextmenu: ($event) => + handleHeaderContextMenu($event, column), + onMousedown: ($event) => handleMouseDown($event, column), + onMousemove: ($event) => handleMouseMove($event, column), + onMouseout: handleMouseOut, + }, + [ + h( + 'div', + { + class: [ + 'cell', + column.filteredValue && + column.filteredValue.length > 0 + ? 'highlight' + : '', + column.labelClassName, + ], + }, + [ + column.renderHeader + ? column.renderHeader({ + column, + $index: cellIndex, + store, + _self: $parent, + }) + : column.label, + column.sortable && + h( + 'span', + { + onClick: ($event) => + handleSortClick($event, column), + class: 'caret-wrapper', + }, + [ + h('i', { + onClick: ($event) => + handleSortClick( + $event, + column, + 'ascending' + ), + class: 'sort-caret ascending', + }), + h('i', { + onClick: ($event) => + handleSortClick( + $event, + column, + 'descending' + ), + class: 'sort-caret descending', + }), + ] + ), + column.filterable && + h(FilterPanel, { + store: $parent.store, + placement: + column.filterPlacement || 'bottom-start', column, - $index: cellIndex, - store: this.store, - _self: this.$parent, - }) - : column.label, - column.sortable && - h( - 'span', - { - onClick: ($event) => - this.handleSortClick($event, column), - class: 'caret-wrapper', + upDataColumn: (key, value) => { + column[key] = value + }, + }), + ] + ), + ] + ) + }) + .concat( + hasGutter && rowIndex === 0 + ? [ + h( + 'th', + { + class: 'el-table__fixed-right-patch el-table__cell', + key: `el-table--scrollbar`, + rowSpan, + style: { + width: `${gutterWidth}px`, }, - [ - h('i', { - onClick: ($event) => - this.handleSortClick( - $event, - column, - 'ascending' - ), - class: 'sort-caret ascending', - }), - h('i', { - onClick: ($event) => - this.handleSortClick( - $event, - column, - 'descending' - ), - class: 'sort-caret descending', - }), - ] - ), - column.filterable && - h(FilterPanel, { - store: this.$parent.store, - placement: column.filterPlacement || 'bottom-start', - column, - upDataColumn: (key, value) => { - column[key] = value - }, - }), + }, + [] + ), ] - ), - ] + : [] ) - ) ) ) ), diff --git a/packages/components/table/src/table-header/style.helper.ts b/packages/components/table/src/table-header/style.helper.ts index c475340fb7..e2a3fc0fc1 100644 --- a/packages/components/table/src/table-header/style.helper.ts +++ b/packages/components/table/src/table-header/style.helper.ts @@ -1,5 +1,10 @@ import { getCurrentInstance } from 'vue' - +import { + getFixedColumnsClass, + getFixedColumnOffset, + ensurePosition, + ensureRightFixedStyle, +} from '../util' import type { TableColumnCtx } from '../table-column/defaults' import type { Table } from '../table/defaults' import type { TableHeaderProps } from '.' @@ -7,33 +12,6 @@ import type { TableHeaderProps } from '.' function useStyle(props: TableHeaderProps) { const instance = getCurrentInstance() const parent = instance.parent as Table - const storeData = parent.store.states - const isCellHidden = ( - index: number, - columns: TableColumnCtx[] - ): boolean => { - let start = 0 - for (let i = 0; i < index; i++) { - start += columns[i].colSpan - } - const after = start + columns[index].colSpan - 1 - if (props.fixed === 'left') { - return after >= storeData.fixedLeafColumnsLength.value - } else if (props.fixed === 'right') { - return ( - start < - storeData.columns.value.length - - storeData.rightFixedLeafColumnsLength.value - ) - } else { - return ( - after < storeData.fixedLeafColumnsLength.value || - start >= - storeData.columns.value.length - - storeData.rightFixedLeafColumnsLength.value - ) - } - } const getHeaderRowStyle = (rowIndex: number) => { const headerRowStyle = parent.props.headerRowStyle @@ -59,18 +37,28 @@ function useStyle(props: TableHeaderProps) { rowIndex: number, columnIndex: number, row: T, - column: TableColumnCtx + column: TableColumnCtx, + hasGutter: boolean ) => { - const headerCellStyle = parent.props.headerCellStyle - if (typeof headerCellStyle === 'function') { - return headerCellStyle.call(null, { + let headerCellStyles = parent.props.headerCellStyle ?? {} + if (typeof headerCellStyles === 'function') { + headerCellStyles = headerCellStyles.call(null, { rowIndex, columnIndex, row, column, }) } - return headerCellStyle + const fixedStyle = getFixedColumnOffset( + columnIndex, + column.fixed, + props.store, + row as unknown as TableColumnCtx[] + ) + ensureRightFixedStyle(fixedStyle, hasGutter) + ensurePosition(fixedStyle, 'left') + ensurePosition(fixedStyle, 'right') + return Object.assign({}, headerCellStyles, fixedStyle) } const getHeaderCellClass = ( @@ -79,19 +67,22 @@ function useStyle(props: TableHeaderProps) { row: T, column: TableColumnCtx ) => { + const fixedClasses = column.isSubColumn + ? [] + : getFixedColumnsClass( + columnIndex, + column.fixed, + props.store, + row as unknown as TableColumnCtx[] + ) const classes = [ column.id, column.order, column.headerAlign, column.className, column.labelClassName, + ...fixedClasses, ] - if ( - rowIndex === 0 && - isCellHidden(columnIndex, row as unknown as TableColumnCtx[]) - ) { - classes.push('is-hidden') - } if (!column.children) { classes.push('is-leaf') diff --git a/packages/components/table/src/table-header/utils-helper.ts b/packages/components/table/src/table-header/utils-helper.ts index 35d0e92312..8c24b919b5 100644 --- a/packages/components/table/src/table-header/utils-helper.ts +++ b/packages/components/table/src/table-header/utils-helper.ts @@ -60,6 +60,7 @@ const convertToRows = ( column.rowSpan = maxLevel - column.level + 1 } else { column.rowSpan = 1 + column.children.forEach((col) => (col.isSubColumn = true)) } rows[column.level - 1].push(column) }) diff --git a/packages/components/table/src/table-layout.ts b/packages/components/table/src/table-layout.ts index 1154f4024c..959f613b8a 100644 --- a/packages/components/table/src/table-layout.ts +++ b/packages/components/table/src/table-layout.ts @@ -29,6 +29,7 @@ class TableLayout { footerHeight: Ref // Table Footer Height viewportHeight: Ref // Table Height - Scroll Bar Height bodyHeight: Ref // Table Height - Table Header Height + bodyScrollHeight: Ref fixedBodyHeight: Ref // Table Height - Table Header Height - Scroll Bar Height gutterWidth: number constructor(options: Record) { @@ -50,6 +51,7 @@ class TableLayout { this.footerHeight = ref(44) this.viewportHeight = ref(null) this.bodyHeight = ref(null) + this.bodyScrollHeight = ref(0) this.fixedBodyHeight = ref(null) this.gutterWidth = scrollbarWidth() for (const name in options) { @@ -136,7 +138,8 @@ class TableLayout { updateElsHeight() { if (!this.table.$ready) return nextTick(() => this.updateElsHeight()) - const { headerWrapper, appendWrapper, footerWrapper } = this.table.refs + const { headerWrapper, appendWrapper, footerWrapper, bodyWrapper } = + this.table.refs this.appendHeight.value = appendWrapper ? appendWrapper.offsetHeight : 0 if (this.showHeader && !headerWrapper) return @@ -163,8 +166,13 @@ class TableLayout { ? footerWrapper.offsetHeight : 0) if (this.height.value !== null) { + if (this.bodyHeight.value === null) { + requestAnimationFrame(() => this.updateElsHeight()) + } this.bodyHeight.value = tableHeight - headerHeight - footerHeight + (footerWrapper ? 1 : 0) + this.bodyScrollHeight.value = + bodyWrapper.querySelector('.el-table__body')?.scrollHeight! } this.fixedBodyHeight.value = this.scrollX.value ? this.bodyHeight.value - this.gutterWidth diff --git a/packages/components/table/src/table.vue b/packages/components/table/src/table.vue index 59d6b11554..c3f07f1106 100644 --- a/packages/components/table/src/table.vue +++ b/packages/components/table/src/table.vue @@ -1,5 +1,6 @@