From 481dcdf826c1ff7771476f1840b676b95fb687eb Mon Sep 17 00:00:00 2001 From: nns <278048682+nurdotnet@users.noreply.github.com> Date: Fri, 24 Apr 2026 19:17:56 +0500 Subject: [PATCH] =?UTF-8?q?ui(mobile):=20=D0=B0=D0=B4=D0=B0=D0=BF=D1=82?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BF=D0=BE=D0=B4=20=D1=81=D0=BC?= =?UTF-8?q?=D0=B0=D1=80=D1=82=D1=84=D0=BE=D0=BD=D1=8B=20=E2=80=94=20drawer?= =?UTF-8?q?-=D0=BC=D0=B5=D0=BD=D1=8E,=20grid,=20=D0=BC=D0=BE=D0=B4=D0=B0?= =?UTF-8?q?=D0=BB=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Система теперь корректно работает на узких экранах (<768px): - AppLayout: на мобиле фиксированный sidebar заменён hamburger-меню (Menu icon) + off-canvas drawer с overlay. На md+ — прежний sidebar. - ProductsPage: дерево групп тоже превращается в drawer на мобиле, кнопка «Группы» рядом с заголовком; фильтры flex-wrap. - Modal: на мобиле ( --- .../src/components/AppLayout.tsx | 137 ++++++++++++------ .../src/components/DataTable.tsx | 6 +- .../src/components/ListPageShell.tsx | 4 +- src/food-market.web/src/components/Modal.tsx | 8 +- .../src/components/PageHeader.tsx | 16 +- .../src/components/SearchBar.tsx | 4 +- .../src/pages/DashboardPage.tsx | 2 +- .../src/pages/OrganizationSettingsPage.tsx | 6 +- .../src/pages/ProductEditPage.tsx | 8 +- .../src/pages/ProductsPage.tsx | 49 +++++-- .../src/pages/RetailSaleEditPage.tsx | 2 +- .../src/pages/SupplyEditPage.tsx | 2 +- 12 files changed, 157 insertions(+), 87 deletions(-) diff --git a/src/food-market.web/src/components/AppLayout.tsx b/src/food-market.web/src/components/AppLayout.tsx index f1f5821..64a32d0 100644 --- a/src/food-market.web/src/components/AppLayout.tsx +++ b/src/food-market.web/src/components/AppLayout.tsx @@ -1,4 +1,5 @@ -import { NavLink, Outlet } from 'react-router-dom' +import { useState, useEffect } from 'react' +import { NavLink, Outlet, useLocation } from 'react-router-dom' import { useQuery } from '@tanstack/react-query' import { api } from '@/lib/api' import { logout } from '@/lib/auth' @@ -6,7 +7,7 @@ import { cn } from '@/lib/utils' import { LayoutDashboard, Package, FolderTree, Ruler, Tag, Users, Warehouse, Store as StoreIcon, Globe, Coins, LogOut, Download, - Boxes, History, TruckIcon, ShoppingCart, Settings, + Boxes, History, TruckIcon, ShoppingCart, Settings, Menu, X, } from 'lucide-react' import { Logo } from './Logo' @@ -64,54 +65,98 @@ export function AppLayout() { staleTime: 5 * 60 * 1000, }) + const [drawerOpen, setDrawerOpen] = useState(false) + const location = useLocation() + // Закрывать drawer при смене маршрута. + useEffect(() => { setDrawerOpen(false) }, [location.pathname]) + + const sidebar = ( + <> +
+ + +
+ + + +
+ {me && ( +
+
{me.name}
+
{me.roles.join(', ')}
+
+ )} + +
+ + ) + return ( -
-