import React, { useState, useEffect } from 'react'; import { Card, DatePicker, Select, Spin, Statistic, Row, Col, Tabs, Button } from 'antd'; import { Area, AreaChart, Bar, BarChart, Line, LineChart, Pie, PieChart, ResponsiveContainer, Tooltip, XAxis, YAxis, CartesianGrid, Legend } from 'recharts'; import { useParams } from 'react-router-dom'; const { RangePicker } = DatePicker; const { Option } = Select; const { TabPane } = Tabs; interface SalesData { date: string; sales: number; orders: number; customers: number; } interface ProductData { name: string; sales: number; quantity: number; } interface TrafficData { date: string; visitors: number; pageViews: number; bounceRate: number; } interface ConversionData { name: string; value: number; } const IndependentSiteAnalytics: React.FC = () => { const { id } = useParams<{ id: string }>(); const [loading, setLoading] = useState(false); const [dateRange, setDateRange] = useState(null); const [timeRange, setTimeRange] = useState('30d'); const [salesData, setSalesData] = useState([]); const [productData, setProductData] = useState([]); const [trafficData, setTrafficData] = useState([]); const [conversionData, setConversionData] = useState([]); const [summary, setSummary] = useState({ totalSales: 0, totalOrders: 0, totalCustomers: 0, conversionRate: 0, }); useEffect(() => { fetchAnalyticsData(); }, [id, timeRange, dateRange]); const fetchAnalyticsData = async () => { setLoading(true); // 模拟API调用 setTimeout(() => { // 模拟销售数据 const mockSalesData: SalesData[] = Array.from({ length: 30 }, (_, i) => ({ date: `2026-03-${String(i + 1).padStart(2, '0')}`, sales: Math.random() * 1000 + 500, orders: Math.random() * 50 + 10, customers: Math.random() * 30 + 5, })); // 模拟商品数据 const mockProductData: ProductData[] = [ { name: 'Product 1', sales: 1500, quantity: 15 }, { name: 'Product 2', sales: 2000, quantity: 20 }, { name: 'Product 3', sales: 1000, quantity: 10 }, { name: 'Product 4', sales: 500, quantity: 5 }, { name: 'Product 5', sales: 800, quantity: 8 }, ]; // 模拟流量数据 const mockTrafficData: TrafficData[] = Array.from({ length: 30 }, (_, i) => ({ date: `2026-03-${String(i + 1).padStart(2, '0')}`, visitors: Math.random() * 500 + 100, pageViews: Math.random() * 1000 + 500, bounceRate: Math.random() * 50 + 20, })); // 模拟转化数据 const mockConversionData: ConversionData[] = [ { name: '已转化', value: 20 }, { name: '未转化', value: 80 }, ]; // 模拟汇总数据 const mockSummary = { totalSales: 5800, totalOrders: 78, totalCustomers: 55, conversionRate: 20, }; setSalesData(mockSalesData); setProductData(mockProductData); setTrafficData(mockTrafficData); setConversionData(mockConversionData); setSummary(mockSummary); setLoading(false); }, 1000); }; const handleTimeRangeChange = (value: string) => { setTimeRange(value); }; const handleDateRangeChange = (dates: any) => { setDateRange(dates); }; return (

独立站数据分析

{loading ? (
) : ( <> `${name}: ${(percent * 100).toFixed(0)}%`} outerRadius={150} fill="#8884d8" dataKey="value" />

地域分布图表

购买行为图表

)}
); }; export default IndependentSiteAnalytics;