diff --git a/docs/markdown/changelog.zh-CN.md b/docs/markdown/changelog.zh-CN.md
index 5a753b457..c7e389265 100644
--- a/docs/markdown/changelog.zh-CN.md
+++ b/docs/markdown/changelog.zh-CN.md
@@ -6,6 +6,10 @@
- 新增`lock-scroll`属性
+##### DatetimePicker
+
+- 新增`filter`属性
+
##### DropdownItem
- 新增`title-class`属性
diff --git a/packages/datetime-picker/demo/index.vue b/packages/datetime-picker/demo/index.vue
index e85e9301f..453619fe4 100644
--- a/packages/datetime-picker/demo/index.vue
+++ b/packages/datetime-picker/demo/index.vue
@@ -28,10 +28,18 @@
+
+
+
+
@@ -46,7 +54,8 @@ export default {
title3: '选择日期(年月)',
title4: '选择时间',
year: '年',
- month: '月'
+ month: '月',
+ optionFilter: '选项过滤器'
},
'en-US': {
title1: 'Choose DateTime',
@@ -54,20 +63,20 @@ export default {
title3: 'Choose Year-Month',
title4: 'Choose Time',
year: ' Year',
- month: ' Month'
+ month: ' Month',
+ optionFilter: 'Option Filter'
}
},
data() {
return {
- minHour: 10,
- maxHour: 20,
minDate: new Date(2018, 0, 1),
maxDate: new Date(2019, 10, 1),
currentDate1: new Date(2018, 0, 1),
currentDate2: null,
currentDate3: new Date(2018, 0, 1),
- currentDate4: '12:00'
+ currentTime1: '12:00',
+ currentTime2: '12:00',
};
},
@@ -80,6 +89,14 @@ export default {
return value + this.$t('month');
}
return value;
+ },
+
+ filter(type, values) {
+ if (type === 'minute') {
+ return values.filter(value => value % 5 === 0);
+ }
+
+ return values;
}
}
};
diff --git a/packages/datetime-picker/en-US.md b/packages/datetime-picker/en-US.md
index b4c9375d1..907facb26 100644
--- a/packages/datetime-picker/en-US.md
+++ b/packages/datetime-picker/en-US.md
@@ -94,10 +94,10 @@ export default {
```html
```
@@ -105,12 +105,42 @@ export default {
export default {
data() {
return {
- currentDate: '12:00'
+ currentTime: '12:00'
};
}
}
```
+### Option Filter
+
+```html
+
+```
+
+```js
+export default {
+ data() {
+ return {
+ currentTime: '12:00'
+ };
+ },
+
+ methods: {
+ filter(type, options) {
+ if (type === 'minute') {
+ return options.filter(option => option % 5 === 0)
+ }
+
+ return options;
+ }
+ }
+}
+```
+
## API
### Props
@@ -124,6 +154,7 @@ export default {
| max-hour | Max hour for `time` type | `Number` | `23` |
| min-minute | Max minute for `time` type | `Number` | `0` |
| max-minute | Max minute for `time` type | `Number` | `59` |
+| filter | Option filter | `(type, values) => values` | - |
| formatter | Option text formatter | `(type, value) => value` | - |
| title | Toolbar title | `String` | `''` |
| loading | Whether to show loading prompt | `Boolean` | `false` |
diff --git a/packages/datetime-picker/index.js b/packages/datetime-picker/index.js
index acc6cffeb..bb326f1c6 100644
--- a/packages/datetime-picker/index.js
+++ b/packages/datetime-picker/index.js
@@ -16,6 +16,7 @@ export default sfc({
props: {
...pickerProps,
value: null,
+ filter: Function,
minHour: Number,
minMinute: Number,
type: {
@@ -147,12 +148,16 @@ export default sfc({
columns() {
const results = this.ranges.map(({ type, range: rangeArr }) => {
- const values = times(rangeArr[1] - rangeArr[0] + 1, index => {
+ let values = times(rangeArr[1] - rangeArr[0] + 1, index => {
let value = rangeArr[0] + index;
value = value < 10 ? `0${value}` : `${value}`;
return this.formatter(type, value);
});
+ if (this.filter) {
+ values = this.filter(type, values);
+ }
+
return {
values
};
@@ -170,6 +175,7 @@ export default sfc({
correctValue(value) {
// validate value
const isDateType = this.type !== 'time';
+
if (isDateType && !isValidDate(value)) {
value = this.minDate;
} else if (!value) {
diff --git a/packages/datetime-picker/test/__snapshots__/demo.spec.js.snap b/packages/datetime-picker/test/__snapshots__/demo.spec.js.snap
index 1db261c10..ab86e3f2e 100644
--- a/packages/datetime-picker/test/__snapshots__/demo.spec.js.snap
+++ b/packages/datetime-picker/test/__snapshots__/demo.spec.js.snap
@@ -381,5 +381,62 @@ exports[`renders demo correctly 1`] = `
+
+
+
+
+
+
+
+ - 00
+ - 01
+ - 02
+ - 03
+ - 04
+ - 05
+ - 06
+ - 07
+ - 08
+ - 09
+ - 10
+ - 11
+ - 12
+ - 13
+ - 14
+ - 15
+ - 16
+ - 17
+ - 18
+ - 19
+ - 20
+ - 21
+ - 22
+ - 23
+
+
+
+
+ - 00
+ - 05
+ - 10
+ - 15
+ - 20
+ - 25
+ - 30
+ - 35
+ - 40
+ - 45
+ - 50
+ - 55
+
+
+
+
+
+
+
`;
diff --git a/packages/datetime-picker/zh-CN.md b/packages/datetime-picker/zh-CN.md
index 6b797f1d7..2bdfd3123 100644
--- a/packages/datetime-picker/zh-CN.md
+++ b/packages/datetime-picker/zh-CN.md
@@ -60,7 +60,8 @@ export default {
```
### 选择日期(年月)
-通过传入 `formatter` 函数对选项文字进行处理
+
+通过传入`formatter`函数,可以对选项文字进行格式化处理
```html
```
@@ -107,12 +108,44 @@ export default {
export default {
data() {
return {
- currentDate: '12:00'
+ currentTime: '12:00'
};
}
}
```
+### 选项过滤器
+
+通过传入`filter`函数,可以对选项数组进行过滤,实现自定义时间间隔
+
+```html
+
+```
+
+```js
+export default {
+ data() {
+ return {
+ currentTime: '12:00'
+ };
+ },
+
+ methods: {
+ filter(type, options) {
+ if (type === 'minute') {
+ return options.filter(option => option % 5 === 0)
+ }
+
+ return options;
+ }
+ }
+}
+```
+
## API
### Props
@@ -126,6 +159,7 @@ export default {
| max-hour | 可选的最大小时,针对 time 类型 | `Number` | `23` | - |
| min-minute | 可选的最小分钟,针对 time 类型 | `Number` | `0` | 1.1.15 |
| max-minute | 可选的最大分钟,针对 time 类型 | `Number` | `59` | 1.1.15 |
+| filter | 选项过滤函数 | `(type, values) => values` | - | 2.0.0 |
| formatter | 选项格式化函数 | `(type, value) => value` | - | 1.1.14 |
| title | 顶部栏标题 | `String` | `''` | 1.0.4 |
| show-toolbar | 是否显示顶部栏 | `Boolean` | `false` | 1.0.2 |