From af713093ab1c5cea2c0794bc3c931f6f6834b880 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=81=E7=81=8F?= Date: Tue, 27 Dec 2016 17:41:35 +0800 Subject: [PATCH] update TimePicker update TimePicker --- .../date-picker/base/time-spinner.vue | 29 ++++++++++++++++--- src/components/date-picker/panel/time.vue | 1 - src/components/date-picker/picker.vue | 26 ++++++++++++++++- src/components/date-picker/util.js | 2 +- src/utils/assist.js | 2 +- test/routers/date.vue | 12 ++++++-- 6 files changed, 62 insertions(+), 10 deletions(-) diff --git a/src/components/date-picker/base/time-spinner.vue b/src/components/date-picker/base/time-spinner.vue index c6ab25a1..c886d8b5 100644 --- a/src/components/date-picker/base/time-spinner.vue +++ b/src/components/date-picker/base/time-spinner.vue @@ -45,7 +45,8 @@ }, data () { return { - prefixCls: prefixCls + prefixCls: prefixCls, + compiled: false }; }, computed: { @@ -155,11 +156,16 @@ data[type] = cell.text; this.$emit('on-change', data); - const from = this.$els[type].scrollTop; - const to = 24 * this.getScrollIndex(type, cell.text); - scrollTop(this.$els[type], from, to, 500); +// const from = this.$els[type].scrollTop; +// const to = 24 * this.getScrollIndex(type, cell.text); +// scrollTop(this.$els[type], from, to, 500); } }, + scroll (type, index) { + const from = this.$els[type].scrollTop; + const to = 24 * this.getScrollIndex(type, index); + scrollTop(this.$els[type], from, to, 500); + }, getScrollIndex (type, index) { const Type = firstUpperCase(type); const disabled = this[`disabled${Type}`]; @@ -181,8 +187,23 @@ }); } }, + watch: { + hours (val) { + if (!this.compiled) return; + this.scroll('hours', val); + }, + minutes (val) { + if (!this.compiled) return; + this.scroll('minutes', val); + }, + seconds (val) { + if (!this.compiled) return; + this.scroll('seconds', val); + } + }, compiled () { this.updateScroll(); + this.$nextTick(() => this.compiled = true); } }; \ No newline at end of file diff --git a/src/components/date-picker/panel/time.vue b/src/components/date-picker/panel/time.vue index 1bfd0292..a945408e 100644 --- a/src/components/date-picker/panel/time.vue +++ b/src/components/date-picker/panel/time.vue @@ -75,7 +75,6 @@ this.hours = ''; this.minutes = ''; this.seconds = ''; - this.$emit('on-pick', ''); }, handleChange (date, emit = true) { if (date.hours !== undefined) { diff --git a/src/components/date-picker/picker.vue b/src/components/date-picker/picker.vue index 50bb0aaf..6e5a6a86 100644 --- a/src/components/date-picker/picker.vue +++ b/src/components/date-picker/picker.vue @@ -30,7 +30,7 @@ import Drop from '../../components/select/dropdown.vue'; import clickoutside from '../../directives/clickoutside'; import { oneOf } from '../../utils/assist'; - import { formatDate, parseDate, initTimeDate } from './util'; + import { formatDate, parseDate } from './util'; const prefixCls = 'ivu-date-picker'; @@ -294,6 +294,30 @@ } correctDate = parser(correctValue, format); + } else if (type === 'time') { + const parsedDate = parseDate(value, format); + + if (parsedDate instanceof Date) { + if (this.disabledHours.length || this.disabledMinutes.length || this.disabledSeconds.length) { + const hours = parsedDate.getHours(); + const minutes = parsedDate.getMinutes(); + const seconds = parsedDate.getSeconds(); + + if ((this.disabledHours.length && this.disabledHours.indexOf(hours) > -1) || + (this.disabledMinutes.length && this.disabledMinutes.indexOf(minutes) > -1) || + (this.disabledSeconds.length && this.disabledSeconds.indexOf(seconds) > -1)) { + correctValue = oldValue; + } else { + correctValue = formatDate(parsedDate, format); + } + } else { + correctValue = formatDate(parsedDate, format); + } + } else { + correctValue = oldValue; + } + + correctDate = parseDate(correctValue, format); } else { const parsedDate = parseDate(value, format); diff --git a/src/components/date-picker/util.js b/src/components/date-picker/util.js index 84b1fe93..0edb09f8 100644 --- a/src/components/date-picker/util.js +++ b/src/components/date-picker/util.js @@ -76,7 +76,7 @@ export const nextMonth = function(src) { return new Date(src.getTime()); }; -export const initTimeDate = function (time) { +export const initTimeDate = function () { const date = new Date(); date.setHours(0); date.setMinutes(0); diff --git a/src/utils/assist.js b/src/utils/assist.js index 34dcdc0a..04456cea 100644 --- a/src/utils/assist.js +++ b/src/utils/assist.js @@ -144,7 +144,7 @@ export function scrollTop(el, from = 0, to, duration = 500) { function (callback) { return window.setTimeout(callback, 1000/60); } - ) + ); } const difference = Math.abs(from - to); const step = Math.ceil(difference / duration * 50); diff --git a/test/routers/date.vue b/test/routers/date.vue index f66ef313..438a8b9e 100644 --- a/test/routers/date.vue +++ b/test/routers/date.vue @@ -6,7 +6,7 @@