From 61a844ab928b51c33b18a51ddacde8274ef35e29 Mon Sep 17 00:00:00 2001
From: zhanghua <314079846@qq.com>
Date: 星期三, 10 九月 2025 11:08:27 +0800
Subject: [PATCH] 添加优惠券限制单个商品使用逻辑

---
 manager/src/views/promotions/coupon/coupon-publish.vue |  190 +++++++++++-----------------------------------
 1 files changed, 47 insertions(+), 143 deletions(-)

diff --git a/manager/src/views/promotions/coupon/coupon-publish.vue b/manager/src/views/promotions/coupon/coupon-publish.vue
index ec34415..f2b442b 100644
--- a/manager/src/views/promotions/coupon/coupon-publish.vue
+++ b/manager/src/views/promotions/coupon/coupon-publish.vue
@@ -6,24 +6,12 @@
           <h4>鍩烘湰淇℃伅</h4>
           <div class="form-item-view">
             <FormItem label="娲诲姩鍚嶇О" prop="promotionName">
-              <Input
-                :disabled="disabled"
-                type="text"
-                v-model="form.promotionName"
-                placeholder="娲诲姩鍚嶇О"
-                clearable
-                style="width: 260px"
-              />
+              <Input :disabled="disabled" type="text" v-model="form.promotionName" placeholder="娲诲姩鍚嶇О" clearable
+                style="width: 260px" />
             </FormItem>
             <FormItem label="浼樻儬鍒稿悕绉�" prop="couponName">
-              <Input
-                :disabled="disabled"
-                type="text"
-                v-model="form.couponName"
-                placeholder="浼樻儬鍒稿悕绉�"
-                clearable
-                style="width: 260px"
-              />
+              <Input :disabled="disabled" type="text" v-model="form.couponName" placeholder="浼樻儬鍒稿悕绉�" clearable
+                style="width: 260px" />
             </FormItem>
             <FormItem label="浼樻儬鍒哥被鍨�" prop="couponType">
               <Select :disabled="disabled" v-model="form.couponType" style="width: 260px">
@@ -31,30 +19,14 @@
                 <Option value="PRICE">鍑忓厤鐜伴噾</Option>
               </Select>
             </FormItem>
-            <FormItem
-              label="鎶樻墸"
-              prop="couponDiscount"
-              v-if="form.couponType == 'DISCOUNT'"
-            >
-              <Input
-                :disabled="disabled"
-                type="number"
-                v-model="form.couponDiscount"
-                placeholder="鎶樻墸"
-                clearable
-                style="width: 260px"
-              />
+            <FormItem label="鎶樻墸" prop="couponDiscount" v-if="form.couponType == 'DISCOUNT'">
+              <Input :disabled="disabled" type="number" v-model="form.couponDiscount" placeholder="鎶樻墸" clearable
+                style="width: 260px" />
               <span class="describe">璇疯緭鍏�0-10涔嬮棿鏁板瓧锛屽彲浠ヨ緭鍏ヤ竴浣嶅皬鏁�</span>
             </FormItem>
             <FormItem label="闈㈤" prop="price" v-if="form.couponType == 'PRICE'">
-              <Input
-                :disabled="disabled"
-                type="text"
-                v-model="form.price"
-                placeholder="闈㈤"
-                clearable
-                style="width: 260px"
-              />
+              <Input :disabled="disabled" type="text" v-model="form.price" placeholder="闈㈤" clearable
+                style="width: 260px" />
             </FormItem>
             <FormItem label="娲诲姩绫诲瀷" prop="getType">
               <Select :disabled="disabled" v-model="form.getType" style="width: 260px">
@@ -64,63 +36,37 @@
             </FormItem>
 
             <FormItem label="搴楅摵鎵挎媴姣斾緥" prop="storeCommission">
-              <Input
-                :disabled="disabled"
-                v-model="form.storeCommission"
-                placeholder="搴楅摵鎵挎媴姣斾緥"
-                style="width: 260px"
-              >
-                <span slot="append">%</span>
+              <Input :disabled="disabled" v-model="form.storeCommission" placeholder="搴楅摵鎵挎媴姣斾緥" style="width: 260px">
+              <span slot="append">%</span>
               </Input>
               <span class="describe">搴楅摵鎵挎媴姣斾緥锛岃緭鍏�0-100涔嬮棿鏁板��</span>
             </FormItem>
             <FormItem label="鍙戞斁鏁伴噺" prop="publishNum" v-if="form.getType === 'FREE'">
