日常办公-场地预约:
已过的时间段应该不能选择
This commit is contained in:
+18
-1
@@ -457,9 +457,13 @@ public class SiteCugApplyController {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 当预约日期就是今天时,已经过了开始时间的时间块直接标记为不可预约,
|
||||||
|
* 这样全天候和分段预约在前端展示时都会统一变成禁用状态。
|
||||||
|
*/
|
||||||
private NutMap buildAvailabilityBlock(String day, int startMinute, int endMinute, List<int[]> reservedRanges, List<int[]> disabledRanges, boolean siteClosed, int groupIndex, String groupLabel) {
|
private NutMap buildAvailabilityBlock(String day, int startMinute, int endMinute, List<int[]> reservedRanges, List<int[]> disabledRanges, boolean siteClosed, int groupIndex, String groupLabel) {
|
||||||
String status = "available";
|
String status = "available";
|
||||||
if (siteClosed || intersectsAny(startMinute, endMinute, disabledRanges)) {
|
if (siteClosed || isExpiredAvailabilityBlock(day, startMinute) || intersectsAny(startMinute, endMinute, disabledRanges)) {
|
||||||
status = "closed";
|
status = "closed";
|
||||||
} else if (intersectsAny(startMinute, endMinute, reservedRanges)) {
|
} else if (intersectsAny(startMinute, endMinute, reservedRanges)) {
|
||||||
status = "reserved";
|
status = "reserved";
|
||||||
@@ -478,6 +482,19 @@ public class SiteCugApplyController {
|
|||||||
.addv("endDateTime", day + " " + formatMinutes(endMinute) + ":00");
|
.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) {
|
private boolean isSiteClosed(SiteCugInfo siteInfo, String day, Set<String> holidaySet) {
|
||||||
if (isWeekend(day)) {
|
if (isWeekend(day)) {
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -800,18 +800,37 @@ const apply = {
|
|||||||
.filter(index => index > -1)
|
.filter(index => index > -1)
|
||||||
},
|
},
|
||||||
getBlockClass(block) {
|
getBlockClass(block) {
|
||||||
|
const expired = this.isExpiredAvailabilityBlock(block)
|
||||||
return {
|
return {
|
||||||
'apply-block': true,
|
'apply-block': true,
|
||||||
'apply-block--available': block.status === 'available' && !this.selectedBlockKeys.includes(block.key),
|
'apply-block--available': block.status === 'available' && !expired && !this.selectedBlockKeys.includes(block.key),
|
||||||
'apply-block--reserved': block.status === 'reserved',
|
'apply-block--reserved': block.status === 'reserved',
|
||||||
'apply-block--closed': block.status === 'closed',
|
'apply-block--closed': block.status === 'closed' || expired,
|
||||||
'apply-block--selected': this.selectedBlockKeys.includes(block.key),
|
'apply-block--selected': this.selectedBlockKeys.includes(block.key),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
/**
|
||||||
|
* 前端按当天当前时间再做一层兜底判断,避免预约弹窗长时间停留后,
|
||||||
|
* 之前可选的全天候时间块在开始后仍被继续点选。
|
||||||
|
*/
|
||||||
|
isExpiredAvailabilityBlock(block) {
|
||||||
|
if (!block || !block.startDateTime) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
const start = this.$moment(block.startDateTime)
|
||||||
|
if (!start.isValid()) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return start.isSame(this.$moment(), 'day') && !start.isAfter(this.$moment())
|
||||||
|
},
|
||||||
onAvailabilityBlockClick(block) {
|
onAvailabilityBlockClick(block) {
|
||||||
if (!block || !block.key) {
|
if (!block || !block.key) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if (this.isExpiredAvailabilityBlock(block) && !this.selectedBlockKeys.includes(block.key)) {
|
||||||
|
this.$message.warning('该时段开始时间已过,请选择其他时段')
|
||||||
|
return
|
||||||
|
}
|
||||||
if (block.status !== 'available' && !this.selectedBlockKeys.includes(block.key)) {
|
if (block.status !== 'available' && !this.selectedBlockKeys.includes(block.key)) {
|
||||||
this.$message.warning(block.status === 'reserved' ? '该时段已被预约,请选择其他时段' : '该时段当前不可预约')
|
this.$message.warning(block.status === 'reserved' ? '该时段已被预约,请选择其他时段' : '该时段当前不可预约')
|
||||||
return
|
return
|
||||||
@@ -860,7 +879,7 @@ const apply = {
|
|||||||
}
|
}
|
||||||
for (let i = startIndex; i <= endIndex; i++) {
|
for (let i = startIndex; i <= endIndex; i++) {
|
||||||
const block = this.availabilityBlocks[i]
|
const block = this.availabilityBlocks[i]
|
||||||
if (!block || block.status !== 'available') {
|
if (!block || block.status !== 'available' || this.isExpiredAvailabilityBlock(block)) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if (i > startIndex) {
|
if (i > startIndex) {
|
||||||
|
|||||||
Reference in New Issue
Block a user