Commit 46726afdf4c11218e254148358b26a39b23b1ed0
1 parent
bcf09be7
Fix panels reset on blur and
Showing
3 changed files
with
23 additions
and
13 deletions
Show diff stats
src/components/date-picker/panel/Date/date-range.vue
... | ... | @@ -198,12 +198,6 @@ |
198 | 198 | this.leftPanelDate = leftPanelDate; |
199 | 199 | const rightPanelDate = new Date(leftPanelDate.getFullYear(), leftPanelDate.getMonth() + 1, leftPanelDate.getDate()); |
200 | 200 | this.rightPanelDate = this.splitPanels ? new Date(Math.max(this.dates[1], rightPanelDate)) : rightPanelDate; |
201 | - | |
202 | - // reset stuff | |
203 | - this.currentView = this.selectionMode || 'range'; | |
204 | - this.leftPickerTable = `${this.currentView}-table`; | |
205 | - this.rightPickerTable = `${this.currentView}-table`; | |
206 | - | |
207 | 201 | }, |
208 | 202 | currentView(currentView){ |
209 | 203 | const leftMonth = this.leftPanelDate.getMonth(); |
... | ... | @@ -225,6 +219,11 @@ |
225 | 219 | } |
226 | 220 | }, |
227 | 221 | methods: { |
222 | + reset(){ | |
223 | + this.currentView = this.selectionMode; | |
224 | + this.leftPickerTable = `${this.currentView}-table`; | |
225 | + this.rightPickerTable = `${this.currentView}-table`; | |
226 | + }, | |
228 | 227 | panelLabelConfig (direction) { |
229 | 228 | const locale = this.t('i.locale'); |
230 | 229 | const datePanelLabel = this.t('i.datepicker.datePanelLabel'); | ... | ... |
src/components/date-picker/panel/Date/date.vue
... | ... | @@ -139,17 +139,21 @@ |
139 | 139 | value (newVal) { |
140 | 140 | this.dates = newVal; |
141 | 141 | if (JSON.stringify(newVal) === '[null]') this.panelDate = this.startDate || new Date(); |
142 | - | |
143 | - // reset stuff | |
144 | - this.currentView = this.selectionMode; | |
145 | - this.pickerTable = this.getTableType(this.currentView); | |
146 | 142 | }, |
147 | 143 | currentView (currentView) { |
148 | 144 | this.$emit('on-selection-mode-change', currentView); |
149 | 145 | this.pickertable = this.getTableType(currentView); |
146 | + }, | |
147 | + selectionMode(type){ | |
148 | + this.currentView = type; | |
149 | + this.pickerTable = this.getTableType(type); | |
150 | 150 | } |
151 | 151 | }, |
152 | 152 | methods: { |
153 | + reset(){ | |
154 | + this.currentView = this.selectionMode; | |
155 | + this.pickerTable = this.getTableType(this.currentView); | |
156 | + }, | |
153 | 157 | changeYear(dir){ |
154 | 158 | if (this.selectionMode === 'year'){ |
155 | 159 | this.panelDate = new Date(this.panelDate.getFullYear() + dir * 10, 0, 1); | ... | ... |
src/components/date-picker/picker.vue
... | ... | @@ -35,6 +35,7 @@ |
35 | 35 | <div> |
36 | 36 | <component |
37 | 37 | :is="panel" |
38 | + ref="pickerPanel" | |
38 | 39 | :visible="visible" |
39 | 40 | :showTime="type === 'datetime' || type === 'datetimerange'" |
40 | 41 | :confirm="isConfirm" |
... | ... | @@ -212,10 +213,9 @@ |
212 | 213 | }, |
213 | 214 | methods: { |
214 | 215 | onSelectionModeChange(type){ |
215 | - | |
216 | 216 | if (type.match(/^date/)) type = 'date'; |
217 | - this.selectionMode = type; | |
218 | - return type; | |
217 | + this.selectionMode = oneOf(type, ['year', 'month', 'date', 'time']) && type; | |
218 | + return this.selectionMode; | |
219 | 219 | }, |
220 | 220 | // 开启 transfer 时,点击 Drop 即会关闭,这里不让其关闭 |
221 | 221 | handleTransferClick () { |
... | ... | @@ -237,7 +237,12 @@ |
237 | 237 | }, |
238 | 238 | handleBlur () { |
239 | 239 | this.visible = false; |
240 | + this.onSelectionModeChange(this.type); | |
240 | 241 | this.internalValue = this.internalValue.slice(); // trigger panel watchers to reset views |
242 | + this.reset(); | |
243 | + }, | |
244 | + reset(){ | |
245 | + this.$refs.pickerPanel.reset && this.$refs.pickerPanel.reset(); | |
241 | 246 | }, |
242 | 247 | handleInputChange (event) { |
243 | 248 | const isArrayValue = this.type.includes('range') || this.multiple; |
... | ... | @@ -280,6 +285,7 @@ |
280 | 285 | this.$emit('on-clear'); |
281 | 286 | this.dispatch('FormItem', 'on-form-change', ''); |
282 | 287 | this.emitChange(); |
288 | + this.reset(); | |
283 | 289 | |
284 | 290 | setTimeout( |
285 | 291 | () => this.onSelectionModeChange(this.type), |
... | ... | @@ -354,6 +360,7 @@ |
354 | 360 | onPickSuccess(){ |
355 | 361 | this.visible = false; |
356 | 362 | this.$emit('on-ok'); |
363 | + this.reset(); | |
357 | 364 | }, |
358 | 365 | }, |
359 | 366 | watch: { | ... | ... |