|
@@ -445,27 +445,41 @@ const rules = reactive({
|
|
|
const end = new Date(endTime);
|
|
const end = new Date(endTime);
|
|
|
start.setHours(0, 0, 0, 0);
|
|
start.setHours(0, 0, 0, 0);
|
|
|
end.setHours(0, 0, 0, 0);
|
|
end.setHours(0, 0, 0, 0);
|
|
|
- // if (start.getTime() >= end.getTime()) {
|
|
|
|
|
- // callback(new Error("报名开始时间必须早于报名结束时间"));
|
|
|
|
|
- // return;
|
|
|
|
|
- // }
|
|
|
|
|
- // 报名时间必须在活动时间范围内(活动开始日期~活动结束日期)
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // 获取当天日期
|
|
|
|
|
+ const today = new Date();
|
|
|
|
|
+ today.setHours(0, 0, 0, 0);
|
|
|
|
|
+
|
|
|
|
|
+ // 1. 报名开始时间最早为当天
|
|
|
|
|
+ if (start.getTime() < today.getTime()) {
|
|
|
|
|
+ callback(new Error("报名开始时间不能早于当天"));
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 报名开始时间必须早于报名结束时间
|
|
|
|
|
+ if (start.getTime() >= end.getTime()) {
|
|
|
|
|
+ callback(new Error("报名开始时间必须早于报名结束时间"));
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 验证与活动时间的关系
|
|
|
if (
|
|
if (
|
|
|
activityModel.value.activityTimeRange &&
|
|
activityModel.value.activityTimeRange &&
|
|
|
Array.isArray(activityModel.value.activityTimeRange) &&
|
|
Array.isArray(activityModel.value.activityTimeRange) &&
|
|
|
activityModel.value.activityTimeRange.length === 2
|
|
activityModel.value.activityTimeRange.length === 2
|
|
|
) {
|
|
) {
|
|
|
- const activityStart = new Date(activityModel.value.activityTimeRange[0]);
|
|
|
|
|
- activityStart.setHours(0, 0, 0, 0);
|
|
|
|
|
const activityEnd = new Date(activityModel.value.activityTimeRange[1]);
|
|
const activityEnd = new Date(activityModel.value.activityTimeRange[1]);
|
|
|
activityEnd.setHours(0, 0, 0, 0);
|
|
activityEnd.setHours(0, 0, 0, 0);
|
|
|
|
|
|
|
|
- if (start.getTime() < activityStart.getTime()) {
|
|
|
|
|
- callback(new Error("报名开始时间必须在活动时间范围内"));
|
|
|
|
|
|
|
+ // 报名开始时间最晚要在活动结束时间之前
|
|
|
|
|
+ if (start.getTime() >= activityEnd.getTime()) {
|
|
|
|
|
+ callback(new Error("报名开始时间必须在活动结束时间之前"));
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ // 报名结束时间不能超过活动结束时间
|
|
|
if (end.getTime() > activityEnd.getTime()) {
|
|
if (end.getTime() > activityEnd.getTime()) {
|
|
|
- callback(new Error("报名结束时间必须在活动时间范围内"));
|
|
|
|
|
|
|
+ callback(new Error("报名结束时间不能超过活动结束时间"));
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -595,24 +609,34 @@ const disabledDate = (time: Date) => {
|
|
|
return time.getTime() < today.getTime();
|
|
return time.getTime() < today.getTime();
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-// 禁用报名日期:只能选择活动时间范围内的日期(在活动开始日期与结束日期之间)
|
|
|
|
|
|
|
+// 禁用报名日期:报名开始时间最早为当天,报名结束时间不能超过活动结束时间
|
|
|
const disabledSignupDate = (time: Date) => {
|
|
const disabledSignupDate = (time: Date) => {
|
|
|
const t = new Date(time);
|
|
const t = new Date(time);
|
|
|
t.setHours(0, 0, 0, 0);
|
|
t.setHours(0, 0, 0, 0);
|
|
|
|
|
|
|
|
- // 未选择活动时间时,不允许选择报名日期
|
|
|
|
|
- if (!activityModel.value.activityTimeRange || activityModel.value.activityTimeRange.length !== 2) {
|
|
|
|
|
|
|
+ // 获取当天日期
|
|
|
|
|
+ const today = new Date();
|
|
|
|
|
+ today.setHours(0, 0, 0, 0);
|
|
|
|
|
+
|
|
|
|
|
+ // 禁用早于当天的日期
|
|
|
|
|
+ if (t.getTime() < today.getTime()) {
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- const activityStart = new Date(activityModel.value.activityTimeRange[0]);
|
|
|
|
|
- activityStart.setHours(0, 0, 0, 0);
|
|
|
|
|
|
|
+ // 未选择活动时间时,允许选择当天及之后的日期
|
|
|
|
|
+ if (!activityModel.value.activityTimeRange || activityModel.value.activityTimeRange.length !== 2) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 获取活动结束时间
|
|
|
const activityEnd = new Date(activityModel.value.activityTimeRange[1]);
|
|
const activityEnd = new Date(activityModel.value.activityTimeRange[1]);
|
|
|
activityEnd.setHours(0, 0, 0, 0);
|
|
activityEnd.setHours(0, 0, 0, 0);
|
|
|
|
|
|
|
|
- // 只能选择活动时间区域内的日期:早于活动开始或晚于活动结束的日期禁用
|
|
|
|
|
- if (t.getTime() < activityStart.getTime()) return true;
|
|
|
|
|
- if (t.getTime() > activityEnd.getTime()) return true;
|
|
|
|
|
|
|
+ // 禁用超过活动结束时间的日期(报名结束时间不能超过活动结束时间)
|
|
|
|
|
+ if (t.getTime() > activityEnd.getTime()) {
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
return false;
|
|
return false;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -1186,13 +1210,23 @@ watch(
|
|
|
const signupEnd = new Date(activityModel.value.signupTimeRange[1]);
|
|
const signupEnd = new Date(activityModel.value.signupTimeRange[1]);
|
|
|
signupEnd.setHours(0, 0, 0, 0);
|
|
signupEnd.setHours(0, 0, 0, 0);
|
|
|
|
|
|
|
|
- // 报名时间必须在活动时间范围内,否则清空报名时间并提示
|
|
|
|
|
- const outOfRange = signupStart.getTime() < activityStart.getTime() || signupEnd.getTime() > activityEnd.getTime();
|
|
|
|
|
|
|
+ // 检查报名时间是否符合新的规则:
|
|
|
|
|
+ // 1. 报名开始时间 >= 当天
|
|
|
|
|
+ // 2. 报名开始时间 < 活动结束时间
|
|
|
|
|
+ // 3. 报名结束时间 <= 活动结束时间
|
|
|
|
|
+ const today = new Date();
|
|
|
|
|
+ today.setHours(0, 0, 0, 0);
|
|
|
|
|
+
|
|
|
|
|
+ const outOfRange =
|
|
|
|
|
+ signupStart.getTime() < today.getTime() || // 报名开始时间早于当天
|
|
|
|
|
+ signupStart.getTime() >= activityEnd.getTime() || // 报名开始时间 >= 活动结束时间
|
|
|
|
|
+ signupEnd.getTime() > activityEnd.getTime(); // 报名结束时间 > 活动结束时间
|
|
|
|
|
+
|
|
|
if (outOfRange) {
|
|
if (outOfRange) {
|
|
|
activityModel.value.signupTimeRange = [];
|
|
activityModel.value.signupTimeRange = [];
|
|
|
nextTick(() => {
|
|
nextTick(() => {
|
|
|
ruleFormRef.value?.clearValidate("signupTimeRange");
|
|
ruleFormRef.value?.clearValidate("signupTimeRange");
|
|
|
- ElMessage.warning("活动时间已调整,报名时间必须在活动时间范围内,请重新选择报名时间");
|
|
|
|
|
|
|
+ ElMessage.warning("活动时间已调整,报名时间不符合规则,请重新选择报名时间");
|
|
|
});
|
|
});
|
|
|
} else {
|
|
} else {
|
|
|
nextTick(() => {
|
|
nextTick(() => {
|