首页 > 其他分享 >vant 时间范围选择器封装

vant 时间范围选择器封装

时间:2023-02-26 18:46:51浏览次数:38  
标签:picker const vant refs Number time1 time 封装 选择器

<template>   <div class="edit-time-picker">     <van-popup v-model="showPicker" round position="bottom">       <van-picker         v-show="step === 1"         ref="picker"         show-toolbar         :columns="columns"         @cancel="showPicker = false"         @confirm="step = 2"         confirm-button-text="下一步"       />       <van-picker         v-show="step === 2"         ref="secondPicker"         show-toolbar         :columns="columns"         @cancel="step = 1"         @confirm="onConfirm"         cancel-button-text="上一步"         confirm-button-text="确认"       />     </van-popup>   </div> </template>
<script> import { Picker, Popup } from 'vant';
Vue.use(Picker).use(Popup); export default {   data() {     return {       showPicker: false,       columns: [],       step: 1     }   },   created() {     this.initColumns()   },   methods: {     initColumns() {       const list = []       const Hours = []       const Minutes = []       const Seconds = []       for (let i = 0; i<=23; i++) {         Hours.push(String(i).padStart(2, '0'))       }       for (let i = 0; i<=60; i++) {         Minutes.push(String(i).padStart(2, '0'))         Seconds.push(String(i).padStart(2, '0'))       }       list.push({         values: Hours,         defaultIndex: 0       })       list.push({         values: Minutes,         defaultIndex: 0       })       list.push({         values: Seconds,         defaultIndex: 0       })       this.columns = list     },     open(times) {       this.showPicker = true       console.log('times', times)       // 设置当前选中时间 19:23:33 格式       if(times && times.length === 2) {         const initialTime = times[0].split(':')         if(initialTime.length === 3) {           this.$nextTick(() => {             this.$refs.picker && this.$refs.picker.setIndexes([Number(initialTime[0]), Number(initialTime[1]), Number(initialTime[2])])           })         }         const initialTime2 = times[1].split(':')         if(initialTime2.length === 3) {           this.$nextTick(() => {             this.$refs.secondPicker && this.$refs.secondPicker.setIndexes([Number(initialTime2[0]), Number(initialTime2[1]), Number(initialTime2[2])])           })         }       } else {         // 当前时间         const date = new Date();         let hours = String(date.getHours()).padStart(2, '0') // 时         let minutes = String(date.getMinutes()).padStart(2, '0') // 分         let seconds = String(date.getSeconds()).padStart(2, '0') //秒         this.$nextTick(() => {           this.$refs.picker && this.$refs.picker.setIndexes([Number(hours), Number(minutes), Number(seconds)])           this.$refs.secondPicker && this.$refs.secondPicker.setIndexes([Number(hours), Number(minutes), Number(seconds)])         })       }     },     // 下一步     nextStep() {       this.step = 2     },     // 如果time2大于time1 返回true 否则 返回false   compareTime(time1,time2) {       if(this.time_to_sec(time2)- this.time_to_sec(time1)>0){           return true;       }       return false;    },   //将时分秒转为时间戳    time_to_sec(time) {       if (time !== null) {           var s = "";           var hour = time.split(":")[0];           var min = time.split(":")[1];           var sec = time.split(":")[2];           s = Number(hour * 3600) + Number(min * 60) + Number(sec);           return s;       }     },     onConfirm() {       const firstValues = this.$refs.picker.getValues()       const secondValues = this.$refs.secondPicker.getValues()       const time1 = firstValues.join(':')       const time2 = secondValues.join(':')       // 判断结束时间大于开始时间       const validTime = this.compareTime(time1, time2)       if(!validTime) return this.$toast('开始时间设置不能大于结束时间')       this.showPicker = false       this.step = 1       this.$emit('confirm', [time1, time2])     }   }, } </script>
<style lang="less" scoped>   .edit-time-picker {     /deep/.van-picker__confirm {       color: #0056FF;     }   } </style> // 使用方式
<time-range-picker ref="timeRangePicker"  @confirm="confirmTimeRangePicker" /> this.$refs.timeRangePicker.open(['12:23:24', '15:12:33'])  

标签:picker,const,vant,refs,Number,time1,time,封装,选择器
From: https://www.cnblogs.com/zerofan/p/17157262.html

相关文章

  • java——spring boot集成RabbitMQ——高级特效——封装消息的元数据
         交换机和队列支持持久化。现在我们也需要给消息设计元数据DeliveryMode设置为2,表示支持消息的持久化。              ......
  • 关于iView手动清除Select选择器内容的问题
    this.$refs.refName.clearSingleSelect()以上可以看出如果要生效清楚事件就必须设置好那个clearClose按钮tooltip:以上的方法会触发当前选择器的change事件,所以在监听c......
  • 封装
    packageobject.fz;publicclassstudy{//private私有//名字,学号,性别,学习,睡觉publicStringname;privateintid;privatecharsex;publics......
  • 线程同步机制的封装
    #ifndefLOCKER_H#defineLOCKER_H#include<pthread.h>#include<semaphore.h>#include<exception>//封装信号量classsem{public:sem(){......
  • scoped属性和深度选择器
    1.scoped属性的作用:加上scoped属性的作用是---样式只对当前组件有效。对于某个组件,如果style加上scoped属性,即:给当前子组件的结构中都添加上一个data-v-xxx自定义属性,会发......
  • 封装全局的scss样式
    1.首先,在公共样式文件中把样式写好/*主题色*/$leo-theme-color:#3983bf;/*辅助色*/$leo-color-red:#ec3e50;$leo-color-orange:#ffbb0e;2.然后,在vue.config.js文件中......
  • [redis]定制封装redis的docker镜像
    前言应开发需求,定制封装redis的docker镜像,需要通过环境变量修改redis的密码。redis.confport6379requirepassREDIS_PASSWDdaemonizenoprotected-modeyesio-thre......
  • 用es6的class类单例模式封装canvas环形进度条
    项目中需要一个请求进度效果,尝试了下自己用canvas来绘制一个环形进度条,动效直接用的休眠函数加随机数来模拟。用到了es6里的class类,用单例模式的懒汉模式来实例化对象......
  • JQuery对象和类的封装
    (function($){$.foo={name:'dog',getName:function(){alert("hello:"+$.foo.name);},run:function(n){alert($.foo.name+"run"+n+"m"......
  • Vue3 + echarts 统一封装
    1.新建echartsLib.js文件,统一导入需要的组件import*asechartsfrom"echarts/core";import{SVGRenderer,CanvasRenderer}from"echarts/renderers";import......