Добавлена кнопка "Партнёры" в боковую панель с соответствующей логикой навигации. Обновлены вкладки на странице рынка: изменены названия и порядок вкладок, добавлены новые компоненты для инвестиций и бизнеса. Улучшен интерфейс и адаптивность элементов.
This commit is contained in:
10
src/app/partners/page.tsx
Normal file
10
src/app/partners/page.tsx
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
import { AuthGuard } from "@/components/auth-guard"
|
||||||
|
import { PartnersDashboard } from "@/components/partners/partners-dashboard"
|
||||||
|
|
||||||
|
export default function PartnersPage() {
|
||||||
|
return (
|
||||||
|
<AuthGuard>
|
||||||
|
<PartnersDashboard />
|
||||||
|
</AuthGuard>
|
||||||
|
)
|
||||||
|
}
|
@ -13,7 +13,8 @@ import {
|
|||||||
Wrench,
|
Wrench,
|
||||||
Warehouse,
|
Warehouse,
|
||||||
Users,
|
Users,
|
||||||
Truck
|
Truck,
|
||||||
|
Handshake
|
||||||
} from 'lucide-react'
|
} from 'lucide-react'
|
||||||
|
|
||||||
export function Sidebar() {
|
export function Sidebar() {
|
||||||
@ -81,6 +82,10 @@ export function Sidebar() {
|
|||||||
router.push('/supplies')
|
router.push('/supplies')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const handlePartnersClick = () => {
|
||||||
|
router.push('/partners')
|
||||||
|
}
|
||||||
|
|
||||||
const isSettingsActive = pathname === '/settings'
|
const isSettingsActive = pathname === '/settings'
|
||||||
const isMarketActive = pathname.startsWith('/market')
|
const isMarketActive = pathname.startsWith('/market')
|
||||||
const isMessengerActive = pathname.startsWith('/messenger')
|
const isMessengerActive = pathname.startsWith('/messenger')
|
||||||
@ -88,6 +93,7 @@ export function Sidebar() {
|
|||||||
const isWarehouseActive = pathname.startsWith('/warehouse')
|
const isWarehouseActive = pathname.startsWith('/warehouse')
|
||||||
const isEmployeesActive = pathname.startsWith('/employees')
|
const isEmployeesActive = pathname.startsWith('/employees')
|
||||||
const isSuppliesActive = pathname.startsWith('/supplies')
|
const isSuppliesActive = pathname.startsWith('/supplies')
|
||||||
|
const isPartnersActive = pathname.startsWith('/partners')
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="fixed left-0 top-0 h-full w-56 bg-white/10 backdrop-blur-xl border-r border-white/20 p-3">
|
<div className="fixed left-0 top-0 h-full w-56 bg-white/10 backdrop-blur-xl border-r border-white/20 p-3">
|
||||||
@ -154,6 +160,19 @@ export function Sidebar() {
|
|||||||
Мессенджер
|
Мессенджер
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
variant={isPartnersActive ? "secondary" : "ghost"}
|
||||||
|
className={`w-full justify-start text-left transition-all duration-200 h-8 text-xs ${
|
||||||
|
isPartnersActive
|
||||||
|
? 'bg-white/20 text-white hover:bg-white/30'
|
||||||
|
: 'text-white/80 hover:bg-white/10 hover:text-white'
|
||||||
|
} cursor-pointer`}
|
||||||
|
onClick={handlePartnersClick}
|
||||||
|
>
|
||||||
|
<Handshake className="h-3 w-3 mr-2" />
|
||||||
|
Партнёры
|
||||||
|
</Button>
|
||||||
|
|
||||||
{/* Услуги - только для фулфилмент центров */}
|
{/* Услуги - только для фулфилмент центров */}
|
||||||
{user?.organization?.type === 'FULFILLMENT' && (
|
{user?.organization?.type === 'FULFILLMENT' && (
|
||||||
<Button
|
<Button
|
||||||
|
64
src/components/market/market-business.tsx
Normal file
64
src/components/market/market-business.tsx
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
"use client"
|
||||||
|
|
||||||
|
import { Card } from '@/components/ui/card'
|
||||||
|
import { Building, Users, Target, Briefcase } from 'lucide-react'
|
||||||
|
|
||||||
|
export function MarketBusiness() {
|
||||||
|
return (
|
||||||
|
<div className="h-full flex flex-col space-y-4 overflow-hidden">
|
||||||
|
{/* Заголовок с иконкой */}
|
||||||
|
<div className="flex items-center space-x-3 flex-shrink-0 mb-4">
|
||||||
|
<Briefcase className="h-6 w-6 text-orange-400" />
|
||||||
|
<div>
|
||||||
|
<h3 className="text-lg font-semibold text-white">Бизнес</h3>
|
||||||
|
<p className="text-white/60 text-sm">Бизнес-возможности и развитие</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Контент раздела */}
|
||||||
|
<div className="flex-1 overflow-auto space-y-4">
|
||||||
|
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
|
||||||
|
<Card className="bg-white/5 backdrop-blur border-white/10 p-6">
|
||||||
|
<div className="flex items-center space-x-3 mb-4">
|
||||||
|
<Building className="h-8 w-8 text-orange-400" />
|
||||||
|
<h4 className="text-lg font-semibold text-white">Франшизы</h4>
|
||||||
|
</div>
|
||||||
|
<p className="text-white/60 text-sm">
|
||||||
|
Готовые бизнес-решения и франшизы в сфере логистики и торговли
|
||||||
|
</p>
|
||||||
|
</Card>
|
||||||
|
|
||||||
|
<Card className="bg-white/5 backdrop-blur border-white/10 p-6">
|
||||||
|
<div className="flex items-center space-x-3 mb-4">
|
||||||
|
<Users className="h-8 w-8 text-blue-400" />
|
||||||
|
<h4 className="text-lg font-semibold text-white">Партнёрство</h4>
|
||||||
|
</div>
|
||||||
|
<p className="text-white/60 text-sm">
|
||||||
|
Поиск бизнес-партнёров для совместных проектов и развития
|
||||||
|
</p>
|
||||||
|
</Card>
|
||||||
|
|
||||||
|
<Card className="bg-white/5 backdrop-blur border-white/10 p-6">
|
||||||
|
<div className="flex items-center space-x-3 mb-4">
|
||||||
|
<Target className="h-8 w-8 text-green-400" />
|
||||||
|
<h4 className="text-lg font-semibold text-white">Консалтинг</h4>
|
||||||
|
</div>
|
||||||
|
<p className="text-white/60 text-sm">
|
||||||
|
Бизнес-консультации и стратегическое планирование развития
|
||||||
|
</p>
|
||||||
|
</Card>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="text-center py-8">
|
||||||
|
<div className="w-16 h-16 bg-white/10 rounded-full flex items-center justify-center mx-auto mb-4">
|
||||||
|
<Briefcase className="h-8 w-8 text-white/40" />
|
||||||
|
</div>
|
||||||
|
<p className="text-white/60 text-lg mb-2">Раздел в разработке</p>
|
||||||
|
<p className="text-white/40 text-sm">
|
||||||
|
Бизнес-функционал будет доступен в ближайших обновлениях
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
@ -4,14 +4,11 @@ import { useState } from 'react'
|
|||||||
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'
|
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'
|
||||||
import { Card } from '@/components/ui/card'
|
import { Card } from '@/components/ui/card'
|
||||||
import { Sidebar } from '@/components/dashboard/sidebar'
|
import { Sidebar } from '@/components/dashboard/sidebar'
|
||||||
import { MarketCounterparties } from './market-counterparties'
|
|
||||||
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 { MarketProducts } from './market-products'
|
||||||
import { MarketCategories } from './market-categories'
|
import { MarketCategories } from './market-categories'
|
||||||
import { MarketRequests } from './market-requests'
|
import { MarketRequests } from './market-requests'
|
||||||
|
import { MarketInvestments } from './market-investments'
|
||||||
|
import { MarketBusiness } from './market-business'
|
||||||
import { FavoritesDashboard } from '../favorites/favorites-dashboard'
|
import { FavoritesDashboard } from '../favorites/favorites-dashboard'
|
||||||
|
|
||||||
export function MarketDashboard() {
|
export function MarketDashboard() {
|
||||||
@ -46,7 +43,7 @@ export function MarketDashboard() {
|
|||||||
{/* Основной контент с табами */}
|
{/* Основной контент с табами */}
|
||||||
<div className="flex-1 overflow-hidden">
|
<div className="flex-1 overflow-hidden">
|
||||||
<Tabs
|
<Tabs
|
||||||
defaultValue="counterparties"
|
defaultValue="investments"
|
||||||
className="h-full flex flex-col"
|
className="h-full flex flex-col"
|
||||||
onValueChange={(value) => {
|
onValueChange={(value) => {
|
||||||
if (value === 'products') {
|
if (value === 'products') {
|
||||||
@ -56,36 +53,18 @@ export function MarketDashboard() {
|
|||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<TabsList className="grid w-full grid-cols-6 bg-white/5 backdrop-blur border-white/10 flex-shrink-0">
|
<TabsList className="grid w-full grid-cols-4 bg-white/5 backdrop-blur border-white/10 flex-shrink-0">
|
||||||
<TabsTrigger
|
<TabsTrigger
|
||||||
value="counterparties"
|
value="investments"
|
||||||
className="data-[state=active]:bg-white/20 data-[state=active]:text-white text-white/70"
|
className="data-[state=active]:bg-white/20 data-[state=active]:text-white text-white/70"
|
||||||
>
|
>
|
||||||
Мои контрагенты
|
Инвестиции
|
||||||
</TabsTrigger>
|
</TabsTrigger>
|
||||||
<TabsTrigger
|
<TabsTrigger
|
||||||
value="fulfillment"
|
value="business"
|
||||||
className="data-[state=active]:bg-white/20 data-[state=active]:text-white text-white/70"
|
className="data-[state=active]:bg-white/20 data-[state=active]:text-white text-white/70"
|
||||||
>
|
>
|
||||||
Фулфилмент
|
Бизнес
|
||||||
</TabsTrigger>
|
|
||||||
<TabsTrigger
|
|
||||||
value="sellers"
|
|
||||||
className="data-[state=active]:bg-white/20 data-[state=active]:text-white text-white/70"
|
|
||||||
>
|
|
||||||
Селлеры
|
|
||||||
</TabsTrigger>
|
|
||||||
<TabsTrigger
|
|
||||||
value="logistics"
|
|
||||||
className="data-[state=active]:bg-white/20 data-[state=active]:text-white text-white/70"
|
|
||||||
>
|
|
||||||
Логистика
|
|
||||||
</TabsTrigger>
|
|
||||||
<TabsTrigger
|
|
||||||
value="wholesale"
|
|
||||||
className="data-[state=active]:bg-white/20 data-[state=active]:text-white text-white/70"
|
|
||||||
>
|
|
||||||
Оптовик
|
|
||||||
</TabsTrigger>
|
</TabsTrigger>
|
||||||
<TabsTrigger
|
<TabsTrigger
|
||||||
value="products"
|
value="products"
|
||||||
@ -93,35 +72,29 @@ export function MarketDashboard() {
|
|||||||
>
|
>
|
||||||
Товары
|
Товары
|
||||||
</TabsTrigger>
|
</TabsTrigger>
|
||||||
|
<TabsTrigger
|
||||||
|
value="requests"
|
||||||
|
className="data-[state=active]:bg-white/20 data-[state=active]:text-white text-white/70"
|
||||||
|
>
|
||||||
|
Заявки
|
||||||
|
</TabsTrigger>
|
||||||
</TabsList>
|
</TabsList>
|
||||||
|
|
||||||
<TabsContent value="counterparties" className="flex-1 overflow-hidden mt-6">
|
<TabsContent value="investments" className="flex-1 overflow-hidden mt-6">
|
||||||
<Card className="glass-card h-full overflow-hidden p-6">
|
<Card className="glass-card h-full overflow-hidden p-6">
|
||||||
<MarketCounterparties />
|
<MarketInvestments />
|
||||||
</Card>
|
</Card>
|
||||||
</TabsContent>
|
</TabsContent>
|
||||||
|
|
||||||
<TabsContent value="fulfillment" className="flex-1 overflow-hidden mt-6">
|
<TabsContent value="business" className="flex-1 overflow-hidden mt-6">
|
||||||
<Card className="glass-card h-full overflow-hidden p-6">
|
<Card className="glass-card h-full overflow-hidden p-6">
|
||||||
<MarketFulfillment />
|
<MarketBusiness />
|
||||||
</Card>
|
</Card>
|
||||||
</TabsContent>
|
</TabsContent>
|
||||||
|
|
||||||
<TabsContent value="sellers" className="flex-1 overflow-hidden mt-6">
|
<TabsContent value="requests" className="flex-1 overflow-hidden mt-6">
|
||||||
<Card className="glass-card h-full overflow-hidden p-6">
|
<Card className="glass-card h-full overflow-hidden p-6">
|
||||||
<MarketSellers />
|
<MarketRequests />
|
||||||
</Card>
|
|
||||||
</TabsContent>
|
|
||||||
|
|
||||||
<TabsContent value="logistics" className="flex-1 overflow-hidden mt-6">
|
|
||||||
<Card className="glass-card h-full overflow-hidden p-6">
|
|
||||||
<MarketLogistics />
|
|
||||||
</Card>
|
|
||||||
</TabsContent>
|
|
||||||
|
|
||||||
<TabsContent value="wholesale" className="flex-1 overflow-hidden mt-6">
|
|
||||||
<Card className="glass-card h-full overflow-hidden p-6">
|
|
||||||
<MarketWholesale />
|
|
||||||
</Card>
|
</Card>
|
||||||
</TabsContent>
|
</TabsContent>
|
||||||
|
|
||||||
|
64
src/components/market/market-investments.tsx
Normal file
64
src/components/market/market-investments.tsx
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
"use client"
|
||||||
|
|
||||||
|
import { Card } from '@/components/ui/card'
|
||||||
|
import { TrendingUp, DollarSign, BarChart3 } from 'lucide-react'
|
||||||
|
|
||||||
|
export function MarketInvestments() {
|
||||||
|
return (
|
||||||
|
<div className="h-full flex flex-col space-y-4 overflow-hidden">
|
||||||
|
{/* Заголовок с иконкой */}
|
||||||
|
<div className="flex items-center space-x-3 flex-shrink-0 mb-4">
|
||||||
|
<TrendingUp className="h-6 w-6 text-green-400" />
|
||||||
|
<div>
|
||||||
|
<h3 className="text-lg font-semibold text-white">Инвестиции</h3>
|
||||||
|
<p className="text-white/60 text-sm">Инвестиционные возможности и проекты</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Контент раздела */}
|
||||||
|
<div className="flex-1 overflow-auto space-y-4">
|
||||||
|
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
|
||||||
|
<Card className="bg-white/5 backdrop-blur border-white/10 p-6">
|
||||||
|
<div className="flex items-center space-x-3 mb-4">
|
||||||
|
<DollarSign className="h-8 w-8 text-green-400" />
|
||||||
|
<h4 className="text-lg font-semibold text-white">Инвестиционные проекты</h4>
|
||||||
|
</div>
|
||||||
|
<p className="text-white/60 text-sm">
|
||||||
|
Поиск и анализ перспективных инвестиционных проектов в сфере логистики и e-commerce
|
||||||
|
</p>
|
||||||
|
</Card>
|
||||||
|
|
||||||
|
<Card className="bg-white/5 backdrop-blur border-white/10 p-6">
|
||||||
|
<div className="flex items-center space-x-3 mb-4">
|
||||||
|
<BarChart3 className="h-8 w-8 text-blue-400" />
|
||||||
|
<h4 className="text-lg font-semibold text-white">Аналитика рынка</h4>
|
||||||
|
</div>
|
||||||
|
<p className="text-white/60 text-sm">
|
||||||
|
Исследования и аналитические отчёты для принятия инвестиционных решений
|
||||||
|
</p>
|
||||||
|
</Card>
|
||||||
|
|
||||||
|
<Card className="bg-white/5 backdrop-blur border-white/10 p-6">
|
||||||
|
<div className="flex items-center space-x-3 mb-4">
|
||||||
|
<TrendingUp className="h-8 w-8 text-purple-400" />
|
||||||
|
<h4 className="text-lg font-semibold text-white">Доходность</h4>
|
||||||
|
</div>
|
||||||
|
<p className="text-white/60 text-sm">
|
||||||
|
Отслеживание доходности инвестиций и планирование бюджета
|
||||||
|
</p>
|
||||||
|
</Card>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="text-center py-8">
|
||||||
|
<div className="w-16 h-16 bg-white/10 rounded-full flex items-center justify-center mx-auto mb-4">
|
||||||
|
<TrendingUp className="h-8 w-8 text-white/40" />
|
||||||
|
</div>
|
||||||
|
<p className="text-white/60 text-lg mb-2">Раздел в разработке</p>
|
||||||
|
<p className="text-white/40 text-sm">
|
||||||
|
Функционал инвестиций будет доступен в ближайших обновлениях
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
89
src/components/partners/partners-dashboard.tsx
Normal file
89
src/components/partners/partners-dashboard.tsx
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
"use client"
|
||||||
|
|
||||||
|
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'
|
||||||
|
import { Card } from '@/components/ui/card'
|
||||||
|
import { Sidebar } from '@/components/dashboard/sidebar'
|
||||||
|
import { MarketCounterparties } from '../market/market-counterparties'
|
||||||
|
import { MarketFulfillment } from '../market/market-fulfillment'
|
||||||
|
import { MarketSellers } from '../market/market-sellers'
|
||||||
|
import { MarketLogistics } from '../market/market-logistics'
|
||||||
|
import { MarketWholesale } from '../market/market-wholesale'
|
||||||
|
|
||||||
|
export function PartnersDashboard() {
|
||||||
|
return (
|
||||||
|
<div className="h-screen bg-gradient-smooth flex overflow-hidden">
|
||||||
|
<Sidebar />
|
||||||
|
<main className="flex-1 ml-56 px-6 py-4 overflow-hidden">
|
||||||
|
<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">
|
||||||
|
<TabsTrigger
|
||||||
|
value="counterparties"
|
||||||
|
className="data-[state=active]:bg-white/20 data-[state=active]:text-white text-white/70"
|
||||||
|
>
|
||||||
|
Мои контрагенты
|
||||||
|
</TabsTrigger>
|
||||||
|
<TabsTrigger
|
||||||
|
value="fulfillment"
|
||||||
|
className="data-[state=active]:bg-white/20 data-[state=active]:text-white text-white/70"
|
||||||
|
>
|
||||||
|
Фулфилмент
|
||||||
|
</TabsTrigger>
|
||||||
|
<TabsTrigger
|
||||||
|
value="sellers"
|
||||||
|
className="data-[state=active]:bg-white/20 data-[state=active]:text-white text-white/70"
|
||||||
|
>
|
||||||
|
Селлеры
|
||||||
|
</TabsTrigger>
|
||||||
|
<TabsTrigger
|
||||||
|
value="logistics"
|
||||||
|
className="data-[state=active]:bg-white/20 data-[state=active]:text-white text-white/70"
|
||||||
|
>
|
||||||
|
Логистика
|
||||||
|
</TabsTrigger>
|
||||||
|
<TabsTrigger
|
||||||
|
value="wholesale"
|
||||||
|
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">
|
||||||
|
<Card className="glass-card h-full overflow-hidden p-6">
|
||||||
|
<MarketCounterparties />
|
||||||
|
</Card>
|
||||||
|
</TabsContent>
|
||||||
|
|
||||||
|
<TabsContent value="fulfillment" className="flex-1 overflow-hidden mt-6">
|
||||||
|
<Card className="glass-card h-full overflow-hidden p-6">
|
||||||
|
<MarketFulfillment />
|
||||||
|
</Card>
|
||||||
|
</TabsContent>
|
||||||
|
|
||||||
|
<TabsContent value="sellers" className="flex-1 overflow-hidden mt-6">
|
||||||
|
<Card className="glass-card h-full overflow-hidden p-6">
|
||||||
|
<MarketSellers />
|
||||||
|
</Card>
|
||||||
|
</TabsContent>
|
||||||
|
|
||||||
|
<TabsContent value="logistics" className="flex-1 overflow-hidden mt-6">
|
||||||
|
<Card className="glass-card h-full overflow-hidden p-6">
|
||||||
|
<MarketLogistics />
|
||||||
|
</Card>
|
||||||
|
</TabsContent>
|
||||||
|
|
||||||
|
<TabsContent value="wholesale" className="flex-1 overflow-hidden mt-6">
|
||||||
|
<Card className="glass-card h-full overflow-hidden p-6">
|
||||||
|
<MarketWholesale />
|
||||||
|
</Card>
|
||||||
|
</TabsContent>
|
||||||
|
</Tabs>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
Reference in New Issue
Block a user