zhuli 2 luni în urmă
părinte
comite
3c1dd56db2
1 a modificat fișierele cu 51 adăugiri și 102 ștergeri
  1. 51 102
      src/views/operationManagement/newActivity.vue

+ 51 - 102
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="disabledSignupDate"
+                  :disabled-date="disabledDate"
                   class="form-input"
                   end-placeholder="结束日期"
                   format="YYYY/MM/DD"
@@ -91,12 +91,10 @@
               <el-form-item label="活动限制人数">
                 <el-input
                   v-model="activityModel.activityLimitPeople"
-                  style="width: 94%"
                   placeholder="请输入"
                   maxlength="20"
                   @input="handlePositiveIntegerInput('activityLimitPeople', $event)"
                 />
-                <div style="width: 6%; text-align: right">人</div>
               </el-form-item>
 
               <!-- 活动详情 -->
@@ -174,7 +172,6 @@
                     :before-remove="handleBeforeRemove"
                     :disabled="hasUnuploadedImages"
                     :limit="9"
-                    :multiple="true"
                     :on-change="handleDetailUploadChange"
                     :on-exceed="handleDetailUploadExceed"
                     :on-preview="handlePictureCardPreview"
@@ -316,6 +313,17 @@ const rules = reactive({
           return;
         }
         callback();
+        // 活动时间验证通过后,重新验证报名时间(如果已设置)
+        if (
+          activityModel.value.activityType === 1 &&
+          activityModel.value.signupTimeRange &&
+          Array.isArray(activityModel.value.signupTimeRange) &&
+          activityModel.value.signupTimeRange.length === 2
+        ) {
+          nextTick(() => {
+            ruleFormRef.value?.validateField("signupTimeRange");
+          });
+        }
       },
       trigger: "change"
     }
@@ -418,14 +426,19 @@ 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;
+          // 检查报名结束时间是否在活动开始时间之前
+          if (
+            activityModel.value.activityTimeRange &&
+            Array.isArray(activityModel.value.activityTimeRange) &&
+            activityModel.value.activityTimeRange.length === 2
+          ) {
+            const [activityStartTime] = activityModel.value.activityTimeRange;
+            if (activityStartTime) {
+              const activityStart = new Date(activityStartTime);
+              if (end >= activityStart) {
+                callback(new Error("报名结束时间必须在活动开始时间之前"));
+                return;
+              }
             }
           }
         }
@@ -546,27 +559,6 @@ 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;
-};
-
 // ==================== 图片参数转换函数 ====================
 
 /**
@@ -745,21 +737,14 @@ const handleTitleUploadChange: UploadProps["onChange"] = async (uploadFile, uplo
     titleFileList.value.push(uploadFile);
   }
 
-  // 使用 nextTick 确保所有文件的 onChange 事件都处理完毕后再统一处理队列
-  await nextTick();
-
-  // 重新收集所有待上传的文件(包括新添加的和之前未上传的)
-  const readyFiles = titleFileList.value.filter(file => (file.status === "ready" || file.status === undefined) && file.raw);
-
-  // 清空并重新填充待上传队列
-  pendingUploadFiles.value = [];
-  readyFiles.forEach(file => {
-    if (!pendingUploadFiles.value.some(item => item.uid === file.uid)) {
-      pendingUploadFiles.value.push(file);
-    }
-  });
-
-  // 处理上传队列
+  const readyFiles = titleFileList.value.filter(file => file.status === "ready");
+  if (readyFiles.length) {
+    readyFiles.forEach(file => {
+      if (!pendingUploadFiles.value.some(item => item.uid === file.uid)) {
+        pendingUploadFiles.value.push(file);
+      }
+    });
+  }
   processUploadQueue("title");
 };
 
@@ -821,21 +806,14 @@ const handleDetailUploadChange: UploadProps["onChange"] = async (uploadFile, upl
     detailFileList.value.push(uploadFile);
   }
 
-  // 使用 nextTick 确保所有文件的 onChange 事件都处理完毕后再统一处理队列
-  await nextTick();
-
-  // 重新收集所有待上传的文件(包括新添加的和之前未上传的)
-  const readyFiles = detailFileList.value.filter(file => (file.status === "ready" || file.status === undefined) && file.raw);
-
-  // 清空并重新填充待上传队列
-  pendingUploadFiles.value = [];
-  readyFiles.forEach(file => {
-    if (!pendingUploadFiles.value.some(item => item.uid === file.uid)) {
-      pendingUploadFiles.value.push(file);
-    }
-  });
-
-  // 处理上传队列
+  const readyFiles = detailFileList.value.filter(file => file.status === "ready");
+  if (readyFiles.length) {
+    readyFiles.forEach(file => {
+      if (!pendingUploadFiles.value.some(item => item.uid === file.uid)) {
+        pendingUploadFiles.value.push(file);
+      }
+    });
+  }
   processUploadQueue("detail");
 };
 
@@ -843,27 +821,14 @@ const handleDetailUploadChange: UploadProps["onChange"] = async (uploadFile, upl
  * 处理上传队列 - 逐个上传文件
  */
 const processUploadQueue = async (type: string) => {
-  // 如果正在上传或队列为空,直接返回
   if (uploading.value || pendingUploadFiles.value.length === 0) {
     return;
   }
-
-  // 从队列中取出第一个文件
   const file = pendingUploadFiles.value.shift();
-  if (!file || !file.raw) {
-    // 如果文件无效,继续处理下一个
+  if (file) {
+    await uploadSingleFile(file, type);
     processUploadQueue(type);
-    return;
   }
-
-  // 上传文件
-  await uploadSingleFile(file, type);
-
-  // 上传完成后,继续处理队列中的下一个文件
-  // 使用 setTimeout 确保状态已更新
-  setTimeout(() => {
-    processUploadQueue(type);
-  }, 100);
 };
 
 /**
@@ -1051,37 +1016,21 @@ 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.activityType === 1 &&
       activityModel.value.signupTimeRange &&
+      Array.isArray(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("报名开始时间必须在活动结束时间之后,请重新选择报名时间");
-        });
-      }
+      nextTick(() => {
+        ruleFormRef.value?.validateField("signupTimeRange");
+      });
     }
   }
 );