Skip to content

Commit 54a23eb

Browse files
committed
fix(date-picker): Fixed the issue of inconsistent years in preview mode and close #1959
1 parent 83f6c6a commit 54a23eb

5 files changed

Lines changed: 138 additions & 18 deletions

File tree

packages/varlet-ui/src/date-picker/DatePicker.vue

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
:class="classes(n('title-year'), [isYearPanel, n('title-year--active')])"
99
@click="clickEl('year')"
1010
>
11-
<slot name="year" :year="chooseYear">
12-
{{ chooseYear }}
11+
<slot name="year" :year="displayYear">
12+
{{ displayYear }}
1313
</slot>
1414
</div>
1515
</div>
@@ -185,6 +185,7 @@ export default defineComponent({
185185
previewMonth: previewMonth.value,
186186
previewYear: previewYear.value,
187187
}))
188+
const displayYear = computed<string>(() => previewYear.value || chooseYear.value || '')
188189
189190
const getYearTitle = computed<string>(() => {
190191
const { multiple, range } = props
@@ -600,6 +601,7 @@ export default defineComponent({
600601
chooseYear,
601602
chooseDay,
602603
previewYear,
604+
displayYear,
603605
isYearPanel,
604606
isMonthPanel,
605607
getMonthTitle,

packages/varlet-ui/src/date-picker/__tests__/index.spec.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,47 @@ test('datePicker v-model', async () => {
217217
wrapper.unmount()
218218
})
219219

220+
test('datePicker should update title year on year preview change', async () => {
221+
const wrapper = mount(VarDatePicker, {
222+
props: {
223+
modelValue: '2021-05-19',
224+
},
225+
})
226+
227+
await delay(0)
228+
expect(wrapper.find('.var-date-picker__title-year').text()).toBe('2021')
229+
230+
await wrapper.find('.var-date-picker__title-year').trigger('click')
231+
await delay(200)
232+
await wrapper.find('.var-year-picker').find('li').find('button').trigger('click')
233+
await delay(200)
234+
235+
expect(wrapper.find('.var-date-picker__title-year').text()).toBe('2000')
236+
expect(wrapper.emitted()['update:modelValue']).toBeFalsy()
237+
238+
wrapper.unmount()
239+
})
240+
241+
test('datePicker should update title year when month preview crosses year', async () => {
242+
const wrapper = mount(VarDatePicker, {
243+
props: {
244+
type: 'month',
245+
modelValue: '2021-01',
246+
},
247+
})
248+
249+
await delay(0)
250+
expect(wrapper.find('.var-date-picker__title-year').text()).toBe('2021')
251+
252+
await wrapper.find('.var-date-picker-header').find('button').trigger('click')
253+
await delay(200)
254+
255+
expect(wrapper.find('.var-date-picker__title-year').text()).toBe('2020')
256+
expect(wrapper.emitted()['update:modelValue']).toBeFalsy()
257+
258+
wrapper.unmount()
259+
})
260+
220261
test('datePicker multiple', async () => {
221262
const template = `<var-date-picker multiple v-model="date" :type="type"/>`
222263

packages/varlet-ui/src/date-picker/example/index.vue

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,15 @@ watchLang(use)
1616
onThemeChange()
1717
1818
const allowedDates = (date) => parseInt(date.split('-')[2], 10) % 2 === 1
19+
20+
function handlePreview(...args) {
21+
console.log('preview', args)
22+
}
1923
</script>
2024

2125
<template>
2226
<app-type>{{ t('basicUsage') }}</app-type>
23-
<var-date-picker v-model="dates.date1" />
27+
<var-date-picker v-model="dates.date1" @preview="handlePreview" />
2428

2529
<app-type>{{ t('monthPicker') }}</app-type>
2630
<var-date-picker v-model="dates.date" type="month" />

pnpm-lock.yaml

Lines changed: 87 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pnpm-workspace.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ catalog:
1212
live-server: ^1.2.1
1313
rimraf: ^5.0.1
1414
tinyexec: ^0.3.0
15-
rattail: ^2.0.5
15+
rattail: ^2.0.7
1616
vite-plus: 0.1.18
1717
'@types/node': ^20.19.0
1818
'@vitest/coverage-istanbul': 4.1.4

0 commit comments

Comments
 (0)