From 4863a75d921275e5c35f09777d55335ac610aabb Mon Sep 17 00:00:00 2001 From: Sergio Crisostomo Date: Fri, 19 Jan 2018 13:11:38 +0100 Subject: [PATCH] Correct logic when manually inputing disabledDates --- src/components/date-picker/picker.vue | 27 ++++++++++++++++++++------- src/components/date-picker/picker/date-picker.js | 13 +------------ 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/src/components/date-picker/picker.vue b/src/components/date-picker/picker.vue index 8d968d3..d194afd 100644 --- a/src/components/date-picker/picker.vue +++ b/src/components/date-picker/picker.vue @@ -3,6 +3,7 @@
({}) } }, data(){ @@ -274,7 +279,8 @@ internalValue: this.parseDate(this.value), disableClickOutSide: false, // fixed when click a date,trigger clickoutside to close picker disableCloseUnderTransfer: false, // transfer 模式下,点击Drop也会触发关闭, - selectionMode: this.onSelectionModeChange(this.type) + selectionMode: this.onSelectionModeChange(this.type), + forceInputRerender: 1 }; }, computed: { @@ -287,7 +293,6 @@ return (isRange || this.multiple) ? val : val[0]; } }, - opened () { return this.open === null ? this.visible : this.open; }, @@ -341,12 +346,21 @@ this.visible = false; }, handleInputChange (event) { + const isArrayValue = this.type.includes('range') || this.multiple; const oldValue = this.visualValue; const newValue = event.target.value; + const newDate = this.parseDate(newValue); + const disabledDateFn = + this.options && + typeof this.options.disabledDate === 'function' && + this.options.disabledDate; + const valueToTest = isArrayValue ? newDate : newDate[0]; - if (newValue !== oldValue) { + if (newValue !== oldValue && !disabledDateFn(valueToTest)) { this.emitChange(); - this.internalValue = this.parseDate(newValue); + this.internalValue = newDate; + } else { + this.forceInputRerender++; } }, handleInputMouseenter () { @@ -393,7 +407,7 @@ if (val && type === 'time' && !(val instanceof Date)) { val = parser(val, this.format || DEFAULT_FORMATS[type]); - } else if (type.match(/range$/)) { + } else if (isRange) { if (!val){ val = [null, null]; } else { @@ -403,8 +417,7 @@ } else if (typeof val === 'string' && type.indexOf('time') !== 0){ val = parser(val, this.format || DEFAULT_FORMATS[type]) || val; } - - return isRange ? val : [val]; + return (isRange || this.multiple) ? val : [val]; }, formatDate(value){ const {formatter} = ( diff --git a/src/components/date-picker/picker/date-picker.js b/src/components/date-picker/picker/date-picker.js index c8419ed..cd61627 100644 --- a/src/components/date-picker/picker/date-picker.js +++ b/src/components/date-picker/picker/date-picker.js @@ -21,18 +21,7 @@ export default { return isRange ? 'RangeDatePickerPanel' : 'DatePickerPanel'; }, ownPickerProps(){ - return {}; + return this.options; } }, -/* - created () { - if (!this.currentValue) { - if (this.type === 'daterange' || this.type === 'datetimerange') { - this.currentValue = ['','']; - } else { - this.currentValue = ''; - } - } - } -*/ }; -- libgit2 0.21.4