vue-week-picker实现支持按周切换的日历


Posted in Javascript onJune 26, 2019

本文实例为大家分享了vue-week-picker实现按周切换的日历的具体代码,供大家参考,具体内容如下

vue-week-picker

安装

npm install vue-week-picker --save-dev

DEMO

  • 原生:线上DEMO
  • 与element-ui结合使用:线上DEMO

功能

  • 自适应式按周切换
  • 与DatePicker日期选择器使用

结合Element-ui使用

效果

vue-week-picker实现支持按周切换的日历

与vue-element结合组件,请转到链接

vue-week-picker实现支持按周切换的日历

使用

<VueWeekPicker @dateValue="dateValue" />

Or

<vue-week-picker @dateValue="dateValue" />

import VueWeekPicker from 'vue-week-picker';

export default {
 components: {
 VueWeekPicker
 }
}

Or

export default {
 components: {
 'vue-week-picker': VueWeekPicker
 }
}

代码

<template>
 <div class="date">
 <el-row>
 <el-col :span="24">
 <div class="weeks">
  <!-- 日期 -->
  <ul class="days">
  <li @click="weekPre" class="prev-btn">
  <i class="fa fa-angle-left fa-icon" aria-hidden="true"></i>
  <span class="hidden-sm-and-down" style="margin-left: 5px;">上一周</span>
  </li>
  <li
  @click="pick(day, index)"
  v-for="(day, index) in days"
  :key="index"
  :class="{selected:index == tabIndex}"
  >
  <!--本月-->
  <span v-if="day.getMonth()+1 != currentMonth" class="other-month item-wrapper">
  <p>{{day | getWeekFormat}}</p>
  <span class="hidden-sm-and-down">{{ day | dateFormat }}</span>
  </span>
  <span v-else>
  <!--今天-->
  <span
   v-if="day.getFullYear() == new Date().getFullYear() && day.getMonth() == new Date().getMonth() && day.getDate() == new Date().getDate()"
   class="today-item"
  >今天</span>
  <span class="item-wrapper" v-else>
   <p>{{day | getWeekFormat}}</p>
   <span class="hidden-sm-and-down">{{ day | dateFormat }}</span>
  </span>
  </span>
  </li>
  <li @click="weekNext" class="next-btn">
  <span class="hidden-sm-and-down" style="margin-right: 5px;">下一周</span>
  <i class="fa fa-angle-right fa-icon" aria-hidden="true"></i>
  </li>
  <li>
  <span>
  <el-date-picker
   class="right-pick-btn"
   style="width: 100%"
   @change="pickDate"
   v-model="value1"
   type="date"
   placeholder="按日期查询"
  ></el-date-picker>
  </span>
  </li>
  </ul>
 </div>
 </el-col>
 </el-row>
 <el-row>
 <el-col :span="20" :offset="2" class="time-range">
 <span
  @click="pickTime(time, index)"
  v-for="(time, index) in times"
  :key="index"
  :class="{active:index == tabTimeIndex}"
 >{{time}}</span>
 </el-col>
 </el-row>
 </div>
