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