Добавлены ключевые метрики склада, умные рекомендации и быстрые действия в компонент FulfillmentStatisticsDashboard. Перенесены данные из FulfillmentWarehouse и улучшены стили для более наглядного отображения информации. Обновлены иконки и структура кода для повышения удобства использования.

This commit is contained in:
Veronika Smirnova
2025-07-22 16:42:40 +03:00
parent 1ede90cfa2
commit 0a790c538b
2 changed files with 280 additions and 242 deletions

View File

@ -27,6 +27,9 @@ import {
DollarSign, DollarSign,
Users, Users,
Truck, Truck,
Warehouse,
Eye,
EyeOff,
} from "lucide-react"; } from "lucide-react";
export function FulfillmentStatisticsDashboard() { export function FulfillmentStatisticsDashboard() {
@ -38,6 +41,9 @@ export function FulfillmentStatisticsDashboard() {
marketplaces: true, marketplaces: true,
analytics: false, analytics: false,
performance: false, performance: false,
warehouseMetrics: true,
smartRecommendations: true,
quickActions: true,
}); });
// Мок данные для статистики // Мок данные для статистики
@ -67,6 +73,13 @@ export function FulfillmentStatisticsDashboard() {
satisfactionTrend: 5, satisfactionTrend: 5,
}; };
// Данные склада (перенесено из fulfillment-warehouse)
const warehouseStats = {
efficiency: 94.5,
turnover: 2.3,
utilizationRate: 87,
};
const formatNumber = (num: number) => { const formatNumber = (num: number) => {
return num.toLocaleString("ru-RU"); return num.toLocaleString("ru-RU");
}; };
@ -535,6 +548,135 @@ export function FulfillmentStatisticsDashboard() {
</Card> </Card>
)} )}
</div> </div>
{/* Ключевые метрики склада (перенесено из fulfillment-warehouse) */}
<div>
<SectionHeader
title="Ключевые метрики склада"
section="warehouseMetrics"
color="text-blue-400"
/>
{expandedSections.warehouseMetrics && (
<Card className="bg-gradient-to-r from-slate-900/40 to-slate-800/40 border-slate-700/50">
<div className="p-6">
<div className="flex items-center justify-between">
<div className="flex items-center space-x-4">
<div className="p-3 bg-gradient-to-r from-blue-500/20 to-purple-500/20 rounded-xl border border-blue-400/20">
<Warehouse className="h-6 w-6 text-blue-400" />
</div>
<div className="grid grid-cols-2 gap-6">
<div className="flex items-center space-x-3">
<span className="text-sm text-slate-400 font-medium">Эффективность</span>
<Badge variant="secondary" className="bg-green-500/20 text-green-300 font-bold">
{warehouseStats.efficiency}%
</Badge>
</div>
<div className="flex items-center space-x-3">
<span className="text-sm text-slate-400 font-medium">Оборачиваемость</span>
<Badge variant="secondary" className="bg-blue-500/20 text-blue-300 font-bold">
{warehouseStats.turnover}x
</Badge>
</div>
</div>
</div>
<div className="text-right">
<div className="text-sm text-slate-400 font-medium mb-1">Загрузка склада</div>
<div className="text-3xl font-bold text-white">{warehouseStats.utilizationRate}%</div>
</div>
</div>
</div>
</Card>
)}
</div>
{/* Умные рекомендации склада (перенесено из fulfillment-warehouse) */}
<div>
<SectionHeader
title="Умные рекомендации склада"
section="smartRecommendations"
color="text-green-400"
/>
{expandedSections.smartRecommendations && (
<Card className="glass-card p-6">
<div className="flex items-center justify-between mb-4">
<div className="flex items-center space-x-3">
<div className="p-2 bg-gradient-to-r from-green-500/20 to-blue-500/20 rounded-xl">
<Zap className="h-5 w-5 text-green-400" />
</div>
<h3 className="text-lg font-semibold text-white">Рекомендации по складу</h3>
</div>
<Badge variant="secondary" className="bg-green-500/20 text-green-300">
AI-анализ
</Badge>
</div>
<div className="grid grid-cols-1 md:grid-cols-3 gap-4">
<div className="p-4 bg-white/5 rounded-xl border border-white/10">
<div className="flex items-center space-x-2 mb-2">
<Target className="h-4 w-4 text-yellow-400" />
<span className="text-sm font-medium text-yellow-400">Оптимизация</span>
</div>
<p className="text-xs text-white/70">
Рекомендуется увеличить запас расходников на 15% для покрытия пикового спроса
</p>
</div>
<div className="p-4 bg-white/5 rounded-xl border border-white/10">
<div className="flex items-center space-x-2 mb-2">
<Activity className="h-4 w-4 text-blue-400" />
<span className="text-sm font-medium text-blue-400">Прогноз</span>
</div>
<p className="text-xs text-white/70">
Ожидается рост возвратов на 12% в следующем месяце. Подготовьте дополнительные места
</p>
</div>
<div className="p-4 bg-white/5 rounded-xl border border-white/10">
<div className="flex items-center space-x-2 mb-2">
<BarChart3 className="h-4 w-4 text-purple-400" />
<span className="text-sm font-medium text-purple-400">Тренд</span>
</div>
<p className="text-xs text-white/70">
Эффективность обработки товаров выросла на 8% за последний месяц
</p>
</div>
</div>
</Card>
)}
</div>
{/* Быстрые действия (перенесено из fulfillment-warehouse) */}
<div>
<SectionHeader
title="Быстрые действия"
section="quickActions"
color="text-orange-400"
/>
{expandedSections.quickActions && (
<Card className="glass-card p-6">
<div className="flex items-center justify-between mb-4">
<h3 className="text-lg font-semibold text-white">Управление складом</h3>
<div className="flex space-x-2">
<Button size="sm" variant="outline" className="border-white/20 text-white/70 hover:bg-white/10">
<Eye className="h-4 w-4 mr-2" />
Обзор
</Button>
<Button size="sm" variant="outline" className="border-white/20 text-white/70 hover:bg-white/10">
<Activity className="h-4 w-4 mr-2" />
Отчеты
</Button>
</div>
</div>
<div className="text-center py-8">
<Package className="h-12 w-12 text-white/40 mx-auto mb-4" />
<p className="text-white/60 text-sm">
Основная функциональность склада будет добавлена на следующем этапе
</p>
</div>
</Card>
)}
</div>
</div> </div>
</div> </div>
</main> </main>

