Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
marketing
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
marketing-web
marketing
Commits
e6f21ae6
Commit
e6f21ae6
authored
Jun 08, 2022
by
crushh
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update: dist
parent
c90d88d6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
95 additions
and
49 deletions
+95
-49
base-config.vue
src/views/game/cmh/base-config.vue
+1
-1
form.vue
src/views/game/cmh/form.vue
+11
-4
gameTemplate.vue
src/views/game/cmh/gameTemplate.vue
+34
-15
info.vue
src/views/game/cmh/info.vue
+13
-5
prize-config.vue
src/views/game/cmh/prize-config.vue
+24
-14
rule-config.vue
src/views/game/cmh/rule-config.vue
+12
-10
No files found.
src/views/game/cmh/base-config.vue
View file @
e6f21ae6
...
...
@@ -78,7 +78,7 @@
</div>
</el-form-item>
<el-form-item
label=
"氛围弹幕"
>
<el-switch
v-model=
"baseForm.bulletFlag"
:active-value=
"1"
:inactive-value=
"0"
/>
<el-switch
v-model=
"baseForm.bulletFlag"
:active-value=
"1"
:inactive-value=
"0"
@
change=
"handleDateChange"
/>
<div
class=
"tips mt10"
>
开启后,如有三名以上用户获奖后,活动首页将轮播展示用户中奖信息。
</div>
</el-form-item>
<el-form-item
label=
"广告位"
>
...
...
src/views/game/cmh/form.vue
View file @
e6f21ae6
...
...
@@ -21,7 +21,7 @@
<div
class=
"iphone"
v-if=
"menuActive == 0"
>
<span
class=
"gameTitle"
>
{{
gameName
}}
</span>
<img
src=
"../../../assets/img/Navbar.png"
alt=
""
/>
<gameTemplate
:bgImg=
"bgImg"
:tipsImg=
"tipsImg"
:boxImg=
"boxImg"
:adImg=
"adImg"
:ruleData=
"ruleData"
:templateId=
"templateId"
/>
<gameTemplate
:bgImg=
"bgImg"
:tipsImg=
"tipsImg"
:boxImg=
"boxImg"
:adImg=
"adImg"
:ruleData=
"ruleData"
:templateId=
"templateId"
:bullet=
"bullet"
/>
</div>
<div
class=
"iphone"
v-else
>
<img
:src=
"computedImg"
/>
...
...
@@ -75,6 +75,7 @@ export default {
tipsImg
:
''
,
boxImg
:
''
,
adImg
:
''
,
bulletImage
:
''
,
btnLoading
:
false
,
submitData
:
{},
isEdit
:
this
.
$route
.
meta
.
type
===
'edit'
,
...
...
@@ -209,13 +210,17 @@ export default {
handleBaseConfigChange
(
data
)
{
console
.
log
(
'handleBaseConfigChange----->'
);
console
.
log
(
data
);
const
{
backImageUrl
,
noticeImageUrl
,
adsImageUrl
,
gameName
,
templateId
,
shareCard
,
shareReport
,
gameTime
,
shareCardSize0
,
shareCardSize1
,
shareReportSize1
,
shareReportSize0
}
=
data
;
const
{
backImageUrl
,
noticeImageUrl
,
adsImageUrl
,
bulletImageUrl
,
bulletFlag
,
gameName
,
templateId
,
shareCard
,
shareReport
,
gameTime
,
shareCardSize0
,
shareCardSize1
,
shareReportSize1
,
shareReportSize0
}
=
data
;
this
.
bgImg
=
backImageUrl
;
this
.
tipsImg
=
noticeImageUrl
;
this
.
boxImg
=
data
.
prizeStyleJson
[
0
].
imageNoSelectUrl
;
this
.
adImg
=
adsImageUrl
;
this
.
gameName
=
gameName
;
this
.
templateId
=
templateId
;
this
.
bullet
=
{
bulletImageUrl
,
bulletFlag
};
this
.
shareImgData
=
{
shareCard
,
shareReport
,
...
...
@@ -371,16 +376,18 @@ export default {
validator
()
{
// 校验必填
return
Promise
.
all
([
this
.
$refs
.
baseConfig
.
nextStep
(
'noNext'
),
this
.
$refs
.
prizeConfig
.
nextStep
(
'noNext'
),
this
.
$refs
.
ruleConfig
.
nextStep
(
'noNext'
)]).
then
(
val
=>
{
if
(
!
val
.
includes
(
false
))
{
console
.
log
(
val
);
if
(
!
val
.
includes
(
false
)
&&
!
val
.
includes
(
0
))
{
return
true
;
}
else
{
this
.
$message
.
error
(
'请确认必填字段都已填写且通过校验'
)
;
val
.
includes
(
0
)
?
this
.
$message
.
error
(
'请确认必填字段都已填写且通过校验'
)
:
''
;
return
false
;
}
});
},
submitForm
()
{
this
.
validator
().
then
(
val
=>
{
console
.
log
(
val
);
if
(
!
val
)
return
;
this
.
handleSubmitData
();
});
...
...
src/views/game/cmh/gameTemplate.vue
View file @
e6f21ae6
...
...
@@ -4,13 +4,14 @@
<div
class=
"content"
>
<div
class=
"right-btn rule"
>
游戏规则
</div>
<div
class=
"right-btn award"
>
我的奖品
</div>
<div
class=
"music-icon iconfont"
:class=
"isPlay ? 'icon-yinfu' : 'icon-xingzhuangjiehe2x'"
></div>
<div
class=
"integral"
v-if=
"ruleData.type == 0"
>
{{
ruleData
.
val
}}
积分/次
</div>
<div
class=
"swiper-item"
v-if=
"bullet.bulletFlag == 1"
>
<img
:src=
"bullet.bulletImageUrl"
/>
<span>
恭喜 张* 获得 100元优惠券
</span>
</div>
<div
class=
"box-box"
>
<img
v-for=
"item in boxList"
:key=
"item"
:src=
"boxImg"
:style=
"
{ left: item.left, top: item.top }" @click="showOpenBoxDialog = true" />
</div>
<div
class=
"points-count-box"
>
<div
class=
"text-box"
>
<div
class=
"text"
>
1500
</div>
...
...
@@ -110,7 +111,6 @@ export default {
return
{
list
:
[
'刷卡拉拉卡'
,
'阿拉卡萨卢克和史莱克'
,
'刷卡拉拉卡'
,
'阿拉卡萨卢克和史莱克'
],
boxList
:
box9
,
isPlay
:
true
,
name
:
'猜盲盒'
};
},
...
...
@@ -131,6 +131,10 @@ export default {
type
:
String
,
default
:
''
},
bullet
:
{
type
:
Object
,
default
:
()
=>
{}
},
ruleData
:
{
type
:
Object
,
default
:
()
=>
{}
...
...
@@ -169,7 +173,6 @@ img {
position
:
relative
;
z-index
:
1
;
}
.music-icon
{
text-align
:
center
;
width
:
30px
;
...
...
@@ -234,7 +237,7 @@ img {
.integral
{
position
:
absolute
;
z-index
:
2
;
top
:
126
px
;
top
:
98
px
;
left
:
50%
;
transform
:
translateX
(
-50%
);
min-width
:
120px
;
...
...
@@ -250,22 +253,16 @@ img {
font-size
:
12px
;
}
.swiper-class
{
position
:
absolute
;
left
:
20px
;
top
:
160px
;
z-index
:
10
;
width
:
300px
;
height
:
36px
;
}
.swiper-item
{
width
:
300px
;
height
:
36px
;
box-sizing
:
border-box
;
border-radius
:
17px
0
0
17px
;
position
:
relative
;
display
:
flex
;
align-items
:
center
;
position
:
absolute
;
top
:
129px
;
left
:
19px
;
}
.swiper-item
img
{
position
:
absolute
;
...
...
@@ -401,6 +398,28 @@ img {
-webkit-text-fill-color
:
transparent
;
font-size
:
18px
;
}
.swiper-item
{
width
:
300px
;
height
:
36px
;
box-sizing
:
border-box
;
border-radius
:
17px
0
0
17px
;
position
:
relative
;
display
:
flex
;
align-items
:
center
;
}
.swiper-item
img
{
position
:
absolute
;
left
:
0
;
top
:
0
;
width
:
100%
;
height
:
100%
;
}
.swiper-item
span
{
padding-left
:
30px
;
color
:
white
;
font-size
:
12px
;
z-index
:
2
;
}
.share-box
img
{
position
:
absolute
;
left
:
50%
;
...
...
src/views/game/cmh/info.vue
View file @
e6f21ae6
...
...
@@ -97,7 +97,7 @@
<
/div
>
<
/el-descriptions-item
>
<
/el-descriptions
>
<
div
v
-
if
=
"form.gameRuleInfo.memberType == 0 && form.gameRuleInfo.filterJson"
>
<
div
v
-
show
=
"form.gameRuleInfo.memberType == 0 && form.gameRuleInfo.filterJson"
>
<
vue
-
gic
-
people
projectName
=
"marketing"
:
isAdd
=
"false"
:
hasSearchData
=
"form.gameRuleInfo.filterJson"
:
useId
=
"form.memberWeightView.searchId"
sceneValue
=
"member"
ref
=
"peopleFilter"
@
editShow
=
"toggleTag = true"
@
editHide
=
"toggleTag = false"
@
hideBtn
=
"toggleTag = false"
/>
<
div
class
=
"gic-people--button"
v
-
show
=
"toggleTag"
>
<
el
-
button
size
=
"small"
type
=
"primary"
:
disabled
=
"true"
>
确
定
<
/el-button
>
...
...
@@ -286,10 +286,18 @@ export default {
}
}
);
let
prizeArr
=
this
.
form
.
gamePrizeList
.
filter
(
item
=>
item
.
prizeType
==
0
);
prizeArr
.
forEach
(
item
=>
{
const
prizeRate
=
(
100
-
this
.
form
.
gameRuleInfo
.
winChance
)
/
prizeArr
.
length
||
0
;
item
.
prizeRate
=
prizeRate
.
toFixed
(
2
);
}
);
if
(
!
prizeNumTotal
)
{
prizeArr
.
forEach
(
item
=>
{
const
prizeRate
=
100
/
prizeArr
.
length
||
0
;
item
.
prizeRate
=
prizeRate
.
toFixed
(
2
);
}
);
}
else
{
prizeArr
.
forEach
(
item
=>
{
const
prizeRate
=
(
100
-
this
.
form
.
gameRuleInfo
.
winChance
)
/
prizeArr
.
length
||
0
;
item
.
prizeRate
=
prizeRate
.
toFixed
(
2
);
}
);
}
this
.
form
.
gamePrizeList
=
this
.
form
.
gamePrizeList
.
splice
(
0
);
}
,
handleListen
()
{
...
...
src/views/game/cmh/prize-config.vue
View file @
e6f21ae6
...
...
@@ -34,7 +34,7 @@
<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
v-show=
"!isDisabled
&&
!row.isOld"
class=
"cardIcon iconfont-components3 icon-cp-close-circle-fill"
@
click=
"delCard($index)"
></i>
<i
v-show=
"!isDisabled
||
!row.isOld"
class=
"cardIcon iconfont-components3 icon-cp-close-circle-fill"
@
click=
"delCard($index)"
></i>
<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>
...
...
@@ -95,7 +95,7 @@
<
template
slot-scope=
"{ row }"
>
<div
v-if=
"row.prizeType == 1 || row.prizeType == 2"
>
<el-form-item
label-width=
"0"
>
<el-input
v-model=
"row.prizeDesc"
maxlength=
"
60"
placeholder=
"不超过6
0个字"
/>
<el-input
v-model=
"row.prizeDesc"
maxlength=
"
30"
placeholder=
"不超过3
0个字"
/>
</el-form-item>
</div>
<el-form-item
label-width=
"0"
v-else
>
...
...
@@ -244,6 +244,11 @@ export default {
},
mounted
()
{
this
.
drag
();
document
.
addEventListener
(
'visibilitychange'
,
()
=>
{
if
(
!
document
.
hidden
)
{
this
.
cardView
();
}
});
},
watch
:
{
echoData
(
val
)
{
...
...
@@ -275,15 +280,14 @@ export default {
let
cardIdArr
=
this
.
prizeForm
.
gamePrizeList
.
filter
(
item
=>
item
.
prizeType
==
2
).
map
(
item
=>
item
.
prizeRelationId
);
if
(
cardIdArr
.
length
)
{
const
{
result
}
=
await
cardView
({
ids
:
cardIdArr
.
join
(
','
)
});
console
.
log
(
result
);
this
.
handleInvalidCard
(
result
);
}
},
handleInvalidCard
(
val
)
{
this
.
prizeForm
.
gamePrizeList
.
forEach
(
item
=>
{
if
(
item
.
prizeType
==
2
)
{
if
(
item
.
prizeType
==
2
&&
val
[
item
.
prizeRelationId
]
)
{
item
.
status
=
val
[
item
.
prizeRelationId
].
invalid
;
if
(
this
.
isEdit
)
{
if
(
this
.
isEdit
&&
item
.
isOld
)
{
item
.
max
=
item
.
prizeStock
+
val
[
item
.
prizeRelationId
].
stock
;
}
else
{
item
.
max
=
val
[
item
.
prizeRelationId
].
stock
;
...
...
@@ -342,7 +346,6 @@ export default {
this
.
index
=
index
;
},
sendItem
(
selectedData
)
{
console
.
log
(
selectedData
);
const
data
=
this
.
prizeForm
.
gamePrizeList
[
this
.
index
];
data
.
prizeRelationId
=
selectedData
.
coupCardId
;
data
.
prizeName
=
selectedData
.
cardName
.
length
>
10
?
selectedData
.
cardName
.
slice
(
0
,
10
)
:
selectedData
.
cardName
;
...
...
@@ -361,7 +364,6 @@ export default {
this
.
calculateRate
();
},
delCard
(
index
)
{
console
.
log
(
index
);
const
data
=
this
.
prizeForm
.
gamePrizeList
[
index
];
data
.
prizeName
=
''
;
data
.
prizeRelationId
=
''
;
...
...
@@ -370,7 +372,6 @@ export default {
this
.
$refs
.
prizeForm
.
clearValidate
(
`gamePrizeList.
${
index
}
.prizeStock`
);
},
handleTypeChange
(
val
,
index
)
{
console
.
log
(
val
,
index
);
this
.
prizeForm
.
gamePrizeList
[
index
].
prizeName
?
delete
this
.
prizeForm
.
gamePrizeList
[
index
].
prizeName
:
''
;
this
.
prizeForm
.
gamePrizeList
[
index
].
prizeNumber
?
delete
this
.
prizeForm
.
gamePrizeList
[
index
].
prizeNumber
:
''
;
this
.
prizeForm
.
gamePrizeList
[
index
].
optNum
?
delete
this
.
prizeForm
.
gamePrizeList
[
index
].
optNum
:
''
;
...
...
@@ -395,17 +396,26 @@ export default {
},
calculateRate
()
{
const
prizeNumTotal
=
this
.
prizeForm
.
gamePrizeList
.
map
(
item
=>
(
item
.
prizeType
!=
0
?
item
.
prizeStock
:
0
)).
reduce
((
pre
,
current
)
=>
pre
+
current
);
console
.
log
(
prizeNumTotal
);
this
.
prizeForm
.
gamePrizeList
.
forEach
(
item
=>
{
if
(
item
.
prizeType
!=
0
)
{
const
prizeRate
=
this
.
prizeForm
.
winChance
*
(
item
.
prizeStock
/
prizeNumTotal
)
;
item
.
prizeRate
=
prizeRate
.
toFixed
(
2
);
const
prizeRate
=
prizeNumTotal
?
this
.
prizeForm
.
winChance
*
(
item
.
prizeStock
/
prizeNumTotal
)
:
0
;
item
.
prizeRate
=
prizeRate
.
toFixed
(
2
)
||
0
;
}
});
let
prizeArr
=
this
.
prizeForm
.
gamePrizeList
.
filter
(
item
=>
item
.
prizeType
==
0
);
prizeArr
.
forEach
(
item
=>
{
const
prizeRate
=
(
100
-
this
.
prizeForm
.
winChance
)
/
prizeArr
.
length
||
0
;
item
.
prizeRate
=
prizeRate
.
toFixed
(
2
);
});
if
(
!
prizeNumTotal
)
{
prizeArr
.
forEach
(
item
=>
{
const
prizeRate
=
100
/
prizeArr
.
length
||
0
;
item
.
prizeRate
=
prizeRate
.
toFixed
(
2
);
});
}
else
{
prizeArr
.
forEach
(
item
=>
{
const
prizeRate
=
(
100
-
this
.
prizeForm
.
winChance
)
/
prizeArr
.
length
||
0
;
item
.
prizeRate
=
prizeRate
.
toFixed
(
2
);
});
}
this
.
prizeForm
.
gamePrizeList
=
this
.
prizeForm
.
gamePrizeList
.
splice
(
0
);
},
prevStep
()
{
...
...
src/views/game/cmh/rule-config.vue
View file @
e6f21ae6
...
...
@@ -3,8 +3,8 @@
<dm-sub-title
type=
"line"
class=
"mb20"
>
玩法配置
</dm-sub-title>
<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
:label=
"0"
>
客户
筛选
</el-radio>
<el-radio
:label=
"1"
>
客户
分组
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item>
...
...
@@ -171,8 +171,8 @@ export default {
memberType
:
0
,
memberDesc
:
''
,
playConditionFlag
:
0
,
shareFlag
:
1
,
playTimes
:
''
,
shareFlag
:
0
,
playTimes
:
1000
,
filterJsonView
:
''
,
shareImageUrl
:
''
,
memberWeightView
:
{
searchId
:
''
},
...
...
@@ -182,7 +182,7 @@ export default {
type
:
2
,
conditionType
:
-
1
,
// 赠与免费游戏次数
conditionJson
:
{
type
:
2
1
,
type
:
2
2
,
value
:
''
}
},
...
...
@@ -212,7 +212,6 @@ export default {
]
},
toggleTag
:
false
,
// 控制按钮显示的参数,仅供参考,可自行修改
rules
:
{
memberType
:
{
required
:
true
,
message
:
'请选择'
},
memberDesc
:
{
type
:
'string'
,
required
:
true
,
message
:
'请输入适用人群说明'
,
trigger
:
'blur'
},
...
...
@@ -290,7 +289,6 @@ export default {
console
.
log
(
this
.
ruleForm
);
},
gameTime
(
val
)
{
console
.
log
(
val
);
if
(
val
.
length
)
{
console
.
log
(
val
[
1
]
-
val
[
0
]);
console
.
log
((
val
[
1
]
-
val
[
0
])
/
(
24
*
60
*
60
*
1000
)
+
1
);
...
...
@@ -396,13 +394,17 @@ export default {
this
.
$refs
.
ruleForm
.
clearValidate
(
name
);
},
validateData
()
{
if
(
this
.
ruleForm
.
memberType
==
0
&&
this
.
toggleTag
&&
!
this
.
ruleForm
.
filterJsonView
)
{
this
.
$message
.
error
(
'人群筛选未保存条件'
);
return
false
;
}
if
(
this
.
ruleForm
.
playConditionFlag
==
1
&&
!
this
.
ruleForm
.
gameRuleConditionList
.
filter
(
item
=>
item
.
conditionType
!=
-
1
).
length
)
{
this
.
$message
.
error
(
'请至少勾选一项'
);
return
false
;
}
const
conditionType2
=
this
.
ruleForm
.
gameRuleConditionList
.
filter
(
item
=>
item
.
conditionType
==
2
);
if
(
this
.
ruleForm
.
playConditionFlag
==
1
&&
conditionType2
.
length
&&
conditionType2
[
0
].
conditionJson
.
type
==
21
)
{
const
maxTimes
=
conditionType2
[
0
].
conditionJson
.
type
==
2
1
?
conditionType2
[
0
].
conditionJson
.
value
:
conditionType2
[
0
].
conditionJson
.
value
*
this
.
gameDays
;
if
(
this
.
ruleForm
.
playConditionFlag
==
1
&&
conditionType2
.
length
)
{
const
maxTimes
=
conditionType2
[
0
].
conditionJson
.
type
==
2
2
?
conditionType2
[
0
].
conditionJson
.
value
:
conditionType2
[
0
].
conditionJson
.
value
*
this
.
gameDays
;
if
(
maxTimes
>
this
.
ruleForm
.
playTimes
)
{
this
.
$message
.
error
(
`每人最多可玩次数需大于免费游戏次数
${
maxTimes
}
`
);
return
false
;
...
...
@@ -414,7 +416,7 @@ export default {
this
.
scrollToError
(
this
);
}
});
if
(
!
this
.
boolVal
)
return
false
;
if
(
!
this
.
boolVal
)
return
0
;
return
true
;
},
nextStep
(
noNext
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment