Initial commit: gmTouringMiniApp project

This commit is contained in:
周瑞哲
2026-07-30 16:04:34 +08:00
commit ebcae02d35
201 changed files with 49545 additions and 0 deletions
+28
View File
@@ -0,0 +1,28 @@
import type { Duration, DurationFitStatus } from './types'
const REQUESTED_DURATION_MINUTES: Record<Duration, number> = {
half_day: 4 * 60,
full_day: 8 * 60,
}
const SIGNIFICANT_GAP_RATIO = 0.25
export function classifyDurationFit(requestedMinutes: number, plannedMinutes: number): DurationFitStatus {
if (!Number.isFinite(requestedMinutes) || requestedMinutes <= 0
|| !Number.isFinite(plannedMinutes) || plannedMinutes <= 0) {
return 'fits'
}
if (plannedMinutes > requestedMinutes)
return 'overflow'
if (requestedMinutes - plannedMinutes >= requestedMinutes * SIGNIFICANT_GAP_RATIO)
return 'underfilled'
return 'fits'
}
export function hasSignificantDurationGap(duration: Duration, plannedMinutes: number): boolean {
if (!Number.isFinite(plannedMinutes) || plannedMinutes <= 0)
return false
const requestedMinutes = REQUESTED_DURATION_MINUTES[duration]
return Math.abs(plannedMinutes - requestedMinutes) >= requestedMinutes * SIGNIFICANT_GAP_RATIO
}