diff --git a/src/app/fulfillment-supplies/page.tsx b/src/app/fulfillment-supplies/page.tsx new file mode 100644 index 0000000..f86db01 --- /dev/null +++ b/src/app/fulfillment-supplies/page.tsx @@ -0,0 +1,10 @@ +import { AuthGuard } from "@/components/auth-guard" +import { FulfillmentSuppliesDashboard } from "@/components/fulfillment-supplies/fulfillment-supplies-dashboard" + +export default function FulfillmentSuppliesPage() { + return ( + + + + ) +} \ No newline at end of file diff --git a/src/components/dashboard/sidebar.tsx b/src/components/dashboard/sidebar.tsx index f613a82..2ad391e 100644 --- a/src/components/dashboard/sidebar.tsx +++ b/src/components/dashboard/sidebar.tsx @@ -83,7 +83,12 @@ export function Sidebar() { } const handleSuppliesClick = () => { - router.push('/supplies') + // Для фулфилмент кабинетов используем новый роут + if (user?.organization?.type === 'FULFILLMENT') { + router.push('/fulfillment-supplies') + } else { + router.push('/supplies') + } } const handlePartnersClick = () => { @@ -98,7 +103,7 @@ export function Sidebar() { const isServicesActive = pathname.startsWith('/services') const isWarehouseActive = pathname.startsWith('/warehouse') const isEmployeesActive = pathname.startsWith('/employees') - const isSuppliesActive = pathname.startsWith('/supplies') + const isSuppliesActive = pathname.startsWith('/supplies') || pathname.startsWith('/fulfillment-supplies') const isPartnersActive = pathname.startsWith('/partners') return ( @@ -265,8 +270,8 @@ export function Sidebar() { )} - {/* Поставки - только для селлеров */} - {user?.organization?.type === 'SELLER' && ( + {/* Поставки - для селлеров и фулфилмент */} + {(user?.organization?.type === 'SELLER' || user?.organization?.type === 'FULFILLMENT') && ( + + + {/* Компактная статистика */} +
+ +
+
+ +
+
+

Поставок

+

{filteredSupplies.length}

+
+
+
+ + +
+
+ +
+
+

Сумма

+

{formatCurrency(getTotalAmount())}

+
+
+
+ + +
+
+ +
+
+

Единиц

+

{getTotalQuantity()}

+
+
+
+ + +
+
+ +
+
+

В пути

+

+ {filteredSupplies.filter(s => s.status === 'in-transit').length} +

+
+
+
+
+ + {/* Компактные фильтры */} +
+
+ + + + +
+
+ + {/* Компактная таблица */} + +
+
+ + + + + + + + + + + + + + + {filteredSupplies.map((supply) => ( + + + + + + + + + + + ))} + +
ТипНаименованиеКатегорияКол-воПоставщикДатаСуммаСтатус
+
+ {getTypeIcon(supply.type)} +
+
+ {supply.name} + + {supply.category} + + {supply.quantity} + + {supply.supplier} + + {formatDate(supply.date)} + + {formatCurrency(supply.amount)} + + {getStatusBadge(supply.status)} +
+ + {filteredSupplies.length === 0 && ( +
+
+ +

Поставки не найдены

+

+ Измените фильтр или создайте новую поставку +

+
+
+ )} +
+
+
+ + ) +} \ No newline at end of file diff --git a/src/components/fulfillment-supplies/goods-supplies/goods-supplies-tab.tsx b/src/components/fulfillment-supplies/goods-supplies/goods-supplies-tab.tsx new file mode 100644 index 0000000..7cd5600 --- /dev/null +++ b/src/components/fulfillment-supplies/goods-supplies/goods-supplies-tab.tsx @@ -0,0 +1,47 @@ +"use client" + +import { useState } from 'react' +import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' +import { Building2, ShoppingCart } from 'lucide-react' + +// Импорты компонентов подразделов +import { FulfillmentSuppliesTab } from './fulfillment-supplies-tab' +import { MarketplaceSuppliesTab } from './marketplace-supplies-tab' + +export function GoodsSuppliesTab() { + const [activeSubTab, setActiveSubTab] = useState('fulfillment') + + return ( +
+ {/* Подвкладки */} +
+ + + + + Фулфилмент + + + + Маркетплейсы + + + + + + + + + + + +
+
+ ) +} \ No newline at end of file diff --git a/src/components/fulfillment-supplies/goods-supplies/marketplace-supplies-tab.tsx b/src/components/fulfillment-supplies/goods-supplies/marketplace-supplies-tab.tsx new file mode 100644 index 0000000..cb111ee --- /dev/null +++ b/src/components/fulfillment-supplies/goods-supplies/marketplace-supplies-tab.tsx @@ -0,0 +1,299 @@ +"use client" + +import { useState } from 'react' +import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' +import { Card } from '@/components/ui/card' +import { Button } from '@/components/ui/button' +import { Badge } from '@/components/ui/badge' +import { ShoppingCart, Package, Plus, Calendar, TrendingUp, AlertCircle, Building2 } from 'lucide-react' + +interface MarketplaceSupply { + id: string + name: string + marketplace: 'wildberries' | 'ozon' + category: string + quantity: number + status: 'planned' | 'in-transit' | 'delivered' | 'accepted' + date: string + warehouse: string + amount: number + sku: string +} + +const mockMarketplaceSupplies: MarketplaceSupply[] = [ + { + id: '1', + name: 'Наушники AirPods Pro', + marketplace: 'wildberries', + category: 'Аудио', + quantity: 30, + status: 'delivered', + date: '2024-01-20', + warehouse: 'WB Подольск', + amount: 750000, + sku: 'APL-AP-PRO2' + }, + { + id: '2', + name: 'Смарт часы Apple Watch', + marketplace: 'ozon', + category: 'Электроника', + quantity: 25, + status: 'in-transit', + date: '2024-01-22', + warehouse: 'Ozon Тверь', + amount: 1250000, + sku: 'APL-AW-S9' + }, + { + id: '3', + name: 'Зарядные устройства', + marketplace: 'wildberries', + category: 'Аксессуары', + quantity: 100, + status: 'accepted', + date: '2024-01-18', + warehouse: 'WB Электросталь', + amount: 350000, + sku: 'ACC-CHG-20W' + } +] + +export function MarketplaceSuppliesTab() { + const [activeMarketplace, setActiveMarketplace] = useState<'all' | 'wildberries' | 'ozon'>('all') + + const formatCurrency = (amount: number) => { + return new Intl.NumberFormat('ru-RU', { + style: 'currency', + currency: 'RUB', + minimumFractionDigits: 0 + }).format(amount) + } + + const formatDate = (dateString: string) => { + return new Date(dateString).toLocaleDateString('ru-RU', { + day: '2-digit', + month: '2-digit', + year: 'numeric' + }) + } + + const getStatusBadge = (status: string) => { + const statusConfig = { + planned: { variant: 'outline' as const, color: 'text-blue-300 border-blue-400/30', label: 'Запланировано' }, + 'in-transit': { variant: 'outline' as const, color: 'text-yellow-300 border-yellow-400/30', label: 'В пути' }, + delivered: { variant: 'outline' as const, color: 'text-green-300 border-green-400/30', label: 'Доставлено' }, + accepted: { variant: 'outline' as const, color: 'text-purple-300 border-purple-400/30', label: 'Принято' } + } + + const config = statusConfig[status as keyof typeof statusConfig] || statusConfig.planned + + return ( + + {config.label} + + ) + } + + const getMarketplaceBadge = (marketplace: string) => { + if (marketplace === 'wildberries') { + return ( + + Wildberries + + ) + } else if (marketplace === 'ozon') { + return ( + + Ozon + + ) + } + return null + } + + const filteredSupplies = activeMarketplace === 'all' + ? mockMarketplaceSupplies + : mockMarketplaceSupplies.filter(supply => supply.marketplace === activeMarketplace) + + const getTotalAmount = () => { + return filteredSupplies.reduce((sum, supply) => sum + supply.amount, 0) + } + + const getTotalQuantity = () => { + return filteredSupplies.reduce((sum, supply) => sum + supply.quantity, 0) + } + + return ( +
+ {/* Компактный заголовок */} +
+
+ + Маркетплейсы +
+ +
+ + {/* Компактная статистика */} +
+ +
+
+ +
+
+

