From 687ba5a75326096c94f40354f0fe9728a7bbfbd8 Mon Sep 17 00:00:00 2001 From: "gorbenko.pavel" Date: Tue, 4 Aug 2026 14:25:19 +0500 Subject: [PATCH] =?UTF-8?q?=D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20=D0=B7?= =?UTF-8?q?=D0=B0=D1=8F=D0=B2=D0=BA=D0=B8=20=D0=BD=D0=B0=20=D1=81=D0=BE?= =?UTF-8?q?=D0=B3=D0=BB=D0=B0=D1=81=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D1=82=D0=BE=D0=B6=D0=B5=20=D0=BF=D0=B8=D1=88=D1=83=D1=82=D1=8C?= =?UTF-8?q?=D1=81=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../myRequests/MyRequestsPanel.module.scss | 16 ++ .../features/myRequests/MyRequestsPanel.tsx | 105 +++++---- .../features/myRequests/models/IMyRequest.ts | 2 + .../myRequests/models/IMyRequestsDebug.ts | 11 + .../features/myRequests/myRequests.service.ts | 223 ++++++++++++++---- 5 files changed, 276 insertions(+), 81 deletions(-) diff --git a/src/webparts/requestPortal/features/myRequests/MyRequestsPanel.module.scss b/src/webparts/requestPortal/features/myRequests/MyRequestsPanel.module.scss index 2edac8e..c8773e2 100644 --- a/src/webparts/requestPortal/features/myRequests/MyRequestsPanel.module.scss +++ b/src/webparts/requestPortal/features/myRequests/MyRequestsPanel.module.scss @@ -40,6 +40,22 @@ color: $red-500; } +.section + .section { + margin-top: $sp-6; + padding-top: $sp-6; + border-top: 1px solid $gray-200; +} + +.sectionTitle { + font-family: $font-sans; + font-size: $fs-caption; + font-weight: 600; + color: $gray-500; + text-transform: uppercase; + letter-spacing: .04em; + margin-bottom: $sp-4; +} + .group + .group { margin-top: $sp-5; } diff --git a/src/webparts/requestPortal/features/myRequests/MyRequestsPanel.tsx b/src/webparts/requestPortal/features/myRequests/MyRequestsPanel.tsx index 0413c0f..a70a910 100644 --- a/src/webparts/requestPortal/features/myRequests/MyRequestsPanel.tsx +++ b/src/webparts/requestPortal/features/myRequests/MyRequestsPanel.tsx @@ -53,8 +53,52 @@ function statusClass(status: string): string { } } -// Постоянная боковая панель «Мои заявки»: заявки, которые создал текущий -// пользователь, по всем типам заявок, известным approval-route API. +const RequestItem: React.FC<{ r: IMyRequest }> = ({ r }) => ( +
  • + { + // Обычный левый клик — SPA-переход (без перезагрузки страницы). + // Ctrl/Cmd/Shift/среднюю кнопку — не трогаем, пусть браузер сам + // откроет в новой вкладке по href. + if (e.defaultPrevented || e.button !== 0 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) { + return; + } + e.preventDefault(); + navigate({ mode: 'approve', formKey: r.formKey, itemId: r.id }); + }} + > +
    + {r.title || `#${r.id}`} + + {r.authorEmail || r.authorName || '— автор не определён —'} + + {r.created && {formatDate(r.created)}} +
    + {r.status || '—'} +
    +
  • +); + +const RequestGroups: React.FC<{ rows: IMyRequest[] }> = ({ rows }) => ( + <> + {groupByType(rows).map((group) => ( +
    +
    {group.requestTypeName}
    + +
    + ))} + +); + +// Постоянная боковая панель «Текущие заявки»: заявки, созданные текущим +// пользователем, и заявки, ждущие сейчас его решения как согласующего — +// по всем типам заявок, известным approval-route API. // Владелец: второй разработчик. Вся логика/данные — внутри этой папки. // Общий UI-кит (shared/ui), pnpjs и config можно импортировать, но НЕ менять. // @@ -80,55 +124,34 @@ const MyRequestsPanel: React.FC = ({ context }) => { }; }, [context]); - const groups = rows ? groupByType(rows) : []; + const pendingApproval = rows ? rows.filter((r) => r.kind === 'approval') : []; + const own = rows ? rows.filter((r) => r.kind === 'own') : []; return ( -