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

vue3 ts 写一个滑动选择的日期选择器组件

vue3 ts 写一个滑动选择的日期选择器组件

在这里插入图片描述

DatePicker.vue

<template><div class="date-picker-container"><div class="date-picker"><select v-model="selectedYear" @change="updateDays"><option value="">Year</option><option v-for="year in years" :key="year" :value="year">{{ year }}</option></select>-<select v-model="selectedMonth" @change="updateDays"><option value="">Month</option><option v-for="month in months" :key="month" :value="month">{{ String(month).padStart(2, "0") }}</option>-</select>-<select v-model="selectedDay"><option value="">Day</option><option v-for="day in days" :key="day" :value="day">{{ String(day).padStart(2, "0") }}</option></select></div></div>
</template><script lang="ts" setup>
import { ref, computed, watch, onMounted } from "vue";const props = defineProps({modelValue: {type: String,default: "",},
});const emit = defineEmits(["update:modelValue"]);const years = ref<number[]>([]);
const months = ref<number[]>([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]);
const days = ref<number[]>([]);const selectedYear = ref<string>("");
const selectedMonth = ref<string>("");
const selectedDay = ref<string>("");const currentYear = new Date().getFullYear();
years.value = Array.from({ length: 150 }, (_, i) => currentYear - 100 + i);const updateDays = () => {if (!selectedYear.value || !selectedMonth.value) {days.value = [];return;}const year = parseInt(selectedYear.value, 10);const month = parseInt(selectedMonth.value, 10);const daysInMonth = new Date(year, month, 0).getDate();days.value = Array.from({ length: daysInMonth }, (_, i) => i + 1);
};const selectedDate = computed(() => {if (selectedYear.value && selectedMonth.value && selectedDay.value) {return `${selectedYear.value}-${String(selectedMonth.value).padStart(2,"0")}-${String(selectedDay.value).padStart(2, "0")}`;}return "";
});// 初始化值
onMounted(() => {});
// 改进的初始化函数
const initFromDateString = (dateStr: string) => {if (!dateStr) return;// 尝试解析各种可能的日期格式const parts = dateStr.split("-");if (parts.length === 3) {selectedYear.value = parts[0];// 检查 parts[1] 是否以 '0' 开头if (parts[1].startsWith("0")) {// 转换为数字selectedMonth.value = Number(parts[1]).toString(); // 或 +parts[1] 或 Number(parts[1])} else {// 如果不以 '0' 开头,保持原样或进行其他处理selectedMonth.value = parts[1];}if (parts[2].startsWith("0")) {// 转换为数字selectedDay.value = Number(parts[2]).toString(); // 或 +parts[1] 或 Number(parts[1])} else {// 如果不以 '0' 开头,保持原样或进行其他处理selectedDay.value = parts[2];}}updateDays();
};
// 监听 modelValue 变化
watch(() => props.modelValue,(newVal) => {initFromDateString(newVal);},{ immediate: true }
);
// 监听选择的变化
watch([selectedYear, selectedMonth, selectedDay],() => {const dateStr = selectedDate.value;emit("update:modelValue", dateStr);},{ immediate: true }
);
</script><style scoped>
.date-picker-container {display: flex;flex-direction: column;gap: 10px;width: 100%;
}
.date-picker {display: flex;gap: 10px;
}
select {width: 33%;padding: 5px;font-size: 16px;border-radius: 5px;border: 1px solid #dcdfe6;background-color: #fff;color: #606266;
}
</style>

在需要的地方引入

<template><DatePicker v-model="ruleForm.Dateofbirth" />
<template>
...
<script lang="ts" setup name="FormInfo">import DatePicker from "./DatePicker.vue";
</script>
http://www.xdnf.cn/news/4892.html

相关文章:

  • 在Mac M1/M2上使用Hugging Face Transformers进行中文文本分类(完整指南)
  • 代码随想论图论part06冗余连接
  • 从0开始学习大模型--Day04--大模型的框架以及基本元素
  • JavaSE核心知识点02面向对象编程02-04(包和导入)
  • 运用fmpeg写一个背英文单词的demo带翻译
  • 前台--Android开发
  • 5.9-selcct_poll_epoll 和 reactor 的模拟实现
  • 高效对接:金蝶采购申请单集成钉钉案例解析
  • 国产linux系统(银河麒麟,统信uos)使用 PageOffice 在线打开Word文件,并用前端对话框实现填空填表
  • RAG vs 传统生成模型:核心差异与适用场景
  • ‌云原生CAE软件
  • 学习搭子,秘塔AI搜索
  • 基于大模型预测的足月胎膜早破行阴道分娩全流程研究报告
  • 图像泊松融合(convpyr_small版本)
  • 单调栈所有模版型题目(1)
  • Maven 处理依赖冲突
  • 【IDEA_Maven】(进阶版)永久性的更改IDEA中每个项目所依赖的Maven默认配置文件及其仓库路径
  • 学习心得《How Global AI Policy and Regulations Will Impact Your Enterprise》Gartner
  • 七、Hadoop 历史追踪、数据安全阀与 MapReduce初体验
  • WORD压缩两个免费方法
  • Java 集合体系深度解析面试篇
  • Java如何获取电脑分辨率?
  • 虚拟文件系统
  • 正大视角下的结构交易节奏:如何借助数据捕捉关键转折
  • java-反射精讲
  • 1236. 递增三元组
  • STL?vector!!!
  • spring ai alibaba 使用 SystemPromptTemplate 很方便的集成 系统提示词
  • U9C-SQL-采购订单视图
  • RGB矩阵照明系统详解及WS2812配置指南