diff --git a/packages/components/date-picker/__tests__/date-picker.test.ts b/packages/components/date-picker/__tests__/date-picker.test.ts index c1c87576d9..39691a338d 100644 --- a/packages/components/date-picker/__tests__/date-picker.test.ts +++ b/packages/components/date-picker/__tests__/date-picker.test.ts @@ -1633,4 +1633,34 @@ describe('MonthRange', () => { expect(vm.value.getDate()).toBe(1) expect(vm.value.getHours()).toBe(12) }) + it('format allows dynamic changes', async () => { + const format = 'YYYY/MM/DD HH:mm:ss' + const wrapper = _mount( + ` + `, + () => ({ + value: ['2024/06/14', '2024/06/15'], + format, + }), + { + methods: { + changeFormat() { + this.format = 'YYYY-MM-DD' + }, + }, + } + ) + await nextTick() + const inputRange = wrapper.findAll('.el-range-input') + expect(inputRange[0].element.value).toBe('2024/06/14 00:00:00') + expect(inputRange[1].element.value).toBe('2024/06/15 00:00:00') + await wrapper.find('button').trigger('click') + await nextTick() + expect(inputRange[0].element.value).toBe('2024-06-14') + expect(inputRange[1].element.value).toBe('2024-06-15') + }) }) diff --git a/packages/components/date-picker/src/date-picker-com/panel-date-range.vue b/packages/components/date-picker/src/date-picker-com/panel-date-range.vue index bcd5ce4b66..fae7577fbc 100644 --- a/packages/components/date-picker/src/date-picker-com/panel-date-range.vue +++ b/packages/components/date-picker/src/date-picker-com/panel-date-range.vue @@ -293,8 +293,8 @@ const emit = defineEmits([ const unit = 'month' // FIXME: fix the type for ep picker const pickerBase = inject('EP_PICKER_BASE') as any -const { disabledDate, cellClassName, format, defaultTime, clearable } = - pickerBase.props +const { disabledDate, cellClassName, defaultTime, clearable } = pickerBase.props +const format = toRef(pickerBase.props, 'format') const shortcuts = toRef(pickerBase.props, 'shortcuts') const defaultValue = toRef(pickerBase.props, 'defaultValue') const { lang } = useLocale() @@ -388,11 +388,11 @@ const maxVisibleTime = computed(() => { }) const timeFormat = computed(() => { - return props.timeFormat || extractTimeFormat(format) + return props.timeFormat || extractTimeFormat(format.value) }) const dateFormat = computed(() => { - return props.dateFormat || extractDateFormat(format) + return props.dateFormat || extractDateFormat(format.value) }) const isValidValue = (date: [Dayjs, Dayjs]) => { @@ -686,14 +686,14 @@ const handleClear = () => { const formatToString = (value: Dayjs | Dayjs[]) => { return isArray(value) - ? value.map((_) => _.format(format)) - : value.format(format) + ? value.map((_) => _.format(format.value)) + : value.format(format.value) } const parseUserInput = (value: Dayjs | Dayjs[]) => { return isArray(value) - ? value.map((_) => dayjs(_, format).locale(lang.value)) - : dayjs(value, format).locale(lang.value) + ? value.map((_) => dayjs(_, format.value).locale(lang.value)) + : dayjs(value, format.value).locale(lang.value) } function onParsedValueChanged( diff --git a/packages/components/date-picker/src/date-picker-com/panel-month-range.vue b/packages/components/date-picker/src/date-picker-com/panel-month-range.vue index 74abde492e..972f6c766a 100644 --- a/packages/components/date-picker/src/date-picker-com/panel-month-range.vue +++ b/packages/components/date-picker/src/date-picker-com/panel-month-range.vue @@ -124,7 +124,8 @@ const unit = 'year' const { lang } = useLocale() const pickerBase = inject('EP_PICKER_BASE') as any -const { shortcuts, disabledDate, format } = pickerBase.props +const { shortcuts, disabledDate } = pickerBase.props +const format = toRef(pickerBase.props, 'format') const defaultValue = toRef(pickerBase.props, 'defaultValue') const leftDate = ref(dayjs().locale(lang.value)) const rightDate = ref(dayjs().locale(lang.value).add(1, unit)) @@ -193,7 +194,7 @@ const handleRangePick = (val: RangePickValue, close = true) => { } const formatToString = (days: Dayjs[]) => { - return days.map((day) => day.format(format)) + return days.map((day) => day.format(format.value)) } function onParsedValueChanged(