提交 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">
import { useUserAttr, useMetaEvent } from '@/composables/useAllData'
import { useUserAttr, useMetaEvent, useUserAttrRange } from '@/composables/useRFMData'
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 = 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 }[]>([])
......@@ -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,
() => {
// form.value.rule === '102' && remoteMethod()
attrId => {
if (form.value.rule === '102') {
remoteMethod()
},
{ immediate: true }
} else {
attrId && fetchUserAttrRange(attrId)
}
}
)
watch(
() => form.value.rule,
() => {
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: 20px">{{ label }}值计算依据</p>
<p style="margin-right: 10px">{{ 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 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>
<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>
......
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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论