Поставок

+

{filteredSupplies.length}

+
+
+
+ + +
+
+ +
+
+

Общая сумма

+

{formatCurrency(getTotalAmount())}

+
+
+
+ + +
+
+ +
+
+

Единиц товара

+

{getTotalQuantity()}

+
+
+
+ + +
+
+ +
+
+

В пути

+

+ {filteredSupplies.filter(s => s.status === 'in-transit').length} +

+
+
+
+
+ + {/* Фильтры по маркетплейсу */} +
+ Маркетплейс: +
+ + + +
+
+ + {/* Таблица поставок */} + +
+
+ + + + + + + + + + + + + + + + {filteredSupplies.map((supply) => ( + + + + + + + + + + + + ))} + +
МаркетплейсНаименованиеSKUКатегорияКоличествоСкладДатаСуммаСтатус
+ {getMarketplaceBadge(supply.marketplace)} + + {supply.name} + + {supply.sku} + + {supply.category} + + {supply.quantity} + + {supply.warehouse} + + {formatDate(supply.date)} + + {formatCurrency(supply.amount)} + + {getStatusBadge(supply.status)} +
+ + {filteredSupplies.length === 0 && ( +
+
+ +

Поставки не найдены

+

+ Измените фильтр или создайте новую поставку +

+
+
+ )} +
+
+
+
+ ) +} \ No newline at end of file diff --git a/src/components/fulfillment-supplies/materials-supplies/materials-supplies-tab.tsx b/src/components/fulfillment-supplies/materials-supplies/materials-supplies-tab.tsx new file mode 100644 index 0000000..4e256f7 --- /dev/null +++ b/src/components/fulfillment-supplies/materials-supplies/materials-supplies-tab.tsx @@ -0,0 +1,347 @@ +"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 { Input } from '@/components/ui/input' +import { Wrench, Plus, Calendar, TrendingUp, AlertCircle, Search, Filter } from 'lucide-react' + +interface MaterialSupply { + id: string + name: string + category: string + quantity: number + unit: string + status: 'planned' | 'in-transit' | 'delivered' | 'in-stock' + date: string + supplier: string + amount: number + description?: string + minStock: number + currentStock: number +} + +const mockMaterialSupplies: MaterialSupply[] = [ + { + id: '1', + name: 'Упаковочные коробки 30x20x10', + category: 'Упаковка', + quantity: 1000, + unit: 'шт', + status: 'delivered', + date: '2024-01-15', + supplier: 'ООО "УпакСервис"', + amount: 50000, + description: 'Картонные коробки для мелких товаров', + minStock: 200, + currentStock: 350 + }, + { + id: '2', + name: 'Пузырчатая пленка', + category: 'Защитная упаковка', + quantity: 500, + unit: 'м²', + status: 'in-transit', + date: '2024-01-20', + supplier: 'ИП Петров А.В.', + amount: 25000, + description: 'Пленка для защиты хрупких товаров', + minStock: 100, + currentStock: 80 + }, + { + id: '3', + name: 'Скотч упаковочный прозрачный', + category: 'Клейкая лента', + quantity: 200, + unit: 'рул', + status: 'planned', + date: '2024-01-25', + supplier: 'ООО "КлейТех"', + amount: 15000, + description: 'Прозрачный скотч 48мм x 66м', + minStock: 50, + currentStock: 25 + }, + { + id: '4', + name: 'Этикетки самоклеющиеся', + category: 'Маркировка', + quantity: 10000, + unit: 'шт', + status: 'in-stock', + date: '2024-01-10', + supplier: 'ООО "ЛейблПринт"', + amount: 30000, + description: 'Белые этикетки 100x70мм', + minStock: 2000, + currentStock: 3500 + } +] + +export function MaterialsSuppliesTab() { + const [searchTerm, setSearchTerm] = useState('') + const [categoryFilter, setCategoryFilter] = useState('all') + const [statusFilter, setStatusFilter] = useState('all') + + const formatCurrency = (amount: number) => { + return new Intl.NumberFormat('ru-RU', { + style: 'currency', + currency: 'RUB', + minimumFractionDigits: 0 + }).format(amount) + } + + const formatDate = (dateString: string) => { + return new Date(dateString).toLocaleDateString('ru-RU', { + day: '2-digit', + month: '2-digit', + year: 'numeric' + }) + } + + const getStatusBadge = (status: string) => { + const statusConfig = { + planned: { variant: 'outline' as const, color: 'text-blue-300 border-blue-400/30', label: 'Запланировано' }, + 'in-transit': { variant: 'outline' as const, color: 'text-yellow-300 border-yellow-400/30', label: 'В пути' }, + delivered: { variant: 'outline' as const, color: 'text-green-300 border-green-400/30', label: 'Доставлено' }, + 'in-stock': { variant: 'outline' as const, color: 'text-purple-300 border-purple-400/30', label: 'На складе' } + } + + const config = statusConfig[status as keyof typeof statusConfig] || statusConfig.planned + + return ( + + {config.label} + + ) + } + + const getStockStatusBadge = (currentStock: number, minStock: number) => { + if (currentStock <= minStock) { + return ( + + Низкий остаток + + ) + } else if (currentStock <= minStock * 1.5) { + return ( + + Требует заказа + + ) + } + return ( + + В норме + + ) + } + + const filteredSupplies = mockMaterialSupplies.filter(supply => { + const matchesSearch = supply.name.toLowerCase().includes(searchTerm.toLowerCase()) || + supply.category.toLowerCase().includes(searchTerm.toLowerCase()) || + supply.supplier.toLowerCase().includes(searchTerm.toLowerCase()) + + const matchesCategory = categoryFilter === 'all' || supply.category === categoryFilter + const matchesStatus = statusFilter === 'all' || supply.status === statusFilter + + return matchesSearch && matchesCategory && matchesStatus + }) + + const getTotalAmount = () => { + return filteredSupplies.reduce((sum, supply) => sum + supply.amount, 0) + } + + const getTotalQuantity = () => { + return filteredSupplies.reduce((sum, supply) => sum + supply.quantity, 0) + } + + const getLowStockCount = () => { + return mockMaterialSupplies.filter(supply => supply.currentStock <= supply.minStock).length + } + + const categories = Array.from(new Set(mockMaterialSupplies.map(supply => supply.category))) + + return ( +
+ {/* Компактный заголовок */} +
+
+ + Расходники +
+ +
+ + {/* Компактная статистика */} +
+ +
+
+ +
+
+

