Jelajahi Sumber

fix: event hit algorithm

Casper Dai 3 tahun lalu
induk
melakukan
a666bf1763
2 mengubah file dengan 12 tambahan dan 13 penghapusan
  1. 7 8
      src/utils/event.js
  2. 5 5
      src/views/schedule/timeline/index.vue

+ 7 - 8
src/utils/event.js

@@ -94,17 +94,16 @@ export function isHit (event, date) {
 
 function isHitWeeklyByDate (event, date) {
   date = toDate(date)
-  const isOver = isOverDay(event)
   const byDay = event.byDay
   const week = date.getDay()
-  if (!isOver) {
+  if (!isOverDay(event)) {
     return byDay.includes(week) && isIn(toTimeStr(date), event.startTime, correctEndTime(event.endTime))
   }
-  if (byDay.includes(week)) {
-    return isIn(toTimeStr(date), event.startTime, '24:00:00')
+  if (byDay.includes(week) && isIn(toTimeStr(date), event.startTime, '24:00:00')) {
+    return true
   }
-  if (byDay.includes(offsetWeek(week, -1))) {
-    return isIn(toTimeStr(date), '00:00:00', event.endTime)
+  if (byDay.includes(offsetWeek(week, -1)) && isIn(toTimeStr(date), '00:00:00', event.endTime)) {
+    return true
   }
   return false
 }
@@ -144,7 +143,7 @@ export function getStartDate (event, date) {
 
 function getWeeklyStartDate (event, date) {
   const time = toTimeStr(date)
-  return time < date.startTime
+  return time < event.startTime
     ? new Date(`${toDateStr(date, -1)} ${event.startTime}`)
     : new Date(`${toDateStr(date)} ${event.startTime}`)
 }
@@ -160,7 +159,7 @@ export function getFinishDate (event, date) {
 
 function getWeeklyFinishDate (event, date) {
   const time = toTimeStr(date)
-  return time < date.startTime
+  return time < event.startTime
     ? new Date(`${toDateStr(date)} ${event.endTime}`)
     : new Date(`${toDateStr(date, isOverDay(event) ? 1 : 0)} ${correctEndTime(event.endTime)}`)
 }

+ 5 - 5
src/views/schedule/timeline/index.vue

@@ -358,19 +358,19 @@ export default {
       const options = device.options
       options.error = false
       options.loading = true
-      getTimeline(device.id, { custom: true }).then(
+      getTimeline(device.id, { custom: true }).finally(() => {
+        options.loading = false
+      }).then(
         events => {
           const now = Date.now()
-          options.events = this.transformEvents(events.map(this.transformEvent).filter(({ until }) => !until || now < new Date(until)))
+          options.events = this.transformEvents(events.map(this.transformEvent).filter(({ until }) => !until || now < toDate(until)))
           this.calcEvents(options)
         },
         () => {
           options.error = true
           options.list = []
         }
-      ).finally(() => {
-        options.loading = false
-      })
+      )
     },
     transformEvent (event) {
       return {