feat(pwa): rename Салон→Салон перед, add Салон зад + Багажник slots
Extract photo slots to tested lib/inspectionSlots; rename interior label, add interior-rear + trunk slots (all inspection types). 3 new tests. Co-Authored-By: claude-flow <ruv@ruv.net>
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
import { slotsForType } from "@/lib/inspectionSlots";
|
||||
|
||||
test("Салон перед (ключ interior сохранён) + Салон зад + Багажник", () => {
|
||||
const slots = slotsForType("handover");
|
||||
expect(slots.find((s) => s.side === "interior")?.label).toBe("Салон перед");
|
||||
expect(slots.find((s) => s.side === "interior-rear")?.label).toBe("Салон зад");
|
||||
expect(slots.find((s) => s.side === "trunk")?.label).toBe("Багажник");
|
||||
});
|
||||
|
||||
test("порядок: Салон перед → Салон зад → Багажник идут подряд", () => {
|
||||
const sides = slotsForType("return").map((s) => s.side);
|
||||
const i = sides.indexOf("interior");
|
||||
expect(sides.slice(i, i + 3)).toEqual(["interior", "interior-rear", "trunk"]);
|
||||
});
|
||||
|
||||
test("набор одинаков для всех типов (унифицировано)", () => {
|
||||
expect(slotsForType("periodic")).toEqual(slotsForType("handover"));
|
||||
});
|
||||
@@ -0,0 +1,37 @@
|
||||
/**
|
||||
* Слоты фото осмотра авто. Вынесены из InspectionEditor, чтобы быть покрытыми
|
||||
* тестами. Все типы осмотров (приёмка/выдача/плановый/ad-hoc) показывают один
|
||||
* набор — фидбек: общее состояние машины фиксируем всегда.
|
||||
*
|
||||
* ВАЖНО: `side` — стабильный ключ слота (часть S3-ключа фото и значение
|
||||
* PhotoSide на бэке). Подпись (`label`) менять можно, ключ — нет, иначе уже
|
||||
* снятые фото осиротеют. Поэтому «Салон перед» имеет ключ `interior` (бывш. «Салон»).
|
||||
*/
|
||||
export interface InspectionSlot {
|
||||
side: string;
|
||||
label: string;
|
||||
}
|
||||
|
||||
export const SLOTS_GENERAL: InspectionSlot[] = [
|
||||
{ side: "front", label: "Перед" },
|
||||
{ side: "rear", label: "Зад" },
|
||||
{ side: "left", label: "Левый бок" },
|
||||
{ side: "right", label: "Правый бок" },
|
||||
{ side: "vin", label: "VIN" },
|
||||
{ side: "odometer", label: "Одометр" },
|
||||
{ side: "interior", label: "Салон перед" },
|
||||
{ side: "interior-rear", label: "Салон зад" },
|
||||
{ side: "trunk", label: "Багажник" },
|
||||
{ side: "free", label: "Свободное" },
|
||||
];
|
||||
|
||||
export const SLOT_JACK: InspectionSlot = { side: "jack", label: "Домкрат" };
|
||||
|
||||
// Шильдик замены масла — отдельный слот при выдаче/приёмке. Фото нужно как для
|
||||
// сверки текущего пробега со следующим ТО, так и для контроля что водитель не
|
||||
// клеит свой стикер.
|
||||
export const SLOT_OIL_STICKER: InspectionSlot = { side: "oil-sticker", label: "Шильдик замены масла" };
|
||||
|
||||
export function slotsForType(_type: string): InspectionSlot[] {
|
||||
return [...SLOTS_GENERAL, SLOT_JACK, SLOT_OIL_STICKER];
|
||||
}
|
||||
@@ -25,30 +25,8 @@ import { loadZoneLabels } from "@/data/zoneLabels";
|
||||
import { damageTypeRuToEnum } from "@/data/damageVocabulary";
|
||||
import { ttImageUrl } from "@/api/vehicles";
|
||||
|
||||
const SLOTS_GENERAL: { side: string; label: string }[] = [
|
||||
{ side: "front", label: "Перед" },
|
||||
{ side: "rear", label: "Зад" },
|
||||
{ side: "left", label: "Левый бок" },
|
||||
{ side: "right", label: "Правый бок" },
|
||||
{ side: "vin", label: "VIN" },
|
||||
{ side: "odometer", label: "Одометр" },
|
||||
{ side: "interior", label: "Салон" },
|
||||
{ side: "free", label: "Свободное" },
|
||||
];
|
||||
|
||||
const SLOT_JACK = { side: "jack", label: "Домкрат" };
|
||||
// Шильдик замены масла — отдельный слот при выдаче/приёмке.
|
||||
// Фото нужно как для сверки текущего пробега со следующим ТО, так и для
|
||||
// контроля что водитель не клеит свой стикер.
|
||||
const SLOT_OIL_STICKER = { side: "oil-sticker", label: "Шильдик замены масла" };
|
||||
|
||||
/** Все типы осмотров (выдача/приёмка/плановый/...) показывают одинаковый
|
||||
* набор слотов общих ракурсов + домкрат. Раньше «return» исключал общие
|
||||
* фото в пользу скорости приёмки, но фидбек: при приёмке всё равно надо
|
||||
* фиксировать общее состояние машины, как и при выдаче/осмотре. */
|
||||
function slotsForType(_type: string): typeof SLOTS_GENERAL {
|
||||
return [...SLOTS_GENERAL, SLOT_JACK, SLOT_OIL_STICKER];
|
||||
}
|
||||
// Слоты фото осмотра — в @/lib/inspectionSlots (покрыто тестами).
|
||||
import { slotsForType } from "@/lib/inspectionSlots";
|
||||
|
||||
const SEVERITY_LABELS: Record<string, string> = {
|
||||
cosmetic: "косметика",
|
||||
|
||||
Reference in New Issue
Block a user