Commit af713093ab1c5cea2c0794bc3c931f6f6834b880

Authored by 梁灏
1 parent 2dbbd7de

update TimePicker

update TimePicker
src/components/date-picker/base/time-spinner.vue
@@ -45,7 +45,8 @@ @@ -45,7 +45,8 @@
45 }, 45 },
46 data () { 46 data () {
47 return { 47 return {
48 - prefixCls: prefixCls 48 + prefixCls: prefixCls,
  49 + compiled: false
49 }; 50 };
50 }, 51 },
51 computed: { 52 computed: {
@@ -155,11 +156,16 @@ @@ -155,11 +156,16 @@
155 data[type] = cell.text; 156 data[type] = cell.text;
156 this.$emit('on-change', data); 157 this.$emit('on-change', data);
157 158
158 - const from = this.$els[type].scrollTop;  
159 - const to = 24 * this.getScrollIndex(type, cell.text);  
160 - scrollTop(this.$els[type], from, to, 500); 159 +// const from = this.$els[type].scrollTop;
  160 +// const to = 24 * this.getScrollIndex(type, cell.text);
  161 +// scrollTop(this.$els[type], from, to, 500);
161 } 162 }
162 }, 163 },
  164 + scroll (type, index) {
  165 + const from = this.$els[type].scrollTop;
  166 + const to = 24 * this.getScrollIndex(type, index);
  167 + scrollTop(this.$els[type], from, to, 500);
  168 + },
163 getScrollIndex (type, index) { 169 getScrollIndex (type, index) {
164 const Type = firstUpperCase(type); 170 const Type = firstUpperCase(type);
165 const disabled = this[`disabled${Type}`]; 171 const disabled = this[`disabled${Type}`];
@@ -181,8 +187,23 @@ @@ -181,8 +187,23 @@
181 }); 187 });
182 } 188 }
183 }, 189 },
  190 + watch: {
  191 + hours (val) {
  192 + if (!this.compiled) return;
  193 + this.scroll('hours', val);
  194 + },
  195 + minutes (val) {
  196 + if (!this.compiled) return;
  197 + this.scroll('minutes', val);
  198 + },
  199 + seconds (val) {
  200 + if (!this.compiled) return;
  201 + this.scroll('seconds', val);
  202 + }
  203 + },
