diff --git a/README.md b/README.md index 3db2951..54b32e2 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ export default { | Prop | Type | Default | Description | |---------------------|---------------|-------------|-----------------------------------------------------| -| type | String | 'date' | select datepicker or datetimepicker(date/datetime) | +| type | String | 'date' | select date type (date/datetime/year/month) | | range | Boolean | false | if true, the type is daterange or datetimerange | | format | String | YYYY-MM-DD | The parsing tokens are similar to the moment.js | | lang | String/Object | zh | Translation (en/zh/es/pt-br/fr/ru/de/it/cs)(custom) | diff --git a/README.zh-CN.md b/README.zh-CN.md index fac8b38..42da206 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -68,7 +68,7 @@ export default { | Prop | Type | Default | Description |---------------------|---------------|-------------|----------------------------------------------------- -| type | String | 'date' | 选择日期或日期时间(可选:date,datetime) +| type | String | 'date' | 选择日期或日期时间(可选:date,datetime,year,month) | range | Boolean | false | 如果是true, 显示日历范围选择 | format | String | YYYY-MM-DD | 格式化显示日期 api类似moment.js | lang | String/Object | zh | 选择语言或自定义 (en/zh/es/pt-br/fr/ru/de/it/cs)(custom) diff --git a/demo/index.js b/demo/index.js index ef85c46..edb4c6b 100644 --- a/demo/index.js +++ b/demo/index.js @@ -15,7 +15,9 @@ new Vue({ // eslint-disable-line value6: '', value7: '', value8: '', - value9: '' + value9: '', + value10: new Date(), + value11: new Date() } }, methods: { @@ -44,7 +46,9 @@ new Vue({ // eslint-disable-line render (h) { const example1 = { 'base': '', - 'range': '' + 'range': '', + 'month': '', + 'year': '' } const example2 = { 'datetime': ` diff --git a/src/calendar.vue b/src/calendar.vue index eddbe72..d87924c 100644 --- a/src/calendar.vue +++ b/src/calendar.vue @@ -18,13 +18,16 @@ class="mx-icon-next-month" @click="handleIconMonth(1)">› {{months[calendarMonth]}} {{calendarYear}} + {{yearHeader}} {v} diff --git a/src/panel/year.js b/src/panel/year.js index fffde6f..2e65dd6 100644 --- a/src/panel/year.js +++ b/src/panel/year.js @@ -2,10 +2,20 @@ export default { name: 'panelYear', props: { value: null, - firstYear: Number + firstYear: Number, + disabledYear: Function }, methods: { + isDisabled (year) { + if (typeof this.disabledYear === 'function' && this.disabledYear(year)) { + return true + } + return false + }, selectYear (year) { + if (this.isDisabled(year)) { + return + } this.$emit('select', year) } }, @@ -18,7 +28,8 @@ export default { return {year} diff --git a/test/index.spec.js b/test/index.spec.js index 63eba3c..ce0d61c 100644 --- a/test/index.spec.js +++ b/test/index.spec.js @@ -409,6 +409,36 @@ describe('calendar-panel', () => { done() }, 0) }) + + it('prop: type year', () => { + wrapper = mount(CalendarPanel, { + propsData: { + type: 'year', + value: new Date(2018, 1, 1) + } + }) + const td = wrapper.find('.mx-panel-year .cell:nth-child(1)') + td.trigger('click') + const expectDate = new Date(2010, 1, 1) + expect(wrapper.emitted()).toEqual({ + 'select-date': [[expectDate]] + }) + }) + + it('prop: type month', () => { + wrapper = mount(CalendarPanel, { + propsData: { + type: 'month', + value: new Date(2018, 1, 1) + } + }) + const td = wrapper.find('.mx-panel-month .cell:nth-child(1)') + td.trigger('click') + const expectDate = new Date(2018, 0, 1) + expect(wrapper.emitted()).toEqual({ + 'select-date': [[expectDate]] + }) + }) }) describe('date-panel', () => {