Commit dc2ff480 by crushh

update: dist

parent fbba72d4
......@@ -158,7 +158,7 @@ export const getCouponStock = params => requests(PREFIX + 'get-coupon-stock', pa
export const getGameDataUpdatetime = params => requests(PREFIX + 'get-game-data-updatetime', params);
//游戏营销--拆盲盒游戏分页列表
export const cmhPage = params => requests(PREFIX + '/game-pro/page', params, true, false, 'post');
export const cmhPage = params => requests(PREFIX + '/game-pro/page', params, true);
//游戏营销--拆盲盒游戏统计数据
export const cmhStatistics = params => requests(PREFIX + '/game-pro/page-statistics', params);
......@@ -176,4 +176,4 @@ export const getGameTemplateByType = params => requests(PREFIX + '/game-pro/get-
export const generateMiniProgramLink = params => requests('api-admin/get-page-link-game', params);
//卡券回显 key 卡券ID ; value 卡券状态 0正常 1删除 2失效
export const cardView = params => requests(PREFIX + '/game-pro/card-view', params);
export const cardView = params => requests(PREFIX + '/game-pro/card-view', params, true);
......@@ -198,7 +198,7 @@ export default {
this.handleTemplateArr(Object.values(gameExt), true);
this.adsImageUrl = { imgUrl: this.baseForm.adsImageUrl, code: this.baseForm.adsImageUrl };
const currentTemp = this.templateData.filter(item => item.templateId == this.baseForm.templateId)[0];
console.log(currentTemp);
currentTemp.gameTemplateMaterialList.forEach(item => {
if (item.materialKey == 'backMusicUrl') {
this.backMusicOptions.push(item);
......@@ -285,26 +285,6 @@ export default {
this.baseForm.backMusicUrlObj = this.backMusicOptions[0];
}
}
// if (key.indexOf('Image') > -1) {
// let obj = data.materialMap[key][0];
// this.baseForm[key] = obj.materialValue;
// if (obj.materialSize) {
// const { width, height, size } = JSON.parse(obj.materialSize);
// this.baseForm[key + 'Size0'] = width + '*' + height + 'px';
// this.baseForm[key + 'Size1'] = size;
// }
// } else {
// this.backMusicOptions = data.materialMap['backMusicUrl'];
// if (data.materialMap['backMusicUrl'] && data.materialMap['backMusicUrl'].length) {
// this.baseForm.backMusicUrlObj = data.materialMap['backMusicUrl'][0];
// }
// const prizeStyle = data.materialMap['prizeStyleJson'][0];
// this.prizeStyleJson = JSON.parse(prizeStyle.materialValue);
// this.baseForm['prizeStyleJson'] = JSON.parse(prizeStyle.materialValue);
// this.baseForm['adsLinkUrl'] = data.materialMap['adsLinkUrl'][0].materialValue;
// this.baseForm['shareCard'] = data.materialMap['shareCard'][0].materialValue;
// this.baseForm['shareReport'] = data.materialMap['shareReport'][0].materialValue;
// }
});
console.log(this.baseForm);
},
......@@ -338,7 +318,10 @@ export default {
this.$emit('change', this.baseForm);
},
replace(type, index) {
this.baseForm.prizeStyleJson[index][type] = this.prizeStyleJson[index][type];
const currentTemp = this.templateData.filter(item => item.templateId == this.baseForm.templateId)[0];
let prizeStyleJson = currentTemp.gameTemplateMaterialList.filter(item => item.materialKey == 'prizeStyleJson')[0];
prizeStyleJson = prizeStyleJson ? JSON.parse(prizeStyleJson.materialValue) : [];
this.baseForm.prizeStyleJson[index][type] = prizeStyleJson[index][type];
this.baseForm = Object.assign({}, this.baseForm);
this.$emit('change', this.baseForm);
},
......
......@@ -34,7 +34,7 @@
</dm-steps>
<div class="formContent">
<baseConfig :templateArr="templateData" :echoData="baseForm" v-show="active == 0" @change="handleBaseConfigChange" @nextStep="data => nextStep(1, data)" />
<prizeConfig :prizeMax="prizeMax" :echoData="prizeForm" :prizeMin="prizeMin" v-show="active == 1" @nextStep="data => nextStep(2, data)" @prevStep="step => (active = step)" />
<prizeConfig :gameStatus="gameStatus" :invalidCard="invalidCard" :prizeMax="prizeMax" :echoData="prizeForm" :prizeMin="prizeMin" v-show="active == 1" @nextStep="data => nextStep(2, data)" @prevStep="step => (active = step)" />
<ruleConfig :shareCard="shareCard" :shareReport="shareReport" :echoData="ruleForm" v-show="active == 2" @nextStep="data => submit(3, data)" @prevStep="step => (active = step)" :btnLoading="btnLoading" />
</div>
</div>
......@@ -48,7 +48,7 @@ import step from '@/views/game/dm-step/step';
import baseConfig from './base-config.vue';
import prizeConfig from './prize-config.vue';
import ruleConfig from './rule-config.vue';
import { getGameTemplateByType, initActivity, getGameDetail } from '@/service/api/gameApi.js';
import { getGameTemplateByType, initActivity, getGameDetail, cardView } from '@/service/api/gameApi.js';
import gameTemplate from './gameTemplate';
export default {
data() {
......@@ -73,7 +73,9 @@ export default {
baseForm: {},
prizeForm: {},
ruleForm: {},
gameId: ''
gameId: '',
gameStatus: 0,
invalidCard: {}
};
},
computed: {
......@@ -97,6 +99,7 @@ export default {
ruleConfig
},
mounted() {
console.log('form----->mounted');
this.getGameTemplateByType();
},
destroyed() {
......@@ -114,8 +117,7 @@ export default {
},
methods: {
getGameDetail(id) {
getGameDetail({ gameId: id }).then(res => {
console.log(res);
getGameDetail({ gameId: id }).then(async res => {
const { result } = res;
const {
gameRuleInfo, // 游戏规则信息
......@@ -134,13 +136,27 @@ export default {
gameName,
memberWeightView,
creatorId,
gameId
gameId,
status
} = result;
this.gameId = gameId;
if (this.isEdit) {
this.gameId = gameId;
this.gameStatus = status;
}
const { winChance, filterJson, filterJsonView, memberDesc, memberType, playConditionFlag, playTimes, shareFlag, shareImageUrl, shareRuleDesc } = gameRuleInfo;
gameRuleConditionList.forEach(item => {
item.conditionJson = JSON.parse(item.conditionJson);
});
let cardIdArr = [];
gamePrizeList.forEach(item => {
if (item.prizeType == 2) {
cardIdArr.push(item.prizeRelationId);
}
});
if (cardIdArr.length) {
const { result } = await cardView({ ids: cardIdArr.join(',') });
this.invalidCard = result; // 1删除 2失效
}
this.ruleForm = { filterJson, gameRuleConditionList, memberDesc, memberType, playConditionFlag, playTimes, shareFlag, shareImageUrl, shareRuleDesc, memberWeightView, creatorId, filterJsonView };
this.prizeForm = { winChance, prizeNoticeStock, gamePrizeList, prizeNoticeFlag };
this.baseForm = { adsFlag, backMusicFlag, bulletFlag, templateId, gameTime: [startDate, endDate], gameName, gameRule, gameExt };
......@@ -191,8 +207,9 @@ export default {
console.log(data);
this.submitData = { ...this.submitData, ...data };
},
submit(step, data) {
async submit(step, data) {
this.submitData = { ...this.submitData, ...data };
console.log(this.submitData);
this.submitData = JSON.parse(JSON.stringify(this.submitData));
const { winChance, filterJson, filterJsonView, memberDesc, memberType, playConditionFlag, playTimes, shareFlag, shareImageUrl, gameRuleConditionList, gameName, gamePrizeList, prizeNoticeStock, prizeNoticeFlag, adsFlag, bulletFlag, backMusicFlag, templateId, gameRule, gameTime, gameExt } = this.submitData;
......@@ -201,6 +218,26 @@ export default {
delete item.index;
item.conditionJson = JSON.stringify(item.conditionJson);
});
let cardIdArr = [];
gamePrizeList.forEach(item => {
if (item.prizeType == 2) {
cardIdArr.push(item.prizeRelationId);
}
});
if (cardIdArr.length) {
const { result } = await cardView({ ids: cardIdArr.join(',') });
this.invalidCard = result; // 1删除 2失效
if (Object.values(result).map(item => item.invalid != 0) && this.gameStatus == 0) {
this.$message.error('存在异常状态的卡券,请返回上一步修改卡券后再提交');
return;
}
gamePrizeList.forEach(item => {
if (item.prizeType == 2 && item.prizeStock > result[item.prizeRelationId].stock) {
this.$message.error(`${item.prizeName}奖品数量高于关联库存,请修改奖品数量`);
return;
}
});
}
let submitData = {
gameRuleInfo, // 游戏规则信息
gameRuleConditionList, // 游戏规则-参与门槛
......@@ -218,8 +255,7 @@ export default {
endDate: gameTime[1],
gameName
};
console.log(submitData);
if (!this.isAdd) {
if (this.isEdit) {
submitData.gameId = this.gameId;
}
this.btnLoading = true;
......
......@@ -29,13 +29,15 @@
<template slot="header"> <span class="needCell">奖项设置</span> </template>
<template slot-scope="{ row, $index }">
<div v-if="row.prizeType == 1">
<el-form-item :prop="'gamePrizeList.' + $index + '.' + 'prizeNumber'" :rules="rules.prizeNumber" label-width="0"> <el-input class="inputClass" v-model.number="row.prizeNumber" @change="val => handlePrizeNumChange(val, $index)" />积分 </el-form-item>
<el-form-item :prop="'gamePrizeList.' + $index + '.' + 'prizeNumber'" :rules="rules.prizeNumber" label-width="0"> <el-input class="inputClass-32" v-model.number="row.prizeNumber" @change="val => handlePrizeNumChange(val, $index)" />积分 </el-form-item>
</div>
<el-form-item label-width="0" v-else-if="row.prizeType == 2">
<el-button type="text" @click="selectCard($index)" v-show="!row.prizeRelationId">选择卡券</el-button>
<div class="box" v-show="row.prizeRelationId">
<i class="cardIcon iconfont-components3 icon-cp-close-circle-fill" @click="delCard($index)"></i>
<div class="cardBox">
<div :class="['cardBox', row.status == 1 || row.status == 2 ? 'redBorder' : '']">
<el-tag v-show="row.status == 1" size="mini" type="danger" class="tagIcon">删除</el-tag>
<el-tag v-show="row.status == 2" size="mini" type="danger" class="tagIcon">失效</el-tag>
{{ row.prizeName }}
</div>
</div>
......@@ -82,7 +84,7 @@
<template slot="header"> <span class="needCell">奖品数量</span> </template>
<template slot-scope="{ row, $index }">
<div v-if="row.prizeType == 1 || row.prizeType == 2">
<el-form-item :prop="'gamePrizeList.' + $index + '.' + 'prizeStock'" :rules="rules.prizeStock" label-width="0"> <el-input class="w80" v-model.number="row.prizeStock" @change="calculateRate" /></el-form-item>
<el-form-item :prop="'gamePrizeList.' + $index + '.' + 'prizeStock'" :rules="{ validator: prizeStockRule(row) }" label-width="0"> <el-input class="inputClass-12" v-model.number="row.prizeStock" @change="calculateRate" /></el-form-item>
</div>
<el-form-item label-width="0" v-else>
- -
......@@ -151,7 +153,6 @@
import dmUploadAvatar from '@/components/upload/avatar';
import libCard from '@/views/sign/components/lib-card.vue';
import Sortable from 'sortablejs';
import { cardView } from '@/service/api/gameApi.js';
export default {
data() {
return {
......@@ -173,13 +174,14 @@ export default {
show: false,
prizeForm: {
winChance: 100,
prizeNoticeStock: '',
gamePrizeList: [
{
prizeType: 0,
prizeRate: 100,
sort: 0,
prizeName: '谢谢参与',
prizeImageUrl: '-',
prizeImageUrl: '',
prizeNumber: 1,
prizeStock: -1,
exchangeType: 0
......@@ -207,9 +209,14 @@ export default {
props: {
prizeMax: 0,
prizeMin: 0,
gameStatus: 0,
echoData: {
type: Object,
default: () => {}
},
invalidCard: {
type: Object,
default: () => {}
}
},
components: {
......@@ -231,13 +238,38 @@ export default {
this.calculateRate();
this.prizeForm.gamePrizeList = this.prizeForm.gamePrizeList.splice(0);
console.log(this.prizeForm);
},
invalidCard(val) {
this.prizeForm.gamePrizeList.forEach(item => {
if (item.prizeType == 2) {
item.status = val[item.prizeRelationId].invalid;
item.max = val[item.prizeRelationId].stock;
}
});
}
},
methods: {
cardView(ids) {
cardView({ ids }).then(res => {
console.log(res);
});
prizeStockRule(row) {
return (rule, value, callback) => {
console.log(value);
if (row.prizeType == 1) {
if (isNaN(value) || value > 1000000 || value < 0) {
callback(new Error(`请输入不超过1000000的数字`));
return;
}
}
if (row.prizeType == 2) {
if (isNaN(row.max)) {
callback(new Error(`请选择卡券`));
return;
}
if (isNaN(value) || value > row.max || value < 0) {
callback(new Error(`大于奖品关联库存${row.max}`));
return;
}
}
callback();
};
},
// 拖拽
drag() {
......@@ -269,6 +301,8 @@ export default {
data.prizeName = selectedData.cardName.length > 10 ? selectedData.cardName.slice(0, 10) : selectedData.cardName;
data.prizeImageUrl = { imgUrl: this.imgeType[selectedData.cardType], code: this.imgeType[selectedData.cardType] };
data.prizeNumber = 1;
data.status = 0;
data.max = selectedData.couponStock;
this.prizeForm.gamePrizeList = this.prizeForm.gamePrizeList.splice(0);
},
addPrize() {
......@@ -290,7 +324,7 @@ export default {
console.log(val, index);
if (val == 0) {
this.calculateRate();
this.prizeForm.gamePrizeList[index].prizeImageUrl = '-';
this.prizeForm.gamePrizeList[index].prizeImageUrl = '';
this.prizeForm.gamePrizeList[index].prizeName = '谢谢参与';
this.prizeForm.gamePrizeList[index].prizeNumber = 1;
this.prizeForm.gamePrizeList[index].optNum = -1;
......@@ -327,12 +361,23 @@ export default {
this.$emit('prevStep', 0);
},
submit() {
this.$refs.prizeForm.validate(val => {
if (this.gameStatus == 0) {
let invalid = false;
this.prizeForm.gamePrizeList.forEach(item => {
if (item.prizeType == 2 && item.status != 0) {
invalid = true;
this.$message.error(`${item.prizeName}${item.status == 1 ? '删除' : '失效'},请重新关联奖品`);
return;
}
});
if (invalid) return;
}
this.$refs.prizeForm.validate((val, obj) => {
if (val) {
const data = { ...this.prizeForm };
data.gamePrizeList.forEach(item => {
if (item.prizeImageUrl) {
item.prizeImageUrl = item.prizeImageUrl.imgUrl || '-';
item.prizeImageUrl = item.prizeImageUrl.imgUrl || '';
}
if (item.prizeType != 0) {
if (this.isAdd) {
......@@ -349,6 +394,7 @@ export default {
} else {
this.scrollToError(this);
}
console.log(obj);
});
}
}
......@@ -382,15 +428,22 @@ export default {
text-overflow: ellipsis;
padding-left: 10px;
}
.redBorder {
border-color: red;
}
.cardIcon {
position: absolute;
top: -5px;
right: -5px;
cursor: pointer;
}
.inputClass {
.inputClass-32 {
width: calc(100% - 32px);
}
.inputClass-12 {
width: calc(100% - 24px);
}
.tableForm {
/depp/ .has-gutter {
.cell {
......
......@@ -7,7 +7,7 @@
</el-form-item>
<el-form-item>
<div v-show="ruleForm.memberType == 0">
<vue-gic-people v-bind="storeParams" projectName="marketing" :triggerReset="true" :isAdd="isAdd" :hasSearchData="ruleForm.filterJson" :useId="ruleForm.memberWeightView.searchId" sceneValue="member" ref="peopleFilter" @findFilter="findFilter" @getBackData="getBackData" @editShow="toggleTag = true" @editHide="toggleTag = false" @hideBtn="toggleTag = false" />
<vue-gic-people v-bind="storeParams" projectName="marketing" :triggerReset="true" :isAdd="isAdd" :hasSearchData="ruleForm.hasSearchData" :useId="ruleForm.memberWeightView.searchId" sceneValue="member" ref="peopleFilter" @findFilter="findFilter" @getBackData="getBackData" @editShow="toggleTag = true" @editHide="toggleTag = false" @hideBtn="toggleTag = false" />
<div class="gic-people--button" v-show="toggleTag">
<el-button size="small" type="primary" @click="getData">确 定</el-button>
<el-button size="small" @click="cancelFilter">取 消</el-button>
......@@ -142,7 +142,6 @@ export default {
playConditionFlag: 1,
shareFlag: 1,
playTimes: '',
filterJson: '',
filterJsonView: '',
shareImageUrl: '',
memberWeightView: { searchId: '' },
......@@ -218,14 +217,18 @@ export default {
obj[item.conditionType] = item;
});
this.ruleForm.gameRuleConditionList.forEach(item => {
console.log(item);
if (obj[item.type]) {
console.log(obj[item.type]);
item.conditionType = obj[item.type].conditionType;
item.conditionJson = obj[item.type].conditionJson;
}
});
this.ruleForm = Object.assign(this.ruleForm, { filterJson, memberDesc, memberType, playConditionFlag, playTimes, shareFlag, shareImageUrl, shareRuleDesc, memberWeightView, creatorId, filterJsonView });
if (memberType == 1) {
this.selectedGroupIds = filterJson;
} else {
this.ruleForm.hasSearchData = filterJson;
}
this.ruleForm = Object.assign(this.ruleForm, { memberDesc, memberType, playConditionFlag, playTimes, shareFlag, shareImageUrl, shareRuleDesc, memberWeightView, creatorId, filterJsonView });
console.log(this.ruleForm);
}
},
......@@ -258,7 +261,7 @@ export default {
// 子组件触发父组件事件,返回过滤条件数据
findFilter(val) {
console.log(val);
this.ruleForm.filterJson = val;
this.ruleForm.hasSearchData = val;
},
downloadTmp() {
// const prev = process.env['NODE_ENV'] === 'development' ? '' : '/marketing'; // eslint-disable-line
......@@ -322,6 +325,8 @@ export default {
const arr = [];
if (data.memberType == 1) {
data.filterJson = this.selectedGroupIds;
} else {
data.filterJson = data.hasSearchData;
}
data.gameRuleConditionList.forEach(item => {
if (item.conditionType != -1) {
......
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