diff --git a/src/components/date-picker/picker.vue b/src/components/date-picker/picker.vue index 734578a..f879b1f 100644 --- a/src/components/date-picker/picker.vue +++ b/src/components/date-picker/picker.vue @@ -178,7 +178,7 @@ }; }, computed: { - publicValue(){ + publicVModelValue(){ if (this.multiple){ return this.internalValue.slice(); } else { @@ -189,6 +189,11 @@ return (isRange || this.multiple) ? val : val[0]; } }, + publicStringValue(){ + const {formatDate, publicVModelValue, type} = this; + if (type.match(/^time/)) return publicVModelValue; + return Array.isArray(publicVModelValue) ? publicVModelValue.map(formatDate) : formatDate(publicVModelValue); + }, opened () { return this.open === null ? this.visible : this.open; }, @@ -296,8 +301,8 @@ }, emitChange () { this.$nextTick(() => { - this.$emit('on-change', this.publicValue); - this.dispatch('FormItem', 'on-form-change', this.publicValue); + this.$emit('on-change', this.publicStringValue); + this.dispatch('FormItem', 'on-form-change', this.publicStringValue); }); }, parseDate(val) { @@ -388,7 +393,7 @@ type(type){ this.onSelectionModeChange(type); }, - publicValue(now, before){ + publicVModelValue(now, before){ const newValue = JSON.stringify(now); const oldValue = JSON.stringify(before); const shouldEmitInput = newValue !== oldValue || typeof now !== typeof before; @@ -397,9 +402,9 @@ }, mounted () { const initialValue = this.value; - const parsedValue = this.publicValue; + const parsedValue = this.publicVModelValue; if (typeof initialValue !== typeof parsedValue || JSON.stringify(initialValue) !== JSON.stringify(parsedValue)){ - this.$emit('input', this.publicValue); // to update v-model + this.$emit('input', this.publicVModelValue); // to update v-model } if (this.open !== null) this.visible = this.open; } diff --git a/test/unit/specs/date-picker.spec.js b/test/unit/specs/date-picker.spec.js index f152138..e2583ae 100644 --- a/test/unit/specs/date-picker.spec.js +++ b/test/unit/specs/date-picker.spec.js @@ -80,12 +80,13 @@ describe('DatePicker.vue', () => { vm.$nextTick(() => { // DATE - expect(dateValue instanceof Date).to.equal(true); - expect(dateToString(dateValue)).to.equal(nowDate); + expect(typeof dateValue).to.equal('string'); + expect(dateValue).to.equal(nowDate); // DATERANGE expect(Array.isArray(dateRangeValue)).to.equal(true); - expect(dateToString(dateRangeValue[0])).to.equal(nowDate); - expect(dateToString(dateRangeValue[1])).to.equal(dateToString(nextWeek)); + expect(dateRangeValue[0]).to.equal(nowDate); + expect(dateRangeValue[1]).to.equal(dateToString(nextWeek)); + // TIME expect(typeof timeValue).to.equal('string'); expect(timeValue).to.equal(nowTime); @@ -339,7 +340,7 @@ describe('DatePicker.vue', () => { expect(value2[1] instanceof Date).to.equal(true); expect(value2.map(dateToString).join('|')).to.equal([new Date(), new Date()].map(dateToString).join('|')); - expect(dateToString(vm.value3)).to.equal('2017-10-10'); + expect(dateToString(value3)).to.equal('2017-10-10'); expect(value4[0] instanceof Date).to.equal(true); expect(value4[1] instanceof Date).to.equal(true); -- libgit2 0.21.4