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实现的listview效果
Apr 28 Javascript
WordPress JQuery处理沙发头像
Jun 22 Javascript
遨游,飞飞,IE,空中网 浏览器无提示关闭方法
Jul 11 Javascript
javascript SpiderMonkey中的函数序列化如何进行
Dec 05 Javascript
JQuery操作tr和td内容的方法实例
Mar 06 Javascript
JavaScript分析、压缩工具JavaScript Analyser
Dec 31 Javascript
Bootstrap零基础入门教程(二)
Jul 18 Javascript
JS+CSS3模拟溢出滚动效果
Aug 12 Javascript
loading动画特效小结
Jan 22 Javascript
Vue项目安装插件并保存
Jan 28 Javascript
详解关于表格合并span-method方法的补充(表格数据由后台动态返回)
May 21 Javascript
对layer弹出框中icon数字参数的说明介绍
Sep 04 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实现用于验证所有类型的信用卡类
2015/03/24 PHP
PHP递归获取目录内所有文件的实现方法
2016/11/01 PHP
PHP实现函数内修改外部变量值的方法示例
2018/12/28 PHP
PHP CURL中传递cookie的方法步骤
2019/05/09 PHP
网站404页面3秒后跳到首页的实例代码
2013/08/16 Javascript
Jquery 监视按键,按下回车键触发某方法的实现代码
2014/05/11 Javascript
jQuery中的编程范式详解
2014/12/15 Javascript
JS获取Table中td值的方法
2015/03/19 Javascript
JS简单去除数组中重复项的方法
2016/09/13 Javascript
JQuery Ajax WebService传递参数的简单实例
2016/11/02 Javascript
jQuery中ajax错误调试分析
2016/12/01 Javascript
Bootstrap模态框使用详解
2017/02/15 Javascript
微信小程序实现倒计时60s获取验证码
2020/04/17 Javascript
vue2.0使用swiper组件实现轮播的示例代码
2018/03/03 Javascript
js构建二叉树进行数值数组的去重与优化详解
2018/03/26 Javascript
关于RxJS Subject的学习笔记
2018/12/05 Javascript
js序列化和反序列化的使用讲解
2019/01/19 Javascript
[05:36]DOTA2 2015国际邀请赛中国区预选赛第四日TOP10
2015/05/29 DOTA
[55:45]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第一局
2016/02/28 DOTA
python正则匹配抓取豆瓣电影链接和评论代码分享
2013/12/27 Python
在Python下尝试多线程编程
2015/04/28 Python
Python爬虫模拟登录带验证码网站
2016/01/22 Python
python利用matplotlib库绘制饼图的方法示例
2016/12/18 Python
Python subprocess模块功能与常见用法实例详解
2018/06/28 Python
浅谈python写入大量文件的问题
2018/11/09 Python
浅谈Python接口对json串的处理方法
2018/12/19 Python
Python Django Vue 项目创建过程详解
2019/07/29 Python
详解Python中string模块除去Str还剩下什么
2020/11/30 Python
CSS3 Flexbox中flex-shrink属性的用法示例介绍
2013/12/30 HTML / CSS
美国在线自行车商店:Jenson USA
2018/05/22 全球购物
Ellesse英国官网:意大利高级运动品牌
2019/07/23 全球购物
注塑工厂厂长岗位职责
2013/12/02 职场文书
四年级数学教学反思
2014/02/02 职场文书
党员四风自我剖析材料思想汇报
2014/09/13 职场文书
学生不参加考试检讨书
2015/02/19 职场文书
python 常用的异步框架汇总整理
2021/06/18 Python