From 3a38dba08ac4e43df4f6ccbe17d2c3aea1822d49 Mon Sep 17 00:00:00 2001 From: lbw_9527443 <780139497@qq.com> Date: Tue, 12 Aug 2025 22:00:32 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E9=94=80=E5=94=AE=E7=AE=A1=E7=90=86):=20?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=9B=A2=E9=98=9F=E4=B8=9A=E7=BB=A9=E6=8E=92?= =?UTF-8?q?=E5=90=8D=E5=92=8C=E5=AE=A2=E6=88=B7=E9=97=AE=E9=A2=98=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加团队业绩排名和客户迫切问题API接口 - 重构ProblemRanking组件以使用真实API数据 - 修改GroupComparison组件以支持团队排名数据展示 - 优化样式和移除调试日志 - 添加数据默认值处理防止渲染错误 --- my-vue-app/src/api/senorManger.js | 16 +++ my-vue-app/src/utils/https.js | 6 +- .../components/GroupComparison.vue | 38 +++++- .../senorManger/components/GroupRanking.vue | 3 +- .../senorManger/components/ProblemRanking.vue | 38 ++++-- .../components/StatisticalIndicators.vue | 10 +- .../src/views/senorManger/seniorManager.vue | 116 ++++++++++++++++-- 7 files changed, 187 insertions(+), 40 deletions(-) diff --git a/my-vue-app/src/api/senorManger.js b/my-vue-app/src/api/senorManger.js index 382d491..b52c03b 100644 --- a/my-vue-app/src/api/senorManger.js +++ b/my-vue-app/src/api/senorManger.js @@ -45,6 +45,22 @@ export const getTimeoutRate = (params) => { export const getTableFillingRate = (params) => { return https.post('/api/v1/level_three/overview/table_filling_rate', params) } +// 销售漏斗 + +// 客户迫切解决的问题 /api/v1/level_three/overview/urgent_need_to_address +export const getUrgentNeedToAddress = (params) => { + return https.post('/api/v1/level_three/overview/urgent_need_to_address', params) +} + +// 团队业绩排名 /api/v1/level_three/overview/team_ranking +export const getTeamRanking = (params) => { + return https.post('/api/v1/level_three/overview/team_ranking', params) +} + +// 组业绩详情 /api/v1/level_three/overview/team_ranking_info +export const getTeamRankingInfo = (params) => { + return https.post('/api/v1/level_three/overview/team_ranking_info', params) +} diff --git a/my-vue-app/src/utils/https.js b/my-vue-app/src/utils/https.js index be7b7a5..26c8cfd 100644 --- a/my-vue-app/src/utils/https.js +++ b/my-vue-app/src/utils/https.js @@ -16,7 +16,7 @@ const service = axios.create({ service.interceptors.request.use( config => { // 在发送请求之前做些什么 - console.log('发送请求:', config) + // console.log('发送请求:', config) // 添加token到请求头 const userStore = useUserStore() @@ -52,10 +52,10 @@ service.interceptors.request.use( service.interceptors.response.use( response => { // 隐藏加载状态 - console.log('隐藏加载中...') + // console.log('隐藏加载中...') // 对响应数据做点什么 - console.log('收到响应:', response) + // console.log('收到响应:', response) const { data, status } = response diff --git a/my-vue-app/src/views/senorManger/components/GroupComparison.vue b/my-vue-app/src/views/senorManger/components/GroupComparison.vue index 24892fd..6071dff 100644 --- a/my-vue-app/src/views/senorManger/components/GroupComparison.vue +++ b/my-vue-app/src/views/senorManger/components/GroupComparison.vue @@ -17,10 +17,6 @@
{{ group.name }}
{{ group.leader }}
-
-
{{ calculateScore(group) }}
-
综合分
-
业绩 @@ -45,6 +41,10 @@ const props = defineProps({ groups: { type: Array, required: true + }, + teamRanking: { + type: Object, + default: () => ({}) } }) @@ -52,9 +52,37 @@ const emit = defineEmits(['select-group']) +// 将teamRanking数据转换为组件需要的格式 +const processedGroups = computed(() => { + const formalPlural = props.teamRanking.formal_plural || {} + const compositionTransformation = props.teamRanking.composition_transformation || {} + + return Object.keys(formalPlural).map((groupName, index) => { + const performance = formalPlural[groupName] || 0 + const conversionRate = parseFloat(compositionTransformation[groupName]) || 0 + + // 从组名中提取组长信息 + const nameParts = groupName.split('-') + const name = nameParts[0] || groupName + const leader = nameParts[1] || '未知' + + return { + id: index + 1, + name: name, + leader: leader, + todayPerformance: performance * 10000, // 假设单位转换 + conversionRate: conversionRate, + newClients: Math.floor(performance * 2.5), // 根据业绩估算 + deals: performance, + memberCount: Math.floor(Math.random() * 5) + 5 // 模拟成员数 + } + }) +}) + // 按综合表现排序的组别 const sortedGroups = computed(() => { - return [...props.groups].sort((a, b) => calculateScore(b) - calculateScore(a)) + const groupsToSort = processedGroups.value.length > 0 ? processedGroups.value : props.groups + return [...groupsToSort].sort((a, b) => calculateScore(b) - calculateScore(a)) }) // 计算综合分数 diff --git a/my-vue-app/src/views/senorManger/components/GroupRanking.vue b/my-vue-app/src/views/senorManger/components/GroupRanking.vue index 30a2b03..6aef41d 100644 --- a/my-vue-app/src/views/senorManger/components/GroupRanking.vue +++ b/my-vue-app/src/views/senorManger/components/GroupRanking.vue @@ -120,7 +120,7 @@ $white: #ffffff; display: flex; justify-content: space-between; align-items: center; - padding: 20px 20px 16px; + padding: 0px 20px 16px; border-bottom: 1px solid #ebeef5; h3 { margin: 0; @@ -131,6 +131,7 @@ $white: #ffffff; } .chart-content { + margin-top: 20px; padding-left: 20px; padding-right: 20px; padding-bottom: 20px; diff --git a/my-vue-app/src/views/senorManger/components/ProblemRanking.vue b/my-vue-app/src/views/senorManger/components/ProblemRanking.vue index bb012e3..fab9d61 100644 --- a/my-vue-app/src/views/senorManger/components/ProblemRanking.vue +++ b/my-vue-app/src/views/senorManger/components/ProblemRanking.vue @@ -26,35 +26,47 @@