diff --git a/src/components/supplies/create-supply-page.tsx b/src/components/supplies/create-supply-page.tsx index 9a2fcf0..bd6973f 100644 --- a/src/components/supplies/create-supply-page.tsx +++ b/src/components/supplies/create-supply-page.tsx @@ -255,7 +255,7 @@ const mockProducts: WholesalerProduct[] = [ export function CreateSupplyPage() { const router = useRouter() const { getSidebarMargin } = useSidebar() - const [selectedVariant, setSelectedVariant] = useState<'cards' | 'wholesaler' | null>(null) + const [activeTab, setActiveTab] = useState<'cards' | 'wholesaler'>('cards') const [selectedWholesaler, setSelectedWholesaler] = useState(null) const [selectedProducts, setSelectedProducts] = useState([]) const [selectedCards, setSelectedCards] = useState([]) @@ -290,10 +290,10 @@ export function CreateSupplyPage() { // Автоматически показываем корзину если в ней есть товары и мы на этапе выбора оптовиков useEffect(() => { - if (selectedVariant === 'wholesaler' && !selectedWholesaler && selectedProducts.length > 0) { + if (activeTab === 'wholesaler' && !selectedWholesaler && selectedProducts.length > 0) { setShowSummary(true) } - }, [selectedVariant, selectedWholesaler, selectedProducts.length]) + }, [activeTab, selectedWholesaler, selectedProducts.length]) const formatCurrency = (amount: number) => { return new Intl.NumberFormat('ru-RU', { @@ -367,7 +367,7 @@ export function CreateSupplyPage() { } const handleCreateSupply = () => { - if (selectedVariant === 'cards') { + if (activeTab === 'cards') { console.log('Создание поставки с карточками Wildberries') // TODO: Здесь будет создание поставки с данными карточек } else { @@ -382,17 +382,13 @@ export function CreateSupplyPage() { setSelectedWholesaler(null) // НЕ очищаем корзину! setSelectedProducts([]) setShowSummary(false) - } else if (selectedVariant) { - setSelectedVariant(null) - setSelectedProducts([]) // Очищаем корзину только при полном выходе - setShowSummary(false) } else { router.push('/supplies') } } // Рендер товаров оптовика - if (selectedWholesaler && selectedVariant === 'wholesaler') { + if (selectedWholesaler && activeTab === 'wholesaler') { return (
@@ -743,370 +739,16 @@ export function CreateSupplyPage() { ) } - // Рендер карточек Wildberries - if (selectedVariant === 'cards') { - return ( - setSelectedVariant(null)} - onComplete={handleCardsComplete} - /> - ) - } - // Рендер выбора оптовиков - if (selectedVariant === 'wholesaler') { - return ( -
- -
-
-
-
- -
-

Выбор оптовика

-

- {selectedProducts.length > 0 - ? `Выберите еще оптовика или перейдите к оформлению (${selectedProducts.length} товаров в корзине)` - : "Выберите оптовика для создания поставки" - } -

-
-
- {selectedProducts.length > 0 && ( - - )} -
- {/* Корзина */} - {showSummary && selectedProducts.length > 0 && ( - -
-
-
-
- -
-
-

Корзина

-

{selectedProducts.length} товаров от {Object.keys(selectedProducts.reduce((acc, p) => ({ ...acc, [p.wholesalerId]: true }), {})).length} поставщиков

-
-
- -
- - {/* Группировка по оптовикам */} - {Object.entries( - selectedProducts.reduce((acc, product) => { - if (!acc[product.wholesalerId]) { - acc[product.wholesalerId] = { - wholesaler: product.wholesalerName, - products: [] - } - } - acc[product.wholesalerId].products.push(product) - return acc - }, {} as Record) - ).map(([wholesalerId, group]) => ( -
-
- - {group.wholesaler} - - {group.products.length} товар(ов) - -
- -
- {group.products.map((product) => { - const discountedPrice = product.discount - ? product.price * (1 - product.discount / 100) - : product.price - const totalPrice = discountedPrice * product.selectedQuantity - - return ( -
- {product.name} -
-

{product.name}

-

{product.article}

-
-
- - {product.selectedQuantity} - -
-
-
{formatCurrency(totalPrice)}
- {product.discount && ( -
- {formatCurrency(product.price * product.selectedQuantity)} -
- )} -
-
-
- -
- ) - })} -
-
- ))} - - {/* Итого */} -
-
- - Итого: {getTotalItems()} товаров - - - {formatCurrency(getTotalAmount())} - -
-
- - -
-
-
-
- )} - - {/* Поиск */} -
-
- - 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 }[] - }) => ( - { - // Адаптируем данные под существующий интерфейс - 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) - }} - > -
-
-
- -
-
-

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

-

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

- {wholesaler.inn && ( -

- ИНН: {wholesaler.inn} -

- )} -
-
- -
- {wholesaler.address && ( -
- - {wholesaler.address} -
- )} - - {wholesaler.phones?.[0]?.value && ( -
- - {wholesaler.phones[0].value} -
- )} - - {wholesaler.emails?.[0]?.value && ( -
- - {wholesaler.emails[0].value} -
- )} -
- -
- - Контрагент - -
- -
-

ИНН: {wholesaler.inn}

-
-
-
- ))} -
- )} - - {/* Floating корзина */} - {selectedProducts.length > 0 && !showSummary && ( -
- -
- )} -
-
-
- ) - } - - // Главная страница выбора варианта + // Главная страница с табами return (
-
-
-
+
+
+ {/* Верхняя строка: Назад + Заголовок + Табы */} +
-
-

