Răsfoiți Sursa

feat(ticket): 更新优惠券和代金券的有效期及不可用日期类型配置

- 调整有效期类型的枚举值,从0/1改为1/2以匹配新逻辑
- 修改不可用日期类型的判断条件,适配新的类型值
- 自动根据最低消费金额设置是否有低消状态
- 在新建和编辑页面中同步更新相关字段的默认值和监听逻辑
- 优化表单验证规则以适应新的不可用日期类型
- 确保数据加载时正确解析并填充有效期和不可用日期字段
congxuesong 3 săptămâni în urmă
părinte
comite
d5a6ed3e18

+ 7 - 0
src/views/ticketManagement/couponDetail.vue

@@ -184,6 +184,13 @@ const loadDetailData = async () => {
     if (res && res.code == 200) {
       // 合并主数据
       couponModel.value = { ...couponModel.value, ...res.data };
+      // 根据最低消费金额设置是否有低消
+      const amount = Number(couponModel.value.minimumSpendingAmount);
+      if (!isNaN(amount) && amount > 0) {
+        couponModel.value.hasMinimumSpend = 1;
+      } else {
+        couponModel.value.hasMinimumSpend = 0;
+      }
     } else {
       ElMessage.error("加载详情数据失败");
     }

+ 11 - 11
src/views/ticketManagement/detail.vue

@@ -153,14 +153,14 @@ const voucherModel = ref<any>({
   buyUseStartTime: "",
   // 使用时间 - 结束时间
   buyUseEndTime: "",
-  // 有效期类型:0-指定天数,1-指定时间段内可用
-  expirationType: "0",
-  // 有效期天数(当expirationType为0时使用)
+  // 有效期类型:1-指定天数,2-指定时间段内可用
+  expirationType: "1",
+  // 有效期天数(当expirationType为1时使用)
   expirationDate: 0,
-  // 有效期时间段(当expirationType为1时使用)
+  // 有效期时间段(当expirationType为2时使用)
   validityPeriod: [],
-  // 不可用日期类型:0-全部日期可用,1-限制日期
-  unusedType: "0",
+  // 不可用日期类型:1-全部日期可用,2-限制日期
+  unusedType: "1",
   // 限制日期 - 星期选择(数组,存储选中的星期值)
   unavailableWeekdays: [],
   // 限制日期 - 节日选择(数组,存储选中的节日值)
@@ -258,7 +258,7 @@ const loadDetailData = async () => {
       voucherModel.value = { ...voucherModel.value, ...res.data };
 
       // 处理有效期时间段:将时间戳字符串转换为日期数组
-      if (voucherModel.value.validityPeriod && voucherModel.value.expirationType == 1) {
+      if (voucherModel.value.validityPeriod && voucherModel.value.expirationType == 2) {
         const periodArray = voucherModel.value.validityPeriod.split(",");
         voucherModel.value.validityPeriod = periodArray
           .map((item: string) => {
@@ -275,12 +275,12 @@ const loadDetailData = async () => {
       }
 
       // 处理不可用日期
-      if (voucherModel.value.unusedType == 1) {
+      if (voucherModel.value.unusedType == 2) {
         // 限制日期类型:格式为 "星期;节日"
         const listVal = voucherModel.value.unusedDate ? voucherModel.value.unusedDate.split(";") : [];
         voucherModel.value.unavailableWeekdays = listVal[0] ? listVal[0].split(",").filter((item: string) => item) : [];
         voucherModel.value.unavailableHolidays = listVal[1] ? listVal[1].split(",").filter((item: string) => item) : [];
-      } else if (voucherModel.value.unusedType === 2) {
+      } else if (voucherModel.value.unusedType === 3) {
         // 自定义不可用日期类型:格式为 "开始日期,结束日期;开始日期,结束日期"
         if (voucherModel.value.unusedDate) {
           const dateRanges = voucherModel.value.unusedDate.split(";");
@@ -345,12 +345,12 @@ const formatHour = (hour: string | number) => {
  * 获取有效期文本
  */
 const getExpirationText = () => {
-  if (voucherModel.value.expirationType === "0" || voucherModel.value.expirationType == 0) {
+  if (voucherModel.value.expirationType == "1") {
     if (voucherModel.value.expirationDate) {
       return `购买后${voucherModel.value.expirationDate}天`;
     }
     return "--";
-  } else if (voucherModel.value.expirationType === "1" || voucherModel.value.expirationType == 1) {
+  } else if (voucherModel.value.expirationType == "2") {
     if (
       voucherModel.value.validityPeriod &&
       Array.isArray(voucherModel.value.validityPeriod) &&

+ 25 - 1
src/views/ticketManagement/newCoupon.vue

@@ -223,7 +223,7 @@ const couponModel = ref<any>({
   // 用户是否需要收藏店铺领取:1-是,0-否
   attentionCanReceived: 1,
   // 是否有低消:1-是,0-否
-  hasMinimumSpend: 1,
+  hasMinimumSpend: 0,
   // 最低消费金额
   minimumSpendingAmount: "",
   // 补充说明
@@ -284,6 +284,23 @@ watch(
   }
 );
 
+/**
+ * 监听最低消费金额变化
+ * 当最低消费金额大于0时,自动设置为"是",否则设置为"否"
+ */
+watch(
+  () => couponModel.value.minimumSpendingAmount,
+  newVal => {
+    if (isInitializing.value) return;
+    const amount = Number(newVal);
+    if (!isNaN(amount) && amount > 0) {
+      couponModel.value.hasMinimumSpend = 1;
+    } else {
+      couponModel.value.hasMinimumSpend = 0;
+    }
+  }
+);
+
 // ==================== 事件处理函数 ====================
 /**
  * 组件挂载时初始化
@@ -295,6 +312,13 @@ onMounted(async () => {
   if (type.value != "add") {
     let res: any = await getCouponDetail({ counponId: id.value });
     couponModel.value = { ...couponModel.value, ...res.data };
+    // 根据最低消费金额设置是否有低消
+    const amount = Number(couponModel.value.minimumSpendingAmount);
+    if (!isNaN(amount) && amount > 0) {
+      couponModel.value.hasMinimumSpend = 1;
+    } else {
+      couponModel.value.hasMinimumSpend = 0;
+    }
   }
 
   await nextTick();

+ 16 - 16
src/views/ticketManagement/newVoucher.vue

@@ -100,7 +100,7 @@
                 </el-radio>
               </el-radio-group>
             </el-form-item>
-            <template v-if="voucherModel.unusedType == 1">
+            <template v-if="voucherModel.unusedType == 2">
               <el-form-item label="" prop="unavailableWeekdays">
                 <div class="unavailable-dates-container">
                   <!-- 星期选择 -->
@@ -140,7 +140,7 @@
                 </div>
               </el-form-item>
             </template>
-            <el-form-item label="" prop="customUnavailableDates" v-else-if="voucherModel.unusedType == 2">
+            <el-form-item label="" prop="customUnavailableDates" v-else-if="voucherModel.unusedType == 3">
               <div class="date-picker-container">
                 <el-button :icon="Plus" class="add-date-btn" type="primary" @click="addDate"> 添加日期 </el-button>
                 <div v-for="(item, index) in voucherModel.disableDateList" :key="index" class="date-item">
@@ -435,13 +435,13 @@ const rules = reactive({
   unusedType: [{ required: true, message: "请选择不可用日期类型" }],
   unavailableWeekdays: [
     {
-      validator: validateConditionalRequired(() => voucherModel.value.unusedType == 1, "至少需要选择一个星期"),
+      validator: validateConditionalRequired(() => voucherModel.value.unusedType == 2, "至少需要选择一个星期"),
       trigger: "change"
     }
   ],
   unavailableHolidays: [
     {
-      validator: validateConditionalRequired(() => voucherModel.value.unusedType == 1, "至少需要选择一个节日"),
+      validator: validateConditionalRequired(() => voucherModel.value.unusedType == 2, "至少需要选择一个节日"),
       trigger: "change"
     }
   ],
@@ -449,7 +449,7 @@ const rules = reactive({
     {
       required: true,
       validator: (rule: any, value: any, callback: any) => {
-        if (voucherModel.value.unusedType == 2) {
+        if (voucherModel.value.unusedType == 3) {
           if (!voucherModel.value.disableDateList || voucherModel.value.disableDateList.length === 0) {
             callback(new Error("至少需要添加一个自定义不可用日期"));
             return;
@@ -600,14 +600,14 @@ const voucherModel = ref<any>({
   buyUseEndTime: "",
   // 使用时间(虚拟字段,用于表单验证)
   usageTime: null,
-  // 有效期类型:0-指定天数,1-指定时间段内可用
+  // 有效期类型:1-指定天数,2-指定时间段内可用
   expirationType: "1",
   // 有效期天数(当expirationType为1时使用)
   expirationDate: 0,
   // 有效期时间段(当expirationType为2时使用)
   validityPeriod: [],
-  // 不可用日期类型:0-全部日期可用,1-限制日期
-  unusedType: "0",
+  // 不可用日期类型:1-全部日期可用,2-限制日期
+  unusedType: "1",
   // 限制日期 - 星期选择(数组,存储选中的星期值)
   unavailableWeekdays: [],
   // 限制日期 - 节日选择(数组,存储选中的节日值)
@@ -646,9 +646,9 @@ const validityPeriodList = ref([
 
 // 不可用日期类型列表
 const unavailableDateTypeList = ref([
-  { value: "0", label: "全部日期可用" },
-  { value: "1", label: "限制日期" }
-  // { value: '2', label: "自定义不可用日期" }
+  { value: "1", label: "全部日期可用" },
+  { value: "2", label: "限制日期" }
+  // { value: "3", label: "自定义不可用日期" }
 ]);
 
 // 适用范围类型列表
@@ -798,7 +798,7 @@ watch(
 watch(
   () => voucherModel.value.unusedType,
   newVal => {
-    if (newVal == 2) {
+    if (newVal == 3) {
       // 切换到自定义不可用日期时,如果disableDateList为空,则添加一个默认项
       if (!voucherModel.value.disableDateList || voucherModel.value.disableDateList.length === 0) {
         voucherModel.value.disableDateList = [null];
@@ -845,13 +845,13 @@ onMounted(async () => {
       voucherModel.value.validityPeriod = [];
     }
     // 确保星期和节日字段存在;
-    if (voucherModel.value.unusedType == 1) {
+    if (voucherModel.value.unusedType == 2) {
       const listVal = voucherModel.value.unusedDate ? voucherModel.value.unusedDate.split(";") : [];
       voucherModel.value.unavailableWeekdays = listVal[0] ? listVal[0].split(",").filter((item: string) => item) : [];
       voucherModel.value.unavailableHolidays = listVal[1] ? listVal[1].split(",").filter((item: string) => item) : [];
     }
     // 确保自定义不可用日期字段存在;
-    if (voucherModel.value.unusedType === 2) {
+    if (voucherModel.value.unusedType === 3) {
       if (!voucherModel.value.disableDateList || voucherModel.value.disableDateList.length === 0) {
         voucherModel.value.disableDateList = [null];
       }
@@ -961,9 +961,9 @@ const handleSubmit = async (submitType?: string) => {
     params.validityPeriod = "";
   }
   // 处理不可用日期
-  if (params.unusedType == 1) {
+  if (params.unusedType == 2) {
     params.unusedDate = params.unavailableWeekdays.join(",") + ";" + params.unavailableHolidays.join(",");
-  } else if (params.unusedType == 2) {
+  } else if (params.unusedType == 3) {
     // 处理自定义不可用日期
     if (params.disableDateList && params.disableDateList.length > 0) {
       params.unusedDate = params.disableDateList