当前位置: 首页 > news >正文

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 = valuetimeValue.minutes = value[0] * 60 + value[1]this.$emit('timeChange', { timeValue })}}
}
</script>

2、使用

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

<Time :endHour="12" :endMinute="59" @timeChange="handleTimeChange"></Time>
http://www.lryc.cn/news/364032.html

相关文章:

  • 数据分析必备:一步步教你如何用Pandas做数据分析(17)
  • 检查用户是否在错误的目录中运行了CMake命令
  • 前端工程化工具系列(四)—— Commitlint(v19.3.0):规范化 Git 提交
  • <vs2022><问题记录>visual studio 2022使用console打印输出时,输出窗口不显示内容
  • 推荐一个免费的相亲工具
  • 写一个盲盒模拟器
  • Java使用正则表达式匹配以某个字符开始,某个字符结束
  • 什么叫硬编码?如何避免硬编码
  • RK3588 Android13自定义一个按键实现长按短按
  • 映射网络驱动器自动断开的解决方法
  • (Arkts界面示例)ets pages Demo(笔记版本0.0.1)
  • Python 动态导入库
  • 【WP|8】深入解析WordPress钩子函数
  • Java集合简略记录
  • 能获取淘宝商品简化链接的浏览器书签
  • JMeter Plugins Manager---插件安装
  • docker-compose入门级实战教程
  • MATLAB sort
  • AB测试实战
  • Java高级面试精粹:问题与解答集锦(六)
  • MySQL之数据库数据库范式学习笔记(二)
  • 【Qt】 new成功,但是没有进入到构造函数。
  • 高清多媒体接口(High Definition Multimedia Interface, HDMI)
  • Spring AI 第二讲 之 Chat Model API 第五节HuggingFace Chat
  • 【笔记】Sturctured Streaming笔记总结(Python版)
  • Python函数进阶
  • [知识点]c++ delete与delete[ ]
  • iCloud如何被高效利用?
  • 月入30000的软件测试人员,简历是什么样子的?
  • nginx官网源代码方式安装nginx并编译