From b7302c23d684d44370e39032e07d94a383859767 Mon Sep 17 00:00:00 2001 From: vladtechno Date: Sat, 1 Aug 2026 12:51:35 +1000 Subject: [PATCH] =?UTF-8?q?feat(inspection):=20=D0=BA=D0=BD=D0=BE=D0=BF?= =?UTF-8?q?=D0=BA=D0=B0=20=C2=AB=D0=9F=D1=80=D0=BE=D0=B4=D0=BE=D0=BB=D0=B6?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D0=BE=D1=81=D0=BC=D0=BE=D1=82=D1=80=C2=BB?= =?UTF-8?q?=20=D0=BD=D0=B0=20=D0=B0=D0=B2=D1=82=D0=BE=D0=B7=D0=B0=D0=BA?= =?UTF-8?q?=D1=80=D1=8B=D1=82=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Бэкенд раз в час закрывает осмотры, которые несколько часов никто не трогает, — иначе снятые фото не попадают в отчёты. Редактирование в приложении завязано на статус, поэтому механик, вернувшийся с перерыва, упирался бы в заблокированную карточку и заводил осмотр заново. На автозакрытом (meta.auto_completed) показываем плашку с объяснением и кнопку: статус возвращается в in_progress, редактор открывается снова. Co-Authored-By: Claude Opus 5 --- .../frontend/src/pages/InspectionReview.tsx | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/mechanic-pwa/frontend/src/pages/InspectionReview.tsx b/mechanic-pwa/frontend/src/pages/InspectionReview.tsx index 30ebb1a..567c5a2 100644 --- a/mechanic-pwa/frontend/src/pages/InspectionReview.tsx +++ b/mechanic-pwa/frontend/src/pages/InspectionReview.tsx @@ -14,6 +14,7 @@ import { AuthImg } from "@/components/AuthImg"; import { ttImageUrl } from "@/api/vehicles"; import { VendorVehicleScheme } from "@/components/vehicle-scheme/VendorVehicleScheme"; import { Card } from "@/components/ui/card"; +import { Button } from "@/components/ui/button"; import { loadZoneLabels } from "@/data/zoneLabels"; const STATUS_LABELS: Record = { @@ -138,6 +139,19 @@ export default function InspectionReview() { onError: () => toast.error("Не удалось сохранить заметку"), }); + // Осмотр закрыт не механиком, а автоматикой — вернуть в работу и дать + // доснять. Без этой кнопки механик, вернувшийся через три часа, упирается в + // заблокированную карточку и вынужден заводить осмотр заново. + const reopenMutation = useMutation({ + mutationFn: () => patchInspection(insId, { status: "in_progress" }), + onSuccess: (updated) => { + queryClient.setQueryData(["inspection", insId], updated); + queryClient.invalidateQueries({ queryKey: ["vehicle"] }); + navigate(`/inspections/${insId}/edit`); + }, + onError: () => toast.error("Не удалось вернуть осмотр в работу"), + }); + if (isLoading) return
Загружаю…
; if (isError || !ins) return
Осмотр не найден.
; @@ -233,6 +247,27 @@ export default function InspectionReview() { )} + {ins.meta?.auto_completed === true && ( + +
+
Закрыт автоматически
+

+ Осмотр несколько часов никто не открывал, поэтому система завершила + его сама — чтобы фотографии не пропали из отчётов. Если работа не + доделана, верните осмотр в работу и продолжите. +

+
+ +
+ )} +

Заметки механика