我的编程空间,编程开发者的网络收藏夹
学习永远不晚

vant4封装日期段选择器的实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

vant4封装日期段选择器的实现

前言

偶然间在群里看到一个小伙伴的需求,需要使用vant 封装时间段选择器,看到这个需求后,自己也想实现一下,说干就干!仓库地址

TimeRangePickerTypes.ts

import { ExtractPropTypes, PropType } from 'vue'
import dayjs from 'dayjs'
export const props = {
    
    visible: {
        type: Boolean,
        default: false
    },
    
    times: {
        type: Array as PropType<string[]>,
        default: () => [dayjs().format('HH-mm'), dayjs().format('HH-mm')]
    },
    
    apart: {
        type: String,
        default: '~'
    },
    
    maxTime: {
        type: Number,
        default: 23
    },
    
    minTime: {
        type: Number,
        default: 1
    },
    
    maxMinute: {
        type: Number,
        default: 59
    },
    
    minMinute: {
        type: Number,
        default: 1
    }
}

export type Props = ExtractPropTypes<typeof props>

export interface timeResult {
    
    startTime: string
    
    startMinute: string
    
    endTime: string
    
    endMinute: string
}

TimeRangePicker.vue

<script lang="ts" setup>
import { ref, unref, watchEffect } from 'vue'
import { Popup, Picker } from 'vant'
import { props as TimeRangePickerProps } from './types'
import { useColumns } from './composable/useColumns'
const props = defineProps(TimeRangePickerProps)
interface Emits {
    
    (e: 'update:visible', value: boolean): void
    
    (e: 'update:times', value: string[]): void
    
    (e: 'confirm'): void
}
const emits = defineEmits<Emits>()


const selectedValues = ref<string[]>([])


const popupVisible = ref(false)
watchEffect(() => {
    popupVisible.value = props.visible

    if (props.times.length !== 2) throw new Error('时间格式错误')
    
    const startTimes = props.times[0].split(':')
    
    const endTimes = props.times[1].split(':')
    if (startTimes.length !== 2) throw new Error('开始时间格式错误')
    else if (endTimes.length !== 2) throw new Error('结束时间错误')
    selectedValues.value = [startTimes[0], startTimes[1], props.apart, endTimes[0], endTimes[1]]
})

const { columns } = useColumns(props)


const onPopupClose = () => {
    emits('update:visible', false)
}


const onConfirm = () => {
    const onValue = unref(selectedValues.value).filter((item) => item !== props.apart)
    emits('update:times', [`${onValue[0]}:${onValue[1]}`, `${onValue[2]}:${onValue[3]}`])
    emits('confirm')
    onPopupClose()
}
</script>

<template>
    <Popup v-model:show="popupVisible" position="bottom" @close="onPopupClose">
        <Picker
            v-bind="$attrs"
            v-model="selectedValues"
            :columns="columns"
            @confirm="onConfirm"
            @cancel="onPopupClose"
        />
    </Popup>
</template>

useColumns.ts

import { computed, ref } from 'vue'
import { PickerOption } from 'vant'
import { Props } from '../types'

export function useColumns(props: Props) {
    
    const times = computed(() => {
        const result: PickerOption[] = []
        for (let i = props.minTime; i <= props.maxTime; i++) {
            const v = `${i}`.padStart(2, '0')
            result.push({
                text: v,
                value: v
            })
        }
        return result
    })

    
    const minutes = computed(() => {
        const result: PickerOption[] = []
        for (let i = props.minMinute; i <= props.maxMinute; i++) {
            const v = `${i}`.padStart(2, '0')
            result.push({
                text: v,
                value: v
            })
        }
        return result
    })

    
    const columns = ref<PickerOption[][]>([
        times.value,
        minutes.value,
        [{ text: props.apart, value: props.apart }],
        times.value,
        minutes.value
    ])

    return {
        columns
    }
}

使用

<script setup lang="ts">
import { ref } from 'vue'
import { TimeRangePicker } from './components'
const visible = ref(false)
const times = ref(['10:10', '12:10'])

const onConfirm = () => {
    console.log('选择的时间是', times.value)
}
</script>

<template>
    <div>
        <van-button type="primary" @click="visible = true">选择日期</van-button>
        <time-range-picker
            v-model:visible="visible"
            v-model:times="times"
            :max-time="23"
            @confirm="onConfirm"
        ></time-range-picker>
    </div>
</template>

效果

到此这篇关于vant4 封装日期段选择器的实现的文章就介绍到这了,更多相关vant4 日期段选择器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

vant4封装日期段选择器的实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

vant4封装日期段选择器的实现

本文主要介绍了vant4封装日期段选择器的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-03-01

vant4如何封装日期段选择器

本篇内容介绍了“vant4如何封装日期段选择器”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!TimeRangePickerTypes.tsi
2023-07-05

vue+element DatePicker实现日期选择器封装

Vue Element DatePicker是一款基于Vue.js的日期选择控件,它提供了丰富的日期选择功能,支持日期范围选择、日期格式化、自定义日期格式、快捷选择等功能,极大地提高了用户的体验,是开发者必备的日期选择控件。
2023-02-09

Android时间选择器、日期选择器实现代码

本文为大家分享了两款选择器,一款可以针对时间进行选择、一款可以针对日期进行选择,供大家参考,具体内容如下一、时间选择器 1.1.布局
2022-06-06

日期选择组件(DatePicker)的实现

日期选择组件(DatePicker)的实现可以使用以下步骤:1. 创建一个输入框(input)用于显示选中的日期。2. 创建一个弹出框(div)用于显示日期选择器。3. 在输入框上绑定一个点击事件,当点击输入框时显示日期选择器弹出框。4.
2023-09-15

java实现自定义日期选择器的方法实例

前言本文主要介绍的是利用java swing写的一个日期选择器.,Swing 是一个为Java设计的GUI工具包,Swing是JAVA基础类的一部分,Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表,下面话不多说了,
2023-05-31

小程序日期时间选择器怎么实现

今天小编给大家分享一下小程序日期时间选择器怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。  要用到picker组件,
2023-06-26

实现微信小程序中的日期选择器效果

随着微信小程序的广泛应用,越来越多的开发者需要实现日期选择器效果来提高用户体验。本文将介绍如何在微信小程序中实现日期选择器效果,并给出具体的代码示例。一、实现思路实现日期选择器效果的基本思路是:首先在 WXML 中建立日期选择器组件,通过
实现微信小程序中的日期选择器效果
2023-11-21

Android中如何实现一个日期和时间选择器

这篇文章给大家介绍Android中如何实现一个日期和时间选择器,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。抽出来了一个方法来选择时间(这里自己规定的只能选择当前时间以后的日期),日期选择完毕就会自动弹出时间选择器让选
2023-05-30

怎么在Python中利用tkinter实现一个日期选择器

这篇文章主要介绍了怎么在Python中利用tkinter实现一个日期选择器,此处通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考价值,需要的朋友可以参考下:首先,定义一个类,叫Calendar# -*- coding: u
2023-06-06

Vue无限滑动周选择日期的组件怎么实现

今天小编给大家分享一下Vue无限滑动周选择日期的组件怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。思路根据用户传入日
2023-07-04

编程热搜

目录