From 3c27b794dd8b8c91075e888054cad1d9a3dfba83 Mon Sep 17 00:00:00 2001 From: vladtechno Date: Wed, 29 Jul 2026 13:12:08 +1000 Subject: [PATCH] =?UTF-8?q?repairs:=20=D1=82=D0=B8=D0=BF=20=D0=BC=D0=B0?= =?UTF-8?q?=D1=81=D0=BB=D0=B0=20=D0=B2=20=D0=B1=D0=BB=D0=BE=D0=BA=D0=B5=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BC=D0=B5=D0=BD=D1=8B=20(=D0=B4=D0=B2=D0=B8?= =?UTF-8?q?=D0=B3=D0=B0=D1=82=D0=B5=D0=BB=D1=8C/=D0=B2=D0=B0=D1=80=D0=B8?= =?UTF-8?q?=D0=B0=D1=82=D0=BE=D1=80/=D0=90=D0=9A=D0=9F=D0=9F)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Для отчётов СТО по замене масла (задача 4078) нужно различать двигатель и трансмиссию. В блоке «Замена масла» добавлен выбор типа oil_type (engine|cvt|akpp) и он уходит в payload create. Для вариатора/АКПП поле «следующая через (км)» скрыто — интервал задаётся по модели в отчёте СТО. Co-Authored-By: Claude Opus 4.8 --- .../frontend/src/api/repairsCreate.ts | 1 + .../src/pages/repairs/CreateRepairPage.tsx | 55 +++++++++++++++---- 2 files changed, 45 insertions(+), 11 deletions(-) diff --git a/mechanic-pwa/frontend/src/api/repairsCreate.ts b/mechanic-pwa/frontend/src/api/repairsCreate.ts index 0d3bcce..4524ab6 100644 --- a/mechanic-pwa/frontend/src/api/repairsCreate.ts +++ b/mechanic-pwa/frontend/src/api/repairsCreate.ts @@ -61,6 +61,7 @@ export interface CreateOilChangePayload { enabled: boolean; mileage_at_change: number | null; next_in_km: number; + oil_type: string; // engine | cvt | akpp sticker_photo_uuid: string | null; sticker_extension: string | null; } diff --git a/mechanic-pwa/frontend/src/pages/repairs/CreateRepairPage.tsx b/mechanic-pwa/frontend/src/pages/repairs/CreateRepairPage.tsx index b9027db..ca129b6 100644 --- a/mechanic-pwa/frontend/src/pages/repairs/CreateRepairPage.tsx +++ b/mechanic-pwa/frontend/src/pages/repairs/CreateRepairPage.tsx @@ -61,11 +61,14 @@ interface PartRow { qty: number; } +type OilKind = "engine" | "cvt" | "akpp"; + interface OilChangeState { enabled: boolean; mileage_at_change: number | null; mileage_is_dirty: boolean; // У24: мягкая подписка с шапочным next_in_km: number; + oil_type: OilKind; sticker: PhotoState | null; } @@ -98,6 +101,7 @@ export default function CreateRepairPage() { mileage_at_change: null, mileage_is_dirty: false, next_in_km: 10000, + oil_type: "engine", sticker: null, }); @@ -302,6 +306,7 @@ export default function CreateRepairPage() { enabled: true, mileage_at_change: oilChange.mileage_at_change, next_in_km: oilChange.next_in_km, + oil_type: oilChange.oil_type, sticker_photo_uuid: oilChange.sticker?.status === "uploaded" ? oilChange.sticker.presign.photo_uuid @@ -579,6 +584,27 @@ export default function CreateRepairPage() { {oilChange.enabled && (
+
+ +
+ {([["engine", "Двигатель"], ["cvt", "Вариатор"], ["akpp", "АКПП"]] as [OilKind, string][]).map( + ([v, l]) => ( + + ), + )} +
+
-
- - - setOilChange((oc) => ({ ...oc, next_in_km: Number(e.target.value) || 0 })) - } - /> -
+ {oilChange.oil_type === "engine" ? ( +
+ + + setOilChange((oc) => ({ ...oc, next_in_km: Number(e.target.value) || 0 })) + } + /> +
+ ) : ( +

+ Интервал {oilChange.oil_type === "cvt" ? "вариатора" : "АКПП"} задаётся по модели авто в + отчёте СТО. +

+ )}