Просмотр исходного кода

新增:后台优惠券适用范围添加排除商品

萤火科技 1 год назад
Родитель
Сommit
553b44bd3f

+ 2 - 1
src/common/enum/coupon/ApplyRange.js

@@ -6,5 +6,6 @@ import Enum from '../enum'
  */
 export default new Enum([
   { key: 'ALL', name: '全部商品', value: 10 },
-  { key: 'SOME_GOODS', name: '指定商品', value: 20 }
+  { key: 'SOME', name: '指定商品', value: 20 },
+  { key: 'EXCLUDE', name: '排除商品', value: 30 }
 ])

+ 25 - 25
src/views/market/coupon/Create.vue

@@ -2,14 +2,14 @@
   <a-card :bordered="false">
     <div class="card-title">{{ $route.meta.title }}</div>
     <a-spin :spinning="isLoading">
-      <a-form :form="form" @submit="handleSubmit">
-        <a-form-item label="优惠券名称" :labelCol="labelCol" :wrapperCol="wrapperCol">
+      <a-form :form="form" @submit="handleSubmit" :labelCol="labelCol" :wrapperCol="wrapperCol">
+        <a-form-item label="优惠券名称">
           <a-input
             placeholder="请输入优惠券名称"
             v-decorator="['name', { rules: [{ required: true, min: 2, message: '请输入至少2个字符' }] }]"
           />
         </a-form-item>
-        <a-form-item label="优惠券类型" :labelCol="labelCol" :wrapperCol="wrapperCol">
+        <a-form-item label="优惠券类型">
           <a-radio-group
             v-decorator="['coupon_type', { initialValue: 10, rules: [{ required: true }] }]"
           >
@@ -47,7 +47,7 @@
             <small>折扣率范围 0-9.9,8代表打8折,0代表不折扣</small>
           </p>
         </a-form-item>
-        <a-form-item label="最低消费金额" :labelCol="labelCol" :wrapperCol="wrapperCol">
+        <a-form-item label="最低消费金额">
           <a-input-number
             :min="1"
             :precision="2"
@@ -55,7 +55,7 @@
           />
           <span class="ml-5">元</span>
         </a-form-item>
-        <a-form-item label="到期类型" :labelCol="labelCol" :wrapperCol="wrapperCol">
+        <a-form-item label="到期类型">
           <a-radio-group
             v-decorator="['expire_type', { initialValue: 10, rules: [{ required: true }] }]"
           >
@@ -77,21 +77,23 @@
             />
           </a-form-item>
         </a-form-item>
-        <a-form-item label="券适用范围" :labelCol="labelCol" :wrapperCol="wrapperCol">
+        <a-form-item label="券适用范围">
           <a-radio-group
-            v-decorator="['apply_range', { initialValue: 10, rules: [{ required: true }] }]"
+            v-decorator="['apply_range', { initialValue: ApplyRangeEnum.ALL.value, rules: [{ required: true }] }]"
           >
-            <a-radio :value="10">全场通用</a-radio>
-            <a-radio :value="20">指定商品</a-radio>
+            <a-radio
+              v-for="(item, index) in ApplyRangeEnum.data"
+              :value="item.value"
+              :key="index"
+            >{{ item.name }}</a-radio>
           </a-radio-group>
-          <a-form-item v-if="form.getFieldValue('apply_range') == 20">
+          <a-form-item v-if="form.getFieldValue('apply_range') != ApplyRangeEnum.ALL.value">
             <SelectGoods
-              :defaultList="containGoodsList"
-              v-decorator="['apply_range_config.applyGoodsIds', { initialValue: [], rules: [{ required: true, message: '请选择指定的商品' }] }]"
+              v-decorator="['apply_range_config.goodsIds', { rules: [{ required: true, message: '请选择适用的商品' }] }]"
             />
           </a-form-item>
         </a-form-item>
-        <a-form-item label="发放总数量" :labelCol="labelCol" :wrapperCol="wrapperCol">
+        <a-form-item label="发放总数量">
           <a-input-number
             :min="-1"
             :precision="0"
