- 物料准备:
- 问题描述:在el-popover中使用el-date-picker,触发日期选择弹窗后,如果没有更新/选择日期时,点击popover内其余区域,该日期弹窗无法自行关闭。点击popover外区域,日期弹窗可以关闭,但此时popover也被关闭。
- 具体原因没有找到,这个问题也不一定是普遍存在的,但我确实遇到了😭…猜想可能是popover和date-picker都是浮窗,在响应点击事件时可能出现异常?记录一下曲线改bug的思路😭
- 解决方法:
- 给popover内部盒子绑定点击事件,在触发点击时识别触发对象,如果不是datePicker,就强制关闭其弹窗。
<el-table-column label="操作" >
<template slot-scope="scope">
<el-button @click="$_goDetail(scope.row)" type="text" size="small">查看详情</el-button>
<el-popover placement="bottom" trigger="click">
<div class="report-popover-wrapper" @click="handlerClick($event, scope.row.flowKey)">
<el-form ref="form" :model="formModal">
<el-form-item label="选择数据时间范围">
<el-date-picker
v-model="formModal.time"
type="daterange"
range-separator="至"
:picker-options="formPickerOptions"
start-placeholder="开始日期"
value-format="yyyy-MM-dd"
@change="selectDateChange"
end-placeholder="结束日期"
:clearable="false"
:ref="`datePicker-${scope.row.key}`"
>
</el-date-picker>
</el-form-item>
</el-form>
</div>
</el-popover>
</template>
</el-table-column>
handlerClick (event, key) {
if (event.target._prevClass !== 'el-range-input') {
this.closeDatePicker(key)
}
},
closeDatePicker (flowKey) {
const picker = this.$refs['datePicker-' + key]
if (picker) {
picker.hidePicker()
}
},