Vant组件库+Vue3,时间选择组件,开始时间结束时间交互

964 阅读1分钟

         上次分享了element plus 的时间选择组件的交互,这次分享一下Vant组件库的做法。需求是差不多的:1.选择的结束时间要在开始时间之后,用户不选择开始时间之前不能让他选择结束时间。废话不多说,上代码:

        1.timeLimit.js文件

        (这个需求在项目中有很多地方用到,所以时间格式这个js就单独提出来一个文件放在utils中)

export const checkTime = (val) => {
    let myDate = null
    if (val) {
        myDate = new Date(val)
    } else {
        myDate = new Date()
    }
    const year = myDate.getFullYear()
    const month = myDate.getMonth()
    const date = myDate.getDate()
    const hour = myDate.getHours()
    const minutes = myDate.getMinutes()
    return {
        year,
        month,
        date,
        hour,
        minutes
    }
};

2.HTML:

 <van-popup v-model:show="showStartTime"
                       position="bottom">
              <van-datetime-picker v-model="currentDate"
                                   type="datetime"
                                   title="选择年月日"
                                   @confirm="onStartConfirm"
                                   @cancel="showStartTime = false" />
            </van-popup>
            <van-field v-model="form.endTime"
                       name="结束时间"
                       label="结束时间"
                       @click="clickEndTime "
                       placeholder="请选择结束时间">
              <template #right-icon>
                <van-image :src="require('@/assets/images/dateTime.png')"></van-image>
              </template>
            </van-field>
            <van-popup v-model:show="showEndTime"
                       position="bottom">
              <van-datetime-picker v-model="currentDate"
                                   type="datetime"
                                   title="选择年月日"
                                   @confirm="onEndConfirm"
                                   @cancel="showEndTime = false"
                                   :min-date="minDateE" />
            </van-popup>

3.js代码

//引用timeLimit.js文件
import { checkTime } from '@/utils/timeLimit'

//参数定义
const showStartTime = ref(false)
const showEndTime = ref(false)
const minDateE = ref() // 结束时间最小值
const currentDate = ref(new Date())
//点击完成开始时间时触发的事件
const onStartConfirm = (value) => {
  form.value.startTime = moment(value).format('yyyy-MM-DD HH:mm:ss')
  showStartTime.value = false
  // 结束时间最小值
  let timeObj = checkTime(form.value.startTime)
  minDateE.value = new Date(
    timeObj.year,
    timeObj.month,
    timeObj.date,
    timeObj.hour,
    timeObj.minutes
  )
}
//点击完成结束时间时触发的事件
const onEndConfirm = (value) => {
  form.value.endTime = moment(value).format('yyyy-MM-DD HH:mm:ss')
  showEndTime.value = false
}
// 点击结束时间选框
const clickEndTime = () => {
//没有开始时间不能选结束时间
  if (!form.value.startTime) {
    toast('请先选择开始时间')
    return
  }
  showEndTime.value = true
}

       效果图:

选择的结束时间在开始时间之后

         不选择开始时间之前不能选择结束时间