"use client"; import { useState } from "react"; import { Card } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { Sidebar } from "@/components/dashboard/sidebar"; import { useSidebar } from "@/hooks/useSidebar"; import { StatsCard } from "@/components/supplies/ui/stats-card"; import { StatsGrid } from "@/components/supplies/ui/stats-grid"; import { BarChart3, TrendingUp, AlertTriangle, Send, Archive, Clock, ShoppingBag, ChevronDown, ChevronUp, Target, Activity, Zap, PieChart, Calendar, Package, DollarSign, Users, Truck, } from "lucide-react"; export function FulfillmentStatisticsDashboard() { const { getSidebarMargin } = useSidebar(); // Состояния для свёртывания блоков const [expandedSections, setExpandedSections] = useState({ allTime: true, marketplaces: true, analytics: false, performance: false, }); // Мок данные для статистики const statisticsData = { // Данные за все время totalProducts: 15678, totalDefects: 145, totalSupplies: 2341, totalRevenue: 45670000, totalOrders: 8934, // Отправка на маркетплейсы sentToWildberries: 8934, sentToOzon: 4523, sentToOthers: 1876, // Аналитика производительности avgProcessingTime: 2.4, defectRate: 0.92, returnRate: 4.3, customerSatisfaction: 4.8, // Тренды revenueTrend: 18, ordersTrend: 12, defectsTrend: -8, satisfactionTrend: 5, }; const formatNumber = (num: number) => { return num.toLocaleString("ru-RU"); }; const formatCurrency = (num: number) => { return new Intl.NumberFormat("ru-RU", { style: "currency", currency: "RUB", minimumFractionDigits: 0, maximumFractionDigits: 0, }).format(num); }; const toggleSection = (section: keyof typeof expandedSections) => { setExpandedSections((prev) => ({ ...prev, [section]: !prev[section], })); }; // Компонент заголовка секции с кнопкой свёртывания const SectionHeader = ({ title, section, badge, color = "text-white", }: { title: string; section: keyof typeof expandedSections; badge?: number | string; color?: string; }) => (

{title}

{badge && ( {badge} )}
); return (
{/* Компактный заголовок с ключевыми показателями */}
Общий доход {formatCurrency(statisticsData.totalRevenue)}
Качество {statisticsData.customerSatisfaction}/5.0
Уровень брака
{statisticsData.defectRate}%
{/* Блоки статистики */}
{/* Накопленная статистика */}
{expandedSections.allTime && (
{/* Дополнительные метрики */}
)}
{/* Отгрузка на площадки */}
{expandedSections.marketplaces && (
{/* Диаграмма распределения */}

Распределение отгрузок

WB
{( (statisticsData.sentToWildberries / (statisticsData.sentToWildberries + statisticsData.sentToOzon + statisticsData.sentToOthers)) * 100 ).toFixed(1)} %
Ozon
{( (statisticsData.sentToOzon / (statisticsData.sentToWildberries + statisticsData.sentToOzon + statisticsData.sentToOthers)) * 100 ).toFixed(1)} %
Другие
{( (statisticsData.sentToOthers / (statisticsData.sentToWildberries + statisticsData.sentToOzon + statisticsData.sentToOthers)) * 100 ).toFixed(1)} %
{/* Тренды по площадкам */}

Тренды роста

Wildberries
+12%
Ozon
+8%
Другие
+15%
)}
{/* Аналитика производительности */}
{expandedSections.performance && ( )}
{/* AI-аналитика и прогнозы */}
{expandedSections.analytics && (

Прогнозы и рекомендации

AI-анализ
Прогноз роста

Ожидается увеличение объемов на 23% в следующем квартале

Оптимизация

Возможно снижение времени обработки на 18% при автоматизации

Сезонность

Пиковые нагрузки ожидаются в ноябре-декабре (+45%)

)}
); }