Прод mechanic-pwa собирался с ветки feat/driver-pwa, а main отставал на 18 коммитов (24.05→10.06). Сборка от 29.07 ушла в прод с main — из приложения пропали разделы. Вернул содержимое ветки и заново наложил работу 29.07. Возвращено: - лента: сумма за месяц, разделители по дням с итогом дня, цена в строке, бейдж «с улицы»; - карточка ремонта /repairs/:id (ссылка из ленты вела в никуда); - правка ремонта /repairs/:id/edit (окно 1 час); - ремонт «с улицы» /repairs/new-external; - блок «Механики» — делёж оплаты 1/N; - vitest-харнесс и вынесенные в lib/ тестируемые хелперы. Поверх наложено (работа 29.07): несколько замен масла за заезд, запчасти из складского каталога вместо свободного текста. Дополнительно: - пикер деталей вынесен в общий PartsPickerModal (создание + правка). Без этого правка ремонта отправляла детали без part_id и сверка склада возвращала всё списанное на остаток; - форма правки знает про 1:N масла — раньше схлопнула бы вторую запись; - карточка ремонта показывает артикул детали и все замены масла. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
38 lines
2.0 KiB
TypeScript
38 lines
2.0 KiB
TypeScript
/**
|
|
* Слоты фото осмотра авто. Вынесены из 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];
|
|
}
|