feat(secondTop): 添加各阶段转化率功能并集成到组排名组件
- 新增获取各阶段转化率API接口 - 在secondTop页面中调用API并获取数据 - 将转化率数据传递给GroupRanking组件 - 修改GroupRanking组件以动态显示转化率数据
This commit is contained in:
@@ -55,6 +55,12 @@ export const getTeamRankingInfo = (params) => {
|
|||||||
return https.post('/api/v1/level_four/overview/team_ranking_info', params)
|
return https.post('/api/v1/level_four/overview/team_ranking_info', params)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 各阶段转化率 /api/v1/level_four/overview/conversion_rate_vs_average
|
||||||
|
export const getConversionRateVsAverage = (params) => {
|
||||||
|
return https.post('/api/v1/level_four/overview/conversion_rate_vs_average', params)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -55,8 +55,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -67,11 +65,56 @@ const props = defineProps({
|
|||||||
selectedGroup: {
|
selectedGroup: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: null
|
default: null
|
||||||
|
},
|
||||||
|
conversionData: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
// 转化率数据
|
// 转化率数据
|
||||||
const conversionStages = ref([
|
const conversionStages = computed(() => {
|
||||||
|
// 如果有传入的转化率数据,使用传入的数据
|
||||||
|
if (props.conversionData && props.conversionData.conversion_rate && props.conversionData.company_conversion_rate) {
|
||||||
|
const userRates = props.conversionData.conversion_rate
|
||||||
|
const companyRates = props.conversionData.company_conversion_rate
|
||||||
|
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
name: '加微',
|
||||||
|
teamRate: parseFloat(userRates['加微']) || 0,
|
||||||
|
companyRate: parseFloat(companyRates['加微']) || 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '填表',
|
||||||
|
teamRate: parseFloat(userRates['填表']) || 0,
|
||||||
|
companyRate: parseFloat(companyRates['填表']) || 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '通话',
|
||||||
|
teamRate: parseFloat(userRates['通话']) || 0,
|
||||||
|
companyRate: parseFloat(companyRates['通话']) || 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '首课',
|
||||||
|
teamRate: parseFloat(userRates['首课']) || 0,
|
||||||
|
companyRate: parseFloat(companyRates['首课']) || 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '三课',
|
||||||
|
teamRate: parseFloat(userRates['三课']) || 0,
|
||||||
|
companyRate: parseFloat(companyRates['三课']) || 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '付费',
|
||||||
|
teamRate: parseFloat(userRates['付费']) || 0,
|
||||||
|
companyRate: parseFloat(companyRates['付费']) || 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
// 默认数据
|
||||||
|
return [
|
||||||
{
|
{
|
||||||
name: '加微',
|
name: '加微',
|
||||||
teamRate: 80,
|
teamRate: 80,
|
||||||
@@ -102,7 +145,8 @@ const conversionStages = ref([
|
|||||||
teamRate: 15,
|
teamRate: 15,
|
||||||
companyRate: 20
|
companyRate: 20
|
||||||
}
|
}
|
||||||
])
|
]
|
||||||
|
})
|
||||||
|
|
||||||
// Y轴标签
|
// Y轴标签
|
||||||
const yAxisLabels = ref(['100%', '80%', '60%', '40%', '20%', '0%'])
|
const yAxisLabels = ref(['100%', '80%', '60%', '40%', '20%', '0%'])
|
||||||
|
|||||||
@@ -46,7 +46,7 @@
|
|||||||
<div class="bottom-section">
|
<div class="bottom-section">
|
||||||
<!-- Left Section - Group Performance Ranking -->
|
<!-- Left Section - Group Performance Ranking -->
|
||||||
<div class="left-section">
|
<div class="left-section">
|
||||||
<GroupRanking :groups="groups" :selected-group="selectedGroup" @select-group="selectGroup" />
|
<GroupRanking :groups="groups" :selected-group="selectedGroup" :conversion-data="conversionRateVsAverage" @select-group="selectGroup" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Right Section - Group Comparison -->
|
<!-- Right Section - Group Comparison -->
|
||||||
@@ -152,7 +152,9 @@
|
|||||||
import UserDropdown from '@/components/UserDropdown.vue'
|
import UserDropdown from '@/components/UserDropdown.vue'
|
||||||
import {
|
import {
|
||||||
getOverallCenterPerformance, getTotalGroupCount, getCenterConversionRate, getTotalCallCount, getNewCustomer
|
getOverallCenterPerformance, getTotalGroupCount, getCenterConversionRate, getTotalCallCount, getNewCustomer
|
||||||
, getDepositConversionRate, getCustomerTypeDistribution, getUrgentNeedToAddress, getCenterAdvancedManagerList, getTeamRanking, getTeamRankingInfo
|
, getDepositConversionRate, getCustomerTypeDistribution, getUrgentNeedToAddress, getCenterAdvancedManagerList, getTeamRanking,
|
||||||
|
getTeamRankingInfo, getConversionRateVsAverage
|
||||||
|
|
||||||
} from '@/api/secondTop.js'
|
} from '@/api/secondTop.js'
|
||||||
import { useRouter } from 'vue-router'
|
import { useRouter } from 'vue-router'
|
||||||
import { useUserStore } from '@/stores/user.js'
|
import { useUserStore } from '@/stores/user.js'
|
||||||
@@ -317,6 +319,42 @@
|
|||||||
console.error('获取中心整体概览失败:', error)
|
console.error('获取中心整体概览失败:', error)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 各阶段转化率
|
||||||
|
const conversionRateVsAverage = ref({})
|
||||||
|
async function CenterConversionRateVsAverage() {
|
||||||
|
const params = getRequestParams()
|
||||||
|
const hasParams = params.user_name
|
||||||
|
try {
|
||||||
|
const res = await getConversionRateVsAverage(hasParams ? params : undefined)
|
||||||
|
if (res.code === 200) {
|
||||||
|
conversionRateVsAverage.value = res.data
|
||||||
|
/**
|
||||||
|
* "data": {
|
||||||
|
"user_name": "刘瑞",
|
||||||
|
"user_level": 4,
|
||||||
|
"conversion_rate": {
|
||||||
|
"加微": "21.72%",
|
||||||
|
"填表": "21.72%",
|
||||||
|
"通话": "0.00%",
|
||||||
|
"首课": "37.08%",
|
||||||
|
"三课": "14.61%",
|
||||||
|
"付费": "1.87%"
|
||||||
|
},
|
||||||
|
"company_conversion_rate": {
|
||||||
|
"加微": "12.49%",
|
||||||
|
"填表": "12.49%",
|
||||||
|
"通话": "0.00%",
|
||||||
|
"首课": "39.07%",
|
||||||
|
"三课": "24.27%",
|
||||||
|
"付费": "1.27%"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('获取中心整体概览失败:', error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 综合排名---高级经理列表
|
// 综合排名---高级经理列表
|
||||||
const seniorManagerList = ref([])
|
const seniorManagerList = ref([])
|
||||||
@@ -409,6 +447,8 @@
|
|||||||
await CenterDepositConversionRate()
|
await CenterDepositConversionRate()
|
||||||
await CenterCustomerType()
|
await CenterCustomerType()
|
||||||
await CenterUrgentNeedToAddress()
|
await CenterUrgentNeedToAddress()
|
||||||
|
await CenterConversionRateVsAverage()
|
||||||
|
|
||||||
await CenterSeniorManagerList()
|
await CenterSeniorManagerList()
|
||||||
await CenterGroupList('all') // 初始化加载全部高级经理数据
|
await CenterGroupList('all') // 初始化加载全部高级经理数据
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user