Commit f10cc142 by crushh

Merge branch 'feature/游戏营销' into dev

parents 1647c4d1 c90d88d6
......@@ -88,7 +88,10 @@ export default {
storedLowest: 0,
storedMax: 0,
consum_type: 1,
gift_flag: 0
gift_flag: 0,
consumer_store_type: 0,
store_filter_id: '',
store_filter_id_new: ''
},
template: {
headerColor: '#173177',
......@@ -176,6 +179,7 @@ export default {
payment: false
},
storedChecked: false,
storedShopChecked: false,
discount_limit: { type: 1, count: undefined, flag: false }, // 适用商品折扣
useStoredFlag: 0, //显示储值触发和会员卡升级事件
analyseConfig: {
......@@ -584,9 +588,17 @@ export default {
if (this.form.effectAction === 'stored' && result.effectTriggerJson) {
let cost = JSON.parse(result.effectTriggerJson) || {};
this.storedChecked = true;
this.form.storedLowest = cost.lowest_cost;
this.form.storedMax = cost.max_cost;
this.storedChecked = cost.hasOwnProperty('lowest_cost') || cost.hasOwnProperty('max_cost');
if (this.storedChecked) {
this.form.storedLowest = cost.lowest_cost;
this.form.storedMax = cost.max_cost;
}
this.storedShopChecked = cost.hasOwnProperty('consumer_store_type');
if (this.storedShopChecked) {
this.form.consumer_store_type = cost.consumer_store_type;
cost.consumer_store_type == 0 ? (this.form.store_filter_id = cost.store_filter_id) : (this.form.store_filter_id_new = cost.store_filter_id);
}
}
}
if (!this.form.templateUseEnable) return;
......@@ -806,7 +818,7 @@ export default {
// 如果是消费触发
if (this.form.effectAction === 'consume') {
// 这里判断部分门店是否为空
if (this.consumeChecked.store && this.consumeChecked.store) {
if (this.consumeChecked.store) {
let data = this.form.consumerStoreType === 1 ? await this.$refs.newStoreCard.getList() : await this.$refs.storeCard.getRightList();
if (!data.length) {
this.$tips({ type: 'warning', message: '门店不能为空' });
......@@ -870,6 +882,14 @@ export default {
this.$tips({ type: 'warning', message: '储值金额区间值填写错误' });
return;
}
// 这里判断部分门店是否为空
if (this.storedShopChecked) {
let data = this.form.consumer_store_type === 1 ? await this.$refs.newStoreCard2.getList() : await this.$refs.storeCard2.getRightList();
if (!data.length) {
this.$tips({ type: 'warning', message: '门店不能为空' });
return;
}
}
}
// 会员卡升降级
// if (this.form.effectAction === 'degrade' || this.form.effectAction === 'upgrade') {
......@@ -1005,8 +1025,17 @@ export default {
params = Object.assign(params, consumeObj); // 合并消费触发数据
}
if (this.form.effectAction === 'stored' && this.storedChecked) {
params.effectTriggerJson = JSON.stringify({ lowest_cost: this.form.storedLowest || undefined, max_cost: this.form.storedMax || undefined });
if (this.form.effectAction === 'stored') {
let storedObj = {};
if (this.storedChecked) {
storedObj.lowest_cost = this.form.storedLowest || undefined;
storedObj.max_cost = this.form.storedMax || undefined;
}
if (this.storedShopChecked) {
storedObj.consumer_store_type = this.form.consumer_store_type;
storedObj.store_filter_id = this.form.consumer_store_type === 0 ? this.form.store_filter_id : this.form.store_filter_id_new;
}
Object.keys(storedObj).length ? (params.effectTriggerJson = JSON.stringify(storedObj)) : '';
}
}
params.marketingActivityId = this.form.marketingActivityId || ''; // 否 String 营销场景
......
......@@ -297,6 +297,22 @@
</div>
</div>
</el-form-item>
<el-form-item>
<div class="no_label_form_label">
<el-checkbox class="el-form-item__label align-left" :disabled="!isAdd" v-model="storedShopChecked">储值门店</el-checkbox>
<div>
<span class="fz14 gray" v-show="!storedShopChecked">所有储值门店</span>
</div>
<div v-show="storedShopChecked">
<el-radio-group :disabled="!isAdd" v-model="form.consumer_store_type">
<el-radio :label="0">固定门店</el-radio>
<el-radio :label="1">按门店条件</el-radio>
</el-radio-group>
<vue-gic-store-card style="margin:20px 0 0 35px" v-if="form.consumer_store_type === 0" v-bind="storeParams" :readonly="!isAdd" ref="storeCard2" :uuid.sync="form.store_filter_id"></vue-gic-store-card>
<dm-store-selector style="margin:20px 0 0 35px" v-if="form.consumer_store_type === 1" ref="newStoreCard2" :readonly="!isAdd" :uuid.sync="form.store_filter_id_new"></dm-store-selector>
</div>
</div>
</el-form-item>
</section>
<!-- 营销次数配置 重复 -->
<section class="dm-form__wrap" v-if="form.effectType == 1">
......@@ -325,14 +341,6 @@
<span class="vertical-middle" v-if="form.marketingTimesType !== -1"><el-input-number :disabled="!isAdd" controls-position="right" class="w150" :min="1" v-model="form.marketingTimes"></el-input-number></span>
<span class="pl20 fz13 gray"> * 该营销计划{{ marketingTimesTips }}</span>
</el-form-item>
<!-- <div v-else>
<div class="ecm-title">消费触发配置</div>
<div class="ecm-content">
<el-radio :label="1">每天触发一次</el-radio>
<el-radio :label="-1">每天叠加触发</el-radio>
</div>
</div> -->
<el-form-item label="营销次数配置" prop="marketingTimesType" v-else>
<div class="ecm-content" style="margin:8px 0 0 0;">
<el-radio :disabled="!isAdd" :label="1" v-model="form.marketingTimesType">每天触发一次 <span class="gray fz13 ml58">客户当天累计消费金额满足所配置的消费金额就会触发,只触发一次</span></el-radio>
......
......@@ -141,11 +141,11 @@ export default {
baseForm: {
gameName: '',
gameTime: [],
gameRule: '1、幸运盲盒大抽奖,惊喜好礼抽不停。2、活动最终解释权归品牌方所有。',
gameRule: '1、幸运盲盒大抽奖,惊喜好礼抽不停。\n2、活动最终解释权归品牌方所有。',
templateId: '',
backMusicFlag: 1,
adsFlag: 1,
bulletFlag: 1,
backMusicFlag: 0,
adsFlag: 0,
bulletFlag: 0,
backMusicUrlObj: ''
},
gameExt: {},
......@@ -227,14 +227,18 @@ export default {
}
const currentTemp = this.templateData.filter(item => item.templateId == this.baseForm.templateId)[0];
let obj = {};
let arr = ['backMusicUrl'];
// let arr = ['backMusicUrl'];
let keys = Object.keys(gameExt);
console.log(keys);
currentTemp.gameTemplateMaterialList.forEach(item => {
if (item.materialKey == 'backMusicUrl') {
this.backMusicOptions.push(item);
}
if (!arr.includes(item.materialKey) && item.materialValue) {
} else if (!keys.includes(item.materialKey)) {
obj[item.materialKey] = item;
}
// if (!arr.includes(item.materialKey) && !keys.includes(item.materialKey)) {
// obj[item.materialKey] = item;
// }
});
obj = Object.assign(obj, gameExt); // 详情的素材库与模板接口的默认有值的素材库取交集
this.handleTemplateArr(Object.values(obj), 'echo');
......@@ -300,7 +304,6 @@ export default {
return true;
},
handleTemplateArr(data, type) {
console.log(type);
this.gameExt = data;
const materialKeys = ['mpUrlView', 'adsLinkUrl', 'adsImageUrl']; // 模板切换时 保留广告位
data.forEach(item => {
......
......@@ -43,7 +43,7 @@
</div>
<links :show.sync="linkShow" :obj="linksObj" gameTypeName="幸运盲盒" :isNew="true" :showFooter="true" :showClose="false">
<el-button @click="editRenew">重新编辑</el-button>
<el-button type="primary" @click="$router.push('/game/cmh')">进入游戏列表</el-button>
<el-button type="primary" @click="$router.go(-1)">进入游戏列表</el-button>
</links>
</div>
</template>
......@@ -235,7 +235,7 @@ export default {
type: 'warning'
})
.then(() => {
this.$router.push('/game/cmh');
this.$router.go(-1);
})
.catch(() => {});
},
......
......@@ -150,7 +150,7 @@
<p>邀请机制: 每成功邀请{{ item.conditionJson.inviteNum }}人可获得{{ item.conditionJson.value }} 次游戏</p>
<p>成功邀请条件:{{ item.conditionJson.type == 11 ? '注册新会员' : '首次关注服务号' }}</p>
<div v-show="item.conditionJson.type == 11" class="shareApp">
<div class="shareApp">
<div class="shareTitle">邀请分享样式</div>
<p>小程序卡片标题: {{ item.conditionJson.shareTitle }}</p>
<p class="flex">小程序卡片图片: <img :src="item.conditionJson.shareCard" alt="游戏背景" style="width: 100px;height: 75px;margin-left: 10px;" /></p>
......@@ -285,10 +285,9 @@ export default {
item.prizeRate = prizeRate.toFixed(2);
}
});
const rateTotal = this.form.gamePrizeList.map(item => (item.prizeType != 0 ? item.prizeRate : 0)).reduce((pre, current) => Number(pre) + Number(current));
let prizeArr = this.form.gamePrizeList.filter(item => item.prizeType == 0);
prizeArr.forEach(item => {
const prizeRate = (100 - rateTotal) / prizeArr.length || 0;
const prizeRate = (100 - this.form.gameRuleInfo.winChance) / prizeArr.length || 0;
item.prizeRate = prizeRate.toFixed(2);
});
this.form.gamePrizeList = this.form.gamePrizeList.splice(0);
......
......@@ -2,7 +2,7 @@
<el-form size="small" class="tableForm" :model="prizeForm" :rules="rules" ref="prizeForm" label-width="80px">
<dm-sub-title type="line" class="mb20">奖项配置</dm-sub-title>
<el-form-item label="总中奖率" prop="winChance">
<el-input class="w180" v-model.number="prizeForm.winChance" :disabled="isDisabled" @change="calculateRate">
<el-input class="w180" v-model.number="prizeForm.winChance" @change="calculateRate">
<template slot="append">%</template>
</el-input>
</el-form-item>
......@@ -52,7 +52,7 @@
<template slot-scope="{ row, $index }">
<div v-if="row.prizeType == 1 || row.prizeType == 2">
<el-form-item :prop="'gamePrizeList.' + $index + '.' + 'prizeName'" :rules="rules.prizeName" label-width="0">
<el-input v-model="row.prizeName" maxlength="10" />
<el-input v-model="row.prizeName" maxlength="10" :disabled="isDisabled && row.isOld" />
</el-form-item>
</div>
<el-form-item label-width="0" v-else>
......@@ -72,7 +72,7 @@
<template slot-scope="{ row, $index }">
<div v-if="row.prizeType == 1 || row.prizeType == 2" style="width:60px;height:62px">
<el-form-item :prop="'gamePrizeList.' + $index + '.' + 'prizeImageUrl'" :rules="rules.prizeImageUrl" label-width="0">
<dm-upload-avatar class="upload-avatar" width="60" height="60" :limit="{ type: false, maxSize: 1 }" fileType="img" :model.sync="row.prizeImageUrl" tips="" :unused="row.isInfo"></dm-upload-avatar>
<dm-upload-avatar class="upload-avatar" width="60" height="60" :limit="{ type: false, maxSize: 1 }" fileType="img" :model.sync="row.prizeImageUrl" tips="" :unused="isDisabled && row.isOld ? true : false"></dm-upload-avatar>
</el-form-item>
</div>
<el-form-item label-width="0" v-else>
......@@ -401,10 +401,8 @@ export default {
item.prizeRate = prizeRate.toFixed(2);
}
});
let prizeArr = this.prizeForm.gamePrizeList.filter(item => item.prizeType == 0);
prizeArr.forEach(item => {
console.log(item);
const prizeRate = (100 - this.prizeForm.winChance) / prizeArr.length || 0;
item.prizeRate = prizeRate.toFixed(2);
});
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment