Przeglądaj źródła

与移动端同步运营活动管理修改时间

sunshibo 2 miesięcy temu
rodzic
commit
e9846f6b46
1 zmienionych plików z 49 dodań i 43 usunięć
  1. 49 43
      src/views/operationManagement/newActivity.vue

+ 49 - 43
src/views/operationManagement/newActivity.vue

@@ -443,28 +443,29 @@ const rules = reactive({
           }
           const start = new Date(startTime);
           const end = new Date(endTime);
-          if (start >= end) {
+          start.setHours(0, 0, 0, 0);
+          end.setHours(0, 0, 0, 0);
+          if (start.getTime() >= end.getTime()) {
             callback(new Error("报名开始时间必须早于报名结束时间"));
             return;
           }
-          // 检查报名时间是否在活动开始时间之前
+          // 报名时间必须在活动时间范围内(活动开始日期~活动结束日期)
           if (
             activityModel.value.activityTimeRange &&
             Array.isArray(activityModel.value.activityTimeRange) &&
             activityModel.value.activityTimeRange.length === 2
           ) {
-            const activityStartTime = new Date(activityModel.value.activityTimeRange[0]);
-            activityStartTime.setHours(0, 0, 0, 0);
-            start.setHours(0, 0, 0, 0);
-            end.setHours(0, 0, 0, 0);
-
-            // 报名开始时间和结束时间都必须在活动开始时间之前(不能等于)
-            if (start >= activityStartTime) {
-              callback(new Error("报名开始时间必须在活动开始时间之前"));
+            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("报名开始时间必须在活动时间范围内"));
               return;
             }
-            if (end >= activityStartTime) {
-              callback(new Error("报名结束时间必须在活动开始时间之前"));
+            if (end.getTime() > activityEnd.getTime()) {
+              callback(new Error("报名结束时间必须在活动时间范围内"));
               return;
             }
           }
@@ -594,24 +595,24 @@ const disabledDate = (time: Date) => {
   return time.getTime() < today.getTime();
 };
 
-// 禁用报名日期(不能早于今天,且不能晚于或等于活动开始时间)
+// 禁用报名日期:只能选择活动时间范围内的日期(在活动开始日期与结束日期之间)
 const disabledSignupDate = (time: Date) => {
-  const today = new Date();
-  today.setHours(0, 0, 0, 0);
+  const t = new Date(time);
+  t.setHours(0, 0, 0, 0);
 
-  // 不能早于今天
-  if (time.getTime() < today.getTime()) {
+  // 未选择活动时间时,不允许选择报名日期
+  if (!activityModel.value.activityTimeRange || activityModel.value.activityTimeRange.length !== 2) {
     return true;
   }
 
-  // 如果已选择活动时间,报名时间不能晚于或等于活动开始时间
-  if (activityModel.value.activityTimeRange && activityModel.value.activityTimeRange.length === 2) {
-    const activityStartTime = new Date(activityModel.value.activityTimeRange[0]);
-    activityStartTime.setHours(0, 0, 0, 0);
-    // 报名时间必须早于活动开始时间(不能等于)
-    return time.getTime() >= activityStartTime.getTime();
-  }
+  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 (t.getTime() < activityStart.getTime()) return true;
+  if (t.getTime() > activityEnd.getTime()) return true;
   return false;
 };
 
@@ -1158,7 +1159,7 @@ watch(
 );
 
 /**
- * 监听活动时间变化,如果报名时间不符合要求则清空并提示
+ * 监听活动时间变化,如果报名时间不在新的活动时间范围内则清空并提示
  */
 watch(
   () => activityModel.value.activityTimeRange,
@@ -1176,22 +1177,24 @@ watch(
       activityModel.value.signupTimeRange &&
       activityModel.value.signupTimeRange.length === 2
     ) {
-      const activityStartTime = new Date(newVal[0]);
-      activityStartTime.setHours(0, 0, 0, 0);
-      const signupStartTime = new Date(activityModel.value.signupTimeRange[0]);
-      signupStartTime.setHours(0, 0, 0, 0);
-      const signupEndTime = new Date(activityModel.value.signupTimeRange[1]);
-      signupEndTime.setHours(0, 0, 0, 0);
-
-      // 如果报名开始时间或结束时间晚于或等于活动开始时间,清空报名时间并提示
-      if (signupStartTime >= activityStartTime || signupEndTime >= activityStartTime) {
+      const activityStart = new Date(newVal[0]);
+      activityStart.setHours(0, 0, 0, 0);
+      const activityEnd = new Date(newVal[1]);
+      activityEnd.setHours(0, 0, 0, 0);
+      const signupStart = new Date(activityModel.value.signupTimeRange[0]);
+      signupStart.setHours(0, 0, 0, 0);
+      const signupEnd = new Date(activityModel.value.signupTimeRange[1]);
+      signupEnd.setHours(0, 0, 0, 0);
+
+      // 报名时间必须在活动时间范围内,否则清空报名时间并提示
+      const outOfRange = signupStart.getTime() < activityStart.getTime() || signupEnd.getTime() > activityEnd.getTime();
+      if (outOfRange) {
         activityModel.value.signupTimeRange = [];
         nextTick(() => {
           ruleFormRef.value?.clearValidate("signupTimeRange");
-          ElMessage.warning("活动时间已调整,报名时间必须在活动开始时间之前,请重新选择报名时间");
+          ElMessage.warning("活动时间已调整,报名时间必须在活动时间范围内,请重新选择报名时间");
         });
       } else {
-        // 如果报名时间符合要求,重新验证
         nextTick(() => {
           ruleFormRef.value?.validateField("signupTimeRange");
         });
@@ -1388,7 +1391,10 @@ const handleSubmit = async () => {
 
   await ruleFormRef.value.validate(async valid => {
     if (valid) {
-      const [startTime, endTime] = activityModel.value.activityTimeRange || [];
+      const [activityStartDate, activityEndDate] = activityModel.value.activityTimeRange || [];
+      // 活动时间:开始日期传当天 00:00:00,结束日期传当天 23:59:59
+      const startTime = activityStartDate ? `${activityStartDate} 00:00:00` : "";
+      const endTime = activityEndDate ? `${activityEndDate} 23:59:59` : "";
       const auditParam = {
         text: `${activityModel.value.activityName}, ${activityModel.value.imgDescribe || ""}`,
         image_urls: [titleImageUrl.value, detailImageUrl.value]
@@ -1396,8 +1402,8 @@ const handleSubmit = async () => {
       const params: any = {
         activityType: activityModel.value.activityType,
         activityName: activityModel.value.activityName,
-        startTime: startTime,
-        endTime: endTime,
+        startTime,
+        endTime,
         uploadImgType: activityModel.value.uploadImgType,
         storeId: localGet("createdId"),
         groupType: localGet("businessSection"),
@@ -1407,10 +1413,10 @@ const handleSubmit = async () => {
 
       // 根据活动类型添加不同的字段,确保只提交对应类型的字段
       if (activityModel.value.activityType === "MARKETING") {
-        // 营销活动:只添加营销活动相关字段
-        const [signupStartTime, signupEndTime] = activityModel.value.signupTimeRange || [];
-        params.signupStartTime = signupStartTime;
-        params.signupEndTime = signupEndTime;
+        // 营销活动:只添加营销活动相关字段;报名时间开始传当天 00:00:00,结束传当天 23:59:59
+        const [signupStartDate, signupEndDate] = activityModel.value.signupTimeRange || [];
+        params.signupStartTime = signupStartDate ? `${signupStartDate} 00:00:00` : "";
+        params.signupEndTime = signupEndDate ? `${signupEndDate} 23:59:59` : "";
         params.activityLimitPeople = activityModel.value.activityLimitPeople;
         params.activityDetails = activityModel.value.activityDetails;
         // 确保不包含评论有礼的字段