Ver Fonte

DatePicker: fix format week, fixed #2774 (#3687)

cinwell.li há 8 anos atrás
pai
commit
43bb065e69

+ 2 - 8
packages/date-picker/src/panel/date.vue

@@ -296,14 +296,8 @@
           this.date.setMonth(value.getMonth());
           this.date.setDate(value.getDate());
         } else if (this.selectionMode === 'week') {
-          let date = formatDate(value.date, this.format || 'yyyywWW');
-          const week = this.week = value.week;
-
-          date = /WW/.test(date)
-            ? date.replace(/WW/, week < 10 ? '0' + week : week)
-            : date.replace(/W/, week);
-
-          this.$emit('pick', date);
+          this.week = value.week;
+          this.$emit('pick', value.date);
         }
 
         this.resetDate();

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

@@ -49,6 +49,7 @@ const DEFAULT_FORMATS = {
   month: 'yyyy-MM',
   datetime: 'yyyy-MM-dd HH:mm:ss',
   time: 'HH:mm:ss',
+  week: 'yyyywWW',
   timerange: 'HH:mm:ss',
   daterange: 'yyyy-MM-dd',
   datetimerange: 'yyyy-MM-dd HH:mm:ss',
@@ -105,12 +106,14 @@ const TYPE_VALUE_RESOLVER_MAP = {
     }
   },
   week: {
-    formatter(value) {
-      if (value instanceof Date) {
-        const weekNumber = getWeekNumber(value);
-        return value.getFullYear() + 'w' + (weekNumber > 9 ? weekNumber : '0' + weekNumber);
-      }
-      return value;
+    formatter(value, format) {
+      let date = formatDate(value, format);
+      const week = getWeekNumber(value);
+
+      date = /WW/.test(date)
+            ? date.replace(/WW/, week < 10 ? '0' + week : week)
+            : date.replace(/W/, week);
+      return date;
     },
     parser(text) {
       const array = (text || '').split('w');