VUE 日期组件(包括年选择)
封装vant 日期组件实现可以选择年份
<template>
<div class="yearMonMain">
<div class="label">{{ label }}</div>
<div class="content" @click="onShowDatePicker">
{{ date }}
<van-icon name="arrow-up" v-if="showDatePicker == true" />
<van-icon name="arrow-down" v-else />
</div>
<van-popup v-model="showDatePicker" position="bottom" ref="pop">
<van-picker
v-if="type == 'year'"
ref="yearPicker"
title="请选择年"
show-toolbar
:columns="yearList"
@confirm="onConfirmYear"
@cancel="onCancel"
/>
<van-datetime-picker
v-else
v-model="currentDate"
:type="type"
:title="title"
:max-date="maxDate"
:min-date="minDate"
@confirm="onConfirm"
@cancel="onCancel"
:formatter="formatter"
/>
</van-popup>
</div>
</template> <script>
export default {
name: "YearMonthSel",
data() {
let yearList = []
let year = new Date().getFullYear()
let month = new Date().getMonth() + 1
let currentDate = new Date()
// console.log("YearMonthSel defaultValue===", this.defaultValue)
if (this.defaultValue) {
if (this.type == "year") {
year = this.defaultValue
for (let i = 1900; i <= year; i++) {
yearList.push({ code: i, text: i })
}
} else {
year = this.defaultValue[0]
month = this.defaultValue[1]
currentDate = new Date(year, month)
}
} return {
currentDate,
year,
month,
showDatePicker: false,
maxDate: new Date(),
minDate: new Date("1900-01-01"),
yearList,
}
},
props: {
label: {
type: String,
default: "选择年月",
},
title: {
type: String,
default: "选择年月",
},
type: {
type: String,
default: "year-month",
},
defaultValue: {
type: String | Number,
default: "",
},
},
methods: {
formatter(type, val) {
if (type === "year") {
return `${val}年`
} else if (type === "month") {
return `${val}月`
}
return val
},
onShowDatePicker() {
this.showDatePicker = true
setTimeout(() => {
if (this.type == "year") {
const picker = this.$refs.yearPicker //获取组件实例
if (picker) {
picker.setValues([this.year]) //setIndexes()中的参数是一个数组
}
}
})
},
onConfirm(time) {
let date = new Date(time)
let year = date.getFullYear()
let month = date.getMonth() + 1
if (this.year != year || this.month != month) {
this.year = year
this.month = month
this.$emit("onChange", [year, month])
}
this.$emit("onConfirm", [year, month]) this.showDatePicker = false
},
onConfirmYear(v) {
if (this.year != v.code) {
this.year = v.code
this.$emit("onChange", v.code)
}
this.showDatePicker = false
this.$emit("onConfirm", v.code)
},
onCancel() {
this.showDatePicker = false
},
},
computed: {
date: function() {
switch (this.type) {
case "year":
return this.year + "年"
default:
return this.year + "年" + this.month + "月"
}
},
},
}
</script> <style lang="less" scoped>
.yearMonMain {
width: 100%;
display: flex;
.label {
text-align: center;
max-width: 100px;
color: #646566;
}
}
.content {
flex-grow: 1;
text-align: center;
}
</style>
VUE 日期组件(包括年选择)的更多相关文章
- 使用WdatePicker日期组件时,选择日期后,执行某个方法
WdatePicker({onpicked:function(){alert(123);},dateFmt:'yyyy年MM月dd日',maxDate:'%y-%M-%d'}) 1.onpicked: ...
- vue自定义日期组件
vue-datepicker 基于 vuejs 2.x 可自定义主题的日期组件 github Usage 只需要在项目中加入 calendar.vue,就可以使用了. 向组件传入 prop 即可改变 ...
- vue 移动端轻量日期组件不依赖第三方库
Vue版移动端日期选择组件 1.优点:不需要依赖其他第三方库,灵活可配置: 不需要依赖第三方组件的vue日期移动端组件 小轮子 轻量可复用: https://github.com/BeckReed ...
- iview的table组件中加入超链接组件,可编辑组件,选择组件,日期组件
这篇文章主要介绍了iview的table组件中使用选择框,日期,可编辑表格,超链接等组件. 1.select选择组件 // tableColumn数组响应对象需要传入一个固定的option数组,如果该 ...
- vue自定义可输入的选择框组件
vue自定义可输入的选择框组件 props: 属性 说明 类型 默认值 selectDataList 下拉框中的内容 Array 空数组([]) value 输入框中的内容 String 空字符串(& ...
- 自定义Vue&Element组件,实现用户选择和显示
在我们很多前端业务开发中,往往为了方便,都需要自定义一些用户组件,一个是减少单一页面的代码,提高维护效率:二个也是方便重用.本篇随笔介绍在任务管理操作中,使用自定义Vue&Element组件, ...
- Vue UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例
Vue UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例 element ★11612 - 饿了么出品的Vue2的web UI工具套件 Vux ★7503 - 基于Vue和WeUI的组件库 ...
- vue统计组件库和ui框架
UI组件 element ★13489 - 饿了么出品的Vue2的web UI工具套件 Vux ★8133 - 基于Vue和WeUI的组件库 iview ★6634 - 基于 Vuejs 的开源 UI ...
- 测试开发【提测平台】分享12-掌握日期组件&列表状态格式化最终实现提测管理多条件搜索展示功能
微信搜索[大奇测试开],关注这个坚持分享测试开发干货的家伙. 本章内容思维导图如下,由于需要各种状态下的菜单操作,所以需要先实现提测信息的列表基础页面,然后再推进其他需求开发 基本知识点学习 Date ...
随机推荐
- java反射和动态代理实现与原理详细分析
关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理. 一.代理模式 代理模式是常用的java设计模式, ...
- jQuery的优缺点,与vue的不同,vue的优缺点?
jq优点: 比原生js更易书写, 封装了很多api, 有丰富的插件库; 缺点: 每次升级与之前版本不兼容, 只能手动开发, 操作DOM很慢, 不方便, 变量名污染, 作用域混淆等. vue优缺点: 双 ...
- Integer与int的区别?
int是java提供的8种原始数据类型之一.Java为每个原始类型提供了封装类,Integer是java为int提供的封装类.int的默认值为0,而Integer的默认值为null,即Integer可 ...
- jvm-learning-类加载子系统
类加载子系统的作用 类加载器ClassLoader角色 类的加载过程(广义加载) 加载 加载.class文件的方式 连接Linker 初始化 注意:如果类种没有变量赋值动作和静态代码块的语句是不 ...
- 如何给Spring 容器提供配置元数据?
这里有三种重要的方法给Spring 容器提供配置元数据. XML配置文件. 基于注解的配置. 基于java的配置.
- 你在项目中哪些地方用到了 XML?
XML 的主要作用有两个方面:数据交换和信息配置.在做数据交换时,XML 将数 据用标签组装成起来,然后压缩打包加密后通过网络传送给接收者,接收解密与 解压缩后再从 XML 文件中还原相关信息进行处理 ...
- Java 中 Semaphore 是什么?
Java 中的 Semaphore 是一种新的同步类,它是一个计数信号.从概念上讲,从 概念上讲,信号量维护了一个许可集合.如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可.每 ...
- spring-boot关于spring全注解IOC
什么是IOC容器: Spring IoC 容器是一个管理Bean 的容器,在S pring 的定义中,它要求所有的IoC 容器都需要实现接口BeanFactory ,它是一个顶级容器接口 IoC 是一 ...
- SVN在拉取(更新)代码的时候出现Error:svn: E155037: Previous operation has not finished; run 'cleanup' if it was interrupted问题 ---window版
简易方法1 今天朋友看到朋友报错这个错误,偷偷学习了下他的方法并做记录以防忘记 简易方法2 今天使用svn时报了一个这个错,网上搜索时都说是要使用sqllite来删除svn队列. 其实可以直接使用id ...
- DIV 上下左右居中黑科技
<style> #info{height:0px; width:0px;top:50%; left:50%;position:absolute;} #center{background:# ...