提交 5165439c authored 作者: 王鹏飞's avatar 王鹏飞

chore: 修改RFM群组

上级 add8d4e8
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 })
}
<script setup lang="ts"> <script setup lang="ts">
import { useUserAttr, useMetaEvent } from '@/composables/useAllData' import { useUserAttr, useMetaEvent, useUserAttrRange } from '@/composables/useRFMData'
import { searchMetaMemberAttrs } from '@/api/base' import { searchMetaMemberAttrs } from '@/api/base'
import { maxBy, minBy } from 'lodash-es'
defineProps<{ label: string }>() defineProps<{ label: string }>()
const form = defineModel<any>() const form = defineModel<any>()
...@@ -29,26 +28,16 @@ onMounted(() => { ...@@ -29,26 +28,16 @@ onMounted(() => {
form.value = Object.assign({ basis: '1', rule: '101', event_id: '-1', attr_id: '', attr_type: '', config: [...defaultScore] }, form.value) form.value = Object.assign({ basis: '1', rule: '101', event_id: '-1', attr_id: '', attr_type: '', config: [...defaultScore] }, form.value)
}) })
const { userAttrList } = useUserAttr() const { userAttrList, fetchUserAttrList } = useUserAttr()
const { metaEventList } = useMetaEvent() const { metaEventList, fetchMetaEventList } = useMetaEvent()
const { userAttrRange, fetchUserAttrRange } = useUserAttrRange()
const currentRuleList = computed(() => { const currentRuleList = computed(() => {
return ruleList.filter(item => item.basis.includes(form.value.basis)) 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(() => { const currentMetaEventList = computed(() => {
return [{ id: '-1', name: '所有事件' }, ...metaEventList.value] return [{ event_id: '-1', event_name: '所有事件' }, ...metaEventList.value]
}) })
function handleBasisChange(value: any) { function handleBasisChange(value: any) {
...@@ -71,7 +60,7 @@ function handleRuleChange(value: any) { ...@@ -71,7 +60,7 @@ function handleRuleChange(value: any) {
} }
function handleAttrChange(value: any) { function handleAttrChange(value: any) {
form.value.attr_type = currentAttrList.value.find(item => item.id === value)?.type form.value.attr_type = userAttrList.value.find(item => item.id === value)?.type
} }
const options = ref<{ label: string; value: string }[]>([]) const options = ref<{ label: string; value: string }[]>([])
...@@ -93,27 +82,23 @@ function querySearch(queryString: string, cb: any) { ...@@ -93,27 +82,23 @@ function querySearch(queryString: string, cb: any) {
cb(options.value) 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( watch(
() => form.value.attr_id, () => form.value.attr_id,
attrId => {
if (form.value.rule === '102') {
remoteMethod()
} else {
attrId && fetchUserAttrRange(attrId)
}
}
)
watch(
() => form.value.rule,
() => { () => {
// form.value.rule === '102' && remoteMethod() let type = form.value.rule === '102' ? 1 : 2
remoteMethod() form.value.basis === '1' ? fetchUserAttrList(type) : fetchMetaEventList(type)
}, }
{ immediate: true }
) )
</script> </script>
...@@ -124,7 +109,7 @@ watch( ...@@ -124,7 +109,7 @@ watch(
{{ label }}值计算规则 {{ label }}值计算规则
</template> </template>
<div class="rfm-header"> <div class="rfm-header">
<p style="margin-right: 20px">{{ label }}值计算依据</p> <p style="margin-right: 10px">{{ label }}值计算依据</p>
<el-radio-group v-model="form.basis" @change="handleBasisChange"> <el-radio-group v-model="form.basis" @change="handleBasisChange">
<el-radio value="1">用户属性</el-radio> <el-radio value="1">用户属性</el-radio>
<el-radio value="2">事件属性</el-radio> <el-radio value="2">事件属性</el-radio>
...@@ -134,11 +119,14 @@ watch( ...@@ -134,11 +119,14 @@ watch(
<el-option v-for="item in currentRuleList" :key="item.value" :label="item.label" :value="item.value"></el-option> <el-option v-for="item in currentRuleList" :key="item.value" :label="item.label" :value="item.value"></el-option>
</el-select> </el-select>
<el-select v-model="form.event_id" placeholder="选择事件" style="width: 160px" v-if="form.basis === '2'"> <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>
<el-select v-model="form.attr_id" placeholder="选择属性" style="width: 160px" @change="handleAttrChange" v-else> <el-select v-model="form.attr_id" placeholder="选择属性" style="width: 160px" @change="handleAttrChange" v-else>
<el-option v-for="item in currentAttrList" :key="item.id" :label="item.name" :value="item.id"></el-option> <el-option v-for="item in userAttrList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select> </el-select>
<template v-if="form.basis == 1 && form.rule != '102' && form.attr_id">
<p>最小值:{{ userAttrRange.min }} <br />最大值:{{ userAttrRange.max }}</p>
</template>
</div> </div>
<div class="rfm-body"> <div class="rfm-body">
<template v-if="form.rule === '102'"> <template v-if="form.rule === '102'">
...@@ -161,11 +149,9 @@ watch( ...@@ -161,11 +149,9 @@ watch(
> >
</div> </div>
<div class="rfm-box-body"> <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>
</div> </div>
</template> </template>
......
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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论