import React, { useState, useEffect, useMemo } from 'react'; import { Briefcase, ShoppingCart, FileText, Monitor, QrCode, Wrench, BookOpen, Calendar, Newspaper } from 'lucide-react'; import { MOCK_OFFICE_REQUESTS } from '../constants'; import { OfficeRequest } from '../types'; // Modular Imports import { OfficeSummary } from './office/OfficeSummary'; import { SupplyRegistry } from './office/SupplyRegistry'; import { DocumentFlow } from './office/DocumentFlow'; import { FacilityManagement } from './office/FacilityManagement'; import { RepairRequests } from './office/RepairRequests'; import { KnowledgeBase } from './office/KnowledgeBase'; import { MeetingsAndRooms } from './office/MeetingsAndRooms'; import { CompanyNewsRegistry } from './office/CompanyNewsRegistry'; import { allowedSubsForSection } from '../constants/permissions'; type Tab = 'dashboard' | 'supply' | 'docs' | 'facility' | 'repair' | 'knowledge' | 'meetings' | 'news'; const OFFICE_TABS: Tab[] = ['dashboard', 'supply', 'docs', 'facility', 'repair', 'knowledge', 'meetings', 'news']; const SUBTAB_KEY = 'mkd_subTab_office'; interface OfficeModuleProps { allowedPermissions?: string[] | null; } export const OfficeModule: React.FC = ({ allowedPermissions }) => { const visibleTabs = useMemo(() => { const allowed = allowedSubsForSection(allowedPermissions ?? [], 'office'); if (allowed === 'all') return OFFICE_TABS; return OFFICE_TABS.filter((t) => allowed.includes(t)); }, [allowedPermissions]); const [activeTab, setActiveTab] = useState(() => { const s = localStorage.getItem(SUBTAB_KEY); return (s && OFFICE_TABS.includes(s as Tab)) ? s as Tab : 'dashboard'; }); useEffect(() => { if (visibleTabs.length > 0 && !visibleTabs.includes(activeTab)) { setActiveTab(visibleTabs[0]); } }, [visibleTabs, activeTab]); useEffect(() => { if (visibleTabs.includes(activeTab)) localStorage.setItem(SUBTAB_KEY, activeTab); }, [activeTab, visibleTabs]); const [requests, setRequests] = useState(MOCK_OFFICE_REQUESTS); return (

Офис и Хоз. часть

Внутренняя операционная деятельность

{/* Sheet Selector */}
{[ { id: 'dashboard', label: 'Сводка', icon: Briefcase }, { id: 'supply', label: 'Закупки', icon: ShoppingCart }, { id: 'docs', label: 'Корреспонденция', icon: FileText }, { id: 'facility', label: 'Имущество', icon: Monitor }, { id: 'repair', label: 'Ремонт техники', icon: Wrench }, { id: 'knowledge', label: 'База знаний', icon: BookOpen }, { id: 'meetings', label: 'Совещания', icon: Calendar }, { id: 'news', label: 'Новости', icon: Newspaper }, ].filter((tab) => visibleTabs.includes(tab.id as Tab)).map((tab) => ( ))}
{/* Dynamic Sheet Content */}
{(() => { try { switch (activeTab) { case 'dashboard': return ; case 'supply': return ; case 'docs': return ; case 'facility': return ; case 'repair': return ; case 'knowledge': return ; case 'meetings': return ; case 'news': return ; default: return ; } } catch (error) { console.error('Ошибка рендеринга вкладки:', error); return (

Ошибка загрузки вкладки

Попробуйте перезагрузить страницу

); } })()}
); };