当前位置:Gxlcms > JavaScript > vue-week-picker实现支持按周切换的日历

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

时间:2021-07-01 10:21:17 帮助过:17人阅读

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

vue-week-picker

安装

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

DEMO

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

功能

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

结合Element-ui使用

效果


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

使用

  1. <VueWeekPicker @dateValue="dateValue" />
  2. Or
  3. <vue-week-picker @dateValue="dateValue" />
  4. import VueWeekPicker from 'vue-week-picker';
  5. export default {
  6. components: {
  7. VueWeekPicker
  8. }
  9. }
  10. Or
  11. export default {
  12. components: {
  13. 'vue-week-picker': VueWeekPicker
  14. }
  15. }

代码

  1. <template>
  2. <div class="date">
  3. <el-row>
  4. <el-col :span="24">
  5. <div class="weeks">
  6. <!-- 日期 -->
  7. <ul class="days">
  8. <li @click="weekPre" class="prev-btn">
  9. <i class="fa fa-angle-left fa-icon" aria-hidden="true"></i>
  10. <span class="hidden-sm-and-down" style="margin-left: 5px;">上一周</span>
  11. </li>
  12. <li
  13. @click="pick(day, index)"
  14. v-for="(day, index) in days"
  15. :key="index"
  16. :class="{selected:index == tabIndex}"
  17. >
  18. <!--本月-->
  19. <span v-if="day.getMonth()+1 != currentMonth" class="other-month item-wrapper">
  20. <p>{{day | getWeekFormat}}</p>
  21. <span class="hidden-sm-and-down">{{ day | dateFormat }}</span>
  22. </span>
  23. <span v-else>
  24. <!--今天-->
  25. <span
  26. v-if="day.getFullYear() == new Date().getFullYear() && day.getMonth() == new Date().getMonth() && day.getDate() == new Date().getDate()"
  27. class="today-item"
  28. >今天</span>
  29. <span class="item-wrapper" v-else>
  30. <p>{{day | getWeekFormat}}</p>
  31. <span class="hidden-sm-and-down">{{ day | dateFormat }}</span>
  32. </span>
  33. </span>
  34. </li>
  35. <li @click="weekNext" class="next-btn">
  36. <span class="hidden-sm-and-down" style="margin-right: 5px;">下一周</span>
  37. <i class="fa fa-angle-right fa-icon" aria-hidden="true"></i>
  38. </li>
  39. <li>
  40. <span>
  41. <el-date-picker
  42. class="right-pick-btn"
  43. style="width: 100%"
  44. @change="pickDate"
  45. v-model="value1"
  46. type="date"
  47. placeholder="按日期查询"
  48. ></el-date-picker>
  49. </span>
  50. </li>
  51. </ul>
  52. </div>
  53. </el-col>
  54. </el-row>
  55. <el-row>
  56. <el-col :span="20" :offset="2" class="time-range">
  57. <span
  58. @click="pickTime(time, index)"
  59. v-for="(time, index) in times"
  60. :key="index"
  61. :class="{active:index == tabTimeIndex}"
  62. >{{time}}</span>
  63. </el-col>
  64. </el-row>
  65. </div>
  66. </template>
  1. <script>
  2. /* eslint-disable */
  3. import moment from "moment";
  4. export default {
  5. props: {
  6. dateValue: {
  7. type: String,
  8. default: moment(new Date()).format("YYYY-MM-DD")
  9. },
  10. timeValue: {
  11. type: String,
  12. default: "00:00"
  13. }
  14. },
  15. data() {
  16. return {
  17. currentYear: 1970, // 年份
  18. currentMonth: 1, // 月份
  19. currentDay: 1, // 日期
  20. currentWeek: 1, // 星期
  21. days: [],
  22. value1: "",
  23. tabIndex: null,
  24. tabTimeIndex: 0,
  25. times: [
  26. "00:00~06:00",
  27. "06:00~12:00",
  28. "12:00~18:00",
  29. "18:00~24:00",
  30. "今日节目"
  31. ]
  32. };
  33. },
  34. filters: {
  35. dateFormat(date) {
  36. return moment(date).format("YYYY-MM-DD");
  37. },
  38. getWeekFormat(date) {
  39. const weeksObj = {
  40. 1: "周一",
  41. 2: "周二",
  42. 3: "周三",
  43. 4: "周四",
  44. 5: "周五",
  45. 6: "周六",
  46. 7: "周日"
  47. };
  48. let weekNumber = moment(date).isoWeekday();
  49. return weeksObj[weekNumber];
  50. }
  51. },
  52. mounted() {
  53. const index = _.findIndex(this.days, function(o) {
  54. // console.log('o: ', o.getDate());
  55. // console.log('new Date().getDate(): ', new Date().getDate());
  56. return o.getDate() === new Date().getDate();
  57. });
  58. console.log("index: ", index);
  59. this.tabIndex = index;
  60. },
  61. created() {
  62. this.initData(null);
  63. },
  64. methods: {
  65. formatDate(year, month, day) {
  66. const y = year;
  67. let m = month;
  68. if (m < 10) m = `0${m}`;
  69. let d = day;
  70. if (d < 10) d = `0${d}`;
  71. return `${y}-${m}-${d}`;
  72. },
  73. pickDate(date) {
  74. let newDate = moment(date).format("YYYY-MM-DD");
  75. this.$emit("dateValue", newDate);
  76. },
  77. initData(cur) {
  78. let date = "";
  79. if (cur) {
  80. date = new Date(cur);
  81. } else {
  82. date = new Date();
  83. }
  84. this.currentDay = date.getDate(); // 今日日期 几号
  85. this.currentYear = date.getFullYear(); // 当前年份
  86. this.currentMonth = date.getMonth() + 1; // 当前月份
  87. this.currentWeek = date.getDay(); // 1...6,0 // 星期几
  88. if (this.currentWeek === 0) {
  89. this.currentWeek = 7;
  90. }
  91. const str = this.formatDate(
  92. this.currentYear,
  93. this.currentMonth,
  94. this.currentDay
  95. ); // 今日日期 年-月-日
  96. this.days.length = 0;
  97. // 今天是周日,放在第一行第7个位置,前面6个 这里默认显示一周,如果需要显示一个月,则第二个循环为 i<= 35- this.currentWeek
  98. /* eslint-disabled */
  99. for (let i = this.currentWeek - 1; i >= 0; i -= 1) {
  100. const d = new Date(str);
  101. d.setDate(d.getDate() - i);
  102. // console.log(y:" + d.getDate())
  103. this.days.push(d);
  104. }
  105. for (let i = 1; i <= 7 - this.currentWeek; i += 1) {
  106. const d = new Date(str);
  107. d.setDate(d.getDate() + i);
  108. this.days.push(d);
  109. }
  110. },
  111. // 上个星期
  112. weekPre() {
  113. const d = this.days[0]; // 如果当期日期是7号或者小于7号
  114. d.setDate(d.getDate() - 7);
  115. this.initData(d);
  116. },
  117. // 下个星期
  118. weekNext() {
  119. const d = this.days[6]; // 如果当期日期是7号或者小于7号
  120. d.setDate(d.getDate() + 7);
  121. this.initData(d);
  122. },
  123. // 上一個月 传入当前年份和月份
  124. pickPre(year, month) {
  125. const d = new Date(this.formatDate(year, month, 1));
  126. d.setDate(0);
  127. this.initData(this.formatDate(d.getFullYear(), d.getMonth() + 1, 1));
  128. },
  129. // 下一個月 传入当前年份和月份
  130. pickNext(year, month) {
  131. const d = new Date(this.formatDate(year, month, 1));
  132. d.setDate(35);
  133. this.initData(this.formatDate(d.getFullYear(), d.getMonth() + 1, 1));
  134. },
  135. // 当前选择日期
  136. pick(date, index) {
  137. let newDate = moment(date).format("YYYY-MM-DD");
  138. this.$emit("dateValue", newDate);
  139. // console.log("index: ", index);
  140. this.tabIndex = index;
  141. // alert(
  142. // this.formatDate(date.getFullYear(), date.getMonth() + 1, date.getDate())
  143. // );
  144. },
  145. pickTime(time, index) {
  146. // console.log('time: ', time);
  147. let timeArr = [];
  148. timeArr.push(_.head(_.split(time, "~")));
  149. console.log("timeArr: ", timeArr);
  150. this.$emit("timeValue", _.join(timeArr), "");
  151. // console.log("index: ", index);
  152. this.tabTimeIndex = index;
  153. // alert(
  154. // this.formatDate(date.getFullYear(), date.getMonth() + 1, date.getDate())
  155. // );
  156. }
  157. }
  158. };
  159. </script>

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

人气教程排行