diff --git a/packages/datetime-picker/demo/index.vue b/packages/datetime-picker/demo/index.vue
index 57c681be5..2f4b2b3b9 100644
--- a/packages/datetime-picker/demo/index.vue
+++ b/packages/datetime-picker/demo/index.vue
@@ -22,6 +22,7 @@
v-model="currentDate3"
type="year-month"
:min-date="minDate"
+ :formatter="formatter"
/>
@@ -43,13 +44,17 @@ export default {
title1: '选择完整时间',
title2: '选择日期(年月日)',
title3: '选择日期(年月)',
- title4: '选择时间'
+ title4: '选择时间',
+ year: '年',
+ month: '月'
},
'en-US': {
title1: 'Choose DateTime',
title2: 'Choose Date',
title3: 'Choose Year-Month',
- title4: 'Choose Time'
+ title4: 'Choose Time',
+ year: ' Year',
+ month: ' Month'
}
},
@@ -64,6 +69,17 @@ export default {
currentDate3: new Date(2018, 0, 1),
currentDate4: '12:00'
};
+ },
+
+ methods: {
+ formatter(type, value) {
+ if (type === 'year') {
+ return value + this.$t('year');
+ } else if (type === 'month') {
+ return value + this.$t('month');
+ }
+ return value;
+ }
}
};
diff --git a/packages/datetime-picker/en-US.md b/packages/datetime-picker/en-US.md
index f8a9ea1cf..4112fee3b 100644
--- a/packages/datetime-picker/en-US.md
+++ b/packages/datetime-picker/en-US.md
@@ -62,6 +62,7 @@ export default {
v-model="currentDate"
type="year-month"
:min-date="minDate"
+ :formatter="formatter"
/>
```
@@ -71,6 +72,17 @@ export default {
return {
currentDate: new Date()
};
+ },
+
+ methods: {
+ formatter(type, value) {
+ if (type === 'year') {
+ return `${value} Year`;
+ } else if (type === 'month') {
+ return `${value} Month`
+ }
+ return value;
+ }
}
}
```
@@ -100,11 +112,12 @@ export default {
| Attribute | Description | Type | Default |
|-----------|-----------|-----------|-------------|-------------|
-| type | Can be set to `date` `time` `year-month` | `String` | `datetime` |
+| type | Can be set to `date` `time`
`year-month` | `String` | `datetime` |
| min-date | Min date | `Date` | Ten years ago on January 1 |
| max-date | Max date | `Date` | Ten years later on December 31 |
| min-hour | Min hour | `Number` | `0` |
| max-hour | Max hour | `Number` | `23` |
+| formatter | Option text formatter | `(type, value) => value` | - |
| title | Toolbar title | `String` | `''` |
| loading | Whether to show loading prompt | `Boolean` | `false` |
| item-height | Option height | `Number` | `44` |
diff --git a/packages/datetime-picker/index.vue b/packages/datetime-picker/index.vue
index 34ad35bbc..9eafe044d 100644
--- a/packages/datetime-picker/index.vue
+++ b/packages/datetime-picker/index.vue
@@ -32,6 +32,7 @@ export default create({
value: {},
title: String,
itemHeight: Number,
+ formatter: Function,
visibleItemCount: Number,
confirmButtonText: String,
cancelButtonText: String,
@@ -90,8 +91,14 @@ export default create({
ranges() {
if (this.type === 'time') {
return [
- [this.minHour, this.maxHour],
- [0, 59]
+ {
+ type: 'hour',
+ range: [this.minHour, this.maxHour]
+ },
+ {
+ type: 'minute',
+ range: [0, 59]
+ }
];
}
@@ -99,28 +106,46 @@ export default create({
const { minYear, minDate, minMonth, minHour, minMinute } = this.getBoundary('min', this.innerValue);
const result = [
- [minYear, maxYear],
- [minMonth, maxMonth],
- [minDate, maxDate],
- [minHour, maxHour],
- [minMinute, maxMinute]
+ {
+ type: 'year',
+ range: [minYear, maxYear]
+ },
+ {
+ type: 'month',
+ range: [minMonth, maxMonth]
+ },
+ {
+ type: 'day',
+ range: [minDate, maxDate]
+ },
+ {
+ type: 'hour',
+ range: [minHour, maxHour]
+ },
+ {
+ type: 'minute',
+ range: [minMinute, maxMinute]
+ }
];
if (this.type === 'date') result.splice(3, 2);
if (this.type === 'year-month') result.splice(2, 3);
return result;
},
+
columns() {
- const results = this.ranges.map(range => {
+ const results = this.ranges.map(({ type, range }) => {
const values = this.times(range[1] - range[0] + 1, index => {
- const value = range[0] + index;
- return value < 10 ? `0${value}` : `${value}`;
+ let value = range[0] + index;
+ value = value < 10 ? `0${value}` : `${value}`;
+ return this.formatter ? this.formatter(type, value) : value;
});
return {
values
};
});
+
return results;
}
},
diff --git a/packages/datetime-picker/test/__snapshots__/demo.spec.js.snap b/packages/datetime-picker/test/__snapshots__/demo.spec.js.snap
index 071d23ede..77c7f171e 100644
--- a/packages/datetime-picker/test/__snapshots__/demo.spec.js.snap
+++ b/packages/datetime-picker/test/__snapshots__/demo.spec.js.snap
@@ -254,33 +254,33 @@ exports[`renders demo correctly 1`] = `