diff --git a/src/app/employees/new/page.tsx b/src/app/employees/new/page.tsx new file mode 100644 index 0000000..2e30f9e --- /dev/null +++ b/src/app/employees/new/page.tsx @@ -0,0 +1,57 @@ +"use client" + +import { AuthGuard } from '@/components/auth-guard' +import { EmployeeForm } from '@/components/employees/employee-form' +import { Card } from '@/components/ui/card' +import { Sidebar } from '@/components/dashboard/sidebar' +import { useSidebar } from '@/hooks/useSidebar' +import { UserPlus, ArrowLeft } from 'lucide-react' +import { Button } from '@/components/ui/button' +import { useRouter } from 'next/navigation' + +export default function NewEmployeePage() { + const { getSidebarMargin } = useSidebar() + const router = useRouter() + + return ( + +
+ +
+
+ {/* Заголовок */} +
+ +
+ +
+

Добавить сотрудника

+

Создание нового сотрудника организации

+
+
+
+ + {/* Форма */} + + { + // TODO: Добавить создание сотрудника + console.log('Создание сотрудника:', employeeData) + router.push('/employees') + }} + onCancel={() => router.push('/employees')} + /> + +
+
+
+
+ ) +} \ No newline at end of file diff --git a/src/components/dashboard/sidebar.tsx b/src/components/dashboard/sidebar.tsx index 69001b9..8eaaafe 100644 --- a/src/components/dashboard/sidebar.tsx +++ b/src/components/dashboard/sidebar.tsx @@ -7,7 +7,7 @@ import { Card } from '@/components/ui/card' import { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/avatar' import { useRouter, usePathname } from 'next/navigation' import { useQuery } from '@apollo/client' -import { GET_CONVERSATIONS } from '@/graphql/queries' +import { GET_CONVERSATIONS, GET_INCOMING_REQUESTS } from '@/graphql/queries' import { Settings, LogOut, @@ -36,8 +36,18 @@ export function Sidebar() { notifyOnNetworkStatusChange: false, // Плавные обновления без мерцания }) + // Загружаем входящие заявки для подсчета новых запросов + const { data: incomingRequestsData } = useQuery(GET_INCOMING_REQUESTS, { + pollInterval: 60000, // Обновляем каждую минуту + fetchPolicy: 'cache-first', + errorPolicy: 'ignore', + notifyOnNetworkStatusChange: false, + }) + const conversations = conversationsData?.conversations || [] + const incomingRequests = incomingRequestsData?.incomingRequests || [] const totalUnreadCount = conversations.reduce((sum: number, conv: { unreadCount?: number }) => sum + (conv.unreadCount || 0), 0) + const incomingRequestsCount = incomingRequests.length const getInitials = () => { const orgName = getOrganizationName() @@ -258,7 +268,7 @@ export function Sidebar() { {/* Услуги - только для фулфилмент центров */} diff --git a/src/components/market/market-counterparties.tsx b/src/components/market/market-counterparties.tsx index 81d2ce5..0fb6eed 100644 --- a/src/components/market/market-counterparties.tsx +++ b/src/components/market/market-counterparties.tsx @@ -167,9 +167,12 @@ export function MarketCounterparties() { Контрагенты ({counterparties.length}) - + 0 ? 'ring-2 ring-green-400/50 animate-pulse' : ''}`}> Входящие ({incomingRequests.length}) + {incomingRequests.length > 0 && ( +
+ )}
diff --git a/src/components/messenger/messenger-chat.tsx b/src/components/messenger/messenger-chat.tsx index 741165d..fed823f 100644 --- a/src/components/messenger/messenger-chat.tsx +++ b/src/components/messenger/messenger-chat.tsx @@ -338,17 +338,17 @@ export function MessengerChat({ counterparty, onMessagesRead }: MessengerChatPro
-

- {getOrganizationName(counterparty)} -

+

+ {getOrganizationName(counterparty)} +

{getTypeLabel(counterparty.type)} -

- {getShortCompanyName(counterparty.fullName || '')} -

+

+ {getShortCompanyName(counterparty.fullName || '')} +

diff --git a/src/components/partners/partners-dashboard.tsx b/src/components/partners/partners-dashboard.tsx index 5321459..e2c570d 100644 --- a/src/components/partners/partners-dashboard.tsx +++ b/src/components/partners/partners-dashboard.tsx @@ -4,6 +4,8 @@ import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' import { Card } from '@/components/ui/card' import { Sidebar } from '@/components/dashboard/sidebar' import { useSidebar } from '@/hooks/useSidebar' +import { useQuery } from '@apollo/client' +import { GET_INCOMING_REQUESTS } from '@/graphql/queries' import { MarketCounterparties } from '../market/market-counterparties' import { MarketFulfillment } from '../market/market-fulfillment' import { MarketSellers } from '../market/market-sellers' @@ -12,6 +14,17 @@ import { MarketWholesale } from '../market/market-wholesale' export function PartnersDashboard() { const { getSidebarMargin } = useSidebar() + + // Загружаем входящие заявки для подсветки + const { data: incomingRequestsData } = useQuery(GET_INCOMING_REQUESTS, { + pollInterval: 30000, // Обновляем каждые 30 секунд + fetchPolicy: 'cache-first', + errorPolicy: 'ignore', + }) + + const incomingRequests = incomingRequestsData?.incomingRequests || [] + const hasIncomingRequests = incomingRequests.length > 0 + return (
@@ -20,12 +33,15 @@ export function PartnersDashboard() { {/* Основной контент с табами */}
- + Мои контрагенты + {hasIncomingRequests && ( +
+ )}