Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
S
saas-dml
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
saas-dml
Commits
5165439c
提交
5165439c
authored
5月 09, 2024
作者:
王鹏飞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
chore: 修改RFM群组
上级
add8d4e8
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
95 行增加
和
42 行删除
+95
-42
rfm.ts
src/api/rfm.ts
+16
-0
RFMRuleItem.vue
src/components/rule/RFMRuleItem.vue
+28
-42
useRFMData.ts
src/composables/useRFMData.ts
+51
-0
没有找到文件。
src/api/rfm.ts
0 → 100644
浏览文件 @
5165439c
import
httpRequest
from
'@/utils/axios'
// 获取实验用户成员属性
export
function
getMemberAttrList
(
params
:
{
type
:
number
})
{
return
httpRequest
.
get
(
'/api/lab/v1/experiment/tag/bda-member-attrs'
,
{
params
})
}
// 获取实验事件和事件属性列表
export
function
getEventAttrList
(
params
:
{
type
:
number
})
{
return
httpRequest
.
get
(
'/api/lab/v1/experiment/tag/bda-event-attrs'
,
{
params
})
}
// 获取最大最小值
export
function
getMemberAttrRange
(
params
:
{
member_meta_id
:
string
})
{
return
httpRequest
.
get
(
'/api/lab/v1/experiment/tag/bda-num-member-attr-range'
,
{
params
})
}
src/components/rule/RFMRuleItem.vue
浏览文件 @
5165439c
<
script
setup
lang=
"ts"
>
import
{
useUserAttr
,
useMetaEvent
}
from
'@/composables/useAll
Data'
import
{
useUserAttr
,
useMetaEvent
,
useUserAttrRange
}
from
'@/composables/useRFM
Data'
import
{
searchMetaMemberAttrs
}
from
'@/api/base'
import
{
maxBy
,
minBy
}
from
'lodash-es'
defineProps
<
{
label
:
string
}
>
()
const
form
=
defineModel
<
any
>
()
...
...
@@ -29,26 +28,16 @@ onMounted(() => {
form
.
value
=
Object
.
assign
({
basis
:
'1'
,
rule
:
'101'
,
event_id
:
'-1'
,
attr_id
:
''
,
attr_type
:
''
,
config
:
[...
defaultScore
]
},
form
.
value
)
})
const
{
userAttrList
}
=
useUserAttr
()
const
{
metaEventList
}
=
useMetaEvent
()
const
{
userAttrList
,
fetchUserAttrList
}
=
useUserAttr
()
const
{
metaEventList
,
fetchMetaEventList
}
=
useMetaEvent
()
const
{
userAttrRange
,
fetchUserAttrRange
}
=
useUserAttrRange
()
const
currentRuleList
=
computed
(()
=>
{
return
ruleList
.
filter
(
item
=>
item
.
basis
.
includes
(
form
.
value
.
basis
))
})
const
currentAttrList
=
computed
(()
=>
{
let
list
=
userAttrList
.
value
return
list
.
filter
(
item
=>
{
if
(
form
.
value
.
rule
===
'101'
)
{
return
[
'2'
,
'3'
,
'4'
,
'5'
].
includes
(
item
.
type
)
}
else
if
(
form
.
value
.
rule
===
'102'
)
{
return
[
'1'
].
includes
(
item
.
type
)
}
return
true
})
})
const
currentMetaEventList
=
computed
(()
=>
{
return
[{
id
:
'-1'
,
name
:
'所有事件'
},
...
metaEventList
.
value
]
return
[{
event_id
:
'-1'
,
event_
name
:
'所有事件'
},
...
metaEventList
.
value
]
})
function
handleBasisChange
(
value
:
any
)
{
...
...
@@ -71,7 +60,7 @@ function handleRuleChange(value: any) {
}
function
handleAttrChange
(
value
:
any
)
{
form
.
value
.
attr_type
=
current
AttrList
.
value
.
find
(
item
=>
item
.
id
===
value
)?.
type
form
.
value
.
attr_type
=
user
AttrList
.
value
.
find
(
item
=>
item
.
id
===
value
)?.
type
}
const
options
=
ref
<
{
label
:
string
;
value
:
string
}[]
>
([])
...
...
@@ -93,27 +82,23 @@ function querySearch(queryString: string, cb: any) {
cb
(
options
.
value
)
}
const
min
=
computed
(()
=>
{
return
minBy
(
options
.
value
,
'value'
)
})
const
max
=
computed
(()
=>
{
return
maxBy
(
options
.
value
,
'value'
)
})
function
querySearch2
(
queryString
:
string
,
cb
:
any
)
{
cb
([
{
label
:
'最小值'
,
value
:
`最小值:
${
min
.
value
?.
value
}
` },
{ label: '最大值', value: `
最大值:
$
{
max
.
value
?.
value
}
` }
])
}
watch
(
()
=>
form
.
value
.
attr_id
,
attrId
=>
{
if
(
form
.
value
.
rule
===
'102'
)
{
remoteMethod
()
}
else
{
attrId
&&
fetchUserAttrRange
(
attrId
)
}
}
)
watch
(
()
=>
form
.
value
.
rule
,
()
=>
{
// form.value.rule === '102' && remoteMethod()
remoteMethod()
},
{ immediate: true }
let
type
=
form
.
value
.
rule
===
'102'
?
1
:
2
form
.
value
.
basis
===
'1'
?
fetchUserAttrList
(
type
)
:
fetchMetaEventList
(
type
)
}
)
</
script
>
...
...
@@ -124,7 +109,7 @@ watch(
{{
label
}}
值计算规则
</
template
>
<div
class=
"rfm-header"
>
<p
style=
"margin-right:
2
0px"
>
{{ label }}值计算依据
</p>
<p
style=
"margin-right:
1
0px"
>
{{ label }}值计算依据
</p>
<el-radio-group
v-model=
"form.basis"
@
change=
"handleBasisChange"
>
<el-radio
value=
"1"
>
用户属性
</el-radio>
<el-radio
value=
"2"
>
事件属性
</el-radio>
...
...
@@ -134,11 +119,14 @@ watch(
<el-option
v-for=
"item in currentRuleList"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
></el-option>
</el-select>
<el-select
v-model=
"form.event_id"
placeholder=
"选择事件"
style=
"width: 160px"
v-if=
"form.basis === '2'"
>
<el-option
v-for=
"item in currentMetaEventList"
:key=
"item.
id"
:label=
"item.name"
:value=
"item.
id"
></el-option>
<el-option
v-for=
"item in currentMetaEventList"
:key=
"item.
event_id"
:label=
"item.event_name"
:value=
"item.event_
id"
></el-option>
</el-select>
<el-select
v-model=
"form.attr_id"
placeholder=
"选择属性"
style=
"width: 160px"
@
change=
"handleAttrChange"
v-else
>
<el-option
v-for=
"item in
current
AttrList"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
></el-option>
<el-option
v-for=
"item in
user
AttrList"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
></el-option>
</el-select>
<
template
v-if=
"form.basis == 1 && form.rule != '102' && form.attr_id"
>
<p>
最小值:
{{
userAttrRange
.
min
}}
<br
/>
最大值:
{{
userAttrRange
.
max
}}
</p>
</
template
>
</div>
<div
class=
"rfm-body"
>
<
template
v-if=
"form.rule === '102'"
>
...
...
@@ -161,11 +149,9 @@ watch(
>
分
</div>
<div
class=
"rfm-box-body"
>
<el-autocomplete
v-model=
"item.min_value"
class=
"rfm-box-input"
:fetch-suggestions=
"querySearch2"
/>
<!--
<el-input
v-model=
"item.min_value"
class=
"rfm-box-input"
></el-input>
-->
<el-input
v-model=
"item.min_value"
class=
"rfm-box-input"
></el-input>
~
<el-autocomplete
v-model=
"item.max_value"
class=
"rfm-box-input"
:fetch-suggestions=
"querySearch2"
/>
<!--
<el-input
v-model=
"item.max_value"
class=
"rfm-box-input"
></el-input>
-->
<el-input
v-model=
"item.max_value"
class=
"rfm-box-input"
></el-input>
</div>
</div>
</
template
>
...
...
src/composables/useRFMData.ts
0 → 100644
浏览文件 @
5165439c
import
{
getMemberAttrList
,
getEventAttrList
,
getMemberAttrRange
}
from
'@/api/rfm'
// 用户属性类型
export
interface
AttrType
{
id
:
string
name
:
string
type
:
string
format
:
string
english_name
:
string
}
// 事件类型
interface
MetaEventType
{
event_id
:
string
event_name
:
string
event_english_name
:
string
attrs
:
AttrType
[]
}
// 所有用户属性
export
function
useUserAttr
()
{
const
userAttrList
=
ref
<
AttrType
[]
>
([])
async
function
fetchUserAttrList
(
type
:
number
)
{
await
getMemberAttrList
({
type
}).
then
((
res
:
any
)
=>
{
userAttrList
.
value
=
res
.
data
.
items
})
}
return
{
fetchUserAttrList
,
userAttrList
}
}
// 所有事件
export
function
useMetaEvent
()
{
const
metaEventList
=
ref
<
MetaEventType
[]
>
([])
async
function
fetchMetaEventList
(
type
:
number
)
{
await
getEventAttrList
({
type
}).
then
((
res
:
any
)
=>
{
metaEventList
.
value
=
res
.
data
.
items
})
}
return
{
fetchMetaEventList
,
metaEventList
}
}
// 最大值最小值
export
function
useUserAttrRange
()
{
const
userAttrRange
=
ref
<
{
min
:
string
;
max
:
string
}
>
({
min
:
''
,
max
:
''
})
async
function
fetchUserAttrRange
(
member_meta_id
:
string
)
{
await
getMemberAttrRange
({
member_meta_id
}).
then
((
res
:
any
)
=>
{
userAttrRange
.
value
=
res
.
data
.
detail
})
}
return
{
fetchUserAttrRange
,
userAttrRange
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论