@@ -102,7 +104,7 @@
             <small>发放的优惠券总数量,-1为不限制</small>
           </p>
         </a-form-item>
-        <a-form-item label="显示状态" :labelCol="labelCol" :wrapperCol="wrapperCol">
+        <a-form-item label="显示状态">
           <a-radio-group v-decorator="['status', { initialValue: 1, rules: [{ required: true }] }]">
             <a-radio :value="1">显示</a-radio>
             <a-radio :value="0">隐藏</a-radio>
@@ -111,10 +113,10 @@
             <small>如果设为隐藏将不会展示在用户端页面</small>
           </p>
         </a-form-item>
-        <a-form-item label="优惠券描述" :labelCol="labelCol" :wrapperCol="wrapperCol">
+        <a-form-item label="优惠券描述">
           <a-textarea :autoSize="{ minRows: 4 }" v-decorator="['describe']" />
         </a-form-item>
-        <a-form-item label="排序" :labelCol="labelCol" :wrapperCol="wrapperCol" extra="数字越小越靠前">
+        <a-form-item label="排序" extra="数字越小越靠前">
           <a-input-number
             :min="0"
             v-decorator="['sort', { initialValue: 100, rules: [{ required: true, message: '请输入排序值' }] }]"
@@ -155,9 +157,7 @@ export default {
       // 当前表单元素
       form: this.$form.createForm(this),
       // 默认日期范围
-      defaultDate: [moment(), moment()],
-      // 适用范围:指定的商品
-      containGoodsList: []
+      defaultDate: [moment(), moment()]
     }
   },
   created () {
@@ -186,13 +186,9 @@ export default {
           // 显示提示信息
           this.$message.success(result.message, 1.5)
           // 跳转到列表页
-          setTimeout(() => {
-            this.$router.push('./index')
-          }, 1500)
-        })
-        .catch(() => {
-          this.isBtnLoading = false
+          setTimeout(() => this.$router.push('./index'), 1500)
         })
+        .catch(() => this.isBtnLoading = false)
         .finally(() => this.isLoading = false)
     }
 
@@ -205,4 +201,8 @@ export default {
     margin-bottom: 0;
   }
 }
+
+/deep/.ant-form-item-control {
+  padding-left: 10px;
+}
 </style>

+ 38 - 33
src/views/market/coupon/Update.vue

@@ -2,19 +2,22 @@
   <a-card :bordered="false">
     <div class="card-title">{{ $route.meta.title }}</div>
     <a-spin :spinning="isLoading">
-      <a-form :form="form" @submit="handleSubmit">
-        <a-form-item label="优惠券名称" :labelCol="labelCol" :wrapperCol="wrapperCol">
+      <a-form :form="form" @submit="handleSubmit" :labelCol="labelCol" :wrapperCol="wrapperCol">
+        <a-form-item label="优惠券名称">
           <a-input
             placeholder="请输入优惠券名称"
             v-decorator="['name', { rules: [{ required: true, min: 2, message: '请输入至少2个字符' }] }]"
           />
         </a-form-item>
-        <a-form-item label="优惠券类型" :labelCol="labelCol" :wrapperCol="wrapperCol">
+        <a-form-item label="优惠券类型">
           <a-radio-group
             v-decorator="['coupon_type', { initialValue: 10, rules: [{ required: true }] }]"
           >
-            <a-radio :value="10">满减券</a-radio>
-            <a-radio :value="20">折扣券</a-radio>
+            <a-radio
+              v-for="(item, index) in CouponTypeEnum.data"
+              :value="item.value"
+              :key="index"
+            >{{ item.name }}</a-radio>
           </a-radio-group>
         </a-form-item>
         <a-form-item
@@ -47,7 +50,7 @@
             <small>折扣率范围 0-9.9,8代表打8折,0代表不折扣</small>
           </p>
         </a-form-item>
-        <a-form-item label="最低消费金额" :labelCol="labelCol" :wrapperCol="wrapperCol">
+        <a-form-item label="最低消费金额">
           <a-input-number
             :min="1"
             :precision="2"
