Commit 8dc50a78 by crushh

update: dist

parent 27699b05
......@@ -81,12 +81,14 @@
<el-switch v-model="baseForm.bulletFlag" :active-value="1" :inactive-value="0" />
<div class="tips mt10">开启后,如有三名以上用户获奖后,活动首页将轮播展示用户中奖信息。</div>
</el-form-item>
<el-form-item label="广告位" prop="adsImageUrl">
<el-form-item label="广告位">
<el-switch v-model="baseForm.adsFlag" :active-value="1" :inactive-value="0" />
<div class="adsImg" v-show="baseForm.adsFlag">
<dm-upload-avatar class="upload-avatar" width="375" height="75" :limit="{ type: false, maxSize: 1 }" fileType="img" :model.sync="adsImageUrl" label="上传图片" tips="" @backImg="handleAdsChange" :unused="isInfo"></dm-upload-avatar>
<div class="tips" style="margin-bottom: 20px;">图片建议尺寸{{ baseForm.adsImageUrlSize0 }}或等比图片,格式 jpg/png/gif,大小{{ baseForm.adsImageUrlSize1 }} M以内。</div>
<el-form-item label="小程序跳转路径" prop="link" label-width="110px">
<el-form-item prop="adsImageUrl" :rules="rules.adsImageUrl" label-width="0">
<dm-upload-avatar class="upload-avatar" width="375" height="75" :limit="{ type: false, maxSize: 1 }" fileType="img" :model.sync="adsImageUrl" label="上传图片" tips="" @backImg="handleAdsChange" :unused="isInfo"></dm-upload-avatar>
<div class="tips">图片建议尺寸{{ baseForm.adsImageUrlSize0 }}或等比图片,格式 jpg/png/gif,大小{{ baseForm.adsImageUrlSize1 }} M以内。</div>
</el-form-item>
<el-form-item label="小程序跳转路径" prop="link" label-width="110px" :rules="rules.link">
<div class="wxapp mr16" v-if="selectLink.linkData.name">
{{ selectLink.linkData.name }}
</div>
......@@ -112,11 +114,27 @@ const maxTimeRange = 180 * 24 * 60 * 60 * 1000; // 6个月
const music = new Audio();
export default {
data() {
const adsImageUrlVal = (rule, value, callback) => {
if (this.baseForm.adsFlag == 1 && !this.baseForm.adsImageUrl) {
callback(new Error('请上传广告位图片'));
} else {
callback();
}
};
const linkVal = (rule, value, callback) => {
if (this.baseForm.adsFlag == 1 && !this.baseForm.adsLinkUrl) {
callback(new Error('请选择链接'));
} else {
callback();
}
};
return {
rules: {
gameName: { type: 'string', required: true, message: '游戏名称未填写', trigger: 'blur' },
gameTime: { type: 'array', required: true, message: '未配置游戏时间', trigger: 'blur' },
gameRule: { type: 'string', required: true, message: '未配置游戏说明', trigger: 'blur' }
gameRule: { type: 'string', required: true, message: '未配置游戏说明', trigger: 'blur' },
adsImageUrl: { validator: adsImageUrlVal },
link: { validator: linkVal }
},
baseForm: {
gameName: '',
......@@ -202,7 +220,6 @@ 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];
currentTemp.gameTemplateMaterialList.forEach(item => {
if (item.materialKey == 'backMusicUrl') {
this.backMusicOptions.push(item);
......
......@@ -99,7 +99,6 @@ export default {
ruleConfig
},
mounted() {
console.log('form----->mounted');
this.getGameTemplateByType();
},
destroyed() {
......@@ -142,7 +141,7 @@ export default {
this.gameId = gameId;
this.gameStatus = status;
}
const { winChance, filterJson, filterJsonView, memberDesc, memberType, playConditionFlag, playTimes, shareFlag, shareImageUrl, shareRuleDesc } = gameRuleInfo;
const { ruleId, winChance, filterJson, filterJsonView, memberDesc, memberType, playConditionFlag, playTimes, shareFlag, shareImageUrl, shareRuleDesc } = gameRuleInfo;
gameRuleConditionList.forEach(item => {
item.conditionJson = JSON.parse(item.conditionJson);
});
......@@ -159,7 +158,7 @@ export default {
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.ruleForm = { ruleId, 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 };
});
......@@ -214,8 +213,8 @@ export default {
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;
const gameRuleInfo = { winChance, filterJson, filterJsonView, memberDesc, memberType, playConditionFlag, playTimes, shareFlag, shareImageUrl, shareRuleDesc: gameName };
const { ruleId, winChance, filterJson, filterJsonView, memberDesc, memberType, playConditionFlag, playTimes, shareFlag, shareImageUrl, gameRuleConditionList, gameName, gamePrizeList, prizeNoticeStock, prizeNoticeFlag, adsFlag, bulletFlag, backMusicFlag, templateId, gameRule, gameTime, gameExt } = this.submitData;
const gameRuleInfo = { ruleId, winChance, filterJson, filterJsonView, memberDesc, memberType, playConditionFlag, playTimes, shareFlag, shareImageUrl, shareRuleDesc: gameName };
gameRuleConditionList.forEach(item => {
delete item.index;
item.conditionJson = JSON.stringify(item.conditionJson);
......
......@@ -350,6 +350,7 @@ img {
.ad-image {
margin: 39px 15px 15px;
border-radius: 8px;
height: 150px;
width: calc(100% - 30px);
}
......
......@@ -132,8 +132,8 @@
<el-form-item label="库存提醒" prop="winChance">
<el-switch v-model="prizeForm.prizeNoticeFlag" :active-value="1" :inactive-value="0" />
</el-form-item>
<el-form-item label="库存低于" prop="prizeNoticeStock" v-show="prizeForm.prizeNoticeFlag == 1">
<el-form-item prop="prizeNoticeStock" :rules="rules.prizeNoticeStock">
<el-form-item label="库存低于" v-show="prizeForm.prizeNoticeFlag == 1">
<el-form-item prop="prizeNoticeStock">
<el-input class="w180" v-model.number="prizeForm.prizeNoticeStock" placeholder="请输入" />
<span class="ml10">件奖品库发送短信提醒</span>
<el-popover placement="right" width="200" trigger="hover" content="您创建的游戏【游戏名称】中【奖品名称】的奖品数量已低于___件,请及时关注并补充!">
......@@ -155,12 +155,27 @@ import libCard from '@/views/sign/components/lib-card.vue';
import Sortable from 'sortablejs';
export default {
data() {
const prizeNoticeStockVal = (rule, value, callback) => {
if (this.prizeForm.prizeNoticeFlag) {
console.log(value);
console.log(new RegExp('([1-9]{1}\\d{0,9})|(0{1})').test(value));
if (!new RegExp('([1-9]{1}\\d{0,9})|(0{1})').test(value)) {
callback(new Error('请输入不超过1000000的数字'));
return;
}
if (value < 0 || value > 1000000) {
callback(new Error('请输入不超过1000000的数字'));
return;
}
}
callback();
};
return {
rules: {
winChance: { type: 'number', required: true, message: '请输入不超过100的数字', max: 100, min: 0 },
prizeNumber: { type: 'number', required: true, message: '请输入不超过1000000的数字', max: 1000000, min: 1 },
prizeStock: { type: 'number', required: true, message: '请输入不超过1000000的数字', max: 1000000, min: 0 },
prizeNoticeStock: { type: 'number', message: '请输入不超过1000000的数字', max: 1000000, min: 0 },
prizeNoticeStock: { validator: prizeNoticeStockVal },
prizeName: { type: 'string', required: true, message: '请输入奖品名称' },
prizeType: { required: true, message: '请选择奖品类型' }
},
......@@ -203,7 +218,7 @@ export default {
}
],
index: 0,
isAdd: this.$route.meta.type === 'add'
isEdit: this.$route.meta.type === 'edit'
};
},
props: {
......@@ -248,7 +263,11 @@ export default {
this.prizeForm.gamePrizeList.forEach(item => {
if (item.prizeType == 2) {
item.status = val[item.prizeRelationId].invalid;
item.max = val[item.prizeRelationId].stock;
if (this.isEdit) {
item.max = item.prizeStock + val[item.prizeRelationId].stock;
} else {
item.max = val[item.prizeRelationId].stock;
}
}
});
}
......@@ -256,10 +275,13 @@ export default {
methods: {
prizeStockRule(row) {
return (rule, value, callback) => {
console.log(value);
if (row.prizeType == 1) {
if (isNaN(value) || value > 1000000 || value < 0) {
callback(new Error(`请输入不超过1000000的数字`));
if (!new RegExp('([1-9]{1}\\d{0,9})|(0{1})').test(value)) {
callback(new Error('请输入不超过1000000的数字'));
return;
}
if (value < 0 || value > 1000000) {
callback(new Error('请输入不超过1000000的数字'));
return;
}
}
......@@ -268,7 +290,11 @@ export default {
callback(new Error(`请选择卡券`));
return;
}
if (isNaN(value) || value > row.max || value < 0) {
if (!new RegExp('([1-9]{1}\\d{0,9})|(0{1})').test(value)) {
callback(new Error('请输入'));
return;
}
if (value > row.max || value < 0) {
callback(new Error(`大于奖品关联库存${row.max}`));
return;
}
......@@ -384,11 +410,11 @@ export default {
item.prizeImageUrl = item.prizeImageUrl.imgUrl || '';
}
if (item.prizeType != 0) {
if (this.isAdd) {
item.optNum = item.prizeStock;
} else {
if (this.isEdit && item.isOld) {
let num = item.prizeStock - item.prizeStockOriginal;
item.optNum = num;
} else {
item.optNum = item.prizeStock;
}
} else {
item.optNum = -1;
......
<template>
<el-form size="small" :model="ruleForm" :rules="rules" ref="ruleForm" label-width="160px">
<dm-sub-title type="line" class="mb20">玩法配置</dm-sub-title>
<el-form-item label="参与人群" prop="memberType">
<el-radio v-model="ruleForm.memberType" :label="0" :disabled="isDisabled">会员筛选</el-radio>
<el-radio v-model="ruleForm.memberType" :label="1" :disabled="isDisabled">会员分组</el-radio>
<el-form-item label="参与人群" prop="filterJson">
<el-radio-group v-model="ruleForm.memberType" :disabled="isDisabled" @change="clearValidate('filterJson')">
<el-radio :label="0">会员筛选</el-radio>
<el-radio :label="1">会员分组</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item>
<div v-show="ruleForm.memberType == 0">
......@@ -50,7 +52,7 @@
<el-input placeholder="请输入积分" v-model="item.conditionJson.value" class="w140" />
<span class="ml10">积分 </span>
</el-form-item>
<el-form-item label="提示客户积分获取路径" :prop="'gameRuleConditionList.' + index + '.conditionJson.' + 'mpUrlView'">
<el-form-item label="提示客户积分获取路径" :prop="'gameRuleConditionList.' + index + '.conditionJson.' + 'mpUrlView'" :rules="rules.mpUrlView">
<div></div>
<div class="wxapp mr16" v-if="item.conditionJson.mpUrlView && item.conditionJson.mpUrlView.name">
{{ item.conditionJson.mpUrlView.name }}
......@@ -78,7 +80,7 @@
</div>
</div>
</div>
<el-form-item label="小程序卡片标题" label-width="122px" :prop="'gameRuleConditionList.' + index + '.conditionJson.' + 'shareTitle'"> <el-input class="w340" maxlength="24" show-word-limit v-model="item.conditionJson.shareTitle" /> </el-form-item>
<el-form-item label="小程序卡片标题" label-width="122px" :prop="'gameRuleConditionList.' + index + '.conditionJson.' + 'shareTitle'" :rules="rules.shareTitle"> <el-input class="w340" maxlength="24" show-word-limit v-model="item.conditionJson.shareTitle" /> </el-form-item>
<el-form-item label="小程序卡片图片" label-width="122px">
<div class="flex">
<img :src="item.conditionJson.shareCard" alt="游戏背景" style="width: 100px;height: 75px;" />
......@@ -101,14 +103,14 @@
</el-form-item>
</div>
<div v-show="item.conditionJson.type == 12">
<el-form-item label="关注回复" :prop="'gameRuleConditionList.' + index + '.conditionJson.' + 'subscribeMsg'" label-width="80px"> <el-input maxlength="20" show-word-limit v-model="item.conditionJson.subscribeMsg" /> </el-form-item>
<el-form-item label="关注回复" :prop="'gameRuleConditionList.' + index + '.conditionJson.' + 'subscribeMsg'" label-width="80px" :rules="rules.subscribeMsg"> <el-input maxlength="20" show-word-limit v-model="item.conditionJson.subscribeMsg" /> </el-form-item>
</div>
</div>
</div>
</div>
</div>
</el-form-item>
<el-form-item label="每人最多可玩次数" prop="playTimes"> <el-input v-model="ruleForm.playTimes" class="w140" placeholder="上限1000" :disabled="isDisabled" />次游戏次数 </el-form-item>
<el-form-item label="每人最多可玩次数" prop="playTimes" :rules="rules.playTimes"> <el-input v-model="ruleForm.playTimes" class="w140" placeholder="上限1000" :disabled="isDisabled" />次游戏次数 </el-form-item>
<el-form-item label="分享" prop="shareFlag">
<el-switch v-model="ruleForm.shareFlag" :active-value="1" :inactive-value="0" />
<div class="tips">关闭后用户无法分享小程序</div>
......@@ -126,6 +128,38 @@ import Linktools from '@/components/linktools-fulls/index.vue';
import gicNewMemberGroup from '@/components/dm-new-member-group/index.vue';
export default {
data() {
const filterJsonVal = (rule, value, callback) => {
if ((this.ruleForm.memberType == 0 && !this.ruleForm.hasSearchData) || (this.ruleForm.memberType == 1 && !this.selectedGroupIds)) {
callback(new Error('请选择参与人群'));
return;
}
callback();
};
const mpUrlViewVal = (rule, value, callback) => {
console.log(value);
if (this.ruleForm.gameRuleConditionList[1].conditionType != -1 && !this.ruleForm.gameRuleConditionList[1].conditionJson.dumpPath) {
callback(new Error('请选择'));
return;
}
callback();
};
const shareTitleVal = (rule, value, callback) => {
console.log(value);
if (this.ruleForm.gameRuleConditionList[2].conditionType != -1 && this.ruleForm.gameRuleConditionList[2].conditionJson.type == 11 && !this.ruleForm.gameRuleConditionList[2].conditionJson.shareTitle) {
callback(new Error('请输入'));
return;
}
callback();
};
const subscribeMsgVal = (rule, value, callback) => {
console.log(value);
if (this.ruleForm.gameRuleConditionList[2].conditionType != -1 && this.ruleForm.gameRuleConditionList[2].conditionJson.type == 12 && !this.ruleForm.gameRuleConditionList[2].conditionJson.subscribeMsg) {
callback(new Error('请输入'));
return;
}
callback();
};
return {
// 链接小工具选择链接
show: false,
......@@ -139,7 +173,7 @@ export default {
hasSearchData: '',
memberType: 0,
memberDesc: '',
playConditionFlag: 1,
playConditionFlag: 0,
shareFlag: 1,
playTimes: '',
filterJsonView: '',
......@@ -149,7 +183,7 @@ export default {
gameRuleConditionList: [
{
type: 2,
conditionType: -1, // 赠与免费游戏次数 zuo
conditionType: -1, // 赠与免费游戏次数
conditionJson: {
type: 21,
value: ''
......@@ -185,7 +219,12 @@ export default {
rules: {
memberType: { required: true, message: '请选择' },
memberDesc: { type: 'string', required: true, message: '未配置游戏说明', trigger: 'blur' },
playConditionFlag: { required: true }
// playTimes: { type: 'number', required: true, message: '请输入不超过1000的数字', max: 1000, min: 1 },
playConditionFlag: { required: true },
mpUrlView: { validator: mpUrlViewVal },
shareTitle: { validator: shareTitleVal },
filterJson: { validator: filterJsonVal },
subscribeMsg: { validator: subscribeMsgVal }
},
isAdd: this.$route.meta.type === 'add'
};
......@@ -212,24 +251,24 @@ export default {
this.ruleForm.gameRuleConditionList = this.ruleForm.gameRuleConditionList.splice(0);
},
echoData(val) {
const { filterJson, filterJsonView, gameRuleConditionList, memberDesc, memberType, playConditionFlag, playTimes, shareFlag, shareImageUrl, shareRuleDesc, memberWeightView, creatorId } = val;
const { ruleId, filterJson, filterJsonView, gameRuleConditionList, memberDesc, memberType, playConditionFlag, playTimes, shareFlag, shareImageUrl, shareRuleDesc, memberWeightView, creatorId } = val;
let obj = {};
gameRuleConditionList.forEach(item => {
obj[item.conditionType] = item;
});
this.ruleForm.gameRuleConditionList.forEach(item => {
if (obj[item.type]) {
console.log(obj[item.type]);
item.conditionType = obj[item.type].conditionType;
item.conditionJson = obj[item.type].conditionJson;
}
item.conditionId = obj[item.type].conditionId;
});
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 });
this.ruleForm = Object.assign(this.ruleForm, { ruleId, memberDesc, memberType, playConditionFlag, playTimes, shareFlag, shareImageUrl, shareRuleDesc, memberWeightView, creatorId, filterJsonView });
console.log(this.ruleForm);
}
},
......@@ -249,10 +288,12 @@ export default {
/**客户分组 */
confirmGroupDialog(arr, idStr) {
this.selectedGroupIds = idStr;
this.clearValidate('filterJson');
},
/*-------人群筛选器的方法-------*/
getData() {
this.$refs.peopleFilter.confirmSet();
this.clearValidate('filterJson');
},
// 取消
cancelFilter() {
......@@ -322,7 +363,14 @@ export default {
prevStep() {
this.$emit('prevStep', 1);
},
clearValidate(name) {
this.$refs.ruleForm.clearValidate(name);
},
submit() {
if (this.ruleForm.playConditionFlag == 1 && !this.ruleForm.gameRuleConditionList.filter(item => item.conditionType != -1).length) {
this.$message.error('请至少勾选一项');
return;
}
this.$refs.ruleForm.validate((val, obj) => {
if (val) {
const data = { ...this.ruleForm };
......
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