vue-calendar-component 封装多日期选择组件的实例代码


Posted in Vue.js onDecember 04, 2020

实现效果

vue-calendar-component 封装多日期选择组件的实例代码vue-calendar-component 封装多日期选择组件的实例代码

安装vue-calendar-component日历组件

cnpm i vue-calendar-component --save //国内镜像

引入

import Calendar from "vue-calendar-component";
export default {
  components: { Calendar },
}

封装

<template>
 <div class="x-f">
  <Calendar
   ref="Calendar"
   v-on:choseDay="clickDay"
   :style="{
    height: '4.4rem',
    width: '4rem',
    fontSize: '0.2rem !important',
   }"
  ></Calendar>
  <Calendar
   v-if="multiple"
   ref="Calendar2"
   v-on:choseDay="clickDay2"
   :style="{
    height: '4.4rem',
    width: '4rem',
    fontSize: '0.2rem !important',
   }"
  ></Calendar>
 </div>
</template>
<script>
import { formatDate } from "@/lib/date_fun.js";
import Calendar from "vue-calendar-component";
 
export default {
 components: { Calendar },
 props: {
  value: {
   //v-model双向绑定
   type: String,
   default: () => {
    return "";
   },
  },
  // 是否多选
  multiple: {
   type: Boolean,
   default: () => {
    return true;
   },
  },
  // 两个日期之间的间隔符
  separator: {
   type: String,
   default: () => {
    return "至";
   },
  },
 },
 data() {
  return {
   tap1: false, //日历组件1是否点击选中
   tap2: false, //日历组件2是否点击选中
   rqf: "",
   rqt: "",
  };
 },
 created() {
  //初始化设置日期选中
  this.$nextTick(() => {
   if (this.value.indexOf(this.separator) == -1) {
    this.$refs.Calendar.ChoseMonth(this.value);
   } else {
    this.$refs.Calendar.ChoseMonth(this.value.split(this.separator)[0]);
    this.$refs.Calendar2.ChoseMonth(this.value.split(this.separator)[1]);
   }
  });
 },
 watch: {
  value(date) {
   //监听整个日历组件值,设置选中状态
   this.$nextTick(() => {
    if (date.indexOf(this.separator) > -1) {
     this.$refs.Calendar.ChoseMonth(date.split(this.separator)[0]);
     this.$refs.Calendar2.ChoseMonth(date.split(this.separator)[1]);
    } else {
     this.$refs.Calendar.ChoseMonth(date);
    }
   });
  },
 },
 methods: {
  clickDay(date) {
   //日期1点击事件
   this.tap1 = true;
   this.rqf = formatDate(date);
   this.comit();
  },
  clickDay2(date) {
   //日期2点击事件
   this.tap2 = true;
   this.rqt = formatDate(date);
   this.comit();
  },
  comit() {
   //判断是否多选全部点击选中,或者单选点击选中
   if (this.tap1 && (this.tap2 || !this.multiple)) {
    let mrq = "";
    if (this.multiple) mrq = this.rqf + this.separator + this.rqt;
    //多选赋值格式
    else mrq = this.rqf; //单选赋值格式
    this.$emit("input", mrq); //给v-model赋值;
    //赋值结束,重设点击状态标识
    this.tap1 = false;
    this.tap2 = false;
   }
  },
 },
};
</script>

css样式

/* 日历组件 */
.wh_content_all{
  background-color: #ffffff !important;
}
 
.wh_top_changge li{
  color: rgb(50, 50, 51) !important;
  font-size: 0.18rem !important;
}
 
.wh_jiantou1{
  width: 0.1rem !important;
  height: 0.1rem !important;
  border-top: 2px solid rgb(50, 50, 51) !important;
  border-left: 2px solid rgb(50, 50, 51) !important;
}
 
.wh_jiantou2{
  width: 0.1rem !important;
  height: 0.1rem !important;
  border-top: 2px solid rgb(50, 50, 51) !important;
  border-right: 2px solid rgb(50, 50, 51) !important;
}
 
.wh_top_tag{ 
  font-size: 0.16rem !important;
}
 
.wh_item_date{
   font-size: 0.2rem !important;
}
 
.wh_content_item,
.wh_content_item_tag{
  width: 14.285% !important;
  color: rgb(50, 50, 51) !important;
}
 
.wh_content_item .wh_isToday{
  background: transparent !important;
}
 
.wh_content_item .wh_chose_day{
  background: #ee0a24 !important;
  color: #fff !important;
}
 
.wh_content{
  padding: 0 0.1rem !important;
}
 
.wh_container{
  position: relative;
}
 
.wh_container::after{
  content: '';
  width: 1px;
  height: 100%;
  position: absolute;
  right: 0;
  top: 0;
  background: #dddddd;;
}

页面调用

