Добавлены модели товаров и корзины для оптовиков, реализованы соответствующие мутации и запросы в GraphQL. Обновлен API для загрузки файлов с учетом новых типов данных. Улучшена обработка ошибок и добавлены новые функции для работы с категориями товаров.

This commit is contained in:
Bivekich
2025-07-17 16:36:07 +03:00
parent 6a94d51032
commit f377fbab5f
21 changed files with 3958 additions and 34 deletions

View File

@ -1,5 +1,6 @@
"use client"
import { useState } from 'react'
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'
import { Card } from '@/components/ui/card'
import { Sidebar } from '@/components/dashboard/sidebar'
@ -8,8 +9,29 @@ import { MarketFulfillment } from './market-fulfillment'
import { MarketSellers } from './market-sellers'
import { MarketLogistics } from './market-logistics'
import { MarketWholesale } from './market-wholesale'
import { MarketProducts } from './market-products'
import { MarketCategories } from './market-categories'
import { MarketRequests } from './market-requests'
export function MarketDashboard() {
const [productsView, setProductsView] = useState<'categories' | 'products' | 'cart'>('categories')
const [selectedCategory, setSelectedCategory] = useState<{ id: string; name: string } | null>(null)
const handleSelectCategory = (categoryId: string, categoryName: string) => {
setSelectedCategory({ id: categoryId, name: categoryName })
setProductsView('products')
}
const handleBackToCategories = () => {
setProductsView('categories')
setSelectedCategory(null)
}
const handleShowCart = () => {
setProductsView('cart')
setSelectedCategory(null)
}
return (
<div className="h-screen bg-gradient-smooth flex overflow-hidden">
<Sidebar />
@ -17,8 +39,18 @@ export function MarketDashboard() {
<div className="h-full w-full flex flex-col">
{/* Основной контент с табами */}
<div className="flex-1 overflow-hidden">
<Tabs defaultValue="counterparties" className="h-full flex flex-col">
<TabsList className="grid w-full grid-cols-5 bg-white/5 backdrop-blur border-white/10 flex-shrink-0">
<Tabs
defaultValue="counterparties"
className="h-full flex flex-col"
onValueChange={(value) => {
if (value === 'products') {
// Сбрасываем состояние когда переходим на вкладку товаров
setProductsView('categories')
setSelectedCategory(null)
}
}}
>
<TabsList className="grid w-full grid-cols-6 bg-white/5 backdrop-blur border-white/10 flex-shrink-0">
<TabsTrigger
value="counterparties"
className="data-[state=active]:bg-white/20 data-[state=active]:text-white text-white/70"
@ -49,6 +81,12 @@ export function MarketDashboard() {
>
Оптовик
</TabsTrigger>
<TabsTrigger
value="products"
className="data-[state=active]:bg-white/20 data-[state=active]:text-white text-white/70"
>
Товары
</TabsTrigger>
</TabsList>
<TabsContent value="counterparties" className="flex-1 overflow-hidden mt-6">
@ -80,6 +118,22 @@ export function MarketDashboard() {
<MarketWholesale />
</Card>
</TabsContent>
<TabsContent value="products" className="flex-1 overflow-hidden mt-6">
<Card className="glass-card h-full overflow-hidden p-0">
{productsView === 'categories' ? (
<MarketCategories onSelectCategory={handleSelectCategory} onShowCart={handleShowCart} />
) : productsView === 'products' ? (
<MarketProducts
selectedCategoryId={selectedCategory?.id}
selectedCategoryName={selectedCategory?.name}
onBackToCategories={handleBackToCategories}
/>
) : (
<MarketRequests />
)}
</Card>
</TabsContent>
</Tabs>
</div>
</div>