Commit 4863a75d921275e5c35f09777d55335ac610aabb
1 parent
77e43f2b
Correct logic when manually inputing disabledDates
Showing
2 changed files
with
21 additions
and
19 deletions
Show diff stats
src/components/date-picker/picker.vue
| ... | ... | @@ -3,6 +3,7 @@ |
| 3 | 3 | <div ref="reference" :class="[prefixCls + '-rel']"> |
| 4 | 4 | <slot> |
| 5 | 5 | <i-input |
| 6 | + :key="forceInputRerender" | |
| 6 | 7 | :element-id="elementId" |
| 7 | 8 | :class="[prefixCls + '-editor']" |
| 8 | 9 | :readonly="!editable || readonly" |
| ... | ... | @@ -264,6 +265,10 @@ |
| 264 | 265 | return val === '' || val === null || !isNaN(date.getTime()); |
| 265 | 266 | } |
| 266 | 267 | } |
| 268 | + }, | |
| 269 | + options: { | |
| 270 | + type: Object, | |
| 271 | + default: () => ({}) | |
| 267 | 272 | } |
| 268 | 273 | }, |
| 269 | 274 | data(){ |
| ... | ... | @@ -274,7 +279,8 @@ |
| 274 | 279 | internalValue: this.parseDate(this.value), |
| 275 | 280 | disableClickOutSide: false, // fixed when click a date,trigger clickoutside to close picker |
| 276 | 281 | disableCloseUnderTransfer: false, // transfer 模式下,点击Drop也会触发关闭, |
| 277 | - selectionMode: this.onSelectionModeChange(this.type) | |
| 282 | + selectionMode: this.onSelectionModeChange(this.type), | |
| 283 | + forceInputRerender: 1 | |
| 278 | 284 | }; |
| 279 | 285 | }, |
| 280 | 286 | computed: { |
| ... | ... | @@ -287,7 +293,6 @@ |
| 287 | 293 | return (isRange || this.multiple) ? val : val[0]; |
| 288 | 294 | } |
| 289 | 295 | }, |
| 290 | - | |
| 291 | 296 | opened () { |
| 292 | 297 | return this.open === null ? this.visible : this.open; |
| 293 | 298 | }, |
| ... | ... | @@ -341,12 +346,21 @@ |
| 341 | 346 | this.visible = false; |
| 342 | 347 | }, |
| 343 | 348 | handleInputChange (event) { |
| 349 | + const isArrayValue = this.type.includes('range') || this.multiple; | |
| 344 | 350 | const oldValue = this.visualValue; |
| 345 | 351 | const newValue = event.target.value; |
| 352 | + const newDate = this.parseDate(newValue); | |
| 353 | + const disabledDateFn = | |
| 354 | + this.options && | |
| 355 | + typeof this.options.disabledDate === 'function' && | |
| 356 | + this.options.disabledDate; | |
| 357 | + const valueToTest = isArrayValue ? newDate : newDate[0]; | |
| 346 | 358 | |
| 347 | - if (newValue !== oldValue) { | |
| 359 | + if (newValue !== oldValue && !disabledDateFn(valueToTest)) { | |
| 348 | 360 | this.emitChange(); |
| 349 | - this.internalValue = this.parseDate(newValue); | |
| 361 | + this.internalValue = newDate; | |
| 362 | + } else { | |
| 363 | + this.forceInputRerender++; | |
| 350 | 364 | } |
| 351 | 365 | }, |
| 352 | 366 | handleInputMouseenter () { |
| ... | ... | @@ -393,7 +407,7 @@ |
| 393 | 407 | |
| 394 | 408 | if (val && type === 'time' && !(val instanceof Date)) { |
| 395 | 409 | val = parser(val, this.format || DEFAULT_FORMATS[type]); |
| 396 | - } else if (type.match(/range$/)) { | |
| 410 | + } else if (isRange) { | |
| 397 | 411 | if (!val){ |
| 398 | 412 | val = [null, null]; |
| 399 | 413 | } else { |
| ... | ... | @@ -403,8 +417,7 @@ |
| 403 | 417 | } else if (typeof val === 'string' && type.indexOf('time') !== 0){ |
| 404 | 418 | val = parser(val, this.format || DEFAULT_FORMATS[type]) || val; |
| 405 | 419 | } |
| 406 | - | |
| 407 | - return isRange ? val : [val]; | |
| 420 | + return (isRange || this.multiple) ? val : [val]; | |
| 408 | 421 | }, |
| 409 | 422 | formatDate(value){ |
| 410 | 423 | const {formatter} = ( | ... | ... |
src/components/date-picker/picker/date-picker.js
| ... | ... | @@ -21,18 +21,7 @@ export default { |
| 21 | 21 | return isRange ? 'RangeDatePickerPanel' : 'DatePickerPanel'; |
| 22 | 22 | }, |
| 23 | 23 | ownPickerProps(){ |
| 24 | - return {}; | |
| 24 | + return this.options; | |
| 25 | 25 | } |
| 26 | 26 | }, |
| 27 | -/* | |
| 28 | - created () { | |
| 29 | - if (!this.currentValue) { | |
| 30 | - if (this.type === 'daterange' || this.type === 'datetimerange') { | |
| 31 | - this.currentValue = ['','']; | |
| 32 | - } else { | |
| 33 | - this.currentValue = ''; | |
| 34 | - } | |
| 35 | - } | |
| 36 | - } | |
| 37 | -*/ | |
| 38 | 27 | }; | ... | ... |