Browse Source

date-picker: fix typo, fix value-format parsing

wacky6.AriesMBP 7 years ago
parent
commit
7ceecce564

+ 6 - 6
packages/date-picker/src/picker.vue

@@ -69,7 +69,7 @@
 <script>
 import Vue from 'vue';
 import Clickoutside from 'element-ui/src/utils/clickoutside';
-import { formatDate, parseDate, isDate, getWeekNumber } from './util';
+import { formatDate, parseDate, isDate, isDateObject, getWeekNumber } from './util';
 import Popper from 'element-ui/src/utils/vue-popper';
 import Emitter from 'element-ui/src/mixins/emitter';
 import Focus from 'element-ui/src/mixins/focus';
@@ -229,23 +229,23 @@ const PLACEMENT_MAP = {
   right: 'bottom-end'
 };
 
-const parseAsFormatAndType = (value, cutsomFormat, type, rangeSeparator = '-') => {
+const parseAsFormatAndType = (value, customFormat, type, rangeSeparator = '-') => {
   if (!value) return null;
   const parser = (
     TYPE_VALUE_RESOLVER_MAP[type] ||
     TYPE_VALUE_RESOLVER_MAP['default']
   ).parser;
-  const format = cutsomFormat || DEFAULT_FORMATS[type];
+  const format = customFormat || DEFAULT_FORMATS[type];
   return parser(value, format, rangeSeparator);
 };
 
-const formatAsFormatAndType = (value, cutsomFormat, type) => {
+const formatAsFormatAndType = (value, customFormat, type) => {
   if (!value) return null;
   const formatter = (
     TYPE_VALUE_RESOLVER_MAP[type] ||
     TYPE_VALUE_RESOLVER_MAP['default']
   ).formatter;
-  const format = cutsomFormat || DEFAULT_FORMATS[type];
+  const format = customFormat || DEFAULT_FORMATS[type];
   return formatter(value, format);
 };
 
@@ -421,7 +421,7 @@ export default {
     },
 
     parsedValue() {
-      const isParsed = isDate(this.value) || (Array.isArray(this.value) && this.value.every(isDate));
+      const isParsed = isDateObject(this.value) || (Array.isArray(this.value) && this.value.every(isDateObject));
       if (this.valueFormat && !isParsed) {
         return parseAsFormatAndType(this.value, this.valueFormat, this.type, this.rangeSeparator) || this.value;
       } else {

+ 4 - 0
packages/date-picker/src/util/index.js

@@ -31,6 +31,10 @@ export const isDate = function(date) {
   return true;
 };
 
+export const isDateObject = function(val) {
+  return val instanceof Date;
+};
+
 export const formatDate = function(date, format) {
   date = toDate(date);
   if (!date) return '';

+ 12 - 4
test/unit/specs/date-picker.spec.js

@@ -411,20 +411,28 @@ describe('DatePicker', () => {
             ref="compo"
             v-model="value"
             type="date"
-            value-format="dd-MM-yyyy" />`,
+            format="yyyy-MM-dd"
+            value-format="dd/MM yyyy" />`,
         data() {
           return {
-            value: '01-02-2000'
+            value: '01/02 2000'
           };
         }
       }, true);
-      vm.$refs.compo.$el.querySelector('input').focus();
+      const input = vm.$refs.compo.$el.querySelector('input');
+      expect(input.value).to.equal('2000-02-01');
+      expect(vm.$refs.compo.parsedValue).to.be.an.instanceof(Date);
+      input.focus();
       setTimeout(_ => {
         const date = vm.$refs.compo.picker.date;
         expect(date.getFullYear()).to.equal(2000);
         expect(date.getMonth()).to.equal(1);
         expect(date.getDate()).to.equal(1);
-        done();
+        vm.$refs.compo.picker.$el.querySelector('.el-date-table .current').click();
+        setTimeout(_ => {
+          expect(input.value).to.equal('2000-02-01');
+          done();
+        }, DELAY);
       }, DELAY);
     });