@@ -55,7 +58,7 @@
           />
           <span class="ml-5">元</span>
         </a-form-item>
-        <a-form-item label="到期类型" :labelCol="labelCol" :wrapperCol="wrapperCol">
+        <a-form-item label="到期类型">
           <a-radio-group
             v-decorator="['expire_type', { initialValue: 10, rules: [{ required: true }] }]"
           >
@@ -77,21 +80,24 @@
             />
           </a-form-item>
         </a-form-item>
-        <a-form-item label="券适用范围" :labelCol="labelCol" :wrapperCol="wrapperCol">
+        <a-form-item label="券适用范围">
           <a-radio-group
-            v-decorator="['apply_range', { initialValue: 10, rules: [{ required: true }] }]"
+            v-decorator="['apply_range', { initialValue: ApplyRangeEnum.ALL.value, rules: [{ required: true }] }]"
           >
-            <a-radio :value="10">全场通用</a-radio>
-            <a-radio :value="20">指定商品</a-radio>
+            <a-radio
+              v-for="(item, index) in ApplyRangeEnum.data"
+              :value="item.value"
+              :key="index"
+            >{{ item.name }}</a-radio>
           </a-radio-group>
-          <a-form-item v-if="form.getFieldValue('apply_range') == 20">
+          <a-form-item v-if="form.getFieldValue('apply_range') != ApplyRangeEnum.ALL.value">
             <SelectGoods
-              :defaultList="containGoodsList"
-              v-decorator="['apply_range_config.applyGoodsIds', { rules: [{ required: true, message: '请选择指定的商品' }] }]"
+              :defaultList="goodsList"
+              v-decorator="['apply_range_config.goodsIds', { rules: [{ required: true, message: '请选择适用的商品' }] }]"
             />
           </a-form-item>
         </a-form-item>
-        <a-form-item label="发放总数量" :labelCol="labelCol" :wrapperCol="wrapperCol">
+        <a-form-item label="发放总数量">
           <a-input-number
             :min="-1"
             :precision="0"
@@ -102,7 +108,7 @@
             <small>发放的优惠券总数量,-1为不限制</small>
           </p>
         </a-form-item>
-        <a-form-item label="显示状态" :labelCol="labelCol" :wrapperCol="wrapperCol">
+        <a-form-item label="显示状态">
           <a-radio-group v-decorator="['status', { initialValue: 1, rules: [{ required: true }] }]">
             <a-radio :value="1">显示</a-radio>
             <a-radio :value="0">隐藏</a-radio>
@@ -111,10 +117,10 @@
             <small>如果设为隐藏将不会展示在用户端页面</small>
           </p>
         </a-form-item>
-        <a-form-item label="优惠券描述" :labelCol="labelCol" :wrapperCol="wrapperCol">
+        <a-form-item label="优惠券描述">
           <a-textarea :autoSize="{ minRows: 4 }" v-decorator="['describe']" />
         </a-form-item>
-        <a-form-item label="排序" :labelCol="labelCol" :wrapperCol="wrapperCol" extra="数字越小越靠前">
+        <a-form-item label="排序" extra="数字越小越靠前">
           <a-input-number
             :min="0"
             v-decorator="['sort', { initialValue: 100, rules: [{ required: true, message: '请输入排序值' }] }]"
@@ -163,8 +169,8 @@ export default {
       couponId: null,
       // 当前记录
       record: {},
-      // 适用范围:指定的商品
-      containGoodsList: []
+      // 商品列表
+      goodsList: []
     }
   },
   async created () {
@@ -194,16 +200,12 @@ export default {
     // 获取指定的商品列表
     async getContainGoodsList () {
       const { record } = this
-      const goodsIds = get(record, 'apply_range_config.applyGoodsIds')
+      const goodsIds = get(record, 'apply_range_config.goodsIds')
       if (goodsIds !== undefined && goodsIds.length) {
         this.isLoading = true
         await GoodsApi.listByIds(goodsIds)
-          .then(result => {
-            this.containGoodsList = result.data.list
-          })
-          .finally(result => {
-            this.isLoading = false
-          })
+          .then(result => this.goodsList = result.data.list)
+          .finally(result => this.isLoading = false)
       }
     },
 
@@ -250,13 +252,9 @@ export default {
           // 显示提示信息
           this.$message.success(result.message, 1.5)
           // 跳转到列表页
-          setTimeout(() => {
-            this.$router.push('./index')
-          }, 1500)
-        })
-        .catch(() => {
-          this.isBtnLoading = false
+          setTimeout(() => this.$router.push('./index'), 1500)
         })
+        .catch(() => this.isBtnLoading = false)
         .finally(() => this.isLoading = false)
     }
 
