sgc 1 mesiac pred
rodič
commit
e7d63c1f09

+ 2 - 2
src/views/operationManagement/caseDetail.vue

@@ -11,10 +11,10 @@
             <div class="detail-label">所属活动 : {{ detail.activityName || detail.activityTitle || "-" }}</div>
           </div>
           <div class="detail-item">
-            <div class="detail-label">用户昵称 : {{ detail.signupName || "-" }}</div>
+            <div class="detail-label">用户昵称 : {{ detail.nickName || "-" }}</div>
           </div>
           <div class="detail-item">
-            <div class="detail-label">姓名 : {{ detail.userName || "-" }}</div>
+            <div class="detail-label">姓名 : {{ detail.signupName || "-" }}</div>
           </div>
           <div class="detail-item">
             <div class="detail-label">联系方式 : {{ detail.signupPhone || "-" }}</div>

+ 55 - 21
src/views/operationManagement/newActivity.vue

@@ -445,27 +445,41 @@ const rules = reactive({
           const end = new Date(endTime);
           start.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 (
             activityModel.value.activityTimeRange &&
             Array.isArray(activityModel.value.activityTimeRange) &&
             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]);
             activityEnd.setHours(0, 0, 0, 0);
 
-            if (start.getTime() < activityStart.getTime()) {
-              callback(new Error("报名开始时间必须在活动时间范围内"));
+            // 报名开始时间最晚要在活动结束时间之前
+            if (start.getTime() >= activityEnd.getTime()) {
+              callback(new Error("报名开始时间必须在活动结束时间之前"));
               return;
             }
+
+            // 报名结束时间不能超过活动结束时间
             if (end.getTime() > activityEnd.getTime()) {
-              callback(new Error("报名结束时间必须在活动时间范围内"));
+              callback(new Error("报名结束时间不能超过活动结束时间"));
               return;
             }
           }
@@ -595,24 +609,34 @@ const disabledDate = (time: Date) => {
   return time.getTime() < today.getTime();
 };
 
-// 禁用报名日期:只能选择活动时间范围内的日期(在活动开始日期与结束日期之间)
+// 禁用报名日期:报名开始时间最早为当天,报名结束时间不能超过活动结束时间
 const disabledSignupDate = (time: Date) => {
   const t = new Date(time);
   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;
   }
 
-  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]);
   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;
 };
 
@@ -1186,13 +1210,23 @@ watch(
       const signupEnd = new Date(activityModel.value.signupTimeRange[1]);
       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) {
         activityModel.value.signupTimeRange = [];
         nextTick(() => {
           ruleFormRef.value?.clearValidate("signupTimeRange");
-          ElMessage.warning("活动时间已调整,报名时间必须在活动时间范围内,请重新选择报名时间");
+          ElMessage.warning("活动时间已调整,报名时间不符合规则,请重新选择报名时间");
         });
       } else {
         nextTick(() => {