Vant 日期时间组件拓展

基于 

"vant": "^4.8.3",

效果图

<template><!-- 弹出层 --><van-popupv-model:show="isPicker"position="bottom"><van-pickerref="picker":title="title"v-model="selectedValues":columns="columns"@change="onChange"@cancel="cancelOn"@confirm="onConfirm"/></van-popup>
</template>

js

<script setup lang="ts">
import { ref ,watch } from 'vue';
import {formatTimeArray} from "@/utils/formate/date_formate";const props = defineProps({showPicker: {type: Boolean,default: false,},title: {type: String,default: "请选择时间",},timeFormat: {type: String,default: "yyyy-MM-dd HH:mm:ss",},
})const  isPicker = ref<any>(false) //是否显示弹出层
const  columns = ref<any>([])
const picker = ref()
const getCountDays = (year: any, month: any) => {//获取某年某月多少天const day = new Date(year, month, 0);return day.getDate();
}const selectedValues = ref<any>(formatTimeArray(new Date()));const getColumns = () => {const Y: any = selectedValues.value[0];const M: any = selectedValues.value[1];let year: any = []; // 默认范围 前后十年for (let i = Y - 10; i <= Y + 10; i++) {year.push({text: i,value: i});}let month: any ;//月month = getColumn(13,true)let days: any = getCountDays(Y, M); //天,和当年月有关let day: any;day = getColumn(days + 1,true)let hour: any ; //小时hour = getColumn(24)let minute: any ; //分钟minute = getColumn(60)let seconds: any ; //秒seconds = getColumn(60)if (props.timeFormat?.includes("yyyy")) {columns.value.push(year);}if (props.timeFormat?.includes("MM")) {columns.value.push(month); //获取当月的天数}if (props.timeFormat?.includes("dd")) {columns.value.push(day);}if (props.timeFormat?.includes("HH")) {columns.value.push(hour);}if (props.timeFormat?.includes("mm")) {columns.value.push(minute);}if (props.timeFormat?.includes("ss")) {columns.value.push(seconds);}
}const getColumn = (length: any,isSplice: Boolean = false) => {if ( isSplice ) {const data = Array.from({ length }, (_, index) => ({ text: index, value: index }));return data.splice(1)} else {return Array.from({ length }, (_, index) => ({ text: index, value: index }));}
}const onChange = (values: any) => {let days: any = getCountDays(values.selectedValues[0], values.selectedValues[1]);let newDayColumn: any ;newDayColumn = getColumn(days + 1,true);columns.value[2] = newDayColumn
}const emits = defineEmits(["changeValue",'confirm']);const cancelOn = () => {emits("changeValue");
};const onConfirm = (val: any) => {let endVal: any = "";for (let i = 0; i < columns.value.length; i++) {endVal += val[i];if ( i === 2 ) {endVal += " ";} else if (i >= 3 && i <= 5) {endVal += ":";} else if (i < columns.value.length - 1) {endVal += "-";}}// 判断最后一个字符是否是分隔符if (endVal.endsWith("-") || endVal.endsWith(":")) {endVal = endVal.slice(0, -1); // 删除最后一个字符}emits("changeValue", endVal);emits("confirm", val.selectedValues);}// 监听 isPicker 的变化
watch(isPicker, (val: any) => {if (!val) {emits("changeValue");}columns.value = [];getColumns();
});// 监听 showPicker 的变化
watch(() => props.showPicker, (val) => {isPicker.value = val;
});</script>

引用组件

 <DateTimePicker@changeValue="showEndPicker = false"ref="popup":showPicker="showEndPicker"@confirm="onEndConfirm"/>

结合 输入框一起使用

      <van-fieldclass="form-wrapper"v-model="formData.pzzy_enddate"is-linkrequiredlabel-width="130"name="datePicker"label="批准作业结束时间"placeholder="点击选择时间"@click="showEndPicker = true"/><DateTimePicker@changeValue="showEndPicker = false"ref="popup":showPicker="showEndPicker"@confirm="onEndConfirm"/>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/55603.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软考24.10.15每日一练打卡 - 错题笔记

题目来源&#xff1a;https://ruankaodaren.com/ ##1. M公司将其开发的某软件产品注册商标为S&#xff0c;为确保公司在市场竞争中占据地位&#xff0c;M公司对员工进行了保密约束&#xff0c;此情形下&#xff0c;该公司不享有&#xff08; 商标权&#xff09;。 本题题干中提…

7、Vue2(二) vueRouter3+axios+Vuex3

14.vue-router 3.x 路由安装的时候不是必须的&#xff0c;可以等到使用的时候再装&#xff0c;如果之前没有安装的话&#xff0c;可以再单独安装。之前的终端命令行不要关闭&#xff0c;再重新开一个&#xff0c;还需要再package.json文件的依赖中添加。 如果忘记之前是否有安…

机器学习:opencv--风格迁移

目录 前言 一、代码及步骤解释 1.图片与处理 2.加载模型 3.输出图像 前言 风格迁移&#xff08;Style Transfer&#xff09;是一种计算机视觉技术&#xff0c;旨在将一种图像的艺术风格应用到另一种图像上&#xff0c;同时保持其内容。 一、代码及步骤解释 1.图片与处理 …

VBA技术资料MF210:按顺序号复制工作表中的图片

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

EKS API查询慢排查

EKS API查询异常慢&#xff0c;一次查询得4~5s&#xff0c;命令补全也是需要API查询的&#xff0c;导致执行一次查询命令可能比平常花费10倍时间 现象 1、命令输入后返回慢 2、get edit delete所有操作都慢 排查 1、同样需要查询API的kuboard在执行各项操作时无延迟 2、升级…

使用 MongoDB 构建 AI:利用实时客户数据优化产品生命周期

在《使用 MongoDB 构建 AI》系列博文中&#xff0c;我们看到越来越多的企业正在利用 AI 技术优化产品研发和用户支持流程。例如&#xff0c;我们介绍了以下案例&#xff1a; Ventecon 的 AI 助手帮助产品经理生成和优化新产品规范 Cognigy 的对话式 AI 帮助企业使用任意语言&a…

约克VRF打造舒适绿色无污染的生活环境

在生活的各个方面&#xff0c;约克VRF都采取了多种措施助力碳中和。 采用国际领先的空气源热泵技术&#xff0c;只需少量电力就可将空气中的能量转化为室内热量&#xff0c;被称为“大自然的搬运工”&#xff01;COP能效值最高可达4.24&#xff08;每用一度电产生4.24度电热量&…

线性系统性能分析方法3——频率特性分析法(频域分析法)

一种图解的分析方法&#xff0c;不必直接求解系统输出的时域表达式&#xff0c;不需要求解系统的闭环特征根&#xff0c;具有较多的优点。如&#xff1a; ①根据系统的开环频率特性揭示闭环系统的动态性能和稳态性能&#xff0c;得到定性和定量的结论&#xff0c;可以简单迅速…

Qt界面开发(对象树概念、信号与槽机制)

&#x1f333;对象树 在Qt框架中&#xff0c;对象树&#xff08;Object Tree&#xff09;是针对QObject类以及其子类的结构化组织方式/每一个QObject实例都可以有一个父对象和多个子对象&#xff0c;形成一种层次化的树状关系。这种设计在Qt中具有多个用途和优势。 概念&…

Apache Seata快速入门

前置推荐阅读&#xff1a;Apache Seata 简介-CSDN博客 快速开始 让我们从一个微服务示例开始。 用例​ 用户购买商品的业务逻辑。整个业务逻辑由 3 个微服务提供支持&#xff1a; 仓储服务&#xff1a;对给定的商品扣除仓储数量。订单服务&#xff1a;根据采购需求创建订单…

【Linux】解答:为什么创建目录文件,硬链接数是2;创建普通文件时,硬链接数是1?(超详细图文)

前言 大家好吖&#xff0c;欢迎来到 YY 滴Linux系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Lin…

gitlab配置ssh密钥

1.配置用户信息 git config --global user.name "你的名字" git config --global user.email "你的邮箱" 查看配置是否成功 git config --global --list 2.生成密钥 终端 或 右键文件夹open git bash here 输入命令 ssh-keygen -t rsa -C 随意(生…

接口测试(二)jmeter——实现http请求、察看结果树、请求默认值

一、实现http请求&#xff0c;察看结果树 1. 测试计划 --> 添加 --> 线程(用户) --> 线程组 2. 线程组配置 默认配置 线程数&#xff1a;虚拟用户数&#xff0c;一个虚拟用户占用一个进程或线程。 Ramp-Up 时间&#xff08;秒&#xff09;&#xff1a;全部线程执行完…

使用Jenkins部署项目

部署中的痛点 为什么要用Jenkins&#xff1f;我说下我以前开发的痛点&#xff0c;在一些中小型企业&#xff0c;每次开发一个项目完成后&#xff0c;需要打包部署&#xff0c;可能没有专门的运维人员&#xff0c;只能开发人员去把项目打成一个exe包&#xff0c;可能这个项目已…

Kettle基本使用

目录 一、安装Kelttle 1-1 安装java环境 1-2 Kettle安装 二、Kettle的基本使用 2-1 将txt文本数据转为excel数据 创建txt文件 创建kettle的转换任务 定义转换流程 配置输入文件 连接读取和写入任务 配置excel输出 保存转换任务 执行转换任务 2-2 将txt文件输出到M…

数据库管理-第252期 深入浅出多主多活数据库技术- Cantian存储引擎(二)(20241017)

数据库管理252期 2024-10-17 数据库管理-第252期 深入浅出多主多活数据库技术- Cantian存储引擎&#xff08;二&#xff09;&#xff08;20241017&#xff09;1 部署规划2 服务器基础配置2.1 配置HOSTS2.2 关闭防火墙2.3 关闭SELinux2.4 配置yum源 3 编译服务器配置3.1 安装git…

「Python精品教程」Python快速入门,基础数据结构:数字

​***奕澄羽邦精品教程系列*** 编程环境&#xff1a; 1、Python 3.12.5 2、Visual Studio Code 1.92.1 在现实世界中&#xff0c;我们经常要面对各式各样的数字&#xff0c;通过简单或者复杂的数学运算&#xff0c;来帮助我们计算出想要的结果。程序开发过程中&#xff0c;数字…

自动化测试工具在API测试中的优势是什么?

在设计API接口时&#xff0c;确保数据获取的效率和准确性是至关重要的。以下是一些最佳实践和代码示例&#xff0c;帮助你提高API的数据获取效率和准确性。 1. 使用高效的数据访问模式 选择合适的数据库访问模式对于提高数据获取效率至关重要。例如&#xff0c;使用索引可以显…

【启明智显分享】ZX7981PM WIFI6 5G-CPE:2.5G WAN口,2.4G/5G双频段自动调速

昨天&#xff0c;我们向大家展现了ZX7981PG WIFI6 5G-CPE&#xff0c;它强大的性能也引起了一波关注&#xff0c;与此同时&#xff0c;我们了解到部分用户对更高容量与更高速网口的需求。没关系&#xff01;启明智显早就预料到了&#xff01;ZX7981PM满足你的需求&#xff01; …

Vue3 集成Monaco Editor编辑器

Vue3 集成Monaco Editor编辑器 1. 安装依赖2. 使用3. 效果 Monaco Editor &#xff08;官方链接 https://microsoft.github.io/monaco-editor/&#xff09;是一个由微软开发的功能强大的在线代码编辑器&#xff0c;被广泛应用于各种 Web 开发场景中。以下是对 Monaco Editor 的…