@@ -269,4 +267,11 @@ export default {
     margin-bottom: 0;
   }
 }
+
+/deep/.ant-form-item-control {
+  padding-left: 10px;
+  .ant-form-item-control {
+    padding-left: 0;
+  }
+}
 </style>

+ 8 - 8
src/views/market/points/Setting.vue

@@ -2,8 +2,8 @@
   <a-card :bordered="false">
     <div class="card-title">{{ $route.meta.title }}</div>
     <a-spin :spinning="isLoading">
-      <a-form :form="form" @submit="handleSubmit">
-        <a-form-item label="积分名称" :labelCol="labelCol" :wrapperCol="wrapperCol">
+      <a-form :form="form" @submit="handleSubmit" :labelCol="labelCol" :wrapperCol="wrapperCol">
+        <a-form-item label="积分名称">
           <a-input
             v-decorator="['points_name', { rules: [{ required: true, message: '请输入积分名称' }] }]"
           />
@@ -11,7 +11,7 @@
             <small>注:商家使用自定义的积分名称来做品牌运营。如京东把积分称为“京豆”,淘宝把积分称为“淘金币”</small>
           </div>
         </a-form-item>
-        <a-form-item label="积分说明" :labelCol="labelCol" :wrapperCol="wrapperCol">
+        <a-form-item label="积分说明">
           <a-textarea
             :autoSize="{ minRows: 4 }"
             v-decorator="['describe', { rules: [{ required: true, message: '请输入积分说明' }] }]"
@@ -19,7 +19,7 @@
         </a-form-item>
 
         <a-divider orientation="left">积分赠送</a-divider>
-        <a-form-item label="购物送积分" :labelCol="labelCol" :wrapperCol="wrapperCol">
+        <a-form-item label="购物送积分">
           <a-radio-group
             v-decorator="['is_shopping_gift', { initialValue: 1, rules: [{ required: true }] }]"
           >
@@ -31,7 +31,7 @@
           </div>
         </a-form-item>
         <div v-show="form.getFieldValue('is_shopping_gift') == 1">
-          <a-form-item label="积分赠送比例" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-form-item label="积分赠送比例">
             <a-input-number
               :min="0.1"
               :max="100"
@@ -47,7 +47,7 @@
         </div>
 
         <a-divider orientation="left">积分抵扣</a-divider>
-        <a-form-item label="下单使用积分抵扣" :labelCol="labelCol" :wrapperCol="wrapperCol">
+        <a-form-item label="下单使用积分抵扣">
           <a-radio-group
             v-decorator="['is_shopping_discount', { initialValue: 1, rules: [{ required: true }] }]"
           >
@@ -60,7 +60,7 @@
         </a-form-item>
 
         <div v-show="form.getFieldValue('is_shopping_discount') == 1">
-          <a-form-item label="积分抵扣比例" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-form-item label="积分抵扣比例">
             <InputNumberGroup
               addonBefore="1个积分可抵扣"
               addonAfter="元"
@@ -71,7 +71,7 @@
               <small>例如:设置1个积分可抵扣0.1元,则10积分可抵扣1元,100积分可抵扣10元</small>
             </div>
           </a-form-item>
-          <a-form-item label="最高可抵扣金额" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-form-item label="最高可抵扣金额">
             <a-form-item>
               <InputNumberGroup
                 addonBefore="订单满"