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
bfea7941
Commit
bfea7941
authored
Aug 17, 2022
by
caoyanzhi
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'feature/7月迭代' into test
parents
10abb11f
8e195bc7
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
125 additions
and
98 deletions
+125
-98
index.html
index.html
+3
-2
App.vue
src/App.vue
+2
-0
game-list.vue
src/components/linktools/game-list.vue
+27
-18
linktoolspage.vue
src/components/linktools/linktoolspage.vue
+25
-37
ai-data-detail.vue
src/views/ai/ai-data-detail.vue
+33
-13
conversion.vue
src/views/ai/ai-data-report/conversion.vue
+22
-15
form.vue
src/views/ai/task/form.vue
+1
-1
task.vue
src/views/ai/task/task.vue
+8
-7
game-list.vue
src/views/ecm/marketing-event/components/game-list.vue
+2
-3
statistics.vue
src/views/game/cmh/statistics/statistics.vue
+2
-2
No files found.
index.html
View file @
bfea7941
...
...
@@ -8,8 +8,9 @@
<link
rel=
"stylesheet"
type=
"text/css"
href=
"<%= htmlWebpackPlugin.options.BASE_URL %>static/css/common.css"
>
<link
rel=
"stylesheet"
href=
"//at.alicdn.com/t/font_688955_2dxzdzrb3a7.css"
>
<!--GIC后台3.0-->
<script
src=
"//at.alicdn.com/t/font_688955_2dxzdzrb3a7.js"
></script>
<!--GIC后台3.0-->
<link
rel=
"stylesheet"
href=
"//at.alicdn.com/t/c/font_3229694_yzk6z4765g.css"
>
<!--GIC3.0营销-->
<script
src=
"//at.alicdn.com/t/c/font_3229694_yzk6z4765g.js"
></script>
<!--GIC3.0营销-->
<link
rel=
"stylesheet"
href=
"//at.alicdn.com/t/c/font_3380872_b9qubgdi1ic.css"
>
<!--3.0新版商户后台-->
<!-- <link rel="stylesheet" href="//at.alicdn.com/t/c/font_3229694_yzk6z4765g.css"> GIC3.0营销 -->
<!-- <script src="//at.alicdn.com/t/c/font_3229694_yzk6z4765g.js"></script> GIC3.0营销 -->
<link
src=
"//at.alicdn.com/t/font_2859043_udehp133w1.css"
>
<!--3.0组件库-->
<script
src=
"//at.alicdn.com/t/font_2859043_udehp133w1.js"
></script>
<!--3.0组件库-->
<link
rel=
"stylesheet"
href=
"//at.alicdn.com/t/font_2996579_dv9vctk5vdt.css"
>
<!-- 3.0企业 -->
...
...
src/App.vue
View file @
bfea7941
...
...
@@ -38,6 +38,8 @@ export default {
localStorage
.
setItem
(
'enableAccessControl'
,
enableAccessControl
);
if
(
this
.
userId
!==
uId
)
{
this
.
userId
=
uId
;
// 切换账号后,不缓存权限数据、菜单数据、面包屑数据
window
.
notCache
=
true
;
// 串号
this
.
$confirm
(
'当前登录账号已经发生变化,如果您在其他页面已经登录另一个账号,请重新登录!'
,
'登录账号变更提示'
,
{
confirmButtonText
:
'重新登录'
,
...
...
src/components/linktools/game-list.vue
View file @
bfea7941
...
...
@@ -21,18 +21,24 @@
{{
scope
.
row
.
activityStatus
===
0
?
'未开始'
:
'已结束'
}}
</div>
</
template
>
<
template
v-else-if=
"'status' in scope.row"
>
<div
v-if=
"scope.row.status === 1"
><span
class=
"dm-status--primary--flash"
></span>
进行中
</div>
<div
v-else
:class=
"scope.row.status === 0 ? 'dm-status--warning' : 'dm-status--info'"
>
{{
scope
.
row
.
status
===
0
?
'未开始'
:
'已结束'
}}
</div>
</
template
>
</template>
</el-table-column>
<el-table-column
label=
"开始时间"
>
<
template
slot-scope=
"
scope
"
>
<p
style=
"line-height: 18px;"
>
{{
formatDateTimeByType
(
scope
.
row
.
gameStartTim
e
,
'yyyy-MM-dd'
)
}}
</p>
<p
style=
"line-height: 18px;"
>
{{
formatDateTimeByType
(
scope
.
row
.
gameStartTim
e
,
'HH:mm:ss'
)
}}
</p>
<
template
slot-scope=
"
{ row }
"
>
<p
style=
"line-height: 18px;"
>
{{
formatDateTimeByType
(
row
.
gameStartTime
||
row
.
startDat
e
,
'yyyy-MM-dd'
)
}}
</p>
<p
style=
"line-height: 18px;"
>
{{
formatDateTimeByType
(
row
.
gameStartTime
||
row
.
startDat
e
,
'HH:mm:ss'
)
}}
</p>
</
template
>
</el-table-column>
<el-table-column
label=
"结束时间"
>
<
template
slot-scope=
"
scope
"
>
<p
style=
"line-height: 18px;"
>
{{
formatDateTimeByType
(
scope
.
row
.
gameEndTim
e
,
'yyyy-MM-dd'
)
}}
</p>
<p
style=
"line-height: 18px;"
>
{{
formatDateTimeByType
(
scope
.
row
.
gameEndTim
e
,
'HH:mm:ss'
)
}}
</p>
<
template
slot-scope=
"
{ row }
"
>
<p
style=
"line-height: 18px;"
>
{{
formatDateTimeByType
(
row
.
gameEndTime
||
row
.
endDat
e
,
'yyyy-MM-dd'
)
}}
</p>
<p
style=
"line-height: 18px;"
>
{{
formatDateTimeByType
(
row
.
gameEndTime
||
row
.
endDat
e
,
'HH:mm:ss'
)
}}
</p>
</
template
>
</el-table-column>
</el-table>
...
...
@@ -94,21 +100,23 @@ export default {
getList
(
gameType
)
{
const
setResponse
=
(
res
,
type
)
=>
{
//type 0 大转盘/刮刮卡 ----- 1 其他游戏
const
{
errorCode
,
message
,
result
}
=
res
.
data
||
{};
if
(
errorCode
!=
0
)
{
const
{
errorCode
,
message
,
result
,
code
}
=
res
.
data
||
{};
if
(
errorCode
!=
0
&&
code
!=
0
)
{
return
this
.
$message
.
error
(
message
);
}
else
{
if
(
type
===
0
)
{
this
.
list
=
result
.
page
.
result
||
[];
this
.
total
=
result
.
page
.
totalCount
||
0
;
}
else
{
}
else
if
(
type
===
1
)
{
this
.
list
=
(
result
.
result
||
[]).
map
(
item
=>
({
...
item
,
gameId
:
item
.
gameActivityId
}));
this
.
total
=
result
.
totalCount
||
0
;
}
else
if
(
type
===
2
)
{
this
.
list
=
result
.
list
||
[];
this
.
total
=
result
.
total
||
0
;
}
}
};
console
.
log
(
this
.
gameType
);
console
.
log
(
this
.
gameId
);
switch
(
gameType
)
{
case
'GAME_LINK_DZP'
:
this
.
axios
.
post
(
`/api-marketing/page-lottery-game`
,
qs
.
stringify
({
...
this
.
query
,
gameType
:
1
})).
then
(
res
=>
{
...
...
@@ -136,13 +144,14 @@ export default {
});
break
;
case
'GAME_LINK_XYMH'
:
const
para
=
{
...
this
.
query
};
para
.
status
=
1
;
console
.
log
(
para
);
// delete para.gameStatus
this
.
axios
.
post
(
`/api-marketing/game-pro/page`
,
qs
.
stringify
(
para
)).
then
(
res
=>
{
console
.
log
(
res
);
setResponse
(
res
,
1
);
const
para
=
{
gameName
:
this
.
query
.
searchParam
,
pageNum
:
this
.
query
.
currentPage
,
pageSize
:
this
.
query
.
pageSize
,
status
:
1
};
this
.
axios
.
post
(
`/api-marketing/game-pro/page?requestProject=marketing`
,
para
).
then
(
res
=>
{
setResponse
(
res
,
2
);
});
break
;
}
...
...
src/components/linktools/linktoolspage.vue
View file @
bfea7941
...
...
@@ -129,7 +129,7 @@
<el-dialog
title=
"游戏列表"
:close-on-click-modal=
"false"
:visible
.
sync=
"gameProps.gameListVisible"
>
<game-list
v-if=
"gameProps.gameListVisible"
ref=
"gameList"
:game-type=
"gameProps.gameType"
></game-list>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
type=
"primary"
@
click=
"onSelectGame"
>
确 定
</el-button>
<el-button
type=
"primary"
@
click=
"onSelectGame"
:loading=
"btnLoading"
>
确 定
</el-button>
</span>
</el-dialog>
</div>
...
...
@@ -149,23 +149,6 @@ import GameList from './game-list.vue';
import
{
generateMiniProgramLink
}
from
'@/service/api/gameApi.js'
;
const
getgameStatus
=
val
=>
{
console
.
log
(
val
);
let
text
=
'已结束'
;
switch
(
val
)
{
case
1
:
text
=
'进行中'
;
break
;
case
0
:
text
=
'未开始'
;
break
;
default
:
text
=
'已结束'
;
break
;
}
return
text
;
};
export
default
{
name
:
'links'
,
props
:
[
'linkToolsVisible'
,
'showType'
,
'projectName'
,
'activeName'
],
...
...
@@ -178,6 +161,7 @@ export default {
threeLevelVisible
:
false
,
// 三级整个
// 链接类型
linksType
:
''
,
btnLoading
:
false
,
linksTypeOptions
:
[
// {
// id: '1',
...
...
@@ -400,25 +384,29 @@ export default {
onSelectGame
()
{
if
(
this
.
$refs
.
gameList
&&
this
.
$refs
.
gameList
.
seletedItem
)
{
const
gameItem
=
this
.
$refs
.
gameList
.
seletedItem
;
generateMiniProgramLink
({
id
:
gameItem
.
gameId
||
gameItem
.
gameActivityId
,
linkId
:
this
.
gameProps
.
gameType
}).
then
(
res
=>
{
this
.
gameProps
.
showGameInfo
=
true
;
this
.
gameProps
.
gameListVisible
=
false
;
this
.
gameInfo
=
{
title
:
gameItem
.
gameName
,
id
:
gameItem
.
gameId
||
gameItem
.
gameActivityId
,
gameStartTime
:
gameItem
.
gameStartTime
,
gameEndTime
:
gameItem
.
gameEndTime
,
gameStatus
:
'gameStatusName'
in
gameItem
?
gameItem
.
gameStatusName
:
getgameStatus
(
gameItem
.
activityStatus
)
};
this
.
selectLinkObj
.
id
=
this
.
gameProps
.
gameType
;
this
.
selectLinkObj
.
url
=
res
.
result
.
link
;
this
.
selectLinkObj
.
name
=
gameItem
.
gameName
;
console
.
log
(
this
.
selectLinkObj
);
this
.
$emit
(
'linkSelect'
,
this
.
selectLinkObj
);
});
this
.
btnLoading
=
true
;
generateMiniProgramLink
({
id
:
gameItem
.
gameId
||
gameItem
.
gameActivityId
,
linkId
:
this
.
gameProps
.
gameType
})
.
then
(
res
=>
{
this
.
gameProps
.
showGameInfo
=
true
;
this
.
gameProps
.
gameListVisible
=
false
;
this
.
gameInfo
=
{
title
:
gameItem
.
gameName
,
id
:
gameItem
.
gameId
||
gameItem
.
gameActivityId
,
gameStartTime
:
gameItem
.
gameStartTime
||
gameItem
.
startDate
,
gameEndTime
:
gameItem
.
gameEndTime
||
gameItem
.
endDate
,
gameStatus
:
'进行中'
};
this
.
selectLinkObj
.
id
=
this
.
gameProps
.
gameType
;
this
.
selectLinkObj
.
url
=
res
.
result
.
link
;
this
.
selectLinkObj
.
name
=
gameItem
.
gameName
;
console
.
log
(
this
.
selectLinkObj
);
this
.
$emit
(
'linkSelect'
,
this
.
selectLinkObj
);
})
.
finally
(()
=>
{
this
.
btnLoading
=
false
;
});
}
else
{
this
.
$message
.
warning
(
'请添加游戏'
);
}
...
...
src/views/ai/ai-data-detail.vue
View file @
bfea7941
...
...
@@ -58,7 +58,7 @@
<p>
{{ formatDateTimeByType(row.smsSendTime, 'HH:mm:ss') || '--' }}
</p>
</div>
</el-table-column>
<el-table-column
min-width=
"100px"
>
<el-table-column
min-width=
"100px"
fixed=
"right"
>
<
template
#
header
>
通话记录
<el-tooltip
placement=
"top"
>
...
...
@@ -69,21 +69,29 @@
</el-tooltip>
</
template
>
<
template
slot-scope=
"{ row }"
>
<el-tooltip
placement=
"top"
>
<div
slot=
"content"
>
查看记录
<div
class=
"flex"
>
<div
class=
"btnBg"
>
<el-tooltip
placement=
"top"
>
<div
slot=
"content"
>
查看记录
</div>
<el-button
size=
"small"
type=
"text"
@
click=
"handleRecord(row)"
:disabled=
"!row.aiTelRecordText"
>
<i
class=
"iconfont fz16 icon-chakanxiangqing-copy "
></i>
</el-button>
</el-tooltip>
</div>
<el-button
size=
"small"
type=
"text"
@
click=
"handleRecord(row)"
:disabled=
"!row.aiTelRecordText"
><i
class=
"iconfont fz14 icon-chakanxiangqing-copy"
></i>
</el-button>
</el-tooltip>
<div
class=
"btnBg"
style=
"margin-left:12px"
>
<el-tooltip
placement=
"top"
:disabled=
"!row.aiTelRecordText"
>
<div
slot=
"content"
>
{{
row
.
isPlay
?
'暂停播放'
:
'播放录音'
}}
</div>
<el-tooltip
placement=
"top"
:disabled=
"!row.aiTelRecordText"
>
<div
slot=
"content"
>
{{
row
.
aiTelRecordText
&&
!
row
.
aiTelRecordUrl
?
'录音已过期'
:
'播放录音'
}}
<el-button
size=
"small"
type=
"text"
@
click=
"handleListen(row)"
:disabled=
"!row.aiTelRecordText || (row.aiTelRecordText && !row.aiTelRecordUrl)"
>
<i
:class=
"['iconfont fz16', row.isPlay ? 'icon-tingzhi' : 'icon-bofang']"
></i>
</el-button>
</el-tooltip>
</div>
<el-button
size=
"small"
type=
"text"
@
click=
"handleListen(row)"
:disabled=
"!row.aiTelRecordText || (row.aiTelRecordText && !row.aiTelRecordUrl)"
>
<i
:class=
"['iconfont fz14', row.isPlay ? 'icon-zanting' : 'icon-kaiqi']"
></i>
</el-button>
</el-tooltip>
</div>
</
template
>
</el-table-column>
</el-table>
...
...
@@ -299,5 +307,17 @@ export default {
}
}
}
.btnBg
{
display
:
flex
;
justify-content
:
center
;
align-content
:
center
;
width
:
24px
;
height
:
24px
;
&:hover
{
background
:
RGBA
(
233
,
234
,
255
,
1
);
border-radius
:
2px
;
font-size
:
16px
;
}
}
}
</
style
>
src/views/ai/ai-data-report/conversion.vue
View file @
bfea7941
...
...
@@ -30,7 +30,7 @@
</el-table>
<div
class=
"chart-box"
>
<div
class=
"chart-member-count"
v-if=
"funnelData.hasData"
>
<img
:src=
"
scene == 5 ? img2 :
img1"
class=
"funnelImg"
/>
<img
:src=
"img1"
class=
"funnelImg"
/>
<div
class=
"funnel"
>
<!--
<div
class=
"funnel-item plan-count"
>
<p
class=
"item-label"
>
营销人数
</p>
...
...
@@ -122,6 +122,7 @@ export default {
type
:
'rate'
}
],
[
{
label
:
'活动费用'
,
...
...
@@ -196,15 +197,21 @@ export default {
this
.
planId
=
this
.
$route
.
query
.
planId
;
this
.
scene
=
this
.
$route
.
query
.
scene
;
if
(
this
.
scene
==
5
)
{
this
.
transeData
[
2
].
height
=
'56px'
;
let
obj
=
{
prop
:
'openCardNumber'
,
label
:
'开卡人数'
,
height
:
'69px'
,
rateLable
:
'开卡转换率'
,
rateProp
:
'openCardConversionRate'
};
this
.
transeData
.
splice
(
2
,
0
,
obj
);
let
arr
=
[
{
label
:
'开卡人数'
,
value
:
''
,
key
:
'openCardNumber'
,
type
:
'number'
},
{
label
:
'开卡转化率'
,
value
:
''
,
key
:
'openCardConversionRate'
,
type
:
'rate'
}
];
this
.
targetList
.
splice
(
1
,
0
,
arr
);
}
this
.
getPlanStatistics
();
this
.
getMemberCrowd
();
...
...
@@ -248,11 +255,11 @@ export default {
// 转化人数
conversionNumber
:
targetData
.
conversionNumber
,
// 转化率
conversionRate
:
targetData
.
conversionRate
,
// 开卡人数
openCardNumber
:
targetData
.
openCardNumber
,
// 开卡转化率
openCardConversionRate
:
targetData
.
openCardConversionRate
conversionRate
:
targetData
.
conversionRate
//
//
开卡人数
//
openCardNumber: targetData.openCardNumber,
//
//
开卡转化率
//
openCardConversionRate: targetData.openCardConversionRate
};
});
},
...
...
src/views/ai/task/form.vue
View file @
bfea7941
...
...
@@ -66,7 +66,7 @@
</div>
</el-form-item>
<el-form-item
label=
"号码导入"
prop=
"phoneList"
v-else
>
<dm-import-file
ref=
"importFile"
:againUploadDisabled=
"disabled"
:options=
"importFileOption"
@
change=
"handleFileChange"
:echo=
"fileEcho"
></dm-import-file>
<dm-import-file
ref=
"importFile"
style=
"width:680px"
:againUploadDisabled=
"disabled"
:options=
"importFileOption"
@
change=
"handleFileChange"
:echo=
"fileEcho"
></dm-import-file>
</el-form-item>
<el-form-item
label=
"预计覆盖人数"
>
<span
class=
"bold"
>
{{ planMemberCountShow }}
</span>
...
...
src/views/ai/task/task.vue
View file @
bfea7941
...
...
@@ -242,16 +242,16 @@ export default {
content
:
'针对消费过的客户进行营销,提升核心客户数量'
},
{
title
:
'其它场景'
,
scene
:
'0'
,
iconName
:
'icon-qitachangjing'
,
content
:
'自定义营销场景'
},
{
title
:
'开卡场景'
,
scene
:
'5'
,
iconName
:
'icon-kaika'
,
content
:
'针对非会员营销,提升开卡率'
},
{
title
:
'其它场景'
,
scene
:
'0'
,
iconName
:
'icon-qitachangjing'
,
content
:
'自定义营销场景'
}
],
optionScenes
:
[
...
...
@@ -613,6 +613,7 @@ export default {
gap
:
12px
;
.card
{
min-width
:
224px
;
width
:
16%
;
height
:
140px
;
background
:
#f0f3fd
;
border-radius
:
4px
;
...
...
@@ -637,7 +638,7 @@ export default {
font-size
:
14px
;
line-height
:
20px
;
height
:
40px
;
width
:
192px
;
color
:
#606266
;
}
}
...
...
src/views/ecm/marketing-event/components/game-list.vue
View file @
bfea7941
...
...
@@ -139,18 +139,17 @@ export default {
break
;
case
'GAME_LINK_KLFL'
:
this
.
axios
.
post
(
`/api-marketing/page-klfl-game`
,
qs
.
stringify
({
...
this
.
query
})).
then
(
res
=>
{
setResponse
(
res
,
2
);
setResponse
(
res
,
1
);
});
break
;
case
'GAME_LINK_XYMH'
:
const
para
=
{
gameName
:
this
.
query
.
searchParam
,
pageNum
:
this
.
query
.
currentPage
,
pageSize
:
6
,
pageSize
:
this
.
query
.
pageSize
,
status
:
1
};
this
.
axios
.
post
(
`/api-marketing/game-pro/page?requestProject=marketing`
,
para
).
then
(
res
=>
{
console
.
log
(
res
);
setResponse
(
res
,
2
);
});
break
;
...
...
src/views/game/cmh/statistics/statistics.vue
View file @
bfea7941
...
...
@@ -18,8 +18,8 @@
<el-button
class=
"check-detail"
@
click=
"toDetailPage(1)"
v-if=
"$getButtonLimit($buttonCode.marketingCmhActivityDetail)"
:limit-code=
"$buttonCode.marketingCmhActivityDetail"
>
查看详情
</el-button>
</div>
</dm-sub-title>
<el-row
:gutter=
"2
0
"
>
<el-col
:span=
"
6
"
v-for=
"(el, index) in activityData"
:key=
"index"
>
<el-row
:gutter=
"2
4
"
>
<el-col
:span=
"
8
"
v-for=
"(el, index) in activityData"
:key=
"index"
>
<target-group
:data-list=
"el"
></target-group>
</el-col>
</el-row>
...
...
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