Создание поставки

-

Выберите способ создания поставки

+

Создание поставки

+
+ +
+
+ +
-
- setSelectedVariant('cards')} - > -
-
- -
-
-

Карточки

-

- Создание поставки через выбор товаров по карточкам Wildberries -

-
- - Доступно - -
-
+ {/* Контент карточек */} + {activeTab === 'cards' && ( + router.push('/supplies')} + onComplete={handleCardsComplete} + /> + )} - setSelectedVariant('wholesaler')} - > -
-
- + {/* Контент оптовиков */} + {activeTab === 'wholesaler' && ( +
+ {/* Поиск */} +
+
+ + setSearchQuery(e.target.value)} + className="pl-10 glass-input text-white placeholder:text-white/40 h-10" + />
-
-

Оптовик

+
+ + {/* Корзина */} + {showSummary && selectedProducts.length > 0 && ( + +
+
+
+
+ +
+
+

Корзина

+

{selectedProducts.length} товаров от {Object.keys(selectedProducts.reduce((acc, p) => ({ ...acc, [p.wholesalerId]: true }), {})).length} поставщиков

+
+
+ +
+ + {/* Группировка по оптовикам */} + {Object.entries( + selectedProducts.reduce((acc, product) => { + if (!acc[product.wholesalerId]) { + acc[product.wholesalerId] = { + wholesaler: product.wholesalerName, + products: [] + } + } + acc[product.wholesalerId].products.push(product) + return acc + }, {} as Record) + ).map(([wholesalerId, group]) => ( +
+
+ + {group.wholesaler} + + {group.products.length} товар(ов) + +
+ +
+ {group.products.map((product) => { + const discountedPrice = product.discount + ? product.price * (1 - product.discount / 100) + : product.price + const totalPrice = discountedPrice * product.selectedQuantity + + return ( +
+ {product.name} +
+

{product.name}

+

{product.article}

+
+
+ + {product.selectedQuantity} + +
+
+
{formatCurrency(totalPrice)}
+ {product.discount && ( +
+ {formatCurrency(product.price * product.selectedQuantity)} +
+ )} +
+
+
+ +
+ ) + })} +
+
+ ))} + + {/* Итого */} +
+
+ + Итого: {getTotalItems()} товаров + + + {formatCurrency(getTotalAmount())} + +
+
+ + +
+
+
+
+ )} + + {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 }[] + }) => ( + { + // Адаптируем данные под существующий интерфейс + 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) + }} + > +
+
+
+ +
+
+

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

+

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

+ {wholesaler.inn && ( +

+ ИНН: {wholesaler.inn} +

+ )} +
+
+ +
+ {wholesaler.address && ( +
+ + {wholesaler.address} +
+ )} + + {wholesaler.phones?.[0]?.value && ( +
+ + {wholesaler.phones[0].value} +
+ )} + + {wholesaler.emails?.[0]?.value && ( +
+ + {wholesaler.emails[0].value} +
+ )} +
+ +
+ + Контрагент + +
+ +
+

ИНН: {wholesaler.inn}

+
+
+
+ ))}
- -
+ )} + + {/* Floating корзина */} + {selectedProducts.length > 0 && !showSummary && ( +
+ +
+ )} +
+ )}
diff --git a/src/components/supplies/wb-product-cards.tsx b/src/components/supplies/wb-product-cards.tsx index aa6916f..3bf2bcb 100644 --- a/src/components/supplies/wb-product-cards.tsx +++ b/src/components/supplies/wb-product-cards.tsx @@ -997,26 +997,8 @@ export function WBProductCards({ onBack, onComplete }: WBProductCardsProps) { } return ( -
- -
-
-
-
- -
-

Карточки товаров Wildberries

-

Найдите и выберите товары для поставки

-
-
+
+
{selectedCards.length > 0 && (
-
- ) +
+ ) } \ No newline at end of file