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