|
@@ -16,6 +16,15 @@
|
|
|
:rules="rules"
|
|
|
:label-col="formItemLayout.labelCol"
|
|
|
:wrapper-col="formItemLayout.wrapperCol" >
|
|
|
+ <a-form-model-item label="规则简称" prop="description">
|
|
|
+ <a-input
|
|
|
+ size="small"
|
|
|
+ id="promotionList-description"
|
|
|
+ v-model.trim="form.description"
|
|
|
+ allowClear
|
|
|
+ placeholder="请输入促销简称(最多10个字符)"
|
|
|
+ :maxLength="10"></a-input>
|
|
|
+ </a-form-model-item>
|
|
|
<a-form-model-item label="规则门槛" prop="gateFlag">
|
|
|
<a-radio-group v-model="form.gateFlag" button-style="solid" size="small" @change="changeGateFlag">
|
|
|
<a-radio-button value="1">
|
|
@@ -25,12 +34,31 @@
|
|
|
无
|
|
|
</a-radio-button>
|
|
|
</a-radio-group>
|
|
|
- <div class="ruleDescList" v-if="form.gateFlag && form.gateFlag === '1'">
|
|
|
- 购买满
|
|
|
- <a-input-number v-model="form.gateAmount" :min="0" :precision="2" size="small"/>
|
|
|
- 元门槛产品,可使用
|
|
|
- <a-input-number v-model="form.quotaAmount" :min="0" :precision="2" size="small"/>
|
|
|
- 元配额,采购规则中的正价商品(配额算销售额)
|
|
|
+ <div v-if="form.gateFlag && form.gateFlag === '1'">
|
|
|
+ <v-select
|
|
|
+ size="small"
|
|
|
+ style="width:60%;"
|
|
|
+ v-model="form.gateType"
|
|
|
+ id="promotionList-gateType"
|
|
|
+ code="PROMOTION_GATE_TYPE"
|
|
|
+ placeholder="请选择"
|
|
|
+ allowClear></v-select>
|
|
|
+ <div v-if="form.gateType==='RATIO_AMOUNT'">
|
|
|
+ 购买门槛产品金额 <a-input-number v-model="form.gateAmount" :min="0" :max="100" size="small"/> %作为配额
|
|
|
+ <a-tooltip title="如:填写100%,则购买10000元门槛产品,可享受10000配额购买正价产品,根据门槛金额动态调整配额">
|
|
|
+ <a-icon type="question-circle" theme="filled" :style="{ fontSize: '14px', color: 'gray' }"/>
|
|
|
+ </a-tooltip>
|
|
|
+ </div>
|
|
|
+ <div v-if="form.gateType==='MIN_AMOUNT'">
|
|
|
+ 购买门槛产品满最低金额 <a-input-number v-model="form.gateAmount" :min="0" :precision="2" size="small"/> 不限制配额。
|
|
|
+ </div>
|
|
|
+ <div class="ruleDescList" v-if="form.gateType==='FIXED_AMOUNT'">
|
|
|
+ 购买满
|
|
|
+ <a-input-number v-model="form.gateAmount" :min="0" :precision="2" size="small"/>
|
|
|
+ 元门槛产品,可使用
|
|
|
+ <a-input-number v-model="form.quotaAmount" :max="form.gateAmount" :min="0" :precision="2" size="small"/>
|
|
|
+ 元配额,采购规则中的正价商品(配额算销售额)
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</a-form-model-item>
|
|
|
<a-form-model-item label="满赠规则" prop="regularSameFlag">
|
|
@@ -46,14 +74,26 @@
|
|
|
产品购买满
|
|
|
<a-input-number v-model="form.regularQty" :min="0" :step="1" :precision="0" size="small"/>
|
|
|
个正价产品,送
|
|
|
- <a-input-number v-model="form.promotionQty" :min="0" :step="1" :precision="0" size="small"/>
|
|
|
+ <a-input-number
|
|
|
+ v-model="form.promotionQty"
|
|
|
+ :max="form.regularQty"
|
|
|
+ :min="0"
|
|
|
+ :step="1"
|
|
|
+ :precision="0"
|
|
|
+ size="small"/>
|
|
|
个促销产品
|
|
|
</div>
|
|
|
<div class="ruleDescList">
|
|
|
- <a-checkbox size="small" :value="form.restrictFlag">
|
|
|
+ <a-checkbox size="small" @change="onChange">
|
|
|
限制正价产品款数
|
|
|
</a-checkbox>
|
|
|
- <a-input-number v-model="form.restrictCategory" :min="0" :step="1" :precision="0" size="small"/>
|
|
|
+ <a-input-number
|
|
|
+ v-if="form.restrictFlag==='1'"
|
|
|
+ v-model="form.restrictCategory"
|
|
|
+ :min="0"
|
|
|
+ :step="1"
|
|
|
+ :precision="0"
|
|
|
+ size="small"/>
|
|
|
</div>
|
|
|
</a-form-model-item>
|
|
|
<a-form-model-item label="数量叠加" prop="accrualFlag">
|
|
@@ -69,9 +109,9 @@
|
|
|
</a-form-model-item>
|
|
|
<a-form-model-item prop="minOrderFlag">
|
|
|
<span slot="label">
|
|
|
- <a-tooltip title="What do you want others to call you?">
|
|
|
+ <!-- <a-tooltip title="What do you want others to call you?">
|
|
|
<a-icon type="info-circle" />
|
|
|
- </a-tooltip>
|
|
|
+ </a-tooltip> -->
|
|
|
订单起订金额
|
|
|
</span>
|
|
|
<a-select v-model="form.minOrderFlag" style="width: 160px" size="small">
|
|
@@ -94,9 +134,9 @@
|
|
|
</a-form-model-item>
|
|
|
<a-form-model-item prop="upperLimitFlag">
|
|
|
<span slot="label">
|
|
|
- <a-tooltip title="What do you want others to call you?">
|
|
|
+ <!-- <a-tooltip title="What do you want others to call you?">
|
|
|
<a-icon type="info-circle" />
|
|
|
- </a-tooltip>
|
|
|
+ </a-tooltip> -->
|
|
|
活动经费上限
|
|
|
</span>
|
|
|
<a-select v-model="form.upperLimitFlag" style="width: 160px" size="small">
|
|
@@ -164,7 +204,7 @@ import { commonMixin } from '@/utils/mixin'
|
|
|
import { VSelect } from '@/components'
|
|
|
import tableType1 from './tableType1.vue'
|
|
|
import tableType2 from './tableType2.vue'
|
|
|
-import { promotionSave, sparePartsReturnInfo } from '@/api/promotion'
|
|
|
+import { promotionSave, getRuleDetail } from '@/api/promotion'
|
|
|
export default {
|
|
|
name: 'PromotionListBasicInfoModal',
|
|
|
mixins: [commonMixin],
|
|
@@ -177,6 +217,10 @@ export default {
|
|
|
promotionSn: {
|
|
|
type: [Number, String],
|
|
|
default: ''
|
|
|
+ },
|
|
|
+ itemSn: {
|
|
|
+ type: [Number, String],
|
|
|
+ default: ''
|
|
|
}
|
|
|
},
|
|
|
data () {
|
|
@@ -189,22 +233,25 @@ export default {
|
|
|
},
|
|
|
form: {
|
|
|
promotionRuleType: 'BUY_PROD_GIVE_PROD', // 买产品送产品
|
|
|
+ description: '', // 简称
|
|
|
gateFlag: '0', // 门槛
|
|
|
- gateAmount: '',
|
|
|
- quotaAmount: '',
|
|
|
+ gateType: undefined,
|
|
|
+ gateAmount: undefined,
|
|
|
+ quotaAmount: undefined,
|
|
|
regularSameFlag: '0', // 满赠规则 不同款商品
|
|
|
- regularQty: '',
|
|
|
- promotionQty: '',
|
|
|
+ regularQty: undefined,
|
|
|
+ promotionQty: undefined,
|
|
|
restrictFlag: undefined, // 限制正价产品款数
|
|
|
restrictCategory: '',
|
|
|
accrualFlag: '1', // 数量叠加
|
|
|
minOrderFlag: '1', // 起订金额
|
|
|
- minOrderAmount: '',
|
|
|
+ minOrderAmount: undefined,
|
|
|
upperLimitFlag: '1', // 活动经费上限
|
|
|
- upperLimitAmount: '',
|
|
|
+ upperLimitAmount: undefined,
|
|
|
regularPromotionSameFlag: undefined
|
|
|
},
|
|
|
rules: {
|
|
|
+ description: [ { required: true, message: '请输入规则简称', trigger: 'blur' } ],
|
|
|
gateFlag: [ { required: true, message: '请选择规则门槛', trigger: 'change' } ],
|
|
|
regularSameFlag: [{ required: true, message: '请选择满赠规则', trigger: 'change' }],
|
|
|
accrualFlag: [{ required: true, message: '请选择数量是否叠加', trigger: 'change' }],
|
|
@@ -216,6 +263,9 @@ export default {
|
|
|
}
|
|
|
},
|
|
|
methods: {
|
|
|
+ onChange (e) {
|
|
|
+ this.form.restrictFlag = e.target.checked ? '1' : '0'
|
|
|
+ },
|
|
|
// 门槛切换 tab 按钮默认显示问题
|
|
|
changeGateFlag (e) {
|
|
|
if (this.chooseVal != 'c') {
|
|
@@ -229,37 +279,50 @@ export default {
|
|
|
// 保存
|
|
|
handleSave () {
|
|
|
const _this = this
|
|
|
- // 验证必填
|
|
|
- if (_this.form.gateFlag == '1') {
|
|
|
- if (!_this.form.gateAmount || !_this.form.quotaAmount) {
|
|
|
- _this.$message.warning('规则门槛条件不能为空!')
|
|
|
- return
|
|
|
- }
|
|
|
- }
|
|
|
- if (!_this.form.regularQty || !_this.form.promotionQty) {
|
|
|
- _this.$message.warning('满赠规则条件不能为空!')
|
|
|
- return
|
|
|
- }
|
|
|
- if (_this.form.restrictFlag && !_this.form.restrictCategory) {
|
|
|
- _this.$message.warning('请输入限制正价产品款数个数!')
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- if (_this.form.minOrderFlag == 1 && !_this.form.minOrderAmount) {
|
|
|
- _this.$message.warning('请输入订单起订限制金额数!')
|
|
|
- return
|
|
|
- }
|
|
|
- if (_this.form.upperLimitFlag == 1 && !_this.form.upperLimitAmount) {
|
|
|
- _this.$message.warning('请输入活动经费上限金额!')
|
|
|
- return
|
|
|
- }
|
|
|
this.$refs.ruleForm.validate(valid => {
|
|
|
if (valid) {
|
|
|
+ // 验证必填
|
|
|
+ if (_this.form.gateFlag == '1') {
|
|
|
+ if (!_this.form.gateType) {
|
|
|
+ _this.$message.warning('请选择规则门槛设置类型!')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (!_this.form.gateAmount) {
|
|
|
+ _this.$message.warning('规则门槛条件不能为空!')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (_this.form.gateType === 'FIXED_AMOUNT' && !_this.form.quotaAmount) {
|
|
|
+ _this.$message.warning('规则门槛条件不能为空!')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!_this.form.regularQty || !_this.form.promotionQty) {
|
|
|
+ _this.$message.warning('满赠规则条件不能为空!')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (_this.form.restrictFlag && !_this.form.restrictCategory) {
|
|
|
+ _this.$message.warning('请输入限制正价产品款数个数!')
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if (_this.form.minOrderFlag == 1 && !_this.form.minOrderAmount) {
|
|
|
+ _this.$message.warning('请输入订单起订限制金额数!')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (_this.form.upperLimitFlag == 1 && !_this.form.upperLimitAmount) {
|
|
|
+ _this.$message.warning('请输入活动经费上限金额!')
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
const form = JSON.parse(JSON.stringify(_this.form))
|
|
|
if (form.gateFlag == '1') {
|
|
|
form.gateProductList = this.$refs.cillProduct.getResultVal()
|
|
|
+ form.gateAmount = form.gateType === 'RATIO_AMOUNT' ? form.gateAmount / 100 : form.gateAmount
|
|
|
} else {
|
|
|
form.gateProductList = []
|
|
|
+ form.gateAmount = ''
|
|
|
+ form.quotaAmount = ''
|
|
|
+ form.gateType = undefined
|
|
|
}
|
|
|
if (form.regularPromotionSameFlag == '0') {
|
|
|
form.giftProductList = this.$refs.offerProduct.getResultVal()
|
|
@@ -290,19 +353,21 @@ export default {
|
|
|
resetSearchForm () {
|
|
|
this.form = {
|
|
|
promotionRuleType: 'BUY_PROD_GIVE_PROD', // 买产品送产品
|
|
|
+ description: '', // 简称
|
|
|
gateFlag: '0', // 门槛
|
|
|
- gateAmount: '',
|
|
|
- quotaAmount: '',
|
|
|
+ gateType: undefined,
|
|
|
+ gateAmount: undefined,
|
|
|
+ quotaAmount: undefined,
|
|
|
regularSameFlag: '0', // 满赠规则 不同款商品
|
|
|
- regularQty: '',
|
|
|
- promotionQty: '',
|
|
|
+ regularQty: undefined,
|
|
|
+ promotionQty: undefined,
|
|
|
restrictFlag: undefined, // 限制正价产品款数
|
|
|
restrictCategory: '',
|
|
|
accrualFlag: '1', // 数量叠加
|
|
|
minOrderFlag: '1', // 起订金额
|
|
|
- minOrderAmount: '',
|
|
|
+ minOrderAmount: undefined,
|
|
|
upperLimitFlag: '1', // 活动经费上限
|
|
|
- upperLimitAmount: '',
|
|
|
+ upperLimitAmount: undefined,
|
|
|
regularPromotionSameFlag: undefined,
|
|
|
gateProductList: undefined,
|
|
|
giftProductList: undefined,
|
|
@@ -317,25 +382,80 @@ export default {
|
|
|
},
|
|
|
// 获取编辑详情
|
|
|
getDetail () {
|
|
|
- sparePartsReturnInfo({ sn: this.itemSn }).then(res => {
|
|
|
+ const _this = this
|
|
|
+ getRuleDetail({ sn: this.itemSn }).then(res => {
|
|
|
if (res.status == 200) {
|
|
|
const resultObj = res.data
|
|
|
- this.attachList = resultObj.attachmentList
|
|
|
- const obj = {
|
|
|
- supplierSn: resultObj.supplierSn,
|
|
|
- returnReason: resultObj.returnReason, // 退货原因
|
|
|
- explainInfo: resultObj.explainInfo, // 补充说明
|
|
|
- warehouseSn: resultObj.warehouseSn,
|
|
|
- sparePartsReturnSn: this.itemSn
|
|
|
+ _this.chooseVal = resultObj.gateFlag == '0' ? 'b' : 'a'
|
|
|
+ if (resultObj.gateFlag === '1') {
|
|
|
+ resultObj.gateAmount = resultObj.gateType === 'RATIO_AMOUNT' ? resultObj.gateAmount * 100 : resultObj.gateAmount
|
|
|
}
|
|
|
- this.$nextTick(() => {
|
|
|
- this.$refs.attachList.setFileList(this.attachList)
|
|
|
+ // 重新组成保存数据
|
|
|
+ if (resultObj.gateProductList && resultObj.gateProductList.length > 0) {
|
|
|
+ resultObj.gateProductList = _this.newData(resultObj.gateProductList)
|
|
|
+ this.$refs.cillProduct.setTabVal(resultObj.gateProductList)
|
|
|
+ }
|
|
|
+ if (resultObj.regularProductList && resultObj.regularProductList.length > 0) {
|
|
|
+ resultObj.regularProductList = _this.newData(resultObj.regularProductList)
|
|
|
+ this.$refs.normalPriceProduct.setTabVal(resultObj.regularProductList)
|
|
|
+ }
|
|
|
+ if (resultObj.giftProductList && resultObj.giftProductList.length > 0) {
|
|
|
+ resultObj.giftProductList = _this.newData(resultObj.giftProductList)
|
|
|
+ this.$refs.offerProduct.setTabVal(resultObj.giftProductList)
|
|
|
+ }
|
|
|
+ this.form = { ...this.form, ...resultObj }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ newData (list) {
|
|
|
+ list.forEach(con => {
|
|
|
+ // 品牌
|
|
|
+ if (con.productBrandList) {
|
|
|
+ const brandList = []
|
|
|
+ con.productBrandList.forEach(item => {
|
|
|
+ item.brandName = item.productBrandName
|
|
|
+ const brandObj = {
|
|
|
+ productBrandSn: item.productBrandSn
|
|
|
+ }
|
|
|
+ brandList.push(brandObj)
|
|
|
})
|
|
|
- this.form = { ...this.form, ...obj }
|
|
|
- } else {
|
|
|
- this.detailsData = null
|
|
|
+ con.productBrandArr = con.productBrandList
|
|
|
+ con.productBrandList = brandList
|
|
|
+ }
|
|
|
+ // 分类
|
|
|
+ if (con.productTypeList) {
|
|
|
+ const typeList = []
|
|
|
+ con.productTypeList.forEach(item => {
|
|
|
+ const typeObj = {}
|
|
|
+ item.title = ''
|
|
|
+ const num = 3
|
|
|
+ for (var i = 0; i < num; i++) {
|
|
|
+ if (item['productTypeName' + (i + 1)]) {
|
|
|
+ item.title += item['productTypeName' + (i + 1)] + (item['productTypeName' + (i + 1)] ? '/' : '')
|
|
|
+ typeObj['productTypeSn' + (i + 1)] = item['productTypeSn' + (i + 1)] ? item['productTypeSn' + (i + 1)] : ''
|
|
|
+ }
|
|
|
+ }
|
|
|
+ item.title = item.title.slice(0, item.title.length - 1)
|
|
|
+ item.id = item.productTypeSn3 ? item.productTypeSn3 : item.productTypeSn2 ? item.productTypeSn2 : item.productTypeSn1
|
|
|
+ typeList.push(typeObj)
|
|
|
+ })
|
|
|
+ con.productTypeArr = con.productTypeList
|
|
|
+ con.productTypeList = typeList
|
|
|
+ }
|
|
|
+ // 产品
|
|
|
+ if (con.productThisList) {
|
|
|
+ const productList = []
|
|
|
+ con.productThisList.forEach(item => {
|
|
|
+ const productObj = {
|
|
|
+ productCode: item.productCode,
|
|
|
+ productSn: item.productSn
|
|
|
+ }
|
|
|
+ productList.push(productObj)
|
|
|
+ })
|
|
|
+ con.productThisList = productList
|
|
|
}
|
|
|
})
|
|
|
+ return list
|
|
|
}
|
|
|
},
|
|
|
watch: {
|