<template>
  <div class="form-item mt20 x-f">
    <span class="form-label">日期</span>
    <van-popover v-model="showPopover" placement="bottom-end">
     <mCalendar v-model="rq" :multiple="multiple" :separator="separator"/>      
     <template #reference>
       <span class="form-input" @click="showPopover = !showPopover">{{ rq}}</span>
      </template>
     </van-popover>
   </div>
</template>
<script>
  import mCalendar from "@/components/mCalendar.vue";
  import { getNowDate } from '@/lib/date_fun.js'
  
  export default {
    components: { mCalendar },
    data () {
      return {
       showPopover:false,
       rq: getNowDate(),
       multiple: false, //日期是否多选
       separator: '至' //两个日期之间的间隔符
      }
    },
    watch:{
      //日期放生变化是隐藏日历Popover
      rq(){
       this.showPopover = false;
      }
    }
  }
</script>

写的不完善,有待优化

到此这篇关于vue-calendar-component 封装多日期选择组件的文章就介绍到这了,更多相关vue-calendar-component 日期选择组件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
ESLint 是如何检查 .vue 文件的
Nov 30 Vue.js
vue $router和$route的区别详解
Dec 02 Vue.js
vue的hash值原理也是table切换实例代码
Dec 14 Vue.js
Vue 组件注册全解析
Dec 17 Vue.js
浅析vue中的nextTick
Dec 28 Vue.js
vue组件是如何解析及渲染的?
Jan 13 Vue.js
使用这 6个Vue加载动画库来减少我们网站的跳出率
May 18 Vue.js
详解Vue router路由
Nov 20 Vue.js
vue+echarts实现多条折线图
Mar 21 Vue.js
vue判断按钮是否可以点击
Apr 09 Vue.js
vue 数字翻牌器动态加载数据
Apr 20 Vue.js
vue实现input输入模糊查询的三种方式
Aug 14 Vue.js
如何正确解决VuePress本地访问出现资源报错404的问题
Dec 03 #Vue.js
vue表单验证之禁止input输入框输入空格
Dec 03 #Vue.js
对vue生命周期的深入理解
Dec 03 #Vue.js
用vue设计一个日历表
Dec 03 #Vue.js
实用的 vue tags 创建缓存导航的过程实现
Dec 03 #Vue.js
如何实现vue的tree组件
Dec 03 #Vue.js
Vue实现图书管理小案例
Dec 03 #Vue.js
You might like
十天学会php之第七天
2006/10/09 PHP
PHP中通过语义URL防止网站被攻击的方法分享
2011/09/08 PHP
如何使用php绘制在图片上的正余弦曲线
2013/06/08 PHP
PHP引用返回用法示例
2016/05/28 PHP
php语言注释,单行注释和多行注释
2018/01/21 PHP
Laravel框架实现调用百度翻译API功能示例
2019/05/30 PHP
laravel 解决后端无法获取到前端Post过来的值问题
2019/10/22 PHP
JavaScript入门教程(7) History历史对象
2009/01/31 Javascript
一个cssQuery对象 javascript脚本实现代码
2009/07/21 Javascript
在vs2010中调试javascript代码方法
2011/02/11 Javascript
JavaScript 实现鼠标拖动元素实例代码
2014/02/24 Javascript
JS生成随机字符串的多种方法
2014/06/10 Javascript
nodejs教程之环境安装及运行
2014/11/21 NodeJs
JavaScript针对网页节点的增删改查用法实例
2015/02/02 Javascript
js实现拉幕效果的广告代码
2015/09/02 Javascript
尝试动手制作javascript放大镜效果
2015/12/25 Javascript
js轮播图透明度切换(带上下页和底部圆点切换)
2017/04/27 Javascript
使用Require.js封装原生js轮播图的实现代码
2017/06/15 Javascript
jQuery基于Ajax实现读取XML数据功能示例
2018/05/31 jQuery
深入了解query和params的使用区别
2019/06/24 Javascript
node命令行工具之实现项目工程自动初始化的标准流程
2019/08/12 Javascript
python解析基于xml格式的日志文件
2017/02/25 Python
Python列表切片用法示例
2017/04/19 Python
用python写扫雷游戏实例代码分享
2018/05/27 Python
简单了解Python3里的一些新特性
2019/07/13 Python
django创建最简单HTML页面跳转方法
2019/08/16 Python
在python中计算ssim的方法(与Matlab结果一致)
2019/12/19 Python
python爬虫用request库处理cookie的实例讲解
2021/02/20 Python
英国在线药房和在线医生:LloydsPharmacy
2019/10/21 全球购物
机械专业毕业生自荐信
2013/11/02 职场文书
毕业班联欢会主持词
2014/03/27 职场文书
优秀本科毕业生自荐信
2014/07/04 职场文书
师德自我剖析材料范文
2014/10/06 职场文书
常住证明范本
2015/06/23 职场文书
新郎父母婚礼致辞
2015/07/27 职场文书
护理心得体会范文
2016/01/22 职场文书