From 0c0104f6c9d90b1193c6f12ac5d05c9eeba4d77c Mon Sep 17 00:00:00 2001 From: "gorbenko.pavel" Date: Wed, 28 Oct 2026 09:45:54 +0500 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=BF=D1=80=D0=B5=D0=B6=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=B7=D0=B0=D1=8F=D0=B2=D0=BA=D0=B8=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=BE=D0=BF=D0=BB=D0=B0=D1=82=D1=83=20=D0=BF=D0=BE=20=D0=BE?= =?UTF-8?q?=D1=81=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8E=20=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D1=80=D1=8B=D0=B2=D0=B0=D1=8E=D1=82=D1=81=D1=8F=20=D0=BF?= =?UTF-8?q?=D0=BE=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D0=B5,=20=D0=B2=D0=B8?= =?UTF-8?q?=D0=B4=D0=BD=D0=BE=20=D1=81=D1=82=D0=B0=D1=82=D1=83=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- .../forms/PaymentRequest/model.ts | 6 +++++ .../sections/AmountsSection.tsx | 22 ++++++++++++++++--- .../sections/PaymentSections.module.scss | 10 +++++++++ .../services/previousPayments.service.ts | 11 ++++++++-- 4 files changed, 44 insertions(+), 5 deletions(-) diff --git a/src/webparts/requestPortal/forms/PaymentRequest/model.ts b/src/webparts/requestPortal/forms/PaymentRequest/model.ts index 0de3cd1..d0f0ca6 100644 --- a/src/webparts/requestPortal/forms/PaymentRequest/model.ts +++ b/src/webparts/requestPortal/forms/PaymentRequest/model.ts @@ -20,6 +20,12 @@ export interface IPreviousPayment { /** Уникальный код заявки на оплату. */ code: string; amount: number; + /** Id элемента списка данных — для ссылки на заявку. Нет у снимков, сохранённых до появления ссылок. */ + id?: number; + /** Список партиции (серверный относительный URL), где лежит заявка; '' — текущая. */ + listId?: string; + /** Статус заявки на момент чтения. */ + status?: string; } /** diff --git a/src/webparts/requestPortal/forms/PaymentRequest/sections/AmountsSection.tsx b/src/webparts/requestPortal/forms/PaymentRequest/sections/AmountsSection.tsx index 95ba1b1..e840795 100644 --- a/src/webparts/requestPortal/forms/PaymentRequest/sections/AmountsSection.tsx +++ b/src/webparts/requestPortal/forms/PaymentRequest/sections/AmountsSection.tsx @@ -2,7 +2,8 @@ import * as React from 'react'; import styles from './PaymentSections.module.scss'; import { FormField, TextInput, TextArea } from '../../../shared/ui'; import { formatAmount, overLimitAmount, previousPaymentsTotal } from '../amounts'; -import { ISectionProps } from '../model'; +import { FORM_ID, ISectionProps } from '../model'; +import { routeUrl } from '../../../shared/routing'; import { AmountInput } from './AmountInput'; /** @@ -51,20 +52,35 @@ export const AmountsSection: React.FC = ({ data, set }) => { Номер заявки на оплату + Статус Сумма оплаты {data.PreviousPayments.map((p) => ( - {p.code} + + {p.id ? ( + + {p.code} + + ) : ( + p.code + )} + + {p.status || ''} {formatAmount(p.amount)} ))} - Итого ранее + Итого ранее {formatAmount(previousTotal)} diff --git a/src/webparts/requestPortal/forms/PaymentRequest/sections/PaymentSections.module.scss b/src/webparts/requestPortal/forms/PaymentRequest/sections/PaymentSections.module.scss index 5523301..8db7f96 100644 --- a/src/webparts/requestPortal/forms/PaymentRequest/sections/PaymentSections.module.scss +++ b/src/webparts/requestPortal/forms/PaymentRequest/sections/PaymentSections.module.scss @@ -108,3 +108,13 @@ grid-column: 1 / -1; min-width: 0; } + +.link { + color: $navy-700; + font-weight: 600; + text-decoration: underline; + + &:hover { + color: $gold-600; + } +} diff --git a/src/webparts/requestPortal/forms/PaymentRequest/services/previousPayments.service.ts b/src/webparts/requestPortal/forms/PaymentRequest/services/previousPayments.service.ts index bd422ad..21d9340 100644 --- a/src/webparts/requestPortal/forms/PaymentRequest/services/previousPayments.service.ts +++ b/src/webparts/requestPortal/forms/PaymentRequest/services/previousPayments.service.ts @@ -1,6 +1,6 @@ import { getSP } from '../../../shared/pnp/pnpjs'; import { dataListTitle } from '../../../shared/listTitles'; -import { REQUEST_STATUS } from '../../../shared/approval'; +import { REQUEST_STATUS, currentPartitionForPageUrl } from '../../../shared/approval'; import { FORM_ID, IPreviousPayment } from '../model'; /** @@ -34,7 +34,14 @@ export async function loadPreviousPayments(basisKey: string, excludeId?: number) .filter(`BasisKey eq '${safeKey}'`) .top(MAX_PAYMENTS)()) as IPaymentRow[]; + const listId = currentPartitionForPageUrl(FORM_ID)?.listId || ''; return rows .filter((row) => row.Id !== excludeId && NOT_COUNTED_STATUSES.indexOf(row.RequestStatus || '') === -1) - .map((row) => ({ code: row.RequestUniqueCode || `№${row.Id}`, amount: Number(row.PayAmount || 0) })); + .map((row) => ({ + code: row.RequestUniqueCode || `№${row.Id}`, + amount: Number(row.PayAmount || 0), + id: row.Id, + listId, + status: row.RequestStatus || '' + })); }