184 compiled () { 204 compiled () {
185 this.updateScroll(); 205 this.updateScroll();
  206 + this.$nextTick(() => this.compiled = true);
186 } 207 }
187 }; 208 };
188 </script> 209 </script>
189 \ No newline at end of file 210 \ No newline at end of file
src/components/date-picker/panel/time.vue
@@ -75,7 +75,6 @@ @@ -75,7 +75,6 @@
75 this.hours = ''; 75 this.hours = '';
76 this.minutes = ''; 76 this.minutes = '';
77 this.seconds = ''; 77 this.seconds = '';
78 - this.$emit('on-pick', '');  
79 }, 78 },
80 handleChange (date, emit = true) { 79 handleChange (date, emit = true) {
81 if (date.hours !== undefined) { 80 if (date.hours !== undefined) {
src/components/date-picker/picker.vue
@@ -30,7 +30,7 @@ @@ -30,7 +30,7 @@
30 import Drop from '../../components/select/dropdown.vue'; 30 import Drop from '../../components/select/dropdown.vue';
31 import clickoutside from '../../directives/clickoutside'; 31 import clickoutside from '../../directives/clickoutside';
32 import { oneOf } from '../../utils/assist'; 32 import { oneOf } from '../../utils/assist';
33 - import { formatDate, parseDate, initTimeDate } from './util'; 33 + import { formatDate, parseDate } from './util';
34 34
35 const prefixCls = 'ivu-date-picker'; 35 const prefixCls = 'ivu-date-picker';
36 36
@@ -294,6 +294,30 @@ @@ -294,6 +294,30 @@
294 } 294 }
295 295
296 correctDate = parser(correctValue, format); 296 correctDate = parser(correctValue, format);
  297 + } else if (type === 'time') {
  298 + const parsedDate = parseDate(value, format);
  299 +
  300 + if (parsedDate instanceof Date) {
  301 + if (this.disabledHours.length || this.disabledMinutes.length || this.disabledSeconds.length) {
  302 + const hours = parsedDate.getHours();
  303 + const minutes = parsedDate.getMinutes();
  304 + const seconds = parsedDate.getSeconds();
  305 +
  306 + if ((this.disabledHours.length && this.disabledHours.indexOf(hours) > -1) ||
  307 + (this.disabledMinutes.length && this.disabledMinutes.indexOf(minutes) > -1) ||
  308 + (this.disabledSeconds.length && this.disabledSeconds.indexOf(seconds) > -1)) {
  309 + correctValue = oldValue;
  310 + } else {
  311 + correctValue = formatDate(parsedDate, format);
  312 + }
  313 + } else {
  314 + correctValue = formatDate(parsedDate, format);
  315 + }
  316 + } else {
  317 + correctValue = oldValue;
  318 + }
  319 +
  320 + correctDate = parseDate(correctValue, format);
297 } else { 321 } else {
298 const parsedDate = parseDate(value, format); 322 const parsedDate = parseDate(value, format);
299 323
src/components/date-picker/util.js
@@ -76,7 +76,7 @@ export const nextMonth = function(src) { @@ -76,7 +76,7 @@ export const nextMonth = function(src) {
76 return new Date(src.getTime()); 76 return new Date(src.getTime());
77 }; 77 };
78 78
79 -export const initTimeDate = function (time) { 79 +export const initTimeDate = function () {
80 const date = new Date(); 80 const date = new Date();
81 date.setHours(0); 81 date.setHours(0);
82 date.setMinutes(0); 82 date.setMinutes(0);
src/utils/assist.js
@@ -144,7 +144,7 @@ export function scrollTop(el, from = 0, to, duration = 500) { @@ -144,7 +144,7 @@ export function scrollTop(el, from = 0, to, duration = 500) {
144 function (callback) { 144 function (callback) {
145 return window.setTimeout(callback, 1000/60); 145 return window.setTimeout(callback, 1000/60);
146 } 146 }
147 - ) 147 + );
148 } 148 }
149 const difference = Math.abs(from - to); 149 const difference = Math.abs(from - to);
150 const step = Math.ceil(difference / duration * 50); 150 const step = Math.ceil(difference / duration * 50);
test/routers/date.vue
@@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
6 <template> 6 <template>
7 <row> 7 <row>
8 <i-col span="12"> 8 <i-col span="12">
9 - <date-picker type="date" placeholder="选择日期" style="width: 200px"></date-picker> 9 + <date-picker type="date" placeholder="选择日期" style="width: 200px" @on-ok="ok" confirm @on-clear="clear"></date-picker>
10 </i-col> 10 </i-col>
11 <i-col span="12"> 11 <i-col span="12">
12 <date-picker type="daterange" placement="bottom-end" placeholder="选择日期" style="width: 200px"></date-picker> 12 <date-picker type="daterange" placement="bottom-end" placeholder="选择日期" style="width: 200px"></date-picker>
@@ -20,6 +20,8 @@ @@ -20,6 +20,8 @@
20 :hide-disabled-options="false" 20 :hide-disabled-options="false"
21 :disabled-hours="[1,2,5,10,11]" 21 :disabled-hours="[1,2,5,10,11]"
22 @on-change="c" 22 @on-change="c"
  23 + @on-ok="ok"
  24 + @on-clear="clear"
23 style="width: 168px"></time-picker> 25 style="width: 168px"></time-picker>
24 </i-col> 26 </i-col>
25 </row> 27 </row>
@@ -34,8 +36,14 @@ @@ -34,8 +36,14 @@
34 }, 36 },
35 methods: { 37 methods: {
36 c (s) { 38 c (s) {
37 - console.log(s) 39 + console.log(1,s);
38 this.value = s; 40 this.value = s;
  41 + },
  42 + ok () {
  43 + console.log('ok');
  44 + },
  45 + clear () {
  46 + console.log('clear');
39 } 47 }
40 } 48 }
41 } 49 }