-              <Input
-                :disabled="disabled"
-                v-model="form.publishNum"
-                placeholder="鍙戞斁鏁伴噺"
-                style="width: 260px"
-              />
+              <Input :disabled="disabled" v-model="form.publishNum" placeholder="鍙戞斁鏁伴噺" style="width: 260px" />
               <div class="tips">濡傛灉鍙戞斁鏁伴噺涓�0鏃�,鍒欎唬琛ㄤ笉闄愬埗鍙戞斁鏁伴噺</div>
             </FormItem>
-            <FormItem
-              label="棰嗗彇鏁伴噺闄愬埗"
-              prop="couponLimitNum"
-              v-if="form.getType === 'FREE'"
-            >
-              <Input
-                :disabled="disabled"
-                v-model="form.couponLimitNum"
-                placeholder="棰嗗彇闄愬埗"
-                clearable
-                style="width: 260px"
-              />
+            <FormItem label="棰嗗彇鏁伴噺闄愬埗" prop="couponLimitNum" v-if="form.getType === 'FREE'">
+              <Input :disabled="disabled" v-model="form.couponLimitNum" placeholder="棰嗗彇闄愬埗" clearable
+                style="width: 260px" />
               <div class="tips">濡傛灉棰嗗彇鏁伴噺涓�0鏃�,鍒欎唬琛ㄤ笉闄愬埗棰嗗彇鏁伴噺</div>
             </FormItem>
             <FormItem label="鑼冨洿鎻忚堪" prop="description">
-              <Input
-                :disabled="disabled"
-                v-model="form.description"
-                type="textarea"
-                :rows="4"
-                maxlength="50"
-                show-word-limit
-                clearable
-                style="width: 260px"
-              />
+              <Input :disabled="disabled" v-model="form.description" type="textarea" :rows="4" maxlength="50"
+                show-word-limit clearable style="width: 260px" />
             </FormItem>
           </div>
           <h4>浣跨敤闄愬埗</h4>
           <div class="form-item-view">
+
+            <FormItem label="闄愬埗鍗曚釜鍟嗗搧浣跨敤" prop="goodsUseLimitNum">
+              <Select :disabled="disabled" v-model="form.goodsUseLimitNum" style="width: 260px">
+                <Option value="0">涓嶉檺鍒�</Option>
+                <Option value="1">闄愬埗</Option>
+              </Select>
+            </FormItem>
             <FormItem label="娑堣垂闂ㄦ" prop="consumeThreshold">
-              <Input
-                :disabled="disabled"
-                type="text"
-                v-model="form.consumeThreshold"
-                placeholder="娑堣垂闂ㄦ"
-                clearable
-                style="width: 260px"
-              />
+              <Input :disabled="disabled" type="text" v-model="form.consumeThreshold" placeholder="娑堣垂闂ㄦ" clearable
+                style="width: 260px" />
             </FormItem>
             <FormItem label="鏈夋晥鏈�" prop="rangeTime">
               <div v-if="form.getType == 'ACTIVITY'">
@@ -130,26 +76,14 @@
                 </RadioGroup>
               </div>
               <div v-if="rangeTimeType == 1">
-                <DatePicker
-                  :disabled="disabled"
-                  type="datetimerange"
-                  v-model="form.rangeTime"
-                  format="yyyy-MM-dd HH:mm:ss"
-                  placeholder="璇烽�夋嫨"
-                  :options="options"
-                  style="width: 260px"
-                >
+                <DatePicker :disabled="disabled" type="datetimerange" v-model="form.rangeTime"
+                  format="yyyy-MM-dd HH:mm:ss" placeholder="璇烽�夋嫨" :options="options" style="width: 260px">
                 </DatePicker>
               </div>
               <div class="effectiveDays" v-if="rangeTimeType == 0">
                 棰嗗彇褰撳ぉ寮�濮�
-                <InputNumber
-                  :disabled="disabled"
-                  v-model="form.effectiveDays"
-                  :min="1"
-                  style="width: 100px"
-                  :max="365"
-                />
+                <InputNumber :disabled="disabled" v-model="form.effectiveDays" :min="1" style="width: 100px"
+                  :max="365" />
                 澶╁唴鏈夋晥(1-365闂寸殑鏁存暟)
               </div>
             </FormItem>
