Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
memberTag-web
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
memberTag
memberTag-web
Commits
72e84cce
Commit
72e84cce
authored
Apr 06, 2022
by
liuchenxi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update: 会员分组
parent
c21a933a
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
407 additions
and
77 deletions
+407
-77
index.js
src/config/index.js
+1
-0
import-member-dialog.vue
src/view/manualTag/import-member-dialog.vue
+1
-1
manual-tag-value-edit.vue
src/view/manualTag/manual-tag-value-edit.vue
+9
-0
card-item.vue
src/view/memberGroup/card-item.vue
+67
-0
group-list.vue
src/view/memberGroup/group-list.vue
+85
-41
memberGroupList.vue
src/view/memberGroup/memberGroupList.vue
+45
-26
memberLevelDetail.vue
src/view/memberGroup/memberLevelDetail.vue
+11
-8
pyramid-group-table.vue
src/view/memberGroup/pyramid-group-table.vue
+187
-0
second-tag.vue
src/view/platformTag/second-tag.vue
+1
-1
No files found.
src/config/index.js
View file @
72e84cce
...
...
@@ -24,3 +24,4 @@ export const aliasNames = [
{
name
:
'普通会员'
,
title
:
'会员历史累计消费,消费次数等于1'
},
{
name
:
'未消费会员'
,
title
:
'会员历史累计消费,消费次数等于0'
}
];
src/view/manualTag/import-member-dialog.vue
View file @
72e84cce
...
...
@@ -55,7 +55,7 @@ export default {
methods
:
{
tagItemImport
()
{
if
(
!
this
.
filesData
)
return
this
.
$message
.
warning
(
'请上传文件'
);
this
.
$emit
(
'update:visiable'
,
false
);
//
this.$emit('update:visiable', false);
this
.
$emit
(
'submit'
,
this
.
filesData
,
this
.
$refs
.
upload
);
},
// 关闭导入会员的弹窗
...
...
src/view/manualTag/manual-tag-value-edit.vue
View file @
72e84cce
...
...
@@ -318,10 +318,14 @@ export default {
this
.
importPop
.
excelData
=
[];
this
.
importPop
.
excelHeader
=
[];
this
.
importPop
.
optType
=
false
;
this
.
importPop
.
isShow
=
false
;
},
// 导入数据到服务端
tagItemImport
(
fileData
,
uploadVm
)
{
// 该标识用来防止多次被点击
if
(
this
.
flag
)
return
;
this
.
flag
=
true
;
uploadVm
.
value
=
''
;
this
.
refreshTag
.
push
({
tagItemIndex
:
this
.
importPop
.
tagItemIndex
,
...
...
@@ -338,6 +342,7 @@ export default {
if
(
errorCode
===
1
)
{
this
.
closeImportPop
();
this
.
$toTaskCenter
(
res
.
data
.
result
);
this
.
flag
=
false
;
}
else
{
errMsg
.
errorMsg
(
res
.
data
);
}
...
...
@@ -356,9 +361,12 @@ export default {
this
.
importBatchPop
.
excelData
=
[];
this
.
importBatchPop
.
excelHeader
=
[];
this
.
importBatchPop
.
optType
=
false
;
this
.
importBatchPop
.
isShow
=
false
;
},
// 导入数据到服务端
tagItemBatchImport
(
fileData
,
uploadVm
)
{
if
(
this
.
flag
)
return
;
this
.
flag
=
true
;
uploadVm
.
value
=
''
;
let
{
optType
}
=
this
.
importBatchPop
;
const
param
=
new
FormData
();
...
...
@@ -372,6 +380,7 @@ export default {
// 关闭上传的弹窗
this
.
closeImportBatchPop
();
this
.
$toTaskCenter
(
res
.
data
.
result
);
this
.
flag
=
false
;
}
else
{
errMsg
.
errorMsg
(
res
.
data
);
}
...
...
src/view/memberGroup/card-item.vue
0 → 100644
View file @
72e84cce
<
template
>
<div
class=
"card-item"
>
<div
class=
"left"
>
<p
class=
"title"
>
{{
title
}}
</p>
<span
class=
"count"
@
click=
"$emit('toDetail', data, index)"
>
{{
formatCount
}}
<span>
人
</span>
</span>
</div>
<div
class=
"right"
>
<i
class=
"iconfont icon-jinzitakehu icon"
></i>
</div>
</div>
</
template
>
<
script
>
export
default
{
props
:
{
title
:
String
,
count
:
Number
,
data
:
Object
,
index
:
Number
},
computed
:
{
formatCount
()
{
return
Number
(
this
.
count
).
toLocaleString
();
}
}
};
</
script
>
<
style
scoped
lang=
"scss"
>
.card-item
{
padding
:
12px
;
width
:
250px
;
height
:
80px
;
box-sizing
:
border-box
;
background
:
rgba
(
47
,
84
,
235
,
0.04
);
border-radius
:
4px
;
border
:
1px
solid
rgba
(
47
,
84
,
235
,
0.16
);
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
min-width
:
0
;
.count
{
font-weight
:
bold
;
color
:
#2f54eb
;
font-size
:
22px
;
white-space
:
nowrap
;
cursor
:
pointer
;
span
{
font-size
:
14px
;
color
:
#303133
;
}
}
.title
{
color
:
#303133
;
font-size
:
14px
;
margin-bottom
:
10px
;
}
.icon
{
font-size
:
40px
;
color
:
#2f54eb
;
opacity
:
.14
;
}
}
</
style
>
src/view/memberGroup/group-list.vue
View file @
72e84cce
<
template
>
<div
class=
"group-list"
>
<div
class=
"member-group"
:class=
"
{'light-group': currentIndex === -1}" @click="handleExpend">
<
!--
<
div
class=
"member-group"
:class=
"
{'light-group': currentIndex === -1}" @click="handleExpend">
<i
class=
"icon-list el-icon-caret-right icon-transform"
:class=
"expendClass"
></i>
我的会员分组
<i
class=
"el-icon-plus icon-right icon-list"
@
click=
"addGroupDialog = true"
:limit-code=
"$buttonCode.memberTagAddCateGory"
v-if=
"$getButtonLimit($buttonCode.memberTagAddCateGory)"
></i>
</div>
</div>
-->
<el-collapseTransition>
<ul
class=
"lists"
v-show=
"expendTxt == '展开'"
>
<!--
<el-collapseTransition>
-->
<!--我的会员分组-->
<ul
class=
"lists"
v-show=
"activeType == '1'"
>
<li
v-for=
"(list, i) in lists"
:key=
"i"
:class=
"['member-list',
{ 'active-li': i == currentIndex }]" @click="handleChangeIndex(i, list)">
<span
class=
"name-txt"
:title=
"list.classifyName"
v-show=
"!list.edit"
>
{{
list
.
classifyName
}}
</span>
<el-input
style=
"width: 100px;"
size=
"mini"
v-show=
"list.edit"
v-model=
"list.classifyName"
maxLength=
"10"
@
keyup
.
native
.
enter=
"modifyName(list)"
/>
<div
class=
"oper-area"
v-if=
"list.classifyName !== '未分类'"
>
<i
class=
"iconfont icon-list-oper"
:limit-code=
"$buttonCode.memberTagEditCateGory"
v-if=
"$getButtonLimit($buttonCode.memberTagEditCateGory)"
:class=
"[list.edit ? 'icon-dagou' : 'icon-bianji1']"
@
click
.
stop=
"editGroupName(list)"
></i>
<i
class=
"iconfont icon-list-oper"
:limit-code=
"$buttonCode.memberTagDelCateGory"
v-if=
"$getButtonLimit($buttonCode.memberTagDelCateGory)"
:class=
"[list.edit ? 'icon-guanbi1' : 'icon-guanbi']"
@
click=
"deleteGroupName(list)"
></i>
<div>
<i
class=
"iconfont icon-kehufenzu icon"
></i>
<span
span
class=
"name-txt"
:title=
"list.classifyName"
v-show=
"!list.edit"
>
{{
list
.
classifyName
}}
</span>
<el-input
style=
"width: 100px;"
size=
"mini"
v-show=
"list.edit"
v-model=
"list.classifyName"
maxLength=
"10"
@
keyup
.
native
.
enter=
"modifyName(list)"
/>
</div>
<el-popover
placement=
"bottom"
trigger=
"click"
>
<p
class=
"more"
:limit-code=
"$buttonCode.memberTagEditCateGory"
v-if=
"$getButtonLimit($buttonCode.memberTagEditCateGory)"
@
click=
"editGroupName(list)"
>
编辑分类
</p>
<p
class=
"more"
:limit-code=
"$buttonCode.memberTagDelCateGory"
v-if=
"$getButtonLimit($buttonCode.memberTagDelCateGory)"
@
click=
"deleteGroupName(list)"
>
删除分类
</p>
<i
slot=
"reference"
class=
"iconfont icon-gengduo icon"
></i>
</el-popover>
</li>
<li
@
click=
"addGroupDialog = true"
:limit-code=
"$buttonCode.memberTagAddCateGory"
v-if=
"$getButtonLimit($buttonCode.memberTagAddCateGory)"
style=
"margin-top:10px"
>
<el-button
type=
"primary"
class=
"ghost-btn add-group"
>
新增分类
</el-button>
</li>
</ul>
<
/el-collapseTransition
>
<
!--
</el-collapseTransition>
--
>
<div
:class=
"['member-group',
{ 'active-item': currentLevelIndex == -1 }]" v-show="hasLevel" @click="handleExpendTag">
<
!--
<
div
:class=
"['member-group',
{ 'active-item': currentLevelIndex == -1 }]" v-show="hasLevel" @click="handleExpendTag">
<i
class=
"icon-list el-icon-caret-right icon-transform"
:class=
"expendTagClass"
></i>
金字塔会员分层
</div>
</div>
-->
<el-collapseTransition>
<ul
class=
"lists"
v-show=
"expendTxtTag == '展开'"
>
<!--
<el-collapseTransition>
-->
<!--金字塔分层-->
<ul
class=
"lists"
v-show=
"activeType == '3'"
>
<li
v-for=
"(list, i) in groupLists"
:key=
"i"
:class=
"['member-list',
{ 'active-li': i == currentLevelIndex }]" @click="handleChangeLevel(i, list)">
<el-tooltip
class=
"item"
effect=
"dark"
:content=
"list.aliasName | aliasTips"
placement=
"top-start"
:open-delay=
"300"
>
<span>
{{
list
.
aliasName
}}
</span>
</el-tooltip>
<div>
<i
class=
"iconfont icon-kehufenzu icon"
></i>
<el-tooltip
class=
"item"
effect=
"dark"
:content=
"list.aliasName | aliasTips"
placement=
"top-start"
:open-delay=
"300"
>
<span>
{{
list
.
aliasName
}}
</span>
</el-tooltip>
</div>
</li>
</ul>
<
/el-collapseTransition
>
<
!--
</el-collapseTransition>
--
>
<div
class=
"member-group"
:class=
"
{'light-group': currentFixedIndex === -1}" @click="handleExpendFixed">
<
!--
<
div
class=
"member-group"
:class=
"
{'light-group': currentFixedIndex === -1}" @click="handleExpendFixed">
<i
class=
"icon-list el-icon-caret-right icon-transform"
:class=
"expendFixedClass"
></i>
固化人群
</div>
</div>
-->
<el-collapseTransition>
<ul
class=
"lists"
v-show=
"expendTxtFixed == '展开'"
>
<!--
<el-collapseTransition>
-->
<!--固化人群-->
<ul
class=
"lists"
v-show=
"activeType == '2'"
>
<li
v-for=
"(list, i) in fixedLists"
:key=
"i"
:class=
"['member-list',
{ 'active-li': i == currentFixedIndex }]" @click="handleChangeFixed(i, list)">
<span
class=
"name-txt"
:title=
"list.classifyName"
v-show=
"!list.edit"
>
{{
list
.
classifyName
}}
</span>
<div>
<i
class=
"iconfont icon-kehufenzu icon"
></i>
<span
class=
"name-txt"
:title=
"list.classifyName"
v-show=
"!list.edit"
>
{{
list
.
classifyName
}}
</span>
</div>
</li>
</ul>
<
/el-collapseTransition
>
<
!--
</el-collapseTransition>
--
>
<el-dialog
:title=
"title"
:visible
.
sync=
"addGroupDialog"
width=
"320px"
top=
"30vh"
:close-on-click-modal=
"false"
>
<div>
...
...
@@ -70,7 +86,9 @@ Vue.component(CollapseTransition.name, CollapseTransition);
export
default
{
name
:
'group-list'
,
props
:
{
activeType
:
String
},
data
()
{
return
{
lists
:
[],
...
...
@@ -90,7 +108,7 @@ export default {
hasLevel
:
false
,
currentLevelIndex
:
-
2
,
groupLists
:
[],
fixedLists
:
[]
fixedLists
:
[]
,
};
},
...
...
@@ -199,12 +217,7 @@ export default {
// 删除操作
this
.
excludeName
(
list
);
})
.
catch
(()
=>
{
this
.
$message
({
type
:
'info'
,
message
:
'已取消删除'
});
});
.
catch
(()
=>
{});
},
excludeName
(
list
)
{
const
param
=
{
...
...
@@ -341,7 +354,6 @@ export default {
this
.
expendTxtFixed
=
this
.
expendTxtFixed
===
'展开'
?
'收起'
:
'展开'
;
this
.
$emit
(
'second-list'
,
'showFixedList'
);
},
//
_hasLevelFeature
()
{
hasLevelFeature
().
then
(
res
=>
{
if
(
res
.
errorCode
===
1
)
{
...
...
@@ -364,13 +376,29 @@ export default {
}
return
''
;
},
},
watch
:
{
activeType
(
newVal
)
{
switch
(
newVal
)
{
case
'1'
:
this
.
handleExpend
();
break
;
case
'2'
:
this
.
handleExpendFixed
();
break
;
case
'3'
:
this
.
handleExpendTag
();
break
;
default
:
break
;
}
}
}
};
</
script
>
<
style
lang=
"scss"
scoped
>
.group-list
{
padding-top
:
20px
;
.recommend-list
{
margin-top
:
10px
;
padding-left
:
37px
;
...
...
@@ -420,12 +448,18 @@ export default {
color
:
#2F54EB
;
}
.member-list
{
height
:
32px
;
line-height
:
32px
;
padding-left
:
37px
;
height
:
40px
;
margin
:
0
15px
;
font-size
:
14px
;
color
:
#606266
;
cursor
:
pointer
;
border-radius
:
4px
;
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
.icon
{
margin
:
0
4px
;
}
&
:hover
{
color
:
#2F54EB
;
.oper-area
{
...
...
@@ -438,10 +472,9 @@ export default {
text-overflow
:
ellipsis
;
white-space
:
nowrap
;
width
:
100px
;
height
:
32px
;
}
.oper-area
{
display
:
none
;
//
display
:
none
;
float
:
right
;
margin-right
:
10px
;
}
...
...
@@ -450,10 +483,10 @@ export default {
color
:
#606266
;
.active-li
{
color
:
#2F54EB
;
background-color
:
#
F3F6F9
;
background-color
:
#
EBEFFE
;
}
li
:hover
{
background-color
:
#
F3F6F9
;
background-color
:
#
EBEFFE
;
}
}
...
...
@@ -470,4 +503,15 @@ export default {
transform
:
rotate
(
0deg
);
}
}
.more
{
line-height
:
26px
;
text-align
:
center
;
cursor
:
pointer
;
&:hover
{
color
:
#2f54eb
;
}
}
.add-group
{
width
:
100%
;
}
</
style
>
src/view/memberGroup/memberGroupList.vue
View file @
72e84cce
<
template
>
<div>
<div
class=
"flex"
>
<el-tabs
v-model=
"activeType"
class=
"tabs"
>
<el-tab-pane
label=
"我的客户分组"
name=
"1"
></el-tab-pane>
<el-tab-pane
label=
"固化人群"
name=
"2"
></el-tab-pane>
<el-tab-pane
label=
"金字塔客户分组"
name=
"3"
></el-tab-pane>
</el-tabs>
</div>
<div
class=
"right-content"
>
<!-- 左边的会员分组 -->
<div
class=
"left-box"
>
<group-list
@
getRecommend=
"getRecommend"
@
second-list=
"getsecondList"
></group-list>
<group-list
:activeType=
"activeType"
@
getRecommend=
"getRecommend"
@
second-list=
"getsecondList"
></group-list>
</div>
<!-- 右边的表格 -->
<template
v-if=
"showFixedList"
>
...
...
@@ -343,19 +350,16 @@
</div>
<div
class=
"right-box"
v-show=
"isTagRecommend"
>
<div
class=
"common-wrap__opt"
>
<div
class=
"title"
>
<i
class=
"el-icon-warning dialog-icon"
></i>
<span>
覆盖人数于每日上午8点半进行更新
</span>
</div>
<div
class=
"common-wrap__opt flex-between"
>
<div
class=
"desc"
>
覆盖人数于每日上午8点半进行更新
</div>
<div
class=
"batch-option"
>
<
!-- <el-button type="primary" @click="toAddGroup" class="fr">分层配置</el-button> --
>
<
el-button
type=
"primary"
class=
"fr ghost-btn"
@
click=
"isNew = !isNew"
>
{{ `查看${isNew ? '旧' : '新'}版金字塔会员分层` }}
</el-button
>
</div>
</div>
<div
class=
"common-wrap__table m-t-20"
>
<pyramid-group-table
v-show=
"isNew"
/>
<el-table
v-show=
"!isNew"
v-loading=
"loading"
ref=
"multipleTable"
:data=
"groupTableData"
...
...
@@ -369,7 +373,7 @@
</el-tooltip>
</
template
>
</el-table-column>
<el-table-column
label=
"更新时间"
prop=
"latestUpdateTime"
min-width=
"100"
>
<el-table-column
label=
"
最近
更新时间"
prop=
"latestUpdateTime"
min-width=
"100"
>
<
template
slot-scope=
"scope"
>
<p
class=
"h-18"
>
{{
scope
.
row
.
latestUpdateTime
|
formatTimeYMD
}}
</p>
<p
class=
"h-18"
>
{{
scope
.
row
.
latestUpdateTime
|
formatTimeHMS
}}
</p>
...
...
@@ -405,7 +409,7 @@
<el-switch
:active-value=
"1"
:inactive-value=
"0"
v-model=
"scope.row.appStatus"
active-color=
"#2F54EB"
@
change=
"switchAppStatus(scope.row.appStatus, scope.row)"
>
</el-switch>
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
width=
"100"
fixed=
"right"
v-if=
'$getButtonLimit($buttonCode.memberTagGroupLevelDetail)'
>
<
!-- <
el-table-column label="操作" width="100" fixed="right" v-if='$getButtonLimit($buttonCode.memberTagGroupLevelDetail)'>
<template slot-scope="scope">
<router-link
:to="`/memberLevelDetail?memberTagGroupId=${scope.row.memberTagGroupId}&aliasName=${scope.row.groupName}`"
...
...
@@ -415,10 +419,10 @@
详情
</router-link>
</template>
</el-table-column>
</el-table-column>
-->
</el-table>
</div>
<div
class=
"block common-wrap__page text-right"
v-if=
"groupTableData.length != 0"
>
<div
class=
"block common-wrap__page text-right"
v-if=
"groupTableData.length != 0
&& !isNew
"
>
<dm-pagination
background
@
size-change=
"handleSizeChange"
...
...
@@ -535,13 +539,15 @@ import {
import
GroupList
from
'./group-list'
;
import
RecommendTable
from
'./recommend-table'
;
import
{
aliasNames
}
from
'@/config'
import
PyramidGroupTable
from
'./pyramid-group-table.vue'
;
export
default
{
name
:
'memberGroupList'
,
components
:
{
GroupList
,
RecommendTable
,
BatchList
BatchList
,
PyramidGroupTable
},
data
()
{
return
{
...
...
@@ -625,6 +631,8 @@ export default {
custom
:
[
1
,
1
],
isHaoban
:
''
},
activeType
:
'1'
,
// 切换一级tab
isNew
:
true
// 是否新版金字塔分层
};
},
...
...
@@ -831,7 +839,7 @@ export default {
},
// 会员分组二级
getsecondList
(
list
)
{
console
.
log
(
list
);
console
.
log
(
12312
,
list
);
this
.
showFixedList
=
false
if
(
list
===
'showFixedList'
)
{
this
.
params
.
memberTagGroupClassifyId
=
''
;
...
...
@@ -1439,23 +1447,19 @@ export default {
</
script
>
<
style
lang=
"scss"
>
.common-wrap__opt
{
&.flex-between
{
display
:
flex
;
align-items
:
center
;
justify-content
:
space-between
;
}
font-size
:
0
;
.m-r-8
{
margin-right
:
8px
;
}
.
title
{
font-size
:
1
4
px
;
.
desc
{
font-size
:
1
2
px
;
width
:
270px
;
color
:
#606266
;
padding
:
5px
10px
;
border-radius
:
4px
;
background-color
:
#e6f7ff
;
border
:
1px
solid
#91d5ff
;
.dialog-icon
{
font-size
:
12px
;
color
:
#2F54EB
;
padding-right
:
4px
;
}
}
}
.btn-foled-all
{
...
...
@@ -1606,4 +1610,19 @@ export default {
height
:
0
!important
;
overflow
:
hidden
;
}
.tabs
.el-tabs__nav-wrap
::after
{
display
:
none
;
}
.tabs
.el-tabs__header
{
margin-bottom
:
0
;
}
</
style
>
<
style
lang=
"scss"
scoped
>
.flex
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
padding
:
0
20px
;
border-bottom
:
1px
solid
#e4e7ed
;
}
</
style
>
src/view/memberGroup/memberLevelDetail.vue
View file @
72e84cce
...
...
@@ -4,7 +4,7 @@
<div
class=
"right-box"
>
<div
class=
"memberGroupDetail-wrap__info m-b-20"
>
<span
class=
"group-name"
>
{{
aliasName
}}
</span>
<span
>
(
{{
tips
}}
)
</span>
<span
v-show=
"$route.query.type"
>
(
{{
setDesc
(
$route
.
query
.
type
,
$route
.
query
.
time
)
}}
)
</span>
<span
class=
"group-total m-l-20 p-l-20"
>
覆盖人数
<span>
{{
separator
(
total
)
}}
</span>
...
...
@@ -431,7 +431,6 @@ export default {
* 排序
*/
sortChange
({
column
,
prop
,
order
})
{
console
.
log
(
prop
,
order
);
this
.
sortFiled
=
prop
;
this
.
order
=
order
==
'descending'
?
'desc'
:
'asc'
;
this
.
getGroupDetail
();
...
...
@@ -447,7 +446,6 @@ export default {
};
getRequest
(
'/member-tag-group/findOneDetial.json'
,
params
)
.
then
(
res
=>
{
console
.
log
(
res
,
'tagValueDtoList'
);
that
.
groupName
=
res
.
data
.
result
.
tagGroupDto
.
groupName
;
that
.
groupIsRealTime
=
res
.
data
.
result
.
tagGroupDto
.
isRealTime
;
let
list
=
res
.
data
.
result
.
tagValueDtoList
;
...
...
@@ -480,7 +478,6 @@ export default {
* 确认选择-弹层隐藏
*/
confirmUserDefined
(
data
)
{
console
.
log
(
data
);
if
(
data
.
length
<
1
)
{
this
.
$message
.
error
({
duration
:
1000
,
...
...
@@ -515,7 +512,6 @@ export default {
* 分页---页码变化
*/
handleSizeChange
(
val
)
{
console
.
log
(
`每页
${
val
}
条`
);
this
.
pageSize
=
val
;
this
.
getGroupDetail
();
},
...
...
@@ -524,7 +520,6 @@ export default {
* 分页---当前页变化
*/
handleCurrentChange
(
val
)
{
console
.
log
(
`当前页:
${
val
}
`
);
this
.
currentPage
=
val
;
this
.
getGroupDetail
();
},
...
...
@@ -591,7 +586,6 @@ export default {
* 获取头像处显示信息
*/
showSingleInfo
(
memberId
)
{
console
.
log
(
memberId
);
const
that
=
this
;
const
para
=
{
memberId
:
memberId
...
...
@@ -645,7 +639,6 @@ export default {
errMsg
.
errorMsg
(
resData
);
})
.
catch
(
function
(
error
)
{
console
.
log
(
error
);
that
.
$message
.
error
({
duration
:
1000
,
message
:
error
.
message
...
...
@@ -668,6 +661,16 @@ export default {
this
.
downMemberListPop
.
show
=
true
;
exportParams
.
exportFields
=
data
.
toString
();
},
setDesc
(
type
,
time
)
{
switch
(
type
)
{
case
'核心'
:
return
`年平均消费次数 ≥ 3 且 年平均消费金额 ≥ 3倍企业去年客单且休眠天数为
${
time
}
`
;
case
'潜力'
:
return
`除核心会员、潜力会员、未消费会员之外的会员且休眠天数为
${
time
}
`
;
case
'普通'
:
return
`消费次数 = 1 次且休眠天数为
${
time
}
`
;
}
}
},
beforeMount
()
{
var
that
=
this
;
...
...
src/view/memberGroup/pyramid-group-table.vue
0 → 100644
View file @
72e84cce
<
template
>
<!--金字塔分组表格-->
<div
class=
"pyramid-group"
>
<el-table
:data=
"tableList"
:header-cell-style=
"rowClass"
>
<el-table-column
label=
"价值"
width=
"140"
>
<template
#
header
>
<div
class=
"header"
>
<span>
消费休眠天数
</span>
<span>
价值
</span>
<p
class=
"line"
></p>
</div>
</
template
>
<
template
#
default=
"{ row }"
>
{{
row
.
gradeName
||
'--'
}}
</
template
>
</el-table-column>
<el-table-column
v-for=
"(v, i) in tableHeader"
:key=
"i"
:prop=
"v.prop"
:min-width=
"v.minWidth"
:label=
"v.label"
:formatter=
"v.formatter"
:fixed=
"v.fixed"
>
<
template
slot-scope=
"scope"
>
<span
v-if=
"v.formatter"
v-html=
"v.formatter(scope.row)"
@
click=
"toDetail(scope.row, i)"
></span>
<span
v-else
>
{{
scope
.
row
[
v
.
prop
]
||
'--'
}}
</span>
</
template
>
</el-table-column>
</el-table>
<div
class=
"unconsume-member"
>
<span>
{{ consumeList.gradeName }}
</span>
<card-item
style=
"margin-right: 16px"
v-for=
"(v, i) in consumeList.itemList"
:key=
"i"
:title=
"v.groupName"
:count=
"v.memberCount"
:data=
"consumeList"
@
toDetail=
"toDetail"
:index=
"i"
/>
</div>
<div
class=
"show-haoban"
>
<h2>
展示在好办
</h2>
<span
class=
"tips"
>
开启后,默认次日更新好办管理后台,如需立即更新,请至好办管理后台操作“同步”
</span>
<p>
<span
v-for=
"item in haobanList"
:key=
"item.memberTagGradeId"
class=
"switch-item"
>
<span>
{{ item.aliasName }}
</span>
<el-switch
class=
"switch"
v-model=
"item.hanbanShow"
active-color=
"#2f54eb"
@
change=
"onChangeSwitch(item)"
/>
</span>
</p>
</div>
</div>
</template>
<
script
>
import
{
getRequest
}
from
'@/api/api'
;
import
cardItem
from
'./card-item'
;
export
default
{
components
:
{
cardItem
},
data
()
{
return
{
haobanList
:
[],
tableList
:
[],
tableHeader
:
[],
consumeList
:
[]
// 未消费会员
};
},
created
()
{
this
.
getTableHeader
();
this
.
getHaoBanData
();
this
.
getTableList
();
},
methods
:
{
getTableHeader
()
{
this
.
tableHeader
=
[
{
label
:
'指标说明'
,
prop
:
'gradeDesc'
,
minWidth
:
160
},
{
label
:
'0-30(高活跃)'
,
minWidth
:
130
,
formatter
(
row
)
{
return
`<span style="color:#2f54eb;cursor:pointer">
${
row
.
itemList
[
0
].
memberCount
}
人</span>`
}},
{
label
:
'31-90(活跃)'
,
minWidth
:
130
,
formatter
(
row
)
{
return
`<span style="color: #2f54eb;cursor:pointer">
${
row
.
itemList
[
1
].
memberCount
}
人</span>`
}
},
{
label
:
'91-180(边缘)'
,
minWidth
:
130
,
formatter
(
row
)
{
return
`<span style="color: #2f54eb;cursor:pointer">
${
row
.
itemList
[
2
].
memberCount
}
人</span>`
}
},
{
label
:
'181-1年(沉睡)'
,
minWidth
:
130
,
formatter
(
row
)
{
return
`<span style="color: #2f54eb;cursor:pointer">
${
row
.
itemList
[
3
].
memberCount
}
人</span>`
}
},
{
label
:
'1年-2年(流失)'
,
minWidth
:
130
,
formatter
(
row
)
{
return
`<span style="color: #2f54eb;cursor:pointer">
${
row
.
itemList
[
4
].
memberCount
}
人</span>`
}
},
{
label
:
'2年以上(Lost+)'
,
minWidth
:
140
,
formatter
(
row
)
{
return
`<span style="color: #2f54eb;cursor:pointer">
${
row
.
itemList
[
5
].
memberCount
}
人</span>`
}
},
]
},
async
getHaoBanData
()
{
const
res
=
await
getRequest
(
'/memberTagGrade/gradeListNew'
,
{});
const
{
result
}
=
res
.
data
;
this
.
haobanList
=
result
;
},
async
getTableList
()
{
const
res
=
await
getRequest
(
'/memberTagGrade/gradeGroupListNew'
,
{});
const
{
result
}
=
res
.
data
;
this
.
tableList
=
result
.
result
.
filter
(
el
=>
el
.
gradeName
!=
'未消费'
);
this
.
consumeList
=
result
.
result
.
find
(
el
=>
el
.
gradeName
==
'未消费'
);
},
async
onChangeSwitch
(
item
)
{
const
{
hanbanShow
,
memberTagGradeId
}
=
item
;
const
params
=
{
appStatus
:
Number
(
hanbanShow
),
memberTagGradeId
};
const
{
data
}
=
await
getRequest
(
'/memberTagGrade/updateHanbanShow'
,
params
);
if
(
data
.
errorCode
!=
1
)
return
this
.
$message
.
error
(
data
.
message
);
},
toDetail
(
row
,
index
)
{
if
(
row
.
gradeName
.
includes
(
'未消费'
))
{
const
item
=
row
.
itemList
[
index
];
this
.
$router
.
push
(
`/memberLevelDetail?memberTagGroupId=
${
item
.
memberTagGroupId
}
&aliasName=
${
item
.
groupName
}
`
)
}
else
{
const
item
=
row
.
itemList
[
--
index
];
const
{
gradeName
}
=
row
;
let
{
groupName
}
=
item
;
const
groupNameArr
=
groupName
.
replace
(
/
[
(|)
]
/g
,
' '
).
split
(
' '
);
const
time
=
!
groupNameArr
[
0
].
includes
(
'年'
)
?
groupNameArr
[
0
]
+
'天'
:
groupNameArr
[
0
];
const
aliasName
=
gradeName
+
groupNameArr
[
1
];
this
.
$router
.
push
(
`/memberLevelDetail?memberTagGroupId=
${
item
.
memberTagGroupId
}
&aliasName=
${
aliasName
}
&time=
${
time
}
&type=
${
gradeName
}
`
)
}
}
}
};
</
script
>
<
style
lang=
"scss"
>
.pyramid-group
{
.header
{
display
:
flex
;
flex-direction
:
column
;
padding
:
0
;
font-size
:
13px
;
position
:
relative
;
span
:
first-child
{
text-align
:
right
;
margin-right
:
6px
;
}
span
:last-of-type
{
margin-left
:
16px
;
}
.line
{
position
:
absolute
;
width
:
170px
;
background
:
#dcdfe6
;
top
:
0
;
left
:
-5px
;
height
:
1px
;
transform-origin
:
left
top
;
transform
:
rotate
(
29deg
);
}
}
th
.el-table__cell
{
padding
:
0
!important
;
&:nth-of-type(2)
{
.cell
{
padding
:
0
20px
!important
;
}
}
&
:first-child
{
.cell
{
padding
:
0
!important
;
}
}
}
.el-table__cell
{
&:nth-of-type(2),
&:first-child
{
border-right
:
1px
solid
#dcdfe6
;
}
}
.unconsume-member
{
display
:
flex
;
align-items
:
center
;
margin-top
:
16px
;
&
>
span
{
margin-left
:
16px
;
margin-right
:
56px
;
font-size
:
14px
;
}
}
.show-haoban
{
margin-top
:
30px
;
h2
{
color
:
#303133
;
font-weight
:
bold
;
font-size
:
16px
;
margin-bottom
:
7px
;
line-height
:
22px
;
}
.switch-item
{
display
:
inline-block
;
margin-right
:
30px
;
margin-bottom
:
20px
;
.switch
{
margin-left
:
14px
;
}
}
}
.tips
{
display
:
inline-block
;
font-size
:
12px
;
color
:
#909399
;
margin-bottom
:
20px
;
}
}
</
style
>
src/view/platformTag/second-tag.vue
View file @
72e84cce
...
...
@@ -348,7 +348,7 @@ export default {
line-height
:
22px
;
height
:
22px
;
margin-right
:
8px
;
margin-bottom
:
12
px
;
margin-bottom
:
8
px
;
font-size
:
12px
;
padding
:
0
8px
;
background
:
#F2F3F5
;
...
...
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