import { useState } from 'react' 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 { Activity, BadgePercent, Users, Zap, Target } from 'lucide-react' const PERIOD_OPTIONS = [ { value: 'today', label: '今日' }, { value: '7d', label: '近 7 天' }, { value: '30d', label: '近 30 天' }, { value: 'quarter', label: '本季度' }, ] as const export function AnalyticsPage() { const [period, setPeriod] = useState<(typeof PERIOD_OPTIONS)[number]['value']>('30d') const { data, isLoading, isError, refetch } = useQuery({ queryKey: ['analytics', period], queryFn: () => getAnalytics({ period }), }) if (isLoading) return if (isError || !data) return refetch()} /> const k = data.kpis return ( {PERIOD_OPTIONS.map((option) => ( setPeriod(option.value)} className={`rounded-[7px] px-3 py-1.5 text-xs font-medium transition ${ period === option.value ? 'bg-slate-900 text-white shadow-sm' : 'text-slate-500 hover:bg-slate-50 hover:text-slate-900' }`} > {option.label} ))} } /> 增长与转化 观察客户增长速度、渠道贡献和阶段流失 产品与团队效率 比较产品热度、响应速度和团队转化结果 ({ 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}))} {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} 分))} ) }
观察客户增长速度、渠道贡献和阶段流失
比较产品热度、响应速度和团队转化结果
需要优先处理的客户、跟进和市场变化
{data.bossBoard.bestChannel.name}
当前转化率 {data.bossBoard.bestChannel.conversion}%