diff --git a/src/webparts/requestPortal/forms/BusinessTrip/BusinessTripView.tsx b/src/webparts/requestPortal/forms/BusinessTrip/BusinessTripView.tsx index 701b500..d05ba88 100644 --- a/src/webparts/requestPortal/forms/BusinessTrip/BusinessTripView.tsx +++ b/src/webparts/requestPortal/forms/BusinessTrip/BusinessTripView.tsx @@ -156,6 +156,7 @@ const BusinessTripView: React.FC = ({ context, itemId, f {!executors.loading && executors.rows.length > 0 && ( = ({ context, itemId, formKey {!executors.loading && executors.rows.length > 0 && ( approval.searchUsers(q)} title="Исполнение" roleLabel="Исполнитель" diff --git a/src/webparts/requestPortal/forms/RecruitingHire/RecruitingHireView.tsx b/src/webparts/requestPortal/forms/RecruitingHire/RecruitingHireView.tsx index d735734..8f453b4 100644 --- a/src/webparts/requestPortal/forms/RecruitingHire/RecruitingHireView.tsx +++ b/src/webparts/requestPortal/forms/RecruitingHire/RecruitingHireView.tsx @@ -452,6 +452,7 @@ const RecruitingHireView: React.FC = ({ context, itemI {!executors.loading && (executors.rows.length > 0 || canAddExecutor) && ( approval.searchUsers(q)} title="Исполнение" roleLabel="Исполнитель" diff --git a/src/webparts/requestPortal/forms/RecruitingSelection/RecruitingSelectionView.tsx b/src/webparts/requestPortal/forms/RecruitingSelection/RecruitingSelectionView.tsx index d8c0ba6..d0d01de 100644 --- a/src/webparts/requestPortal/forms/RecruitingSelection/RecruitingSelectionView.tsx +++ b/src/webparts/requestPortal/forms/RecruitingSelection/RecruitingSelectionView.tsx @@ -438,6 +438,7 @@ const RecruitingSelectionView: React.FC = ({ cont {!executors.loading && (executors.rows.length > 0 || canAddExecutor) && ( approval.searchUsers(q)} title="Исполнение" roleLabel="Исполнитель" diff --git a/src/webparts/requestPortal/forms/Referral/ReferralView.tsx b/src/webparts/requestPortal/forms/Referral/ReferralView.tsx index 124c649..fb09e1e 100644 --- a/src/webparts/requestPortal/forms/Referral/ReferralView.tsx +++ b/src/webparts/requestPortal/forms/Referral/ReferralView.tsx @@ -234,6 +234,7 @@ const ReferralView: React.FC = ({ context, itemId, formKey, {!executors.loading && executors.rows.length > 0 && ( approval.searchUsers(q)} title="Исполнение" roleLabel="Исполнитель" diff --git a/src/webparts/requestPortal/forms/SkudExplanation/components/SkudRouteTables.tsx b/src/webparts/requestPortal/forms/SkudExplanation/components/SkudRouteTables.tsx index 19782e9..d1d2be2 100644 --- a/src/webparts/requestPortal/forms/SkudExplanation/components/SkudRouteTables.tsx +++ b/src/webparts/requestPortal/forms/SkudExplanation/components/SkudRouteTables.tsx @@ -11,7 +11,8 @@ interface ISkudRouteTablesProps { /** * Маршрут согласования + исполнение (если исполнители есть). Рисуется дважды: * на экране под карточкой и внутри печатного блока под запиской — на печати - * таблица маршрута заменяет подпись сотрудника. + * таблица маршрута заменяет подпись сотрудника. Исполнение на печать не идёт + * (printable={false}), как во всех формах, — только согласование. */ export const SkudRouteTables: React.FC = ({ approvers, executors, search }) => { const hasExecutors = !executors.loading && executors.rows.length > 0; @@ -26,6 +27,7 @@ export const SkudRouteTables: React.FC = ({ approvers, ex title="Исполнение" roleLabel="Исполнитель" emptyText="Исполнители не назначены." + printable={false} /> )} diff --git a/src/webparts/requestPortal/forms/Ticket1C/Ticket1CView.tsx b/src/webparts/requestPortal/forms/Ticket1C/Ticket1CView.tsx index 57cdcb9..1c7f65f 100644 --- a/src/webparts/requestPortal/forms/Ticket1C/Ticket1CView.tsx +++ b/src/webparts/requestPortal/forms/Ticket1C/Ticket1CView.tsx @@ -224,6 +224,7 @@ const Ticket1CView: React.FC = ({ context, itemId, formKey, {!executors.loading && executors.rows.length > 0 && ( approval.searchUsers(q)} title="Исполнение" roleLabel="Исполнитель" diff --git a/src/webparts/requestPortal/forms/TmcTransfer/TmcTransferView.tsx b/src/webparts/requestPortal/forms/TmcTransfer/TmcTransferView.tsx index 5c79a2e..461383c 100644 --- a/src/webparts/requestPortal/forms/TmcTransfer/TmcTransferView.tsx +++ b/src/webparts/requestPortal/forms/TmcTransfer/TmcTransferView.tsx @@ -204,6 +204,7 @@ const TmcTransferView: React.FC = ({ context, itemId, for {!executors.loading && executors.rows.length > 0 && ( approval.searchUsers(q)} title="Исполнение" roleLabel="Исполнитель" diff --git a/src/webparts/requestPortal/forms/UnpaidLeave/UnpaidLeaveView.tsx b/src/webparts/requestPortal/forms/UnpaidLeave/UnpaidLeaveView.tsx index 3e8af71..6218c07 100644 --- a/src/webparts/requestPortal/forms/UnpaidLeave/UnpaidLeaveView.tsx +++ b/src/webparts/requestPortal/forms/UnpaidLeave/UnpaidLeaveView.tsx @@ -178,11 +178,8 @@ const UnpaidLeaveView: React.FC = ({ context, itemId, for approval.searchUsers(q)} /> - {/* Исполнение — внутренняя работа кадров после согласования, к заявлению - сотрудника не относится: на печати только маршрут согласования. */} -
- approval.searchUsers(q)} /> -
+ {/* Исполнение на печать не идёт — это делает сам ExecutorsMatrix (printable={false}). */} + approval.searchUsers(q)} /> {/* Панель решения — ВНЕ печати и FormModeProvider (комментарий редактируемый). */} diff --git a/src/webparts/requestPortal/forms/Vacation/VacationView.tsx b/src/webparts/requestPortal/forms/Vacation/VacationView.tsx index 39f468b..797d882 100644 --- a/src/webparts/requestPortal/forms/Vacation/VacationView.tsx +++ b/src/webparts/requestPortal/forms/Vacation/VacationView.tsx @@ -236,11 +236,8 @@ const VacationView: React.FC = ({ context, itemId, formKey, approval.searchUsers(q)} /> - {/* Исполнение — внутренняя работа кадров после согласования, к заявлению - сотрудника не относится: на печати только маршрут согласования. */} -
- approval.searchUsers(q)} /> -
+ {/* Исполнение на печать не идёт — это делает сам ExecutorsMatrix (printable={false}). */} + approval.searchUsers(q)} /> {/* Панель решения — ВНЕ печати и FormModeProvider (комментарий редактируемый). */} diff --git a/src/webparts/requestPortal/forms/WorkplaceSetup/WorkplaceSetupView.tsx b/src/webparts/requestPortal/forms/WorkplaceSetup/WorkplaceSetupView.tsx index db6ed75..62acab6 100644 --- a/src/webparts/requestPortal/forms/WorkplaceSetup/WorkplaceSetupView.tsx +++ b/src/webparts/requestPortal/forms/WorkplaceSetup/WorkplaceSetupView.tsx @@ -296,6 +296,7 @@ const WorkplaceSetupView: React.FC = ({ context, itemI {!executors.loading && executors.rows.length > 0 && ( approval.searchUsers(q)} title="Исполнение" roleLabel="Исполнитель" diff --git a/src/webparts/requestPortal/shared/approval/ui/ApprovalMatrix.tsx b/src/webparts/requestPortal/shared/approval/ui/ApprovalMatrix.tsx index 6f561df..b644b5e 100644 --- a/src/webparts/requestPortal/shared/approval/ui/ApprovalMatrix.tsx +++ b/src/webparts/requestPortal/shared/approval/ui/ApprovalMatrix.tsx @@ -76,6 +76,13 @@ export interface IApprovalMatrixProps { * editable. В черновике не нужен: там пикер добавляет строку локально. */ onAddRow?: (user: ISiteUser) => void; + /** + * Попадает ли блок в печатную версию заявки. По умолчанию да — маршрут + * согласования печатается. Исполнение (внутренняя работа после согласования) + * не печатается ни в одной форме: false у ExecutorsMatrix и у блоков + * «Исполнение», выведенных через ApprovalMatrix напрямую. + */ + printable?: boolean; } /** Таблица маршрута (согласование или исполнение) + (если editable) правка состава. */ @@ -95,6 +102,7 @@ export const ApprovalMatrix: React.FC = ({ canMoveRow, onMoveRow, onAddRow, + printable = true, }) => { const { rows, loading, error, editable, blocks, retry } = editor; // Строка, для которой открыт выбор замены (ReplaceRowPanel); undefined — закрыт. @@ -218,7 +226,7 @@ export const ApprovalMatrix: React.FC = ({ const hasActionsCol = editable || hasRemovable; return ( -
+
{title}
{waiting &&
{waitingText}
} {!waiting && loading &&
Загрузка маршрута…
} diff --git a/src/webparts/requestPortal/shared/approval/ui/ExecutorsMatrix.tsx b/src/webparts/requestPortal/shared/approval/ui/ExecutorsMatrix.tsx index c2e9430..a6d4325 100644 --- a/src/webparts/requestPortal/shared/approval/ui/ExecutorsMatrix.tsx +++ b/src/webparts/requestPortal/shared/approval/ui/ExecutorsMatrix.tsx @@ -13,6 +13,7 @@ interface IExecutorsMatrixProps { /** * Таблица исполнителей — рисуется только когда в маршруте из админки они есть: * у форм без фазы исполнения блока нет вовсе (кроме редактора маршрута, см. canEditExecutors). + * В печатную версию заявки не попадает (printable={false}) — на печати только согласование. */ export const ExecutorsMatrix: React.FC = ({ editor, search, title = 'Исполнение' }) => { // Редактор маршрута видит блок и пустым — иначе исполнителя некуда добавить. @@ -26,6 +27,7 @@ export const ExecutorsMatrix: React.FC = ({ editor, searc canRemoveRow={editor.editable ? () => true : undefined} pickerPlaceholder="Добавить исполнителя: начните вводить ФИО…" emptyText="Исполнители не назначены." + printable={false} /> ); };