<template>
|
<div>
|
<div class="submenuTacticsStyle">
|
<div class="tacticsTitle">
|
<span>菜鸟仓储</span>
|
<span class="tipText">(注:满足以下配置,业务流程走菜鸟仓储,其他均走安吉仓储。退货则菜鸟推菜鸟、安吉推安吉)</span>
|
</div>
|
<div class="tacticsContent">
|
<h4 class="titleStyle">发货配置</h4>
|
<el-form ref="form" size="mini" label-width="120px" :model="form" :rules="formRules">
|
<el-form-item label="销售渠道:" prop="channelCodes">
|
<el-checkbox-group v-model="form.channelCodes">
|
<el-checkbox v-for="item in orderSourceArr" :label="item.id" :key="item.id">
|
{{item.name}}
|
</el-checkbox>
|
</el-checkbox-group>
|
</el-form-item>
|
<el-form-item label="销售商品:" prop="productCategory">
|
<el-radio-group v-model="form.productCategory">
|
<el-radio v-for="item in applicableArr" :key="item.id" :label="item.id">{{item.name}}
|
</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
<div v-if="form.productCategory === '1'">
|
<el-form-item prop="productList">
|
<add-product ref="tableGoods" :productData="form.productList" :restParams="restParams"
|
@hand-selected="handSelectedProduct" @hand-clear="handClearProduct">
|
</add-product>
|
</el-form-item>
|
<el-form-item prop="multiSpecProductList">
|
<add-multi-spec-product ref="tableMultiSpecGoods"
|
:productData="form.multiSpecProductList"
|
:formRules="formRules" :isShowCnSpuStorage="true"
|
@hand-selected="handSelectedMultiSpecProduct"
|
@hand-clear="handClearMultiSpecProduct">
|
</add-multi-spec-product>
|
</el-form-item>
|
</div>
|
<!-- 渠道活动仅针对五粮液新零售APP渠道 -->
|
<el-form-item label="APP渠道活动:" v-if="form.channelCodes.includes('WLY')"
|
prop="activityList">
|
<add-activity ref="tableActivity" :activityData.sync="form.activityList"
|
@hand-selected="handSelectedActivity"
|
:promotionStatusList="['00','02']"></add-activity>
|
</el-form-item>
|
</el-form>
|
<div class="buttonPosition">
|
<el-button type="primary" size="mini" :loading="btnLOading" @click="submit">保存</el-button>
|
<el-button type="info" size="mini"
|
@click="operateInfoDialogVisible = true">操作记录</el-button>
|
</div>
|
</div>
|
</div>
|
<!-- 操作记录 -->
|
<operateInfo :visible.sync="operateInfoDialogVisible"></operateInfo>
|
</div>
|
</template>
|
<script>
|
import SubmenuTacticsApi from '@/api/submenuTactics'
|
import productListApi from '@/api/productmanagement/productList'
|
import proActivityApi from '@/api/promotion/proActivity'
|
import orderSourceArr from '@/utils/constant/orderSourceArr'
|
import addProduct from './components/addProduct.vue'
|
import addMultiSpecProduct from './components/addMultiSpecProduct.vue'
|
import addActivity from './components/addActivity.vue'
|
import operateInfo from './components/operateInfo.vue'
|
export default {
|
name: 'submenuTactics',
|
components: {
|
addProduct,
|
addMultiSpecProduct,
|
addActivity,
|
operateInfo
|
},
|
data() {
|
return {
|
form: {
|
channelCodes: [],
|
productCategory: '0',
|
multiSpecProductList: [],
|
productList: [],
|
activityList: []
|
},
|
formRules: {},
|
orderSourceArr,
|
applicableArr: [
|
{
|
id: '0',
|
name: '全部商品'
|
},
|
{
|
id: '1',
|
name: '指定商品'
|
}
|
],
|
//保存按钮loading
|
btnLOading: false,
|
//操作记录弹窗状态
|
operateInfoDialogVisible: false,
|
//分页参数
|
pageParams: {
|
pageNum: 1,
|
pageSize: 10000,
|
},
|
restParams: {
|
isQueryCNStock: true,
|
}
|
}
|
},
|
watch: {
|
$route(to, from) {
|
if (to.path === '/dash/submenuTactics/index') {
|
this.getCurrentStartegyInfo();
|
}
|
},
|
},
|
mounted() {
|
this.getCurrentStartegyInfo();
|
},
|
methods: {
|
// 组装商品配置数据
|
async setProductConfigData(rData) {
|
if (rData.spuCodes && rData.spuCodes.length) {
|
const res = await productListApi.getList({
|
bizId: 'B02',
|
spuStatus: '1',
|
isGift: '-1',//查询全部
|
spuNumList: rData.spuCodes.join(","),
|
...this.restParams,
|
...this.pageParams
|
}, false)
|
if (res.code === '0' && res.data.list) {
|
res.data.list.forEach((v1) => {
|
if (v1.skuInfos && v1.skuInfos.length) {
|
v1.skuInfos.forEach((v2) => {
|
if (v2.skuProps.length) {
|
const str = v2.skuProps.map(item => item.propValueName).join('/')
|
v2.prodSpecs = `【${str}】 * ${Number(v2.skuReduceStorage)}`
|
}
|
})
|
}
|
this.form.productList.push({
|
prodId: v1.spuId,
|
prodName: v1.spuName,
|
isGift: v1.isGift,
|
spuNum: v1.spuNum, // 主编码
|
spuStorage: v1.spuStorage,
|
cnSpuStorage: v1.cnSpuStorage,
|
skuReduceStorageArr: v1.defaultSku ? v1.skuInfos[0].skuReduceStorage : [], // 扣减数
|
prodSpecs: [],
|
skuId: v1.defaultSku ? v1.skuInfos[0].skuId : [],
|
extparams: JSON.stringify(v1.skuInfos),
|
spuUnit: v1.spuUnit,
|
shopId: v1.shopId
|
})
|
})
|
}
|
}
|
},
|
// 组装多规格商品配置数据
|
async setMultiSpecProductConfigData(rData) {
|
if (rData.spuSkuCodes && rData.spuSkuCodes.length) {
|
const res = await SubmenuTacticsApi.queryListForAwl({
|
prodSkuNoList: rData.spuSkuCodes,
|
}, false);
|
if (res.code === '0') {
|
this.form.multiSpecProductList = res.data;
|
}
|
}
|
},
|
// 组装活动配置数据
|
async setActivityConfigData(rData) {
|
const res = await proActivityApi.getList({
|
promotionIdList: rData.appActivityCodes,
|
...this.pageParams
|
}, false);
|
if (res.code === '0' && res.data.list) {
|
this.form.activityList = res.data.list;
|
}
|
},
|
// 获取当前策略信息
|
async getCurrentStartegyInfo() {
|
this.initData();
|
const res = await SubmenuTacticsApi.details({}, false);
|
if (res.code === '0') {
|
let { isAllSpu, appActivityCodes, channelCodes } = res.data;
|
if (!isAllSpu) {
|
this.setProductConfigData(res.data);
|
this.setMultiSpecProductConfigData(res.data);
|
this.form.productCategory = '1'
|
} else {
|
this.form.productCategory = '0'
|
}
|
if (channelCodes.includes('WLY') && appActivityCodes.length) this.setActivityConfigData(res.data);
|
this.form.channelCodes = channelCodes;
|
}
|
},
|
// 操作表单提交数据
|
handleFormData() {
|
let { channelCodes, productList, multiSpecProductList, productCategory, activityList } = this.form;
|
const params = { channelCodes };
|
//指定商品编码集合
|
if (productCategory === '1') {
|
params.isAllSpu = false;
|
//商品
|
params.spuCodes = productList && productList.map((v) => v.spuNum)
|
//多规格商品
|
params.spuSkuCodes = multiSpecProductList && multiSpecProductList.map((v) => v.prodSkuNo)
|
} else {
|
params.isAllSpu = true;
|
}
|
//app渠道活动编码集合
|
if (this.form.channelCodes.includes('WLY')) params.appActivityCodes = activityList && activityList.map((v) => v.promotionId)
|
return params
|
},
|
// 保存
|
async saveInfo() {
|
const res = await SubmenuTacticsApi.save(this.handleFormData())
|
if (res.code === '0') {
|
this.$message.success('操作成功')
|
} else {
|
this.$message.warning(res.msg);
|
}
|
this.btnLOading = false
|
},
|
// 提交表单
|
submit() {
|
this.$refs.form.validate().then((res) => {
|
this.btnLOading = true
|
this.saveInfo()
|
})
|
},
|
// 重置列表数据
|
initData() {
|
this.form.activityList = [];
|
this.handClearProduct();
|
this.handClearMultiSpecProduct();
|
},
|
// 清空商品数据
|
handClearProduct() {
|
this.form.productList = [];
|
},
|
// 清空多规格商品数据
|
handClearMultiSpecProduct() {
|
this.form.multiSpecProductList = [];
|
},
|
// 选择商品时
|
handSelectedProduct() {
|
this.$refs.form.clearValidate('productList')
|
},
|
// 选择多规格商品时
|
handSelectedMultiSpecProduct() {
|
this.$refs.form.clearValidate('multiSpecProductList')
|
},
|
// 选择活动时
|
handSelectedActivity() {
|
this.$refs.form.clearValidate('activityList')
|
}
|
}
|
}
|
</script>
|
<style lang="scss">
|
.submenuTacticsStyle {
|
padding: 10px;
|
background-color: #fff;
|
border-radius: 4px;
|
.tacticsTitle {
|
font-size: 18px;
|
border-bottom: 1px solid #e5e5e5;
|
padding-bottom: 10px;
|
.tipText {
|
text-align: center;
|
color: #d70012;
|
font-size: 12px;
|
margin-left: 20px;
|
font-weight: normal;
|
}
|
}
|
.tacticsContent {
|
padding: 20px;
|
.titleStyle {
|
margin-bottom: 10px;
|
}
|
}
|
}
|
</style>
|