Commit 36628acaab7b1c14ddbc540a89f0b943e92eb595
1 parent
c1abaed9
update TimePicker
update TimePicker
Showing
3 changed files
with
85 additions
and
8 deletions
Show diff stats
src/components/date-picker/base/time-spinner.vue
... | ... | @@ -2,21 +2,29 @@ |
2 | 2 | <div :class="classes"> |
3 | 3 | <div :class="[prefixCls+ '-wrapper']"> |
4 | 4 | <ul :class="[prefixCls + '-list']"> |
5 | - <li v-for="item in hoursList"></li> | |
5 | + <li :class="getCellCls(item)" v-for="item in hoursList" v-show="!item.hide">{{ item.text }}</li> | |
6 | 6 | </ul> |
7 | 7 | </div> |
8 | 8 | <div :class="[prefixCls+ '-wrapper']"> |
9 | - <li v-for="item in minutesList"></li> | |
9 | + <ul :class="[prefixCls + '-list']"> | |
10 | + <li :class="getCellCls(item)" v-for="item in minutesList" v-show="!item.hide">{{ item.text }}</li> | |
11 | + </ul> | |
10 | 12 | </div> |
11 | 13 | <div :class="[prefixCls+ '-wrapper']" v-show="showSeconds"> |
12 | - <li v-for="item in secondsList"></li> | |
14 | + <ul :class="[prefixCls + '-list']"> | |
15 | + <li :class="getCellCls(item)" v-for="item in secondsList" v-show="!item.hide">{{ item.text }}</li> | |
16 | + </ul> | |
13 | 17 | </div> |
14 | 18 | </div> |
15 | 19 | </template> |
16 | 20 | <script> |
21 | + import Options from '../time-mixins'; | |
22 | + import { deepCopy } from '../../../utils/assist'; | |
23 | + | |
17 | 24 | const prefixCls = 'ivu-time-picker-cells'; |
18 | 25 | |
19 | 26 | export default { |
27 | + mixins: [Options], | |
20 | 28 | props: { |
21 | 29 | hours: { |
22 | 30 | type: Number, |
... | ... | @@ -50,17 +58,82 @@ |
50 | 58 | ]; |
51 | 59 | }, |
52 | 60 | hoursList () { |
53 | - return []; | |
61 | + let hours = []; | |
62 | + const hour_tmpl = { | |
63 | + text: '', | |
64 | + selected: false, | |
65 | + disabled: false, | |
66 | + hide: false | |
67 | + }; | |
68 | + | |
69 | + for (let i = 0; i < 24; i++) { | |
70 | + const hour = deepCopy(hour_tmpl); | |
71 | + hour.text = i; | |
72 | + | |
73 | + if (this.disabledHours && this.disabledHours.indexOf(i) > -1) { | |
74 | + hour.disabled = true; | |
75 | + if (this.hideDisabledOptions) hour.hide = true; | |
76 | + } | |
77 | + hours.push(hour); | |
78 | + } | |
79 | + | |
80 | + return hours; | |
54 | 81 | }, |
55 | 82 | minutesList () { |
56 | - return []; | |
83 | + let minutes = []; | |
84 | + const minute_tmpl = { | |
85 | + text: '', | |
86 | + selected: false, | |
87 | + disabled: false, | |
88 | + hide: false | |
89 | + }; | |
90 | + | |
91 | + for (let i = 0; i < 60; i++) { | |
92 | + const minute = deepCopy(minute_tmpl); | |
93 | + minute.text = i; | |
94 | + | |
95 | + if (this.disabledMinutes && this.disabledMinutes.indexOf(i) > -1) { | |
96 | + minute.disabled = true; | |
97 | + if (this.hideDisabledOptions) minute.hide = true; | |
98 | + } | |
99 | + minutes.push(minute); | |
100 | + } | |
101 | + | |
102 | + return minutes; | |
57 | 103 | }, |
58 | 104 | secondsList () { |
59 | - return []; | |
105 | + let seconds = []; | |
106 | + const second_tmpl = { | |
107 | + text: '', | |
108 | + selected: false, | |
109 | + disabled: false, | |
110 | + hide: false | |
111 | + }; | |
112 | + | |
113 | + for (let i = 0; i < 60; i++) { | |
114 | + const second = deepCopy(second_tmpl); | |
115 | + second.text = i; | |
116 | + | |
117 | + if (this.disabledSeconds && this.disabledSeconds.indexOf(i) > -1) { | |
118 | + second.disabled = true; | |
119 | + if (this.hideDisabledOptions) second.hide = true; | |
120 | + } | |
121 | + seconds.push(second); | |
122 | + } | |
123 | + | |
124 | + return seconds; | |
60 | 125 | } |
61 | 126 | }, |
62 | 127 | methods: { |
63 | - | |
128 | + getCellCls (cell) { | |
129 | + return [ | |
130 | + `${prefixCls}-cell`, | |
131 | + { | |
132 | + [`${prefixCls}-cell-selected`]: cell.selected, | |
133 | + [`${prefixCls}-cell-disabled`]: cell.disabled | |
134 | + } | |
135 | + ]; | |
136 | + } | |
64 | 137 | } |
65 | 138 | }; |
66 | 139 | </script> |
67 | 140 | \ No newline at end of file | ... | ... |
src/components/date-picker/panel/time.vue
... | ... | @@ -7,6 +7,10 @@ |
7 | 7 | :hours="hours" |
8 | 8 | :minutes="minutes" |
9 | 9 | :seconds="seconds" |
10 | + :disabled-hours="disabledHours" | |
11 | + :disabled-minutes="disabledMinutes" | |
12 | + :disabled-seconds="disabledSeconds" | |
13 | + :hide-disabled-options="hideDisabledOptions" | |
10 | 14 | @on-change="handleChange" |
11 | 15 | @on-pick-click="handlePickClick"></time-spinner> |
12 | 16 | </div> | ... | ... |
test/routers/date.vue
... | ... | @@ -7,7 +7,7 @@ |
7 | 7 | <date-picker type="daterange" placement="bottom-end" placeholder="选择日期" style="width: 200px"></date-picker> |
8 | 8 | </i-col> |
9 | 9 | <i-col span="12"> |
10 | - <time-picker placeholder="选择时间" :disabled-hours="[1,2]" style="width: 200px"></time-picker> | |
10 | + <time-picker placeholder="选择时间" :hide-disabled-options="false" :disabled-hours="[1,2]" style="width: 200px"></time-picker> | |
11 | 11 | </i-col> |
12 | 12 | </row> |
13 | 13 | </template> | ... | ... |