@@ -158,62 +92,30 @@
               <RadioGroup type="button" button-style="solid" v-model="form.scopeType">
                 <Radio :disabled="disabled" label="ALL">鍏ㄥ搧绫�</Radio>
                 <Radio :disabled="disabled" label="PORTION_GOODS">鎸囧畾鍟嗗搧</Radio>
-                <Radio :disabled="disabled" label="PORTION_GOODS_CATEGORY"
-                  >閮ㄥ垎鍟嗗搧鍒嗙被</Radio
-                >
+                <Radio :disabled="disabled" label="PORTION_GOODS_CATEGORY">閮ㄥ垎鍟嗗搧鍒嗙被</Radio>
               </RadioGroup>
             </FormItem>
 
             <FormItem style="width: 100%" v-if="form.scopeType == 'PORTION_GOODS'">
               <div style="display: flex; margin-bottom: 10px">
-                <Button :disabled="disabled" type="primary" @click="openSkuList"
-                  >閫夋嫨鍟嗗搧</Button
-                >
-                <Button
-                  :disabled="disabled"
-                  type="error"
-                  ghost
-                  style="margin-left: 10px"
-                  @click="delSelectGoods"
-                  >鎵归噺鍒犻櫎</Button
-                >
+                <Button :disabled="disabled" type="primary" @click="openSkuList">閫夋嫨鍟嗗搧</Button>
+                <Button :disabled="disabled" type="error" ghost style="margin-left: 10px"
+                  @click="delSelectGoods">鎵归噺鍒犻櫎</Button>
               </div>
-              <Table
-                border
-                :columns="columns"
-                :data="form.promotionGoodsList"
-                @on-selection-change="changeSelect"
-              >
+              <Table border :columns="columns" :data="form.promotionGoodsList" @on-selection-change="changeSelect">
                 <template slot-scope="{ row }" slot="QRCode">
-                  <img
-                    :src="row.QRCode || '../../../assets/lili.png'"
-                    width="50px"
-                    height="50px"
-                    alt=""
-                  />
+                  <img :src="row.QRCode || '../../../assets/lili.png'" width="50px" height="50px" alt="" />
                 </template>
               </Table>
             </FormItem>
 
             <FormItem v-if="form.scopeType == 'PORTION_GOODS_CATEGORY'">
-              <Cascader
-                :disabled="disabled"
-                :data="goodsCategoryList"
-                style="width: 260px"
-                v-model="form.scopeIdGoods"
-              ></Cascader>
+              <Cascader :disabled="disabled" :data="goodsCategoryList" style="width: 260px" v-model="form.scopeIdGoods">
+              </Cascader>
             </FormItem>
             <div>
-              <Button :disabled="disabled" type="text" @click="closeCurrentPage"
-                >杩斿洖</Button
-              >
-              <Button
-                :disabled="disabled"
-                type="primary"
-                :loading="submitLoading"
-                @click="handleSubmit"
-                >鎻愪氦</Button
-              >
+              <Button :disabled="disabled" type="text" @click="closeCurrentPage">杩斿洖</Button>
+              <Button :disabled="disabled" type="primary" :loading="submitLoading" @click="handleSubmit">鎻愪氦</Button>
             </div>
           </div>
         </div>
@@ -243,10 +145,10 @@
       handler(val) {
         if (val == "FREE") {
           this.rangeTimeType = 1;
-        }else{
+        } else {
           this.rangeTimeType = 0;
         }
-        if(this.rangeTimeType == 0){
+        if (this.rangeTimeType == 0) {
           delete this.formRule.rangeTime
         }
       },
@@ -307,7 +209,8 @@
         promotionGoodsList: [],
         scopeIdGoods: [],
         rangeDayType: "",
-        effectiveDays:1,
+        effectiveDays: 1,
+        goodsUseLimitNum: "0"
       },
       id: this.$route.query.id, // 浼樻儬鍒竔d
       submitLoading: false, // 娣诲姞鎴栫紪杈戞彁浜ょ姸鎬�
@@ -359,7 +262,7 @@
           key: "price",
           minWidth: 40,
           render: (h, params) => {
-            return h("priceColorScheme", {props:{value:params.row.price,color:this.$mainColor}} );
+            return h("priceColorScheme", { props: { value: params.row.price, color: this.$mainColor } });
           },
         },
         {
@@ -671,10 +574,11 @@
   font-size: 12px;
   color: #999;
 
-  > * {
+  >* {
     margin: 0 4px;
   }
 }
+
 .tips {
   font-size: 12px;
   color: #999;

--
Gitblit v1.8.0