Commit 3732707ede132f82dcf990b8f9f7dc0d481459b5
1 parent
0a5c5f41
update DatePicker
update DatePicker
Showing
1 changed file
with
53 additions
and
20 deletions
Show diff stats
src/components/date-picker/panel/date-range.vue
... | ... | @@ -43,8 +43,8 @@ |
43 | 43 | <year-table |
44 | 44 | v-ref:left-year-table |
45 | 45 | v-show="leftCurrentView === 'year'" |
46 | - :year="leftYear" | |
47 | - :date="date" | |
46 | + :year="leftTableYear" | |
47 | + :date="leftTableDate" | |
48 | 48 | selection-mode="range" |
49 | 49 | :disabled-date="disabledDate" |
50 | 50 | @on-pick="handleLeftYearPick"></year-table> |
... | ... | @@ -52,7 +52,7 @@ |
52 | 52 | v-ref:left-month-table |
53 | 53 | v-show="leftCurrentView === 'month'" |
54 | 54 | :month="leftMonth" |
55 | - :date="date" | |
55 | + :date="leftTableDate" | |
56 | 56 | selection-mode="range" |
57 | 57 | :disabled-date="disabledDate" |
58 | 58 | @on-pick="handleLeftMonthPick"></month-table> |
... | ... | @@ -93,8 +93,8 @@ |
93 | 93 | <year-table |
94 | 94 | v-ref:right-year-table |
95 | 95 | v-show="rightCurrentView === 'year'" |
96 | - :year="rightYear" | |
97 | - :date="rightDate" | |
96 | + :year="rightTableYear" | |
97 | + :date="rightTableDate" | |
98 | 98 | selection-mode="range" |
99 | 99 | :disabled-date="disabledDate" |
100 | 100 | @on-pick="handleRightYearPick"></year-table> |
... | ... | @@ -102,7 +102,7 @@ |
102 | 102 | v-ref:right-month-table |
103 | 103 | v-show="rightCurrentView === 'month'" |
104 | 104 | :month="rightMonth" |
105 | - :date="rightDate" | |
105 | + :date="rightTableDate" | |
106 | 106 | selection-mode="range" |
107 | 107 | :disabled-date="disabledDate" |
108 | 108 | @on-pick="handleRightMonthPick"></month-table> |
... | ... | @@ -142,7 +142,9 @@ |
142 | 142 | disabledDate: '', |
143 | 143 | leftCurrentView: 'date', |
144 | 144 | rightCurrentView: 'date', |
145 | - selectionMode: 'range' | |
145 | + selectionMode: 'range', | |
146 | + leftTableYear: null, | |
147 | + rightTableYear: null | |
146 | 148 | } |
147 | 149 | }, |
148 | 150 | computed: { |
... | ... | @@ -155,37 +157,57 @@ |
155 | 157 | } |
156 | 158 | ] |
157 | 159 | }, |
158 | - leftYear() { | |
160 | + leftYear () { | |
159 | 161 | return this.date.getFullYear(); |
160 | 162 | }, |
163 | + leftTableDate () { | |
164 | + if (this.leftCurrentView === 'year' || this.leftCurrentView === 'month') { | |
165 | + return new Date(this.leftTableYear); | |
166 | + } else { | |
167 | + return this.date; | |
168 | + } | |
169 | + }, | |
161 | 170 | leftYearLabel () { |
162 | - const year = this.leftYear; | |
163 | - if (!year) return ''; | |
164 | 171 | if (this.leftCurrentView === 'year') { |
172 | + const year = this.leftTableYear; | |
173 | + if (!year) return ''; | |
165 | 174 | const startYear = Math.floor(year / 10) * 10; |
166 | 175 | return `${startYear}年 - ${startYear + 9}年`; |
176 | + } else { | |
177 | + const year = this.leftCurrentView === 'month' ? this.leftTableYear : this.leftYear; | |
178 | + if (!year) return ''; | |
179 | + return `${year}年`; | |
167 | 180 | } |
168 | - return `${year}年`; | |
169 | 181 | }, |
170 | - leftMonth() { | |
182 | + leftMonth () { | |
171 | 183 | return this.date.getMonth(); |
172 | 184 | }, |
173 | - rightYear() { | |
185 | + rightYear () { | |
174 | 186 | return this.rightDate.getFullYear(); |
175 | 187 | }, |
188 | + rightTableDate () { | |
189 | + if (this.rightCurrentView === 'year' || this.rightCurrentView === 'month') { | |
190 | + return new Date(this.rightTableYear); | |
191 | + } else { | |
192 | + return this.date; | |
193 | + } | |
194 | + }, | |
176 | 195 | rightYearLabel () { |
177 | - const year = this.rightYear; | |
178 | - if (!year) return ''; | |
179 | 196 | if (this.rightCurrentView === 'year') { |
197 | + const year = this.rightTableYear; | |
198 | + if (!year) return ''; | |
180 | 199 | const startYear = Math.floor(year / 10) * 10; |
181 | 200 | return `${startYear}年 - ${startYear + 9}年`; |
201 | + } else { | |
202 | + const year = this.rightCurrentView === 'month' ? this.rightTableYear : this.rightYear; | |
203 | + if (!year) return ''; | |
204 | + return `${year}年`; | |
182 | 205 | } |
183 | - return `${year}年`; | |
184 | 206 | }, |
185 | - rightMonth() { | |
207 | + rightMonth () { | |
186 | 208 | return this.rightDate.getMonth(); |
187 | 209 | }, |
188 | - rightDate() { | |
210 | + rightDate () { | |
189 | 211 | const newDate = new Date(this.date); |
190 | 212 | const month = newDate.getMonth(); |
191 | 213 | newDate.setDate(1); |
... | ... | @@ -248,8 +270,7 @@ |
248 | 270 | this.handleYearPick(year, close, 'right'); |
249 | 271 | }, |
250 | 272 | handleYearPick (year, close, direction) { |
251 | - this.date.setFullYear(year); | |
252 | - this.resetDate(); | |
273 | + this[`${direction}TableYear`] = year; | |
253 | 274 | if (!close) return; |
254 | 275 | |
255 | 276 | this[`${direction}CurrentView`] = 'month'; |
... | ... | @@ -261,12 +282,24 @@ |
261 | 282 | this.handleMonthPick(month, 'right'); |
262 | 283 | }, |
263 | 284 | handleMonthPick (month, direction) { |
285 | + let year = this[`${direction}TableYear`]; | |
286 | + if (direction === 'right') { | |
287 | + if (month === 0) { | |
288 | + month = 11; | |
289 | + year--; | |
290 | + } else { | |
291 | + month--; | |
292 | + } | |
293 | + } | |
294 | + | |
295 | + this.date.setYear(year); | |
264 | 296 | this.date.setMonth(month); |
265 | 297 | this[`${direction}CurrentView`] = 'date'; |
266 | 298 | this.resetDate(); |
267 | 299 | }, |
268 | 300 | showYearPicker (direction) { |
269 | 301 | this[`${direction}CurrentView`] = 'year'; |
302 | + this[`${direction}TableYear`] = this[`${direction}Year`]; | |
270 | 303 | }, |
271 | 304 | showMonthPicker (direction) { |
272 | 305 | this[`${direction}CurrentView`] = 'month'; | ... | ... |