|
|
@@ -76,7 +76,7 @@
|
|
|
<el-form-item class="activity-time-item" label="报名时间" prop="signupTimeRange">
|
|
|
<el-date-picker
|
|
|
v-model="activityModel.signupTimeRange"
|
|
|
- :disabled-date="disabledDate"
|
|
|
+ :disabled-date="disabledSignupDate"
|
|
|
class="form-input"
|
|
|
end-placeholder="结束日期"
|
|
|
format="YYYY/MM/DD"
|
|
|
@@ -418,6 +418,16 @@ const rules = reactive({
|
|
|
callback(new Error("报名开始时间必须早于报名结束时间"));
|
|
|
return;
|
|
|
}
|
|
|
+ // 检查报名时间是否在活动结束时间之后
|
|
|
+ if (activityModel.value.activityTimeRange && activityModel.value.activityTimeRange.length === 2) {
|
|
|
+ const activityEndTime = new Date(activityModel.value.activityTimeRange[1]);
|
|
|
+ activityEndTime.setHours(0, 0, 0, 0);
|
|
|
+ start.setHours(0, 0, 0, 0);
|
|
|
+ if (start <= activityEndTime) {
|
|
|
+ callback(new Error("报名开始时间必须在活动结束时间之后"));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
callback();
|
|
|
},
|
|
|
@@ -536,6 +546,27 @@ const disabledDate = (time: Date) => {
|
|
|
return time.getTime() < today.getTime();
|
|
|
};
|
|
|
|
|
|
+// 禁用报名日期(不能早于今天,且不能早于活动结束时间)
|
|
|
+const disabledSignupDate = (time: Date) => {
|
|
|
+ const today = new Date();
|
|
|
+ today.setHours(0, 0, 0, 0);
|
|
|
+
|
|
|
+ // 不能早于今天
|
|
|
+ if (time.getTime() < today.getTime()) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果已选择活动时间,报名时间不能早于活动结束时间
|
|
|
+ if (activityModel.value.activityTimeRange && activityModel.value.activityTimeRange.length === 2) {
|
|
|
+ const activityEndTime = new Date(activityModel.value.activityTimeRange[1]);
|
|
|
+ activityEndTime.setHours(0, 0, 0, 0);
|
|
|
+ // 报名时间必须晚于活动结束时间(不能等于)
|
|
|
+ return time.getTime() <= activityEndTime.getTime();
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+};
|
|
|
+
|
|
|
// ==================== 图片参数转换函数 ====================
|
|
|
|
|
|
/**
|
|
|
@@ -1019,6 +1050,42 @@ watch(
|
|
|
}
|
|
|
);
|
|
|
|
|
|
+/**
|
|
|
+ * 监听活动时间变化,如果报名时间不符合要求则清空并提示
|
|
|
+ */
|
|
|
+watch(
|
|
|
+ () => activityModel.value.activityTimeRange,
|
|
|
+ (newVal, oldVal) => {
|
|
|
+ // 初始化时不处理
|
|
|
+ if (oldVal === undefined || oldVal === null) return;
|
|
|
+
|
|
|
+ // 只有营销活动才需要检查报名时间
|
|
|
+ if (activityModel.value.activityType !== 1) return;
|
|
|
+
|
|
|
+ // 如果活动时间已选择且报名时间已选择
|
|
|
+ if (
|
|
|
+ newVal &&
|
|
|
+ newVal.length === 2 &&
|
|
|
+ activityModel.value.signupTimeRange &&
|
|
|
+ activityModel.value.signupTimeRange.length === 2
|
|
|
+ ) {
|
|
|
+ const activityEndTime = new Date(newVal[1]);
|
|
|
+ activityEndTime.setHours(0, 0, 0, 0);
|
|
|
+ const signupStartTime = new Date(activityModel.value.signupTimeRange[0]);
|
|
|
+ signupStartTime.setHours(0, 0, 0, 0);
|
|
|
+
|
|
|
+ // 如果报名开始时间早于或等于活动结束时间,清空报名时间并提示
|
|
|
+ if (signupStartTime <= activityEndTime) {
|
|
|
+ activityModel.value.signupTimeRange = [];
|
|
|
+ nextTick(() => {
|
|
|
+ ruleFormRef.value?.clearValidate("signupTimeRange");
|
|
|
+ ElMessage.warning("报名开始时间必须在活动结束时间之后,请重新选择报名时间");
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+);
|
|
|
+
|
|
|
// ==================== 生命周期钩子 ====================
|
|
|
|
|
|
/**
|