Ver código fonte

fix: 调整报名时间校验

sgc 2 meses atrás
pai
commit
683618d610
1 arquivos alterados com 68 adições e 1 exclusões
  1. 68 1
      src/views/operationManagement/newActivity.vue

+ 68 - 1
src/views/operationManagement/newActivity.vue

@@ -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("报名开始时间必须在活动结束时间之后,请重新选择报名时间");
+        });
+      }
+    }
+  }
+);
+
 // ==================== 生命周期钩子 ====================
 
 /**