el-date-picker 日期区间组件,选中第一个日期后,关闭日期选择器弹窗,自动填补第二个日期为一周后日期

需要解决的问题:

1.强制关闭弹窗

2.选中第一个日期后 @calendar-change 的 date参数 会保留上一次选中的数据,未清除,导致,点击选中的日期和组件绑定显示的日期显示不一致

<template> 
  <el-date-picker
    ref="datePicker"
    class="date-warp"
    type="daterange"
    v-model="state.getDate"
    range-separator="_"
    value-format="YYYY-MM-DD"
    prefix-icon="none"
    :format="'YYYY-MM-DD'"
    @calendar-change="calendarChange"
    @visible-change="visibleChange"
  />

</template>
<script lang="ts" setup>
const state = reactive<any>({
      getDate:[]
      })
const calendarChange = (val: [Date, Date | null]) => {
  const [start, end] = val;
  pickDay.value = timeFormat(start, format);
  if (datePicker.value) {
    datePicker.value.handleClose(); //强制关闭弹窗 , 使用isVisible = false 无效
  }
};

// 关闭日期弹窗后 手动设置显示一周的区间日期
const visibleChange = (visibility: boolean) => {
  if (!visibility) {
    const firstDay = new Date(pickDay.value);
    firstDay.setDate(firstDay.getDate() + 6);
    const sevenDay = firstDay;
    state.getDate = [pickDay.value, timeFormat(sevenDay, format)];
    search(state.searchForm);
  }else {
     // 显示时间弹窗前清掉数据,否则 calendarChange 里面获取的日期会有问题
    state.getDate = [];
  }
};
</script>

效果图:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以帮你实现这个需求。 首先,我们需要在el-date-picker组件添加一个插槽,用于渲染日期下拉框中每个日期下面的小圆点。我们可以在el-date-picker的template中添加以下代码: ```html <template> <div class="el-date-picker__editor-wrap"> <!-- 省略其他代码 --> <div class="el-date-picker__body-wrapper"> <div class="el-date-picker__body"> <div class="el-date-picker__header"> <!-- 省略其他代码 --> </div> <div class="el-date-picker__content"> <div class="el-date-picker__panel" v-show="panelVisible"> <div class="el-date-picker__panel-header"> <!-- 省略其他代码 --> </div> <div class="el-date-picker__panel-body"> <el-scrollbar wrap-class="el-date-picker__panel-content" noresize> <div class="el-date-picker__dates"> <table> <thead> <!-- 省略其他代码 --> </thead> <tbody> <tr v-for="(row, rowIndex) in tableRows" :key="rowIndex"> <td v-for="(column, columnIndex) in row" :key="columnIndex"> <div class="cell" :class="getCellClasses(column)"> <span @click="handleCellClick(column)">{{ column.label }}</span> <slot name="dot" :date="column"></slot> </div> </td> </tr> </tbody> </table> </div> </el-scrollbar> </div> </div> <!-- 省略其他代码 --> </div> </div> </div> </div> </template> ``` 在上面的代码中,我们在日期表格中的每个单元格中添加了一个名为“dot”的插槽,并把当前日期对象作为插槽的属性传递进去。 然后,我们可以在调用el-date-picker组件的地方,使用这个插槽来渲染每个日期下面的小圆点。例如: ```html <el-date-picker v-model="date"> <template v-slot:dot="{ date }"> <span class="dot" v-if="date.day === 1"></span> </template> </el-date-picker> ``` 在上面的代码中,我们使用了v-slot指令来绑定名为“dot”的插槽,并通过插槽的属性date获取当前日期对象。然后,我们根据日期对象的day属性(即日份)来判断是否需要渲染小圆点。 最后,我们只需要在样式中定义.dot类的样式即可: ```css .dot { display: inline-block; width: 6px; height: 6px; border-radius: 50%; background-color: blue; margin-left: 4px; } ``` 这样就完成了el-date-picker组件的重新封装,使得组件日期下拉框的每个日期下面都添加了一个蓝色小圆点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值