From fd3750a769fefcf4d3e9465c451bd526262285a2 Mon Sep 17 00:00:00 2001 From: "gorbenko.pavel" Date: Wed, 14 Oct 2026 14:12:46 +0500 Subject: [PATCH] =?UTF-8?q?fix:=20=D1=80=D0=B5=D0=B4=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80=20=D0=BC=D0=B0=D1=80=D1=88=D1=80=D1=83=D1=82=D0=B0?= =?UTF-8?q?=20=D0=BC=D0=BE=D0=B6=D0=B5=D1=82=20=D1=83=D0=B4=D0=B0=D0=BB?= =?UTF-8?q?=D1=8F=D1=82=D1=8C=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D0=BD=D0=B8?= =?UTF-8?q?=D1=82=D0=B5=D0=BB=D0=B5=D0=B9=20=D0=B2=20=D0=9E=D0=B1=D1=85?= =?UTF-8?q?=D0=BE=D0=B4=D0=BD=D0=BE=D0=BC=20=D0=BB=D0=B8=D1=81=D1=82=D0=B5?= =?UTF-8?q?,=20=D0=9A=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=BA=D0=B5=20=D0=B8=20=D0=B7=D0=B0=D1=8F=D0=B2=D0=BA?= =?UTF-8?q?=D0=B5=20=D0=B2=201=D0=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit В этих формах матрице исполнителей (а в Командировке и 1С — и согласующих) не передавалось право удаления, хотя в остальных формах оно есть через composeRemoveRowRule. Co-Authored-By: Claude Opus 5.5 --- .../forms/BusinessTrip/BusinessTripForm.tsx | 11 +++++++++-- .../requestPortal/forms/Clearance/ClearanceForm.tsx | 1 + .../requestPortal/forms/Ticket1C/Ticket1CForm.tsx | 5 ++++- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/webparts/requestPortal/forms/BusinessTrip/BusinessTripForm.tsx b/src/webparts/requestPortal/forms/BusinessTrip/BusinessTripForm.tsx index 1fe105b..335b6d8 100644 --- a/src/webparts/requestPortal/forms/BusinessTrip/BusinessTripForm.tsx +++ b/src/webparts/requestPortal/forms/BusinessTrip/BusinessTripForm.tsx @@ -27,8 +27,10 @@ import { IApproverToWrite, IUseMatrixEditor, unassignedStepMessage, - resolveWriteListId + resolveWriteListId, + composeRemoveRowRule } from '../../shared/approval'; +import { effectiveUserEmail } from '../../shared/impersonation'; import { IRequestFormProps } from '../../models/types'; import { friendlyErrorMessage } from '../../shared/diagnostics'; import { @@ -244,7 +246,11 @@ const BusinessTripForm: React.FC = ({ - approval.searchUsers(q)} /> + approval.searchUsers(q)} + canRemoveRow={composeRemoveRowRule(effectiveUserEmail(context))} + /> {!executors.loading && executors.rows.length > 0 && ( = ({ title="Исполнение (после согласования)" roleLabel="Исполнитель" emptyText="Исполнители не заданы по маршруту." + canRemoveRow={composeRemoveRowRule(effectiveUserEmail(context))} /> )} diff --git a/src/webparts/requestPortal/forms/Clearance/ClearanceForm.tsx b/src/webparts/requestPortal/forms/Clearance/ClearanceForm.tsx index ff883da..da65523 100644 --- a/src/webparts/requestPortal/forms/Clearance/ClearanceForm.tsx +++ b/src/webparts/requestPortal/forms/Clearance/ClearanceForm.tsx @@ -342,6 +342,7 @@ const ClearanceForm: React.FC = ({ title="Исполнение (после согласования)" roleLabel="Исполнитель" emptyText="Исполнители не заданы по маршруту." + canRemoveRow={composeRemoveRowRule(effectiveUserEmail(context))} /> )} diff --git a/src/webparts/requestPortal/forms/Ticket1C/Ticket1CForm.tsx b/src/webparts/requestPortal/forms/Ticket1C/Ticket1CForm.tsx index 39d8871..cc98ac2 100644 --- a/src/webparts/requestPortal/forms/Ticket1C/Ticket1CForm.tsx +++ b/src/webparts/requestPortal/forms/Ticket1C/Ticket1CForm.tsx @@ -31,7 +31,8 @@ import { isEditableStatus, IApproverToWrite, unassignedStepMessage, - executorsToWrite + executorsToWrite, + composeRemoveRowRule } from '../../shared/approval'; import { uploadAttachments, @@ -444,6 +445,7 @@ const Ticket1CForm: React.FC = ({ approval.searchUsers(q)} + canRemoveRow={composeRemoveRowRule(effectiveUserEmail(context))} // Пустой маршрут — штатная ситуация: для части видов работ согласование // не нужно, заявка сразу уходит в Planner. Сбой загрузки маршрута // показывается отдельно (matrix.error) и блокирует отправку. @@ -457,6 +459,7 @@ const Ticket1CForm: React.FC = ({ title="Исполнение" roleLabel="Исполнитель" emptyText="Исполнители не назначены." + canRemoveRow={composeRemoveRowRule(effectiveUserEmail(context))} /> )}