From 78e5eec9b66d2371121374d63e0f575d83fd77e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A2=D0=B8=D0=BC=D1=83=D1=80=20=D0=93=D0=BE=D1=80=D0=BE?= =?UTF-8?q?=D0=B4=D0=B5=D1=86=D0=BA=D0=B8=D0=B9?= Date: Tue, 27 Oct 2026 16:43:31 +0500 Subject: [PATCH] =?UTF-8?q?feat(ct):=20=D0=BF=D0=BE=D0=B4=D1=81=D0=B2?= =?UTF-8?q?=D0=B5=D1=82=D0=BA=D0=B0=20=D0=BD=D0=B5=D0=B7=D0=B0=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D0=BD=D0=B5=D0=BD=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BD=D0=B0?= =?UTF-8?q?=20=D0=A8=D0=B0=D0=B3=D0=B5=203,=20=D1=83=D1=81=D0=BB=D0=BE?= =?UTF-8?q?=D0=B2=D0=B8=D1=8F=20=D0=BE=D0=BF=D0=BB=D0=B0=D1=82=D1=8B=20?= =?UTF-8?q?=D0=BE=D0=B1=D1=8F=D0=B7=D0=B0=D1=82=D0=B5=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D1=8B=20(#9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Красная рамка — то, что не пускает дальше Шага 3: «Выбрать», пока нет победителя, пустой километраж логистики, пустые условия оплаты. Условия оплаты были помечены обязательными, но сохранять не мешали — теперь проверяются. Пустая цена — бледной заливкой: заметно, но сохранению не мешает, поставщик мог не предложить позицию. Подсветка видна сразу, пока заполняют. Co-Authored-By: Claude Opus 5.5 (1M context) --- .../Step3ComparisonTable/ComparisonMatrix.tsx | 9 +++++- .../Step3ComparisonTable/ExtraPositionRow.tsx | 11 +++++-- .../Step3ComparisonTable/MatrixRowView.tsx | 7 +++-- .../Step3ComparisonTable.module.scss | 20 ++++++++++++ .../step3Validation.test.ts | 31 ++++++++++++++++--- .../Step3ComparisonTable/step3Validation.ts | 20 +++++++++--- .../Step3ComparisonTable/useStep3Matrix.ts | 1 + 7 files changed, 84 insertions(+), 15 deletions(-) diff --git a/src/webparts/ctFormsPortal/forms/ct/components/Step3ComparisonTable/ComparisonMatrix.tsx b/src/webparts/ctFormsPortal/forms/ct/components/Step3ComparisonTable/ComparisonMatrix.tsx index 16307ab..d9cfa79 100644 --- a/src/webparts/ctFormsPortal/forms/ct/components/Step3ComparisonTable/ComparisonMatrix.tsx +++ b/src/webparts/ctFormsPortal/forms/ct/components/Step3ComparisonTable/ComparisonMatrix.tsx @@ -34,6 +34,8 @@ export function ComparisonMatrix({ matrix, currencyRates, isRestrictedView, adat // Колонка, для которой открыто окно «Исключить из сравнения». const [excludingSupplierId, setExcludingSupplierId] = React.useState(undefined); const excludingSupplier = suppliersWithOffer.find(s => s.id === excludingSupplierId); + // Как в проверке перед сохранением (getStep3SaveError): выбор на исключённом — не победитель. + const hasWinner = suppliersWithOffer.some(s => s.id === selectedSupplierId); const totalColSpan = FIXED_COLS + suppliersWithOffer.reduce((sum, s) => sum + getSubCols(supplierCurrencies[s.id] ?? 'KZT', isRestrictedView), 0); @@ -113,7 +115,12 @@ export function ComparisonMatrix({ matrix, currencyRates, isRestrictedView, adat {!isReadOnly ? ( <>