Поставок

+

{filteredSupplies.length}

+
+
+
+ + +
+
+ +
+
+

Сумма

+

{formatCurrency(getTotalAmount())}

+
+
+
+ + +
+
+ +
+
+

Единиц

+

{getTotalQuantity()}

+
+
+
+ + +
+
+ +
+
+

Низкий остаток

+

{getLowStockCount()}

+
+
+
+
+ + {/* Компактный поиск и фильтры */} +
+
+ + setSearchTerm(e.target.value)} + className="pl-7 h-8 text-sm glass-input text-white placeholder:text-white/40" + /> +
+ +
+ + + +
+
+ + {/* Компактная таблица расходников */} + +
+
+ + + + + + + + + + + + + + + {filteredSupplies.map((supply) => ( + + + + + + + + + + + ))} + +
НаименованиеКатегорияКол-воОстатокПоставщикДатаСуммаСтатус
+
+ {supply.name} + {supply.description && ( +

{supply.description}

+ )} +
+
+ {supply.category} + + {supply.quantity} {supply.unit} + +
+ {supply.currentStock} {supply.unit} + {getStockStatusBadge(supply.currentStock, supply.minStock)} +
+
+ {supply.supplier} + + {formatDate(supply.date)} + + {formatCurrency(supply.amount)} + + {getStatusBadge(supply.status)} +
+ + {filteredSupplies.length === 0 && ( +
+
+ +

Расходники не найдены

+

+ Попробуйте изменить параметры поиска или создать новый заказ +

+
+
+ )} +
+
+
+
+ ) +} \ No newline at end of file diff --git a/src/components/supplies/create-supply-page.tsx b/src/components/supplies/create-supply-page.tsx index 9600c32..c330674 100644 --- a/src/components/supplies/create-supply-page.tsx +++ b/src/components/supplies/create-supply-page.tsx @@ -1,11 +1,14 @@ "use client" import React, { useState, useEffect } from 'react' +import { useQuery } from '@apollo/client' import { Card } from '@/components/ui/card' import { Button } from '@/components/ui/button' import { Badge } from '@/components/ui/badge' import { Input } from '@/components/ui/input' import { Sidebar } from '@/components/dashboard/sidebar' +import { useSidebar } from '@/hooks/useSidebar' +import { GET_MY_COUNTERPARTIES, GET_ALL_PRODUCTS } from '@/graphql/queries' import { ArrowLeft, ShoppingCart, @@ -22,7 +25,8 @@ import { Zap, Heart, Eye, - ShoppingBag + ShoppingBag, + Search } from 'lucide-react' import { useRouter } from 'next/navigation' import Image from 'next/image' @@ -221,10 +225,38 @@ const mockProducts: WholesalerProduct[] = [ export function CreateSupplyPage() { const router = useRouter() + const { getSidebarMargin } = useSidebar() const [selectedVariant, setSelectedVariant] = useState<'cards' | 'wholesaler' | null>(null) const [selectedWholesaler, setSelectedWholesaler] = useState(null) const [selectedProducts, setSelectedProducts] = useState([]) const [showSummary, setShowSummary] = useState(false) + const [searchQuery, setSearchQuery] = useState('') + + // Загружаем контрагентов-оптовиков + const { data: counterpartiesData, loading: counterpartiesLoading } = useQuery(GET_MY_COUNTERPARTIES) + + // Загружаем товары для выбранного оптовика + const { data: productsData, loading: productsLoading } = useQuery(GET_ALL_PRODUCTS, { + skip: !selectedWholesaler, + variables: { search: null, category: null } + }) + + // Фильтруем только оптовиков + const wholesalers = (counterpartiesData?.myCounterparties || []).filter((org: { type: string }) => org.type === 'WHOLESALE') + + // Фильтруем оптовиков по поисковому запросу + const filteredWholesalers = wholesalers.filter((wholesaler: { name?: string; fullName?: string; inn?: string }) => + wholesaler.name?.toLowerCase().includes(searchQuery.toLowerCase()) || + wholesaler.fullName?.toLowerCase().includes(searchQuery.toLowerCase()) || + wholesaler.inn?.toLowerCase().includes(searchQuery.toLowerCase()) + ) + + // Фильтруем товары по выбранному оптовику + const wholesalerProducts = selectedWholesaler + ? (productsData?.allProducts || []).filter((product: { organization: { id: string } }) => + product.organization.id === selectedWholesaler.id + ) + : [] // Автоматически показываем корзину если в ней есть товары и мы на этапе выбора оптовиков useEffect(() => { @@ -251,7 +283,7 @@ export function CreateSupplyPage() { } const updateProductQuantity = (productId: string, quantity: number) => { - const product = mockProducts.find(p => p.id === productId) + const product = wholesalerProducts.find((p: { id: string }) => p.id === productId) if (!product || !selectedWholesaler) return setSelectedProducts(prev => { @@ -320,9 +352,9 @@ export function CreateSupplyPage() { // Рендер товаров оптовика if (selectedWholesaler && selectedVariant === 'wholesaler') { return ( -
+
-
+
@@ -337,7 +369,7 @@ export function CreateSupplyPage() {

Товары оптовика

-

{selectedWholesaler.name} • {mockProducts.length} товаров

+

{selectedWholesaler.name} • {wholesalerProducts.length} товаров

@@ -496,12 +528,39 @@ export function CreateSupplyPage() { )} -
- {mockProducts.map((product) => { + {productsLoading ? ( +
+
+
+

Загружаем товары...

+
+
+ ) : wholesalerProducts.length === 0 ? ( +
+
+ +

У этого оптовика нет товаров

+

Выберите другого оптовика

+
+
+ ) : ( +
+ {wholesalerProducts.map((product: { + id: string; + name: string; + article: string; + description?: string; + price: number; + quantity: number; + category?: { name: string }; + brand?: string; + color?: string; + size?: string; + mainImage?: string; + images?: string[] + }) => { const selectedQuantity = getSelectedQuantity(product.id) - const discountedPrice = product.discount - ? product.price * (1 - product.discount / 100) - : product.price + const discountedPrice = product.price // Убираем discount так как его нет в схеме return ( @@ -519,14 +578,7 @@ export function CreateSupplyPage() {
- {/* Discount badge */} - {product.discount && ( -
- - -{product.discount}% - -
- )} + {/* Убираем discount badge так как поля нет в схеме */} {/* Overlay с кнопками */}
@@ -550,16 +602,7 @@ export function CreateSupplyPage() { {product.brand} )} - {product.isNew && ( - - NEW - - )} - {product.isBestseller && ( - - ХИТ - - )} + {/* Убираем isNew и isBestseller так как этих полей нет в схеме */}

{product.name} @@ -578,11 +621,7 @@ export function CreateSupplyPage() {
{formatCurrency(discountedPrice)}
- {product.discount && ( -
- {formatCurrency(product.price)} -
- )} + {/* Убираем отображение оригинальной цены так как discount нет */}

@@ -633,11 +672,6 @@ export function CreateSupplyPage() {
{formatCurrency(discountedPrice * selectedQuantity)} - {product.discount && ( -
- экономия {formatCurrency((product.price - discountedPrice) * selectedQuantity)} -
- )}
)} @@ -646,6 +680,7 @@ export function CreateSupplyPage() { ) })}
+ )} {/* Floating корзина */} {selectedProducts.length > 0 && ( @@ -669,9 +704,9 @@ export function CreateSupplyPage() { // Рендер выбора оптовиков if (selectedVariant === 'wholesaler') { return ( -
+
-
+
@@ -875,12 +910,66 @@ export function CreateSupplyPage() { )} -
- {mockWholesalers.map((wholesaler) => ( + {/* Поиск */} +
+
+ + setSearchQuery(e.target.value)} + className="pl-10 glass-input text-white placeholder:text-white/40" + /> +
+
+ + {counterpartiesLoading ? ( +
+
+
+

Загружаем оптовиков...

+
+
+ ) : filteredWholesalers.length === 0 ? ( +
+ +

+ {searchQuery ? 'Оптовики не найдены' : 'У вас нет контрагентов-оптовиков'} +

+

+ {searchQuery ? 'Попробуйте изменить условия поиска' : 'Добавьте оптовиков в разделе "Партнеры"'} +

+
+ ) : ( +
+ {filteredWholesalers.map((wholesaler: { + id: string; + name?: string; + fullName?: string; + inn?: string; + address?: string; + phones?: { value: string }[]; + emails?: { value: string }[] + }) => ( setSelectedWholesaler(wholesaler)} + onClick={() => { + // Адаптируем данные под существующий интерфейс + const adaptedWholesaler = { + id: wholesaler.id, + inn: wholesaler.inn || '', + name: wholesaler.name || 'Неизвестная организация', + fullName: wholesaler.fullName || wholesaler.name || 'Неизвестная организация', + address: wholesaler.address || 'Адрес не указан', + phone: wholesaler.phones?.[0]?.value, + email: wholesaler.emails?.[0]?.value, + rating: 4.5, // Временное значение + productCount: 0, // Временное значение + specialization: ['Оптовая торговля'] // Временное значение + } + setSelectedWholesaler(adaptedWholesaler) + }} >
@@ -889,56 +978,46 @@ export function CreateSupplyPage() {

- {wholesaler.name} + {wholesaler.name || 'Неизвестная организация'}

- {wholesaler.fullName} + {wholesaler.fullName || wholesaler.name}

-
- {renderStars(wholesaler.rating)} - {wholesaler.rating} -
+ {wholesaler.inn && ( +

+ ИНН: {wholesaler.inn} +

+ )}
-
- - {wholesaler.address} -
+ {wholesaler.address && ( +
+ + {wholesaler.address} +
+ )} - {wholesaler.phone && ( + {wholesaler.phones?.[0]?.value && (
- {wholesaler.phone} + {wholesaler.phones[0].value}
)} - {wholesaler.email && ( + {wholesaler.emails?.[0]?.value && (
- {wholesaler.email} + {wholesaler.emails[0].value}
)} - -
- - {wholesaler.productCount} товаров -
-
-

Специализация:

-
- {wholesaler.specialization.map((spec, index) => ( - - {spec} - - ))} -
+
+ + Контрагент +
@@ -948,6 +1027,7 @@ export function CreateSupplyPage() { ))}
+ )} {/* Floating корзина */} {selectedProducts.length > 0 && !showSummary && ( @@ -970,9 +1050,9 @@ export function CreateSupplyPage() { // Главная страница выбора варианта return ( -
+
-
+