</template>
<script>
/* eslint-disable */
import moment from "moment";
export default {
 props: {
 dateValue: {
 type: String,
 default: moment(new Date()).format("YYYY-MM-DD")
 },
 timeValue: {
 type: String,
 default: "00:00"
 }
 },
 data() {
 return {
 currentYear: 1970, // 年份
 currentMonth: 1, // 月份
 currentDay: 1, // 日期
 currentWeek: 1, // 星期
 days: [],
 value1: "",
 tabIndex: null,
 tabTimeIndex: 0,
 times: [
 "00:00~06:00",
 "06:00~12:00",
 "12:00~18:00",
 "18:00~24:00",
 "今日节目"
 ]
 };
 },
 filters: {
 dateFormat(date) {
 return moment(date).format("YYYY-MM-DD");
 },
 getWeekFormat(date) {
 const weeksObj = {
 1: "周一",
 2: "周二",
 3: "周三",
 4: "周四",
 5: "周五",
 6: "周六",
 7: "周日"
 };
 let weekNumber = moment(date).isoWeekday();
 return weeksObj[weekNumber];
 }
 },

 mounted() {
 const index = _.findIndex(this.days, function(o) {
 // console.log('o: ', o.getDate());
 // console.log('new Date().getDate(): ', new Date().getDate());
 return o.getDate() === new Date().getDate();
 });
 console.log("index: ", index);
 this.tabIndex = index;
 },

 created() {
 this.initData(null);
 },

 methods: {
 formatDate(year, month, day) {
 const y = year;
 let m = month;
 if (m < 10) m = `0${m}`;
 let d = day;
 if (d < 10) d = `0${d}`;
 return `${y}-${m}-${d}`;
 },
 pickDate(date) {
 let newDate = moment(date).format("YYYY-MM-DD");
 this.$emit("dateValue", newDate);
 },
 initData(cur) {
 let date = "";
 if (cur) {
 date = new Date(cur);
 } else {
 date = new Date();
 }
 this.currentDay = date.getDate(); // 今日日期 几号
 this.currentYear = date.getFullYear(); // 当前年份
 this.currentMonth = date.getMonth() + 1; // 当前月份
 this.currentWeek = date.getDay(); // 1...6,0 // 星期几
 if (this.currentWeek === 0) {
 this.currentWeek = 7;
 }
 const str = this.formatDate(
 this.currentYear,
 this.currentMonth,
 this.currentDay
 ); // 今日日期 年-月-日
 this.days.length = 0;
 // 今天是周日,放在第一行第7个位置,前面6个 这里默认显示一周,如果需要显示一个月,则第二个循环为 i<= 35- this.currentWeek
 /* eslint-disabled */
 for (let i = this.currentWeek - 1; i >= 0; i -= 1) {
 const d = new Date(str);
 d.setDate(d.getDate() - i);
 // console.log(y:" + d.getDate())
 this.days.push(d);
 }
 for (let i = 1; i <= 7 - this.currentWeek; i += 1) {
 const d = new Date(str);
 d.setDate(d.getDate() + i);
 this.days.push(d);
 }
 },

 // 上个星期
 weekPre() {
 const d = this.days[0]; // 如果当期日期是7号或者小于7号
 d.setDate(d.getDate() - 7);
 this.initData(d);
 },

 // 下个星期
 weekNext() {
 const d = this.days[6]; // 如果当期日期是7号或者小于7号
 d.setDate(d.getDate() + 7);
 this.initData(d);
 },

 // 上一??月 传入当前年份和月份
 pickPre(year, month) {
 const d = new Date(this.formatDate(year, month, 1));
 d.setDate(0);
 this.initData(this.formatDate(d.getFullYear(), d.getMonth() + 1, 1));
 },

 // 下一??月 传入当前年份和月份
 pickNext(year, month) {
 const d = new Date(this.formatDate(year, month, 1));
 d.setDate(35);
 this.initData(this.formatDate(d.getFullYear(), d.getMonth() + 1, 1));
 },

 // 当前选择日期
 pick(date, index) {
 let newDate = moment(date).format("YYYY-MM-DD");
 this.$emit("dateValue", newDate);
 // console.log("index: ", index);
 this.tabIndex = index;
 // alert(
 // this.formatDate(date.getFullYear(), date.getMonth() + 1, date.getDate())
 // );
 },
 pickTime(time, index) {
 // console.log('time: ', time);
 let timeArr = [];
 timeArr.push(_.head(_.split(time, "~")));
 console.log("timeArr: ", timeArr);
 this.$emit("timeValue", _.join(timeArr), "");
 // console.log("index: ", index);
 this.tabTimeIndex = index;
 // alert(
 // this.formatDate(date.getFullYear(), date.getMonth() + 1, date.getDate())
 // );
 }
 }
};
</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 在各个浏览器中执行的耐性
Apr 06 Javascript
Javascript select下拉框操作常用方法
Nov 09 Javascript
Chrome扩展页面动态绑定JS事件提示错误
Feb 11 Javascript
jquery缓动swing liner控制动画过程不同时刻的速度
May 29 Javascript
Shell脚本实现Linux系统和进程资源监控
Mar 05 Javascript
jquery中$each()方法的使用指南
Apr 30 Javascript
png在IE6 下无法透明的解决方法汇总
May 21 Javascript
JavaScript动态创建div等元素实例讲解
Jan 06 Javascript
Ext JS 实现建议词模糊动态搜索功能
May 13 Javascript
Vue2.0基于vue-cli+webpack同级组件之间的通信教程(推荐)
Sep 14 Javascript
vue 实现click同时传入事件对象和自定义参数
Jan 29 Vue.js
详解Js模块化的作用原理和方案
Apr 29 Javascript
CKeditor4 字体颜色功能配置方法教程
Jun 26 #Javascript
Vue编写可显示周和月模式的日历 Vue自定义日历内容的显示
Jun 26 #Javascript
ES6 Symbol数据类型的应用实例分析
Jun 26 #Javascript
亲自动手实现vue日历控件
Jun 26 #Javascript
js设置鼠标悬停改变背景色实现详解
Jun 26 #Javascript
ES6 Generator函数的应用实例分析
Jun 26 #Javascript
vue实现简单的日历效果
Sep 24 #Javascript
You might like
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
2017/02/15 PHP
PHPstorm快捷键(分享)
2017/07/17 PHP
PHP基于IMAP收取邮件的方法示例
2017/08/07 PHP
基于jquery的无刷新分页技术
2011/06/11 Javascript
JavaScript基础语法让人疑惑的地方小结
2012/05/23 Javascript
jQuery function的正确书写方法
2013/08/02 Javascript
清除div下面的所有标签的方法
2014/02/17 Javascript
Javascript堆排序算法详解
2014/12/03 Javascript
jQuery实现提示密码强度的代码
2015/07/15 Javascript
JavaScript事件代理和委托详解
2016/04/08 Javascript
Javascript中的迭代、归并方法详解
2016/06/14 Javascript
Javascript OOP之面向对象
2016/07/31 Javascript
微信小程序实现图片上传、删除和预览功能的方法
2017/12/18 Javascript
微信小程序使用form表单获取输入框数据的实例代码
2018/05/17 Javascript
微信小程序中悬浮窗功能的实现代码
2019/08/02 Javascript
浅谈Layui的eleTree树式选择器使用方法
2019/09/25 Javascript
python操作MySQL数据库的方法分享
2012/05/29 Python
python中OrderedDict的使用方法详解
2017/05/05 Python
Python使用win32 COM实现Excel的写入与保存功能示例
2018/05/03 Python
python实现周期方波信号频谱图
2018/07/21 Python
python机器学习之神经网络实现
2018/10/13 Python
Python玩转PDF的各种骚操作
2019/05/06 Python
python按行读取文件并找出其中指定字符串
2019/08/08 Python
python多进程间通信代码实例
2019/09/30 Python
基于python实现从尾到头打印链表
2019/11/02 Python
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
2020/01/13 Python
解决Tensorflow 内存泄露问题
2020/02/05 Python
Node.js 和 Python之间该选择哪个?
2020/08/05 Python
德国柯吉澳趣味家居:Koziol
2017/08/24 全球购物
英国演唱会订票网站:Ticket Selection
2018/03/27 全球购物
比较一下entity bean和session bean
2013/12/27 面试题
十一个高级MySql面试题
2014/10/06 面试题
诚信考试承诺书
2014/03/27 职场文书
2014年统战工作总结
2014/12/09 职场文书
2015年创先争优工作总结
2015/05/23 职场文书
Python  序列化反序列化和异常处理的问题小结
2022/12/24 Python