日常办公-场地预约:

已过的时间段应该不能选择
This commit is contained in:
2026-05-07 09:43:26 +08:00
parent 9641e0183b
commit 251abdc9f3
2 changed files with 40 additions and 4 deletions
@@ -457,9 +457,13 @@ public class SiteCugApplyController {
return result;
}
/**
* 当预约日期就是今天时,已经过了开始时间的时间块直接标记为不可预约,
* 这样全天候和分段预约在前端展示时都会统一变成禁用状态。
*/
private NutMap buildAvailabilityBlock(String day, int startMinute, int endMinute, List<int[]> reservedRanges, List<int[]> disabledRanges, boolean siteClosed, int groupIndex, String groupLabel) {
String status = "available";
if (siteClosed || intersectsAny(startMinute, endMinute, disabledRanges)) {
if (siteClosed || isExpiredAvailabilityBlock(day, startMinute) || intersectsAny(startMinute, endMinute, disabledRanges)) {
status = "closed";
} else if (intersectsAny(startMinute, endMinute, reservedRanges)) {
status = "reserved";
@@ -478,6 +482,19 @@ public class SiteCugApplyController {
.addv("endDateTime", day + " " + formatMinutes(endMinute) + ":00");
}
/**
* 仅在当天按“时间块开始时间是否已经过去”判断是否失效,
* 避免用户继续选中已经开始或已经结束的预约时段。
*/
private boolean isExpiredAvailabilityBlock(String day, int startMinute) {
String today = DateUtil.today();
if (!StrUtil.equals(today, day)) {
return false;
}
DateTime blockStart = DateUtil.parseDateTime(day + " " + formatMinutes(startMinute) + ":00");
return !blockStart.isAfter(DateUtil.date());
}
private boolean isSiteClosed(SiteCugInfo siteInfo, String day, Set<String> holidaySet) {
if (isWeekend(day)) {
return true;