Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
S
saas-dml
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
saas-dml
Commits
679b78fa
提交
679b78fa
authored
4月 18, 2024
作者:
王鹏飞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
chore: 新增RFM模型标签
上级
e877c464
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
189 行增加
和
2 行删除
+189
-2
RFMRule.vue
src/components/rule/RFMRule.vue
+17
-0
RFMRuleItem.vue
src/components/rule/RFMRuleItem.vue
+163
-0
LabelRuleDialog.vue
src/modules/label/components/LabelRuleDialog.vue
+7
-1
dictionary.ts
src/utils/dictionary.ts
+2
-1
没有找到文件。
src/components/rule/RFMRule.vue
0 → 100644
浏览文件 @
679b78fa
<
script
setup
lang=
"ts"
>
import
RFMRuleItem
from
'./RFMRuleItem.vue'
const
form
=
defineModel
<
any
>
({
default
:
{
R
:
{},
F
:
{},
M
:
{}
}
})
</
script
>
<
template
>
<RFMRuleItem
label=
"R"
v-model=
"form.R"
/>
<RFMRuleItem
label=
"F"
v-model=
"form.F"
style=
"margin-top: 20px"
/>
<RFMRuleItem
label=
"M"
v-model=
"form.M"
style=
"margin-top: 20px"
/>
</
template
>
src/components/rule/RFMRuleItem.vue
0 → 100644
浏览文件 @
679b78fa
<
script
setup
lang=
"ts"
>
import
{
useUserAttr
,
useMetaEvent
}
from
'@/composables/useAllData'
defineProps
<
{
label
:
string
}
>
()
const
form
=
defineModel
<
any
>
()
const
ruleList
=
[
{
label
:
'属性值平均法'
,
value
:
'101'
,
basis
:
[
'1'
]
},
{
label
:
'属性值分类法'
,
value
:
'102'
,
basis
:
[
'1'
]
},
{
label
:
'事件发生次数平均法'
,
value
:
'201'
,
basis
:
[
'2'
]
}
]
const
defaultLevel
=
[
{
level
:
'高'
,
value
:
''
},
{
level
:
'低'
,
value
:
''
}
]
const
defaultScore
=
[
{
score
:
1
,
min_value
:
''
,
max_value
:
''
},
{
score
:
2
,
min_value
:
''
,
max_value
:
''
},
{
score
:
3
,
min_value
:
''
,
max_value
:
''
},
{
score
:
4
,
min_value
:
''
,
max_value
:
''
},
{
score
:
5
,
min_value
:
''
,
max_value
:
''
}
]
onMounted
(()
=>
{
form
.
value
=
Object
.
assign
({
basis
:
'1'
,
rule
:
'101'
,
event_id
:
'0'
,
attr_id
:
''
,
attr_type
:
''
,
config
:
[...
defaultScore
]
},
form
.
value
)
})
const
{
userAttrList
}
=
useUserAttr
()
const
{
metaEventList
}
=
useMetaEvent
()
const
currentRuleList
=
computed
(()
=>
{
return
ruleList
.
filter
(
item
=>
item
.
basis
.
includes
(
form
.
value
.
basis
))
})
const
currentAttrList
=
computed
(()
=>
{
let
list
=
userAttrList
.
value
if
(
form
.
value
.
basis
===
'2'
)
{
list
=
metaEventList
.
value
.
find
(
item
=>
item
.
id
===
form
.
value
.
event_id
)?.
event_attrs
||
[]
}
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
})
})
function
handleBasisChange
(
value
:
any
)
{
if
(
value
===
'1'
)
{
form
.
value
.
rule
=
'101'
}
else
{
form
.
value
.
rule
=
'201'
}
form
.
value
.
attr_id
=
''
handleRuleChange
(
form
.
value
.
rule
)
}
function
handleRuleChange
(
value
:
any
)
{
if
(
value
===
'102'
)
{
form
.
value
.
config
=
[...
defaultLevel
]
}
else
{
form
.
value
.
config
=
[...
defaultScore
]
}
}
function
handleAttrChange
(
value
:
any
)
{
form
.
value
.
attr_type
=
currentAttrList
.
value
.
find
(
item
=>
item
.
id
===
value
)?.
type
}
</
script
>
<
template
>
<el-card
shadow=
"never"
>
<template
#
header
>
<el-button
circle
type=
"primary"
style=
"width: 32px; margin-right: 10px"
>
{{
label
}}
</el-button>
{{
label
}}
值计算规则
</
template
>
<div
class=
"rfm-header"
>
<p
style=
"margin-right: 20px"
>
{{ label }}值计算依据
</p>
<el-radio-group
v-model=
"form.basis"
@
change=
"handleBasisChange"
>
<el-radio
label=
"1"
>
用户属性
</el-radio>
<el-radio
label=
"2"
>
事件属性
</el-radio>
</el-radio-group>
<p
style=
"margin-left: 10px"
>
计算规则:
</p>
<el-select
v-model=
"form.rule"
style=
"width: 170px"
@
change=
"handleRuleChange"
>
<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 metaEventList"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
></el-option>
</el-select>
<el-select
v-model=
"form.attr_id"
placeholder=
"选择属性"
style=
"width: 160px"
@
change=
"handleAttrChange"
>
<el-option
v-for=
"item in currentAttrList"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
></el-option>
</el-select>
</div>
<div
class=
"rfm-body"
>
<
template
v-if=
"form.rule === '102'"
>
<div
class=
"rfm-box"
v-for=
"item in form.config"
:key=
"item.level"
>
<div
class=
"rfm-box-header"
>
<b>
{{
item
.
level
}}
</b>
</div>
<div
class=
"rfm-box-body"
>
<el-input
placeholder=
"选择属性值"
v-model=
"item.value"
></el-input>
</div>
</div>
</
template
>
<
template
v-else
>
<div
class=
"rfm-box"
v-for=
"item in form.config"
:key=
"item.score"
>
<div
class=
"rfm-box-header"
>
<b>
{{
item
.
score
}}
</b
>
分
</div>
<div
class=
"rfm-box-body"
>
<el-input
v-model=
"item.min_value"
class=
"rfm-box-input"
></el-input>
~
<el-input
v-model=
"item.max_value"
class=
"rfm-box-input"
></el-input>
</div>
</div>
</
template
>
</div>
</el-card>
</template>
<
style
lang=
"scss"
>
.rfm-header
{
display
:
flex
;
align-items
:
center
;
.el-radio
{
margin-right
:
10px
;
}
.el-select
{
margin-right
:
10px
;
}
}
.rfm-body
{
margin-top
:
20px
;
display
:
grid
;
grid-template-columns
:
repeat
(
5
,
1fr
);
gap
:
20px
;
}
.rfm-box
{
padding
:
10px
;
text-align
:
center
;
border-radius
:
4px
;
background-color
:
rgb
(
240
,
240
,
240
);
}
.rfm-box-header
{
color
:
var
(
--
main-color
);
margin-bottom
:
10px
;
b
{
font-weight
:
bold
;
font-size
:
18px
;
}
}
.rfm-box-input
{
width
:
63px
;
.el-input__inner
{
text-align
:
center
;
}
}
</
style
>
src/modules/label/components/LabelRuleDialog.vue
浏览文件 @
679b78fa
...
@@ -9,6 +9,7 @@ import { getLabelRule, updateLabelRule } from '../api'
...
@@ -9,6 +9,7 @@ import { getLabelRule, updateLabelRule } from '../api'
import
LevelRule
from
'@/components/rule/LevelRule.vue'
import
LevelRule
from
'@/components/rule/LevelRule.vue'
import
EventPreferenceRule
from
'@/components/rule/EventPreferenceRule.vue'
import
EventPreferenceRule
from
'@/components/rule/EventPreferenceRule.vue'
import
EventTargetRule
from
'@/components/rule/EventTargetRule.vue'
import
EventTargetRule
from
'@/components/rule/EventTargetRule.vue'
import
RFMRule
from
'@/components/rule/RFMRule.vue'
const
props
=
defineProps
<
{
const
props
=
defineProps
<
{
data
:
Label
data
:
Label
...
@@ -67,6 +68,9 @@ function fetchInfo() {
...
@@ -67,6 +68,9 @@ function fetchInfo() {
tag_rule
:
{
way
:
''
}
tag_rule
:
{
way
:
''
}
}
}
}
}
if
(
detail
.
label
===
'4'
)
{
rules
=
{
R
:
{},
F
:
{},
M
:
{}
}
}
}
}
Object
.
assign
(
form
,
{
id
:
props
.
data
.
id
,
rules
})
Object
.
assign
(
form
,
{
id
:
props
.
data
.
id
,
rules
})
})
})
...
@@ -104,7 +108,7 @@ function handleUpdate() {
...
@@ -104,7 +108,7 @@ function handleUpdate() {
</
script
>
</
script
>
<
template
>
<
template
>
<el-dialog
title=
"标签规则管理"
:close-on-click-modal=
"false"
width=
"
800px"
@
update:modelValue=
"$emit('update:modelValue'
)"
>
<el-dialog
title=
"标签规则管理"
:close-on-click-modal=
"false"
width=
"
980px"
@
update:modelValue=
"value => $emit('update:modelValue', value
)"
>
<el-form
label-suffix=
":"
label-width=
"82px"
>
<el-form
label-suffix=
":"
label-width=
"82px"
>
<el-row>
<el-row>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
...
@@ -134,6 +138,8 @@ function handleUpdate() {
...
@@ -134,6 +138,8 @@ function handleUpdate() {
<EventPreferenceRule
v-model=
"form.rules"
v-if=
"data.label == '2'"
></EventPreferenceRule>
<EventPreferenceRule
v-model=
"form.rules"
v-if=
"data.label == '2'"
></EventPreferenceRule>
<!-- 事件指标 -->
<!-- 事件指标 -->
<EventTargetRule
v-model=
"form.rules"
v-if=
"data.label == '3'"
></EventTargetRule>
<EventTargetRule
v-model=
"form.rules"
v-if=
"data.label == '3'"
></EventTargetRule>
<!-- RFM模型 -->
<RFMRule
v-model=
"form.rules"
v-if=
"data.label == '4'"
></RFMRule>
<!-- 用户属性规则 -->
<!-- 用户属性规则 -->
<!--
<UserRule></UserRule>
-->
<!--
<UserRule></UserRule>
-->
<!-- 事件属性规则 -->
<!-- 事件属性规则 -->
...
...
src/utils/dictionary.ts
浏览文件 @
679b78fa
...
@@ -98,7 +98,8 @@ export const triggerInfoList = [{ label: '触发次数', value: '触发次数' }
...
@@ -98,7 +98,8 @@ export const triggerInfoList = [{ label: '触发次数', value: '触发次数' }
export
const
labelList
=
[
export
const
labelList
=
[
{
label
:
'自定义分层标签 '
,
value
:
'1'
},
{
label
:
'自定义分层标签 '
,
value
:
'1'
},
{
label
:
'事件偏好标签 '
,
value
:
'2'
},
{
label
:
'事件偏好标签 '
,
value
:
'2'
},
{
label
:
'事件指标标签 '
,
value
:
'3'
}
{
label
:
'事件指标标签 '
,
value
:
'3'
},
{
label
:
'RFM模型标签 '
,
value
:
'4'
}
]
]
export
const
wayList
=
[
export
const
wayList
=
[
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论