From 68f225f7947e65943d2f8ff2cf125d91baaa941f Mon Sep 17 00:00:00 2001 From: Light1YT Date: Tue, 30 Jun 2026 15:06:57 +0500 Subject: [PATCH] =?UTF-8?q?fix(concept):=20step=3D"any"=20on=20number=20in?= =?UTF-8?q?puts=20=E2=80=94=20stepMismatch=20=D0=B1=D0=BB=D0=BE=D0=BA?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BB=20submit=20(#1953)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Поле «Стоимость участка» (ConceptProgramForm §7 + ConceptParamsForm /concept) имело step={1_000_000}. Сид из кадастровой стоимости (напр. 74 766.08 ₽, не кратно шагу) → HTML5 stepMismatch → форма :invalid → браузер МОЛЧА блокирует submit (submit-событие не выстреливает) → кнопка «Рассчитать концепцию» не работает на ЛЮБОМ участке с кадастровой стоимостью. Авто-расчёт §7 маскировал баг — он зовёт движок напрямую, минуя валидацию формы. Тот же латентный stepMismatch на floor_height (step 0.1) и пятне (step 1) — clampFloat допускает дробные → step="any" и там. Подтверждено на проде (DOM-патч step="any" → checkValidity()=true → submit проходит → GFA 15 876→30 240, FAR 0.24→0.45 под изменённое пятно). --- frontend/src/components/concept/ConceptParamsForm.tsx | 5 ++++- .../src/components/concept/ConceptProgramForm.tsx | 11 +++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/frontend/src/components/concept/ConceptParamsForm.tsx b/frontend/src/components/concept/ConceptParamsForm.tsx index 95117f61..cac862bb 100644 --- a/frontend/src/components/concept/ConceptParamsForm.tsx +++ b/frontend/src/components/concept/ConceptParamsForm.tsx @@ -163,7 +163,10 @@ export function ConceptParamsForm({ id="land-cost" type="number" min={0} - step={1_000_000} + // step="any" — произвольная сумма ₽; step={1_000_000} давал HTML5 + // stepMismatch на не-кратных значениях → форма :invalid → submit молча + // блокировался (см. ConceptProgramForm fix). + step="any" value={params.land_cost_rub ?? ""} placeholder="Необязательно" onChange={(e) => { diff --git a/frontend/src/components/concept/ConceptProgramForm.tsx b/frontend/src/components/concept/ConceptProgramForm.tsx index 7c8f32f7..a7ab4ed7 100644 --- a/frontend/src/components/concept/ConceptProgramForm.tsx +++ b/frontend/src/components/concept/ConceptProgramForm.tsx @@ -383,7 +383,7 @@ export function ConceptProgramForm({ @@ -461,7 +461,7 @@ export function ConceptProgramForm({ aria-label="Глубина пятна секции, м" min={FOOTPRINT_MIN} max={FOOTPRINT_MAX} - step={1} + step="any" value={effFootprintD ?? ""} disabled={!catalogReady} onChange={(e) => @@ -542,7 +542,10 @@ export function ConceptProgramForm({ id="cpf-land-cost" type="number" min={0} - step={1_000_000} + // step="any" — иначе сид из кадастровой стоимости (не кратной шагу, + // напр. 74 766.08 ₽) даёт HTML5 stepMismatch → форма :invalid → + // браузер молча блокирует submit и кнопка «Рассчитать» не работает. + step="any" value={landCostRub ?? ""} placeholder="Необязательно" onChange={(e) => {