feat(api): 新增销售漏斗和黄金联络时段API接口

feat(views): 添加销售漏斗和黄金联络时段数据展示功能
refactor(views): 优化客户详情组件的数据处理逻辑
fix(views): 修复业绩数据显示字段不一致问题
style(views): 调整路由导航顶栏样式
This commit is contained in:
2025-08-19 21:45:15 +08:00
parent 182130ba6a
commit 2b75f1b568
8 changed files with 326 additions and 138 deletions

View File

@@ -112,11 +112,11 @@
<div class="metric-row">
<div class="metric-item">
<span class="metric-label">今日业绩</span>
<span class="metric-value">{{ formatCurrency(member.todayPerformance) }}</span>
<span class="metric-value">{{ member.todayPerformance}}</span>
</div>
<div class="metric-item">
<span class="metric-label">月度业绩</span>
<span class="metric-value">{{ formatCurrency(member.monthlyPerformance) }}</span>
<span class="metric-value">{{ member.monthlyPerformance }}</span>
</div>
</div>
@@ -147,6 +147,9 @@
</div>
</main>
<!-- Loading 组件 -->
<Loading :visible="isLoading" text="数据加载中..." />
</div>
</template>
@@ -163,16 +166,18 @@
import ProblemRanking from './components/ProblemRanking.vue'
import seniorManager from './components/seniorManager.vue'
import UserDropdown from '@/components/UserDropdown.vue'
import Loading from '@/components/Loading.vue'
import {
getOverallCenterPerformance, getTotalGroupCount, getCenterConversionRate, getTotalCallCount, getNewCustomer
, getDepositConversionRate, getCustomerTypeDistribution, getUrgentNeedToAddress, getCenterAdvancedManagerList, getTeamRanking,
getTeamRankingInfo, getConversionRateVsAverage
} from '@/api/secondTop.js'
import { useRouter } from 'vue-router'
import { useUserStore } from '@/stores/user.js'
// 组别数据
const groups = ref([])
// loading 状态
const isLoading = ref(false)
// 路由实例
const router = useRouter();
@@ -455,8 +460,8 @@ const conversionRateVsAverage = ref({})
phone: '***-****-****', // 隐藏手机号
status: member.rank === 1 ? 'excellent' : member.rank === 2 ? 'good' : 'average',
joinDate: '2023-01-01', // 默认入职日期
todayPerformance: member.today_performance || 0,
monthlyPerformance: member.monthly_performance || 0,
todayPerformance: member.today_deals,
monthlyPerformance: member.monthly_deals,
conversionRate: parseFloat(member.conversion_rate_this_period) || 0,
callCount: member.call_count_this_period || 0,
newClients: member.new_customers_this_period || 0,
@@ -506,17 +511,24 @@ const conversionRateVsAverage = ref({})
return statusMap[status] || '未知'
}
onMounted(async () => {
await CenterOverallCenterPerformance()
await CenterTotalGroupCount()
await CenterConversionRate()
await CenterTotalCallCount()
await CenterNewCustomer()
await CenterDepositConversionRate()
await CenterCustomerType()
await CenterUrgentNeedToAddress()
await CenterConversionRateVsAverage()
await CenterSeniorManagerList()
await CenterGroupList('all') // 初始化加载全部高级经理数据
try {
isLoading.value = true
await CenterOverallCenterPerformance()
await CenterTotalGroupCount()
await CenterConversionRate()
await CenterTotalCallCount()
await CenterNewCustomer()
await CenterDepositConversionRate()
await CenterCustomerType()
await CenterUrgentNeedToAddress()
await CenterConversionRateVsAverage()
await CenterSeniorManagerList()
await CenterGroupList('all') // 初始化加载全部高级经理数据
} catch (error) {
console.error('数据加载失败:', error)
} finally {
isLoading.value = false
}
})
</script>