diff --git a/src/calendar/README.zh-CN.md b/src/calendar/README.zh-CN.md index 367960864..43df76f75 100644 --- a/src/calendar/README.zh-CN.md +++ b/src/calendar/README.zh-CN.md @@ -75,6 +75,51 @@ export default { } ``` +### 快捷选择 + +将`show-confirm`设置为`false`可以隐藏确认按钮,这种情况下选择完成后会立即触发`confirm`事件 + +```html + +``` + +### 自定义日期范围 + +通过`min-date`和`max-date`定义日历的范围 + +```html + +``` + +```js +export default { + data() { + return { + show: false, + minDate: new Date(2010, 0, 1), + maxDate: new Date(2010, 0, 31) + }; + } +}; +``` + +### 自定义按钮文字 + +通过`confirm-text`设置按钮文字,通过`confirm-disabled-text`设置按钮禁用时的文字 + +```html + +``` + ## API ### Props @@ -87,10 +132,10 @@ export default { | min-date | 最小日期 | *Date* | 当前日期 | - | | max-date | 最大日期 | *Date* | 当前日期的六个月后 | - | | default-date | 默认选中的日期 | *Date \| Date[]* | 今天 | - | -| row-height | 日期所在行的高度 | *number* | `64` | - | +| row-height | 日期行高 | *number* | `64` | - | | poppable | 是否以弹层的形式展示日历 | *boolean* | `true` | - | | show-mark | 是否显示月份背景水印 | *boolean* | `true` | - | -| show-confirm | 是否展示确认按钮 | *boolean* | `false` | - | +| show-confirm | 是否展示确认按钮 | *boolean* | `true` | - | | safe-area-inset-bottom | 是否开启底部安全区适配,[详细说明](#/zh-CN/quickstart#di-bu-an-quan-qu-gua-pei) | *boolean* | `true` | - | | confirm-text | 确认按钮的文字 | *string* | `确定` | - | | confirm-disabled-text | 确认按钮处于禁用状态时的文字 | *string* | `确定` | - | @@ -115,3 +160,4 @@ export default { | 方法名 | 说明 | 参数 | 返回值 | |------|------|------|------| +| reset | 重置选中的日期到默认值 | - | - | diff --git a/src/calendar/demo/index.vue b/src/calendar/demo/index.vue index 38b24059d..e1769345a 100644 --- a/src/calendar/demo/index.vue +++ b/src/calendar/demo/index.vue @@ -3,46 +3,60 @@ - + + + + + + + - - @@ -51,39 +65,75 @@ export default { i18n: { 'zh-CN': { - selectSingleDate: '选择单个日期', - selectDateRange: '选择日期区间', - showConfirm: '展示确认按钮' + selectSingle: '选择单个日期', + selectRange: '选择日期区间', + quickSelect: '快捷选择', + confirmText: '完成', + customRange: '自定义范围', + customConfirm: '自定义按钮文字', + customCalendar: '自定义日历', + confirmDisabledText: '请选择结束时间' }, 'en-US': { - selectSingleDate: 'Select Single Date', - selectDateRange: 'Select Date Range', - showConfirm: 'Show Confirm Button' + selectSingle: 'Select Single Date', + selectRange: 'Select Date Range', + quickSelect: 'Quick Select', + confirmText: 'OK', + customRange: 'Custom Range', + customConfirm: 'Custom Confirm Text', + customCalendar: 'Custom Calendar', + confirmDisabledText: 'Select End Time' } }, data() { return { - showConfirm: false, date: { - selectSingleDate: null, - selectDateRange: [] + selectSingle: null, + selectRange: [], + quickSelect1: null, + quickSelect2: [], + customConfirm: [], + customRange: null }, - show: { - selectSingleDate: false, - selectDateRange: false - } + type: 'single', + minDate: undefined, + maxDate: undefined, + showConfirm: false, + showCalendar: false, + confirmText: undefined, + confirmDisabledText: undefined, }; }, methods: { - toggle(type, show, setting) { - this.show[type] = show; + resetSettings() { + this.minDate = undefined; + this.maxDate = undefined; + this.showConfirm = true; + this.confirmText = undefined; + this.confirmDisabledText = undefined; + }, - if (setting === 'showConfirm') { - this.showConfirm = true; - } else { - this.showConfirm = false; + show(type, id) { + this.resetSettings(); + this.id = id; + this.type = type; + this.showCalendar = true; + + switch (id) { + case 'quickSelect1': + case 'quickSelect2': + this.showConfirm = false; + break; + case 'customConfirm': + this.confirmText = this.$t('confirmText'); + this.confirmDisabledText = this.$t('confirmDisabledText'); + break; + case 'customRange': + this.minDate = new Date(2010, 0, 1); + this.maxDate = new Date(2010, 0, 31); + break; } }, @@ -99,16 +149,16 @@ export default { } }, - formatDateRange(dateRange) { + formatRange(dateRange) { if (dateRange.length) { const [start, end] = dateRange; return `${this.formatDate(start)} - ${this.formatDate(end)}`; } }, - onConfirm(date, type) { - this.date[type] = date; - this.show[type] = false; + onConfirm(date) { + this.showCalendar = false; + this.date[this.id] = date; } } }; diff --git a/src/calendar/index.js b/src/calendar/index.js index ceafea1e7..5a958fd90 100644 --- a/src/calendar/index.js +++ b/src/calendar/index.js @@ -20,7 +20,6 @@ export default createComponent({ title: String, value: Boolean, defaultDate: [Date, Array], - showConfirm: Boolean, confirmText: String, confirmDisabledText: String, type: { @@ -52,6 +51,10 @@ export default createComponent({ type: Boolean, default: true }, + showConfirm: { + type: Boolean, + default: true + }, safeAreaInsetBottom: { type: Boolean, default: true @@ -92,6 +95,10 @@ export default createComponent({ }, watch: { + type() { + this.reset(); + }, + value(val) { if (val) { this.initRect(); @@ -110,6 +117,11 @@ export default createComponent({ }, methods: { + // @exposed-api + reset() { + this.currentDate = this.getInitialDate(); + }, + initRect() { this.$nextTick(() => { this.bodyHeight = this.$refs.body.getBoundingClientRect().height; @@ -140,7 +152,7 @@ export default createComponent({ const heightSum = heights.reduce((a, b) => a + b, 0); // iOS scroll bounce may exceed the range - if (top < 0 || bottom > heightSum) { + if (top < 0 || (bottom > heightSum && top > 0)) { return; } @@ -178,9 +190,7 @@ export default createComponent({ if (compareToStart === 1) { this.select([startDay, date], true); - } - - if (compareToStart === -1) { + } else if (compareToStart === -1) { this.select([date, null]); } } else {