View File

@ -153,16 +153,17 @@ export function FulfillmentWarehouseDashboard() {
<Sidebar /> <Sidebar />
<main className={`flex-1 ${getSidebarMargin()} px-6 py-4 overflow-y-auto transition-all duration-300`}> <main className={`flex-1 ${getSidebarMargin()} px-6 py-4 overflow-y-auto transition-all duration-300`}>
<div className="w-full"> <div className="w-full">
{/* Объединенный блок склада - ПЕРВЫЙ СВЕРХУ */} {/* Блок состояния склада с shadcn/ui */}
<div className="mb-6"> <Card className="mb-6 bg-gradient-to-br from-slate-900/50 to-slate-800/30 border-slate-700/50">
<SectionHeader <div className="p-6">
title="Состояние склада" <SectionHeader
section="warehouse" title="Состояние склада"
badge={warehouseStats.currentProducts + warehouseStats.currentGoods + warehouseStats.currentFulfillmentSupplies + warehouseStats.currentSellerSupplies} section="warehouse"
color="text-blue-400" badge={warehouseStats.currentProducts + warehouseStats.currentGoods + warehouseStats.currentFulfillmentSupplies + warehouseStats.currentSellerSupplies}
/> color="text-blue-400"
{expandedSections.warehouse && ( />
<div className="grid grid-cols-6 gap-4"> {expandedSections.warehouse && (
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-6 gap-4 mt-4">
{/* Уникальный модуль "Продукты" */} {/* Уникальный модуль "Продукты" */}
<div className="min-w-0 relative group"> <div className="min-w-0 relative group">
<div className="bg-gradient-to-br from-blue-500/10 via-blue-400/5 to-cyan-500/10 backdrop-blur border border-blue-400/30 rounded-2xl p-4 hover:from-blue-500/20 hover:to-cyan-500/20 transition-all duration-500 hover:scale-[1.02] hover:shadow-2xl hover:shadow-blue-500/20"> <div className="bg-gradient-to-br from-blue-500/10 via-blue-400/5 to-cyan-500/10 backdrop-blur border border-blue-400/30 rounded-2xl p-4 hover:from-blue-500/20 hover:to-cyan-500/20 transition-all duration-500 hover:scale-[1.02] hover:shadow-2xl hover:shadow-blue-500/20">
@ -273,267 +274,162 @@ export function FulfillmentWarehouseDashboard() {
</div> </div>
</div> </div>
{/* Оптимизированный модуль "Товары" */} {/* Компактный модуль "Товары" - той же высоты что и "Продукты" */}
<div className="min-w-0 relative group"> <div className="min-w-0 relative group">
<div className="bg-gradient-to-br from-slate-800/60 via-slate-700/40 to-slate-800/60 backdrop-blur-xl border border-slate-600/30 rounded-3xl p-6 hover:border-cyan-400/40 transition-all duration-500 hover:shadow-2xl hover:shadow-cyan-500/10 relative overflow-hidden"> <div className="bg-gradient-to-br from-cyan-500/10 via-teal-400/5 to-emerald-500/10 backdrop-blur border border-cyan-400/30 rounded-2xl p-4 hover:from-cyan-500/20 hover:to-emerald-500/20 transition-all duration-500 hover:shadow-2xl hover:shadow-cyan-500/20 relative overflow-hidden">
{/* Subtle animated background */} {/* Заголовок с иконкой */}
<div className="absolute inset-0 bg-gradient-to-br from-cyan-500/5 via-transparent to-emerald-500/5 opacity-0 group-hover:opacity-100 transition-opacity duration-500"></div> <div className="flex items-center justify-between mb-3">
<div className="flex items-center space-x-2">
{/* Header with improved spacing and typography */}
<div className="flex items-center justify-between mb-6">
<div className="flex items-center space-x-3">
<div className="relative"> <div className="relative">
<div className="p-3 bg-gradient-to-br from-cyan-500/20 to-cyan-600/20 rounded-2xl border border-cyan-400/20 shadow-lg shadow-cyan-500/10"> <div className="p-2 bg-cyan-500/20 rounded-xl border border-cyan-400/30 relative">
<Package className="h-5 w-5 text-cyan-300" /> <Package className="h-4 w-4 text-cyan-400" />
</div> </div>
<div className="absolute -top-1 -right-1 w-3 h-3 bg-emerald-400 rounded-full border-2 border-slate-800"></div>
</div>
<div>
<h3 className="text-cyan-100 text-lg font-bold tracking-wide">Товары</h3>
<p className="text-slate-400 text-xs">Складская обработка</p>
</div> </div>
<span className="text-cyan-100 text-sm font-semibold tracking-wide">ТОВАРЫ</span>
</div> </div>
{/* Enhanced efficiency indicator */} {/* Индикатор эффективности */}
<div className="relative"> <div className="relative w-8 h-8">
<div className="flex items-center space-x-2 bg-slate-700/50 rounded-full px-3 py-1.5 border border-slate-600/30"> <svg className="w-8 h-8 transform -rotate-90" viewBox="0 0 32 32">
<div className="w-2 h-2 bg-emerald-400 rounded-full"></div> <circle cx="16" cy="16" r="14" stroke="currentColor" strokeWidth="2" fill="none" className="text-cyan-900/30" />
<span className="text-emerald-300 text-sm font-semibold">{goodsData.efficiency}%</span> <circle
cx="16" cy="16" r="14"
stroke="currentColor"
strokeWidth="2"
fill="none"
strokeDasharray={`${goodsData.efficiency * 0.88} 88`}
className="text-cyan-400 transition-all duration-1000"
/>
</svg>
<div className="absolute inset-0 flex items-center justify-center">
<span className="text-[8px] font-bold text-cyan-300">{goodsData.efficiency}%</span>
</div> </div>
</div> </div>
</div> </div>
{/* Main value with improved typography */} {/* Основное значение */}
<div className="mb-6"> <div className="mb-3">
<div className="flex items-end space-x-3"> <div className="flex items-baseline space-x-2">
<span className="text-4xl font-black text-white tracking-tight leading-none"> <span className="text-2xl font-black text-white tracking-tight">
{formatNumber(warehouseStats.currentGoods)} {formatNumber(warehouseStats.currentGoods)}
</span> </span>
<div className="pb-1">
<span className="text-slate-400 text-sm font-medium">единиц</span>
</div>
</div>
<div className="mt-1">
<span className="text-slate-400 text-sm">Всего в процессе</span>
</div> </div>
</div> </div>
{/* Enhanced status cards */} {/* В обработке с числовым значением */}
<div className="grid grid-cols-2 gap-4 mb-6"> <div className="text-cyan-200/70 text-xs mb-2">
{/* Delivered status */} В обработке: <span className="text-white font-semibold">{formatNumber(goodsData.processing + goodsData.rejected)}</span>
<div className="bg-gradient-to-br from-emerald-500/10 to-green-500/10 border border-emerald-400/20 rounded-2xl p-4 hover:from-emerald-500/15 hover:to-green-500/15 transition-all duration-300">
<div className="flex items-center justify-between mb-2">
<div className="flex items-center space-x-2">
<div className="w-2 h-2 bg-emerald-400 rounded-full"></div>
<span className="text-emerald-300 text-xs font-semibold uppercase tracking-wide">Поставлено</span>
</div>
<div className="text-emerald-400/60 text-xs">
{((goodsData.processing / (goodsData.processing + goodsData.rejected)) * 100).toFixed(1)}%
</div>
</div>
<div className="text-emerald-100 text-xl font-bold">
{formatNumber(goodsData.processing)}
</div>
</div>
{/* Shipped status */}
<div className="bg-gradient-to-br from-blue-500/10 to-indigo-500/10 border border-blue-400/20 rounded-2xl p-4 hover:from-blue-500/15 hover:to-indigo-500/15 transition-all duration-300">
<div className="flex items-center justify-between mb-2">
<div className="flex items-center space-x-2">
<div className="w-2 h-2 bg-blue-400 rounded-full"></div>
<span className="text-blue-300 text-xs font-semibold uppercase tracking-wide">Отправлено</span>
</div>
<div className="text-blue-400/60 text-xs">
{((goodsData.rejected / (goodsData.processing + goodsData.rejected)) * 100).toFixed(1)}%
</div>
</div>
<div className="text-blue-100 text-xl font-bold">
{formatNumber(goodsData.rejected)}
</div>
</div>
</div> </div>
{/* Processing summary */} {/* Прогресс-бар */}
<div className="mb-4"> <div className="relative h-1.5 bg-cyan-900/30 rounded-full overflow-hidden">
<div className="flex items-center justify-between mb-2"> <div className="absolute inset-0 bg-gradient-to-r from-cyan-400 to-emerald-400 rounded-full" style={{
<span className="text-slate-300 text-sm font-medium">В обработке</span> width: `${(goodsData.processing / (goodsData.processing + goodsData.rejected)) * 100}%`
<span className="text-white text-lg font-bold"> }}></div>
{formatNumber(goodsData.processing + goodsData.rejected)} </div>
</span> <div className="flex justify-between text-[10px] text-cyan-300/60 mt-1">
</div> <span>Поставлено: {((goodsData.processing / (goodsData.processing + goodsData.rejected)) * 100).toFixed(0)}%</span>
<span>Отправлено: {((goodsData.rejected / (goodsData.processing + goodsData.rejected)) * 100).toFixed(0)}%</span>
{/* Enhanced progress bar */}
<div className="relative h-2.5 bg-slate-700/50 rounded-full overflow-hidden border border-slate-600/30">
<div
className="absolute inset-0 bg-gradient-to-r from-emerald-400 via-cyan-400 to-blue-400 rounded-full transition-all duration-1000 ease-out"
style={{
width: `${(goodsData.processing / (goodsData.processing + goodsData.rejected)) * 100}%`
}}
>
<div className="absolute inset-0 bg-gradient-to-r from-white/20 via-transparent to-white/20 rounded-full"></div>
</div>
</div>
{/* Progress labels */}
<div className="flex justify-between mt-2">
<span className="text-emerald-300 text-xs font-medium">
{formatNumber(goodsData.processing)} поставлено
</span>
<span className="text-blue-300 text-xs font-medium">
{formatNumber(goodsData.rejected)} отправлено
</span>
</div>
</div> </div>
{/* Hover effect overlay */} {/* Декоративные элементы */}
<div className="absolute inset-0 bg-gradient-to-br from-cyan-500/5 via-transparent to-emerald-500/5 rounded-3xl opacity-0 group-hover:opacity-100 transition-opacity duration-500 pointer-events-none"></div> <div className="absolute top-1 left-1 w-8 h-8 bg-gradient-to-br from-cyan-400/10 to-transparent rounded-full"></div>
<div className="absolute bottom-1 right-1 w-6 h-6 bg-gradient-to-tl from-emerald-400/10 to-transparent rounded-full"></div>
</div> </div>
</div> </div>
<StatsCard {/* Брак */}
title="Брак" <Card className="bg-gradient-to-br from-red-500/10 to-red-600/5 border-red-500/20 hover:border-red-400/30 transition-all duration-300">
value={formatNumber(warehouseStats.currentDefects)} <div className="p-4">
icon={AlertTriangle} <div className="flex items-center justify-between mb-3">
iconColor="text-red-400" <div className="flex items-center space-x-2">
iconBg="bg-red-500/20" <div className="p-2 bg-red-500/20 rounded-xl">
trend={{ value: Math.abs(warehouseStats.defectsTrend), isPositive: warehouseStats.defectsTrend < 0 }} <AlertTriangle className="h-4 w-4 text-red-400" />
subtitle="Требует утилизации" </div>
className="min-w-0" <span className="text-red-100 text-sm font-semibold">Брак</span>
/> </div>
<Badge variant="secondary" className="bg-red-500/20 text-red-300 text-xs">
<StatsCard -{Math.abs(warehouseStats.defectsTrend)}%
title="Возвраты с ПВЗ" </Badge>
value={formatNumber(warehouseStats.currentReturns)} </div>
icon={RotateCcw} <div className="text-2xl font-bold text-white mb-1">
iconColor="text-yellow-400" {formatNumber(warehouseStats.currentDefects)}
iconBg="bg-yellow-500/20" </div>
trend={{ value: warehouseStats.returnsTrend, isPositive: false }} <div className="text-red-200/60 text-xs">
subtitle="К обработке" Требует утилизации
className="min-w-0" </div>
/>
<StatsCard
title="Расходники ФФ"
value={formatNumber(warehouseStats.currentFulfillmentSupplies)}
icon={Wrench}
iconColor="text-purple-400"
iconBg="bg-purple-500/20"
subtitle="Упаковка, этикетки, пленка"
className="min-w-0"
/>
<StatsCard
title="Расходники селлеров"
value={formatNumber(warehouseStats.currentSellerSupplies)}
icon={Users}
iconColor="text-green-400"
iconBg="bg-green-500/20"
subtitle="Материалы клиентов"
className="min-w-0"
/>
</div>
)}
</div>
{/* Компактный заголовок с ключевыми метриками */}
<div className="mb-6 flex-shrink-0">
<div className="flex items-center justify-between mb-4">
<div className="flex items-center space-x-4">
<div className="p-2 bg-gradient-to-r from-blue-500/20 to-purple-500/20 rounded-xl">
<Warehouse className="h-6 w-6 text-blue-400" />
</div>
<div>
<div className="flex items-center space-x-3">
<span className="text-sm text-white/60">Эффективность</span>
<span className="text-lg font-bold text-green-400">{warehouseStats.efficiency}%</span>
</div> </div>
<div className="flex items-center space-x-3"> </Card>
<span className="text-sm text-white/60">Оборачиваемость</span>
<span className="text-lg font-bold text-blue-400">{warehouseStats.turnover}x</span> {/* Возвраты с ПВЗ */}
<Card className="bg-gradient-to-br from-yellow-500/10 to-yellow-600/5 border-yellow-500/20 hover:border-yellow-400/30 transition-all duration-300">
<div className="p-4">
<div className="flex items-center justify-between mb-3">
<div className="flex items-center space-x-2">
<div className="p-2 bg-yellow-500/20 rounded-xl">
<RotateCcw className="h-4 w-4 text-yellow-400" />
</div>
<span className="text-yellow-100 text-sm font-semibold">Возвраты с ПВЗ</span>
</div>
<Badge variant="secondary" className="bg-yellow-500/20 text-yellow-300 text-xs">
+{warehouseStats.returnsTrend}%
</Badge>
</div>
<div className="text-2xl font-bold text-white mb-1">
{formatNumber(warehouseStats.currentReturns)}
</div>
<div className="text-yellow-200/60 text-xs">
К обработке
</div>
</div> </div>
</Card>
{/* Расходники ФФ */}
<Card className="bg-gradient-to-br from-purple-500/10 to-purple-600/5 border-purple-500/20 hover:border-purple-400/30 transition-all duration-300">
<div className="p-4">
<div className="flex items-center justify-between mb-3">
<div className="flex items-center space-x-2">
<div className="p-2 bg-purple-500/20 rounded-xl">
<Wrench className="h-4 w-4 text-purple-400" />
</div>
<span className="text-purple-100 text-sm font-semibold">Расходники ФФ</span>
</div>
</div>
<div className="text-2xl font-bold text-white mb-1">
{formatNumber(warehouseStats.currentFulfillmentSupplies)}
</div>
<div className="text-purple-200/60 text-xs">
Упаковка, этикетки, пленка
</div>
</div>
</Card>
{/* Расходники селлеров */}
<Card className="bg-gradient-to-br from-green-500/10 to-green-600/5 border-green-500/20 hover:border-green-400/30 transition-all duration-300">
<div className="p-4">
<div className="flex items-center justify-between mb-3">
<div className="flex items-center space-x-2">
<div className="p-2 bg-green-500/20 rounded-xl">
<Users className="h-4 w-4 text-green-400" />
</div>
<span className="text-green-100 text-sm font-semibold">Расходники селлеров</span>
</div>
</div>
<div className="text-2xl font-bold text-white mb-1">
{formatNumber(warehouseStats.currentSellerSupplies)}
</div>
<div className="text-green-200/60 text-xs">
Материалы клиентов
</div>
</div>
</Card>
</div> </div>
</div> )}
<div className="text-right">
<div className="text-sm text-white/60">Загрузка склада</div>
<div className="text-2xl font-bold text-white">{warehouseStats.utilizationRate}%</div>
</div>
</div> </div>
</div> </Card>
{/* Нестандартные решения */}
<div className="mt-8 space-y-6">
{/* Интеллектуальные инсайты */}
<Card className="glass-card p-6">
<div className="flex items-center justify-between mb-4">
<div className="flex items-center space-x-3">
<div className="p-2 bg-gradient-to-r from-green-500/20 to-blue-500/20 rounded-xl">
<Zap className="h-5 w-5 text-green-400" />
</div>
<h3 className="text-lg font-semibold text-white">Умные рекомендации</h3>
</div>
<Badge variant="secondary" className="bg-green-500/20 text-green-300">
AI-анализ
</Badge>
</div>
<div className="grid grid-cols-1 md:grid-cols-3 gap-4">
<div className="p-4 bg-white/5 rounded-xl border border-white/10">
<div className="flex items-center space-x-2 mb-2">
<Target className="h-4 w-4 text-yellow-400" />
<span className="text-sm font-medium text-yellow-400">Оптимизация</span>
</div>
<p className="text-xs text-white/70">
Рекомендуется увеличить запас расходников на 15% для покрытия пикового спроса
</p>
</div>
<div className="p-4 bg-white/5 rounded-xl border border-white/10">
<div className="flex items-center space-x-2 mb-2">
<Activity className="h-4 w-4 text-blue-400" />
<span className="text-sm font-medium text-blue-400">Прогноз</span>
</div>
<p className="text-xs text-white/70">
Ожидается рост возвратов на 12% в следующем месяце. Подготовьте дополнительные места
</p>
</div>
<div className="p-4 bg-white/5 rounded-xl border border-white/10">
<div className="flex items-center space-x-2 mb-2">
<BarChart3 className="h-4 w-4 text-purple-400" />
<span className="text-sm font-medium text-purple-400">Тренд</span>
</div>
<p className="text-xs text-white/70">
Эффективность обработки товаров выросла на 8% за последний месяц
</p>
</div>
</div>
</Card>
{/* Быстрые действия */}
<Card className="glass-card p-6">
<div className="flex items-center justify-between mb-4">
<h3 className="text-lg font-semibold text-white">Быстрые действия</h3>
<div className="flex space-x-2">
<Button size="sm" variant="outline" className="border-white/20 text-white/70 hover:bg-white/10">
<Eye className="h-4 w-4 mr-2" />
Обзор
</Button>
<Button size="sm" variant="outline" className="border-white/20 text-white/70 hover:bg-white/10">
<Activity className="h-4 w-4 mr-2" />
Отчеты
</Button>
</div>
</div>
<div className="text-center py-8">
<Package className="h-12 w-12 text-white/40 mx-auto mb-4" />
<p className="text-white/60 text-sm">
Основная функциональность склада будет добавлена на следующем этапе
</p>
</div>
</Card>
</div>
</div> </div>
</main> </main>
</div> </div>