ElemeFE / element

A Vue.js 2.0 UI Toolkit for Web
https://element.eleme.io/
MIT License
54.13k stars 14.63k forks source link

[Bug Report] el-date-picker组件,设置type="datetimerange",且没有默认值,可能存在严重的交互问题 #18006

Closed lidong6392 closed 3 years ago

lidong6392 commented 5 years ago

Element UI version

2.12.0

OS/Browsers version

mac OS / Google Chrome

Vue version

2.6.10

Reproduction Link

https://codepen.io/kaola-fed/pen/LYYBYdP?&editable=true

Steps to reproduce

  1. 先随便选中一个日期,此操作会进入date-table的handleClick,并且会设置this.rangeState.selecting = true;
  2. 击页面空白处,此操作会进入date-range的resetView,但是没有重置date-table的rangeState.selecting,rangeState.selecting还是true;
  3. 再次打开时间控件进行操作,随便选一个你想要的开始时间,此时问题出现了,控件会直接进入赋值逻辑,并且因为没有开始时间会进入newDate >= this.minDate的赋值逻辑,把值直接赋给了结束时间。

What is Expected?

再次打开控件,选中第一个时间时不要直接进入赋值逻辑,而是暂存为开始时间,点击第二个时间才进入赋值逻辑。这样才符合用户的期望:先选一个开始时间,再选一个结束时间,操作结束。

What is actually happening?

组件虽然进行了一些界面上的重置工作,但是rangeState.selecting仍是true,此次操作直接会进入赋值逻辑: ”if (this.selectionMode === 'range') { if (!this.rangeState.selecting) { this.$emit('pick', {minDate: newDate, maxDate: null}); this.rangeState.selecting = true; } else { if (newDate >= this.minDate) { this.$emit('pick', {minDate: this.minDate, maxDate: newDate}); } else { this.$emit('pick', {minDate: newDate, maxDate: this.minDate}); } this.rangeState.selecting = false; } } “ 并且因为没有开始时间会进入newDate >= this.minDate的赋值逻辑,把值直接赋给了结束时间。

weiweidong1993 commented 5 years ago

hao

huangtq commented 4 years ago

后续版本应该会修复这个问题,如果项目中不能随便升版本的话,下面的方法可以暂时解决这个问题

<el-date-picker v-model="date" @blur="datePickerBlur" />

datePickerBlur(vm) () { if (!this.date && vm&& vm.picker) { vm.picker.rangeState.startDate = ''; vm.picker.rangeState.endDate = ''; vm.picker.rangeState.selecting = false; } }

stale[bot] commented 3 years ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.