vue中实现一个时间选择器的级联框,第一层小时,第二层分钟

最近在做一个考勤系统时,新增班次的时候需要设置打卡时段,类似如下效果:
在这里插入图片描述

1、封装自定义组件Time.vue

接收参数有endHour(范围结束的小时数)、endMinute(最后一小时结束的分钟数)等,根据具体需求变动

<template>
  <div>
    <el-cascader :options="options" v-model="selectedTime" @change="handleTimeChange" placeholder="请选择时间"></el-cascader>
  </div>
</template>

<script>
export default {
  props: {
    endHour: Number,
    endMinute: Number
  },
  data () {
    return {
      selectedTime: [],
      options: []
    }
  },
  watch: {
    selectedTime () {
      let minutes = this.selectedTime ? this.selectedTime[0] * 60 + this.selectedTime[1] : ''
      this.$emit('input', minutes)
    },
  },
  created() {
    this.generateTimeOptions()
  },
  methods: {
    generateTimeOptions () {
      this.options = []
      const startHour = 0; // 范围开始的小时数
      const endHour = this.endHour; // 范围结束的小时数
      const startMinutes = 1; // 范围开始的分钟数
      const interval = 1; // 小时的间隔
      const minutesInterval = 1; // 分钟的间隔
      for (let hour = startHour; hour <= endHour; hour += interval) {
        const hourValue = hour;
        const hourLabel = `${hourValue}小时`;
        const hourOption = {
          value: hourValue,
          label: hourLabel,
          children: []
        };
        let endMinute;
        if (hour === this.endHour) {
          // 如果是最后一个小时,设置特定范围的分钟数
          endMinute = this.endMinute; // 设置最后一个小时的结束分钟数
        } else {
          endMinute = 59; // 其他小时的结束分钟数为30
        }
        for (let minutes = hour === 0 ? startMinutes : 0; minutes <= endMinute; minutes += minutesInterval) {
          const minutesValue = minutes;
          const minutesLabel = `${minutesValue}分钟`;
          const minutesOption = {
            value: minutesValue,
            label: minutesLabel
          };
          hourOption.children.push(minutesOption);
        }
        this.options.push(hourOption);
      }
    },
  
    handleTimeChange (value) {
      // 处理选中时间的逻辑
      let timeValue = {}
      timeValue.orginValue = value
      timeValue.minutes = value[0] * 60 + value[1]
      this.$emit('timeChange', { timeValue })
    }
  }
}
</script>

2、使用

引入注册组件后使用,传入动态参数,监听timeChange方法可以拿到当前选择的时间

<Time :endHour="12" :endMinute="59" @timeChange="handleTimeChange"></Time>
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
非常感谢你的提问!我可以为你解答有关Vue三层级联选择器的问题。 在Vue,三层级联选择器可以通过嵌套多个级联选择器实现。首先,你需要确定每个级联选择器的数据源,然后绑定它们的值,以便在选择器进行选择。然后,你需要为每个级联选择器编写一个绑定到选择值的监听器,以便在选择器的值发生变化时动态更新下一个级联选择器的数据源。最后,你需要为最后一个级联选择器绑定一个监听器,以便在选择所有值后执行某种特定操作,例如向服务器发出请求或触发页面跳转。 这是一个简单的三层级联选择器的代码示例: ```HTML <template> <div> <select v-model="firstLevel" @change="updateSecondLevel"> <option v-for="(item, index) in firstLevelOptions" :key="index">{{ item }}</option> </select> <select v-model="secondLevel" @change="updateThirdLevel"> <option v-for="(item, index) in secondLevelOptions" :key="index">{{ item }}</option> </select> <select v-model="thirdLevel" @change="doSomething"> <option v-for="(item, index) in thirdLevelOptions" :key="index">{{ item }}</option> </select> </div> </template> <script> export default { data() { return { firstLevel: '', secondLevel: '', thirdLevel: '', firstLevelOptions: ['Option 1', 'Option 2', 'Option 3'], secondLevelOptions: [], thirdLevelOptions: [] } }, methods: { updateSecondLevel() { // 根据第一级选择器的选择值,在下一个级联选择器动态更新数据源 // ... }, updateThirdLevel() { // 根据第二级选择器的选择值,在下一个级联选择器动态更新数据源 // ... }, doSomething() { // 在选择完所有值后执行某种操作 // ... } } } </script> ``` 希望这个简单示例可以对你有所帮助!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值