import { useQuery } from '@tanstack/react-query' import { PageLoading, ErrorState } from '@/components/ui/feedback' import { PageHeader } from '@/components/common/PageHeader' import { Badge } from '@/components/ui/badge' import { Card, CardHeader } from '@/components/ui/card' import { StatCard } from '@/components/common/StatCard' import { LiveDataBadge } from '@/components/common/LiveDataBadge' import { CountryFlag } from '@/components/common/CountryFlag' import { ChartCard, TrendChart, DonutChart, FunnelChart, RankBars, SimpleBarChart } from '@/components/charts' import { getAnalytics } from '@/services/api/org' import { formatNumber } from '@/utils/format' import { Activity, BadgePercent, TrendingUp, Users, Zap, Timer, AlertTriangle, Target } from 'lucide-react' export function AnalyticsPage() { const { data, isLoading, isError, refetch } = useQuery({ queryKey: ['analytics'], queryFn: () => getAnalytics(), }) if (isLoading) return if (isError || !data) return refetch()} /> const k = data.kpis return (
} extra={
{['today', '7d', '30d', 'quarter'].map((p) => ( ))}
} />
({ name: p.product, value: p.inquiries }))} /> ({ name: r.name, value: r.avgResponseMin }))} unit="分钟" max={30} /> ({ name: r.name, value: r.rate }))} unit="%" />
{/* 老板看板 */}

老板看板

{data.bossBoard.urgentHighValue.map((c) => (
{c.name} {c.reason.slice(0, 20)}…
))}
{data.bossBoard.overdueMembers.map((m) => (
{m.name}{m.overdueCount} 项逾期
))}
{data.bossBoard.fastestCountries.map((c) => (
+{(c.growth * 100).toFixed(0)}%
))}

{data.bossBoard.bestChannel.name}

转化率 {data.bossBoard.bestChannel.conversion}%

{data.bossBoard.topProducts.map((p) => (
{p.product}{p.inquiries} 次询盘
))}
{data.bossBoard.churningHighIntent.map((c) => (
{c.name} {c.daysSilent}天未联系 · 意向{c.intentScore}分
))}
) }