course.vue 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. <template>
  2. <van-picker
  3. :columns="columns"
  4. show-toolbar
  5. @cancel="$listeners.close()"
  6. @confirm="onTeachingConfirm"
  7. />
  8. </template>
  9. <script>
  10. let minutes = []; // 分钟数
  11. for (let i = 0; i < 60; i++) {
  12. let mi = i < 10 ? "0" + i : i;
  13. minutes.push(mi + "分");
  14. }
  15. export default {
  16. props: ['scheduleList', 'singleClassMinutes'],
  17. data() {
  18. return {
  19. // 排课弹窗
  20. columns: [{
  21. // 课程选项
  22. values: ["线上", "线下"],
  23. className: "type",
  24. }, {
  25. values: ["周一", "周二", "周三", "周四", "周五", "周六", "周日"],
  26. className: "week",
  27. }, {
  28. values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
  29. className: "hours",
  30. defaultIndex: 7,
  31. }, {
  32. values: minutes,
  33. className: "minutes",
  34. }],
  35. }
  36. },
  37. watch: {
  38. 'singleClassMinutes'() {
  39. this.scheduleList = []
  40. }
  41. },
  42. methods: {
  43. onTeachingConfirm(value) {
  44. // 添加课程
  45. let scheduleList = this.scheduleList;
  46. let startTime =
  47. (value[2] >= 10 ? value[2] : "0" + value[2]) +
  48. ":" +
  49. value[3].split("分")[0];
  50. let endTime = this.MinutesTest(
  51. value[2],
  52. value[3],
  53. this.singleClassMinutes
  54. );
  55. let isAdd = true;
  56. scheduleList.forEach((item) => {
  57. let isStartTime = this.timeIsRange(startTime, endTime, item.startTime);
  58. let isEndTime = this.timeIsRange(startTime, endTime, item.endTime);
  59. if (isAdd) {
  60. if (value[1] == item.weekStr) {
  61. if (isStartTime || isEndTime) {
  62. isAdd = false;
  63. } else {
  64. isAdd = true;
  65. }
  66. } else if (value[1] != item.weekStr) {
  67. isAdd = true;
  68. }
  69. }
  70. });
  71. // 判断结束时间
  72. const endTime1 = endTime ? Number(endTime.split(":")[0]) : 0
  73. const endTime2 = endTime ? Number(endTime.split(":")[1]) : 0
  74. if(endTime1 >= 21 && endTime2 > 0) {
  75. this.$toast("课程安排结束时间超过21:00");
  76. return;
  77. }
  78. if (isAdd) {
  79. // 判断时间范围是否有重复
  80. scheduleList.push({
  81. type: value[0], // 线上还是线下
  82. weekStr: value[1],
  83. weekIndex: this.getWeek(value[1]),
  84. startTime: startTime,
  85. endTime: endTime,
  86. id: Date.now(),
  87. });
  88. // this.courseForm.teachingStatus = false;
  89. this.$listeners.close()
  90. // this.setTimeTable();
  91. } else {
  92. this.$toast("该时间段已排课请重选时间");
  93. return;
  94. }
  95. },
  96. // 分钟小时相加减
  97. MinutesTest(hour, mins, interval) {
  98. let min = mins.split("分")[0];
  99. let sDate1 = new Date(1900, 1, 1, hour, min);
  100. sDate1.setMinutes(sDate1.getMinutes() + parseInt(interval));
  101. let H = sDate1.getHours();
  102. let M = sDate1.getMinutes();
  103. if (H < 10) H = "0" + H;
  104. if (M < 10) M = "0" + M;
  105. return H + ":" + M;
  106. },
  107. // 判断时间是否在时间段内
  108. timeIsRange(beginTime, endTime, nowTime) {
  109. var strB = beginTime.split(":");
  110. if (strB.length != 2) {
  111. return false;
  112. }
  113. var strE = endTime.split(":");
  114. if (strE.length != 2) {
  115. return false;
  116. }
  117. var strN = nowTime.split(":");
  118. if (strE.length != 2) {
  119. return false;
  120. }
  121. var b = new Date();
  122. var e = new Date();
  123. var n = new Date();
  124. b.setHours(strB[0]);
  125. b.setMinutes(strB[1]);
  126. e.setHours(strE[0]);
  127. e.setMinutes(strE[1]);
  128. n.setHours(strN[0]);
  129. n.setMinutes(strN[1]);
  130. if (n.getTime() - b.getTime() >= 0 && n.getTime() - e.getTime() <= 0) {
  131. // 在时间范围内
  132. return true;
  133. } else {
  134. // 不在时间范围内
  135. return false;
  136. }
  137. },
  138. getWeek(str) {
  139. // 获取周几索引值
  140. let template = {
  141. '周一': 1,
  142. '周二': 2,
  143. '周三': 3,
  144. '周四': 4,
  145. '周五': 5,
  146. '周六': 6,
  147. '周日': 0,
  148. };
  149. return template[str];
  150. },
  151. }
  152. }
  153. </script>