From bcab4995e3dc9c2ebcbe8923641497ba57e87236 Mon Sep 17 00:00:00 2001 From: lbw_9527443 <780139497@qq.com> Date: Fri, 15 Aug 2025 16:17:16 +0800 Subject: [PATCH] =?UTF-8?q?feat(secondTop):=20=E6=B7=BB=E5=8A=A0=E5=90=84?= =?UTF-8?q?=E9=98=B6=E6=AE=B5=E8=BD=AC=E5=8C=96=E7=8E=87=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=B9=B6=E9=9B=86=E6=88=90=E5=88=B0=E7=BB=84=E6=8E=92=E5=90=8D?= =?UTF-8?q?=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增获取各阶段转化率API接口 - 在secondTop页面中调用API并获取数据 - 将转化率数据传递给GroupRanking组件 - 修改GroupRanking组件以动态显示转化率数据 --- my-vue-app/src/api/secondTop.js | 6 + .../secondTop/components/GroupRanking.vue | 110 ++++++++++++------ my-vue-app/src/views/secondTop/secondTop.vue | 44 ++++++- 3 files changed, 125 insertions(+), 35 deletions(-) diff --git a/my-vue-app/src/api/secondTop.js b/my-vue-app/src/api/secondTop.js index 9440466..af04dc6 100644 --- a/my-vue-app/src/api/secondTop.js +++ b/my-vue-app/src/api/secondTop.js @@ -55,6 +55,12 @@ export const getTeamRankingInfo = (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) +} + + diff --git a/my-vue-app/src/views/secondTop/components/GroupRanking.vue b/my-vue-app/src/views/secondTop/components/GroupRanking.vue index 366ac81..bc24923 100644 --- a/my-vue-app/src/views/secondTop/components/GroupRanking.vue +++ b/my-vue-app/src/views/secondTop/components/GroupRanking.vue @@ -55,8 +55,6 @@ - - @@ -67,42 +65,88 @@ const props = defineProps({ selectedGroup: { type: Object, default: null + }, + conversionData: { + type: Object, + default: () => ({}) } }) // 转化率数据 -const conversionStages = ref([ - { - name: '加微', - teamRate: 80, - companyRate: 85 - }, - { - name: '填表', - teamRate: 90, - companyRate: 92 - }, - { - name: '通话', - teamRate: 95, - companyRate: 95 - }, - { - name: '首课', - teamRate: 60, - companyRate: 65 - }, - { - name: '三课', - teamRate: 85, - companyRate: 88 - }, - { - name: '付费', - teamRate: 15, - companyRate: 20 +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: '加微', + teamRate: 80, + companyRate: 85 + }, + { + name: '填表', + teamRate: 90, + companyRate: 92 + }, + { + name: '通话', + teamRate: 95, + companyRate: 95 + }, + { + name: '首课', + teamRate: 60, + companyRate: 65 + }, + { + name: '三课', + teamRate: 85, + companyRate: 88 + }, + { + name: '付费', + teamRate: 15, + companyRate: 20 + } + ] +}) // Y轴标签 const yAxisLabels = ref(['100%', '80%', '60%', '40%', '20%', '0%']) diff --git a/my-vue-app/src/views/secondTop/secondTop.vue b/my-vue-app/src/views/secondTop/secondTop.vue index 6d9a155..8cd1569 100644 --- a/my-vue-app/src/views/secondTop/secondTop.vue +++ b/my-vue-app/src/views/secondTop/secondTop.vue @@ -46,7 +46,7 @@
- +
@@ -152,7 +152,9 @@ import UserDropdown from '@/components/UserDropdown.vue' import { getOverallCenterPerformance, getTotalGroupCount, getCenterConversionRate, getTotalCallCount, getNewCustomer - , getDepositConversionRate, getCustomerTypeDistribution, getUrgentNeedToAddress, getCenterAdvancedManagerList, getTeamRanking, getTeamRankingInfo + , getDepositConversionRate, getCustomerTypeDistribution, getUrgentNeedToAddress, getCenterAdvancedManagerList, getTeamRanking, + getTeamRankingInfo, getConversionRateVsAverage + } from '@/api/secondTop.js' import { useRouter } from 'vue-router' import { useUserStore } from '@/stores/user.js' @@ -317,6 +319,42 @@ 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([]) @@ -409,6 +447,8 @@ await CenterDepositConversionRate() await CenterCustomerType() await CenterUrgentNeedToAddress() + await CenterConversionRateVsAverage() + await CenterSeniorManagerList() await CenterGroupList('all') // 初始化加载全部高级经理数据 })