diff --git a/packages/table/__tests__/table-column.spec.ts b/packages/table/__tests__/table-column.spec.ts index 2f8262a14e..2bc5f5c6ad 100644 --- a/packages/table/__tests__/table-column.spec.ts +++ b/packages/table/__tests__/table-column.spec.ts @@ -926,11 +926,18 @@ describe('table column', () => { expect(wrapper.find('.el-table__body col').attributes('width')).toEqual( '100', ) + wrapper.vm.width = 200 await nextTick() expect(wrapper.find('.el-table__body col').attributes('width')).toEqual( '200', ) + + wrapper.vm.width = '300px' + await nextTick() + expect(wrapper.find('.el-table__body col').attributes('width')).toEqual( + '300', + ) wrapper.unmount() }) @@ -961,11 +968,18 @@ describe('table column', () => { expect(wrapper.find('.el-table__body col').attributes('width')).toEqual( '100', ) + wrapper.vm.width = 200 await nextTick() expect(wrapper.find('.el-table__body col').attributes('width')).toEqual( '200', ) + + wrapper.vm.width = '300px' + await nextTick() + expect(wrapper.find('.el-table__body col').attributes('width')).toEqual( + '300', + ) wrapper.unmount() }) diff --git a/packages/table/src/table-column/defaults.ts b/packages/table/src/table-column/defaults.ts index 0a4b1300a8..201987685a 100644 --- a/packages/table/src/table-column/defaults.ts +++ b/packages/table/src/table-column/defaults.ts @@ -12,6 +12,8 @@ type Filters = { type FilterMethods = (value, row: T, column: TableColumnCtx) => void +type ValueOf = T[keyof T] + interface TableColumnCtx { id: string realWidth: number @@ -72,7 +74,7 @@ interface TableColumn extends ComponentInternalInstance { columnConfig: Ref>> } -export type { Filters, FilterMethods, TableColumnCtx, TableColumn } +export type { Filters, FilterMethods, TableColumnCtx, TableColumn, ValueOf } export default { type: { diff --git a/packages/table/src/table-column/watcher-helper.ts b/packages/table/src/table-column/watcher-helper.ts index 8608ae00bd..293e8a459c 100644 --- a/packages/table/src/table-column/watcher-helper.ts +++ b/packages/table/src/table-column/watcher-helper.ts @@ -1,6 +1,7 @@ import { watch, getCurrentInstance, ComputedRef } from 'vue' import { hasOwn } from '@vue/shared' -import { TableColumnCtx, TableColumn } from './defaults' +import type { TableColumnCtx, TableColumn, ValueOf } from './defaults' +import { parseMinWidth, parseWidth } from '../util' function useWatcher( owner: ComputedRef, @@ -24,8 +25,15 @@ function useWatcher( watch( () => props_[columnKey], newVal => { - instance.columnConfig.value[columnKey] = newVal - instance.columnConfig.value[key] = newVal + let value: ValueOf> = newVal + if (columnKey === 'width' && key === 'realWidth') { + value = parseWidth(newVal) + } + if (columnKey === 'minWidth' && key === 'realMinWidth') { + value = parseMinWidth(newVal) + } + instance.columnConfig.value[columnKey as any] = value + instance.columnConfig.value[key] = value const updateColumns = columnKey === 'fixed' owner.value.store.scheduleLayout(updateColumns) },