返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vant4封装日期段选择器的实现
  • 811
分享到

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

vant4日期段选择器vant4日期选择器 2023-03-01 11:03:13 811人浏览 薄情痞子
摘要

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

前言

偶然间在群里看到一个小伙伴的需求,需要使用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 日期段选择器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: vant4封装日期段选择器的实现

本文链接: https://lsjlt.com/news/197995.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • vant4封装日期段选择器的实现
    前言 偶然间在群里看到一个小伙伴的需求,需要使用vant 封装时间段选择器,看到这个需求后,自己也想实现一下,说干就干!仓库地址 TimeRangePickerTypes.ts im...
    99+
    2023-03-01
    vant4 日期段选择器 vant4 日期选择器
  • vant4如何封装日期段选择器
    本篇内容介绍了“vant4如何封装日期段选择器”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!TimeRangePickerTypes.tsi...
    99+
    2023-07-05
  • vue+element DatePicker实现日期选择器封装
    目录前言效果一、封装组件创建linechartlinechart:二、页面中使用workBench:总结前言 今天封装了一个DatePicker日期选择器,发现带快捷选择的不太好封装...
    99+
    2023-02-09
    vue element DatePicker日期选择器 vue日期时间选择组件 element日期选择器datepicker
  • uniapp实现日期时间选择器
    本文实例为大家分享了uniapp实现日期时间选择器的具体代码,供大家参考,具体内容如下 由于项目需求需要,尝试过使用Vant组件库,但是一直出现问题,插件市场的插件又不太符合需求,使...
    99+
    2024-04-02
  • Android时间选择器、日期选择器实现代码
    本文为大家分享了两款选择器,一款可以针对时间进行选择、一款可以针对日期进行选择,供大家参考,具体内容如下 一、时间选择器 1.1.布局 <?xml ver...
    99+
    2022-06-06
    选择器 选择 Android
  • 日期选择组件(DatePicker)的实现
    日期选择组件(DatePicker)的实现可以使用以下步骤:1. 创建一个输入框(input)用于显示选中的日期。2. 创建一个弹出...
    99+
    2023-09-15
    实现
  • vue左右滑动选择日期组件封装的方法
    现在做的项目中遇到了左右滑动选择日期的一个功能,然后我封装了一下这个组件,现在分享给大家看一下: 效果图: 1、安装dayjs日期文件 npm install dayjs --sa...
    99+
    2024-04-02
  • ElementUI日期选择器时间选择范围限制的实现
    目录单个输入框的情景1: 设置选择今天以及今天之后的日期情景2: 设置选择今天以及今天以前的日期情景3: 设置选择今天之后的日期(不能选择当天时间)两个输入框情景1: 限制结束日期不...
    99+
    2024-04-02
  • jQuery怎么实现日期范围选择器
    本篇内容主要讲解“jQuery怎么实现日期范围选择器”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“jQuery怎么实现日期范围选择器”吧!jQuery Date...
    99+
    2024-04-02
  • java实现自定义日期选择器的方法实例
    前言本文主要介绍的是利用java swing写的一个日期选择器.,Swing 是一个为Java设计的GUI工具包,Swing是JAVA基础类的一部分,Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表,下面话不多说了,...
    99+
    2023-05-31
    java 自定义 日期选择器
  • 小程序日期时间选择器怎么实现
    今天小编给大家分享一下小程序日期时间选择器怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。  要用到picker组件,...
    99+
    2023-06-26
  • Android实现日期时间选择对话框
    日期/时间选择对话框(DatePickerDialog和TimePickerDialog)的使用,供大家参考,具体内容如下 <LinearLayout xmlns:a...
    99+
    2024-04-02
  • 实现微信小程序中的日期选择器效果
    随着微信小程序的广泛应用,越来越多的开发者需要实现日期选择器效果来提高用户体验。本文将介绍如何在微信小程序中实现日期选择器效果,并给出具体的代码示例。一、实现思路实现日期选择器效果的基本思路是:首先在 WXML 中建立日期选择器组件,通过 ...
    99+
    2023-11-21
    微信小程序 实现 日期选择器
  • flutter开发实战-生日等日期选择器DatePicker
    flutter开发实战-生日等日期选择器DatePicker 在开发遇到设置生日等信息需要选择日期,这里用到的是CupertinoDatePicker iOS效果的日期、时间选择器 一、效果图 运行后...
    99+
    2023-09-23
    flutter 日期选择器 时间选择器 DatePicker
  • Vue自定义可以选择日期区间段的日历插件
    本文实例为大家分享了Vue自定义日历插件的具体代码,供大家参考,具体内容如下 由于网上的插件没有符合项目的需求决定自己实现 图示如下: 默认选择今天的日期时间段 1.默认状态(默认选...
    99+
    2024-04-02
  • Android studio实现日期 、时间选择器与进度条
    本文实例为大家分享了Android studio实现日期 、时间选择器与进度条,供大家参考,具体内容如下 日期选择器 public void onclick(View v){    ...
    99+
    2024-04-02
  • Android开发实现日期时间控件选择
    本文实例为大家分享了Android开发实现日期时间控件选择的具体代码,供大家参考,具体内容如下 前言 整合Android原生控件(日期控件DatePicker、时间控件TimePic...
    99+
    2024-04-02
  • 微信小程序实现日期范围选择
    本文实例为大家分享了微信小程序实现日期范围选择的具体代码,供大家参考,具体内容如下 样式如下: 分别点击开始日期和结束日期选择时间(底部弹框): date.wxml:  <...
    99+
    2024-04-02
  • vue怎么实现日期选择组件功能
    这篇文章主要讲解了“vue怎么实现日期选择组件功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue怎么实现日期选择组件功能”吧!目录结构demo 用vue-cli 的webpack-si...
    99+
    2023-07-04
  • 用JSP制作的日期选择器 (转)
    用JSP制作的日期选择器 (转)[@more@]我们在做web应用的时候,在很多情况下都需要操作人员在页面上输入日期之类的日期型字段信息。通常的做法是:XML:namespace prefix = o ns = "urn:schemas-m...
    99+
    2023-06-03
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作