提交 3a584198 authored 作者: 王鹏飞's avatar 王鹏飞

chore: 修改群组RFM标签

上级 f08f2e3a
...@@ -14,3 +14,8 @@ export function getEventAttrList(params: { type: number }) { ...@@ -14,3 +14,8 @@ export function getEventAttrList(params: { type: number }) {
export function getMemberAttrRange(params: { member_meta_id: string }) { export function getMemberAttrRange(params: { member_meta_id: string }) {
return httpRequest.get('/api/lab/v1/experiment/tag/bda-num-member-attr-range', { params }) return httpRequest.get('/api/lab/v1/experiment/tag/bda-num-member-attr-range', { params })
} }
// 获取RFM标签的结果集
export function getRfmRes() {
return httpRequest.get('/api/lab/v1/experiment/group/bda-rfm-res')
}
...@@ -2,11 +2,13 @@ ...@@ -2,11 +2,13 @@
import type { TagRule } from '@/types' import type { TagRule } from '@/types'
import { PriceTag, Plus, CloseBold } from '@element-plus/icons-vue' import { PriceTag, Plus, CloseBold } from '@element-plus/icons-vue'
import { useTag } from '@/composables/useAllData' import { useTag } from '@/composables/useAllData'
import { useRfmRes } from '@/composables/useRFMData'
// const tagRule = ref(inject('tagRule') as TagRule) // const tagRule = ref(inject('tagRule') as TagRule)
const tagRule = defineModel<TagRule>({ default: { current_logic_operate: 'and', items: [] } }) const tagRule = defineModel<TagRule>({ default: { current_logic_operate: 'and', items: [] } })
const { tagList } = useTag() const { tagList } = useTag()
const { rfmResList } = useRfmRes()
// 获取逻辑运算符名称 // 获取逻辑运算符名称
function getLogicalName(value: 'and' | 'or') { function getLogicalName(value: 'and' | 'or') {
...@@ -19,14 +21,23 @@ function toggleOperate(rule: TagRule) { ...@@ -19,14 +21,23 @@ function toggleOperate(rule: TagRule) {
} }
// 添加条件 // 添加条件
function handleAdd(items: string[]) { function handleAdd(items: any[]) {
items.push('') items.push({ tag_id: '' })
} }
// 删除 // 删除
function handleRemove(items: string[], index: number) { function handleRemove(items: any[], index: number) {
items.splice(index, 1) items.splice(index, 1)
} }
function showRfm(id: string) {
return tagList.value.find(item => item.id === id)?.label == '4'
}
function handleRfmChange(rfmKey: string, item: any) {
const found = rfmResList.value.find(item => item.frm_key === rfmKey)
item.rfm_value = found?.frm_value
}
</script> </script>
<template> <template>
...@@ -44,9 +55,16 @@ function handleRemove(items: string[], index: number) { ...@@ -44,9 +55,16 @@ function handleRemove(items: string[], index: number) {
<div> <div>
标签 等于 标签 等于
<el-form-item> <el-form-item>
<el-select v-model="tagRule.items[index]" style="width: 400px"> <el-select v-model="item.tag_id" style="width: 400px">
<el-option v-for="option in tagList" :key="option.id" :label="option.name" :value="option.id"></el-option> <el-option v-for="option in tagList" :key="option.id" :label="option.name" :value="option.id"></el-option>
</el-select> </el-select>
<el-select
v-model="item.rfm_key"
@change="value => handleRfmChange(value, item)"
v-if="showRfm(item.tag_id)"
style="width: 200px; margin-left: 10px">
<el-option v-for="item in rfmResList" :key="item.frm_key" :label="item.frm_value" :value="item.frm_key"></el-option>
</el-select>
</el-form-item> </el-form-item>
</div> </div>
<el-button text :icon="CloseBold" @click="handleRemove(tagRule.items, index)"></el-button> <el-button text :icon="CloseBold" @click="handleRemove(tagRule.items, index)"></el-button>
......
...@@ -24,6 +24,7 @@ interface MetaEventType { ...@@ -24,6 +24,7 @@ interface MetaEventType {
export interface TagType { export interface TagType {
id: string id: string
name: string name: string
label: string
} }
// 连接类型 // 连接类型
......
import { getMemberAttrList, getEventAttrList, getMemberAttrRange } from '@/api/rfm' import { getMemberAttrList, getEventAttrList, getMemberAttrRange, getRfmRes } from '@/api/rfm'
// 用户属性类型 // 用户属性类型
export interface AttrType { export interface AttrType {
...@@ -49,3 +49,21 @@ export function useUserAttrRange() { ...@@ -49,3 +49,21 @@ export function useUserAttrRange() {
} }
return { fetchUserAttrRange, userAttrRange } return { fetchUserAttrRange, userAttrRange }
} }
// RFM标签的结果集
interface RfmRes {
frm_key: string
frm_value: number
}
const rfmResList = ref<RfmRes[]>([])
export function useRfmRes() {
async function fetchRfmResList() {
await getRfmRes().then((res: any) => {
rfmResList.value = res.data.items
})
}
onMounted(() => {
fetchRfmResList()
})
return { fetchRfmResList, rfmResList }
}
...@@ -49,8 +49,12 @@ function fetchInfo() { ...@@ -49,8 +49,12 @@ function fetchInfo() {
const [user_attr_rule = { current_logic_operate: 'and', items: [] }] = detail.user_attr_rule || [] const [user_attr_rule = { current_logic_operate: 'and', items: [] }] = detail.user_attr_rule || []
const [event_attr_rule = { current_logic_operate: 'and', items: [] }] = detail.event_attr_rule || [] const [event_attr_rule = { current_logic_operate: 'and', items: [] }] = detail.event_attr_rule || []
const [tag_rule = { current_logic_operate: 'and', items: [] }] = const [tag_rule = { current_logic_operate: 'and', items: [] }] =
detail.tag_rule?.map((item: any) => { detail.tag_rule?.map((tagItem: any) => {
return { ...item, items: item.items.map((item: any) => item.id) } const items = tagItem.items.map((item: any, index: number) => {
const rfm = tagItem.rfm_tag_map[index] || {}
return { tag_id: item.id, ...rfm }
})
return { ...tagItem, items }
}) || [] }) || []
const attrRuleItems = user_attr_rule.items.map((item: any) => { const attrRuleItems = user_attr_rule.items.map((item: any) => {
item.value = ['in', 'not in'].includes(item.operate) ? item.value.split(',') : item.value item.value = ['in', 'not in'].includes(item.operate) ? item.value.split(',') : item.value
...@@ -86,6 +90,16 @@ async function handleCreate() { ...@@ -86,6 +90,16 @@ async function handleCreate() {
const params = pick(form, ['name', 'status']) const params = pick(form, ['name', 'status'])
await createStaticGroup(params) await createStaticGroup(params)
} else if (props.data.type === '2') { } else if (props.data.type === '2') {
const tagRule = form.tag_rule.items.reduce(
(result: any, item: any, index: number) => {
result.items.push(item.tag_id)
if (item.rfm_key) {
result.rfm_tag_map[index] = item
}
return result
},
{ items: [], rfm_tag_map: {} }
)
// 动态群组 // 动态群组
const params = pick( const params = pick(
{ {
...@@ -93,7 +107,7 @@ async function handleCreate() { ...@@ -93,7 +107,7 @@ async function handleCreate() {
update_rule: JSON.stringify(form.update_rule), update_rule: JSON.stringify(form.update_rule),
user_attr_rule: JSON.stringify([form.user_attr_rule]), user_attr_rule: JSON.stringify([form.user_attr_rule]),
event_attr_rule: JSON.stringify([form.event_attr_rule]), event_attr_rule: JSON.stringify([form.event_attr_rule]),
tag_rule: JSON.stringify([form.tag_rule]) tag_rule: JSON.stringify([{ ...form.tag_rule, ...tagRule }])
}, },
['name', 'status', 'update_status', 'update_rule', 'user_attr_rule', 'event_attr_rule', 'tag_rule', 'user_action_rule'] ['name', 'status', 'update_status', 'update_rule', 'user_attr_rule', 'event_attr_rule', 'tag_rule', 'user_action_rule']
) )
...@@ -130,6 +144,16 @@ async function handleUpdate() { ...@@ -130,6 +144,16 @@ async function handleUpdate() {
item.value = Array.isArray(item.value) ? item.value.join(',') : item.value item.value = Array.isArray(item.value) ? item.value.join(',') : item.value
return item return item
}) })
const tagRule = form.tag_rule.items.reduce(
(result: any, item: any, index: number) => {
result.items.push(item.tag_id)
if (item.rfm_key) {
result.rfm_tag_map[index] = item
}
return result
},
{ items: [], rfm_tag_map: {} }
)
// 动态群组 // 动态群组
const params = pick( const params = pick(
{ {
...@@ -137,7 +161,7 @@ async function handleUpdate() { ...@@ -137,7 +161,7 @@ async function handleUpdate() {
update_rule: JSON.stringify(form.update_rule), update_rule: JSON.stringify(form.update_rule),
user_attr_rule: JSON.stringify([{ ...form.user_attr_rule, items: attrRuleItems }]), user_attr_rule: JSON.stringify([{ ...form.user_attr_rule, items: attrRuleItems }]),
event_attr_rule: JSON.stringify([{ ...form.event_attr_rule, items: eventRuleItems }]), event_attr_rule: JSON.stringify([{ ...form.event_attr_rule, items: eventRuleItems }]),
tag_rule: JSON.stringify([form.tag_rule]), tag_rule: JSON.stringify([{ ...form.tag_rule, ...tagRule }]),
user_action_rule: JSON.stringify(form.user_action_rule) user_action_rule: JSON.stringify(form.user_action_rule)
}, },
['id', 'name', 'status', 'update_status', 'update_rule', 'user_attr_rule', 'event_attr_rule', 'tag_rule', 'user_action_rule'] ['id', 'name', 'status', 'update_status', 'update_rule', 'user_attr_rule', 'event_attr_rule', 'tag_rule', 'user_action_rule']
......
...@@ -108,7 +108,7 @@ export interface EventRuleItem { ...@@ -108,7 +108,7 @@ export interface EventRuleItem {
// 标签规则 // 标签规则
export interface TagRule { export interface TagRule {
current_logic_operate: 'and' | 'or' current_logic_operate: 'and' | 'or'
items: string[] items: any[]
} }
// 用户行为规则 // 用户行为规则
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论