90 lines
4.6 KiB
TypeScript
90 lines
4.6 KiB
TypeScript
|
|
import type { InspectionMKDElement } from './types';
|
|||
|
|
|
|||
|
|
function createElement(id: string, name: string): InspectionMKDElement {
|
|||
|
|
return {
|
|||
|
|
id,
|
|||
|
|
name,
|
|||
|
|
generalStatus: 'NOT_SELECTED',
|
|||
|
|
electroStatus: 'NOT_SELECTED',
|
|||
|
|
weldingStatus: 'NOT_SELECTED',
|
|||
|
|
repairType: '',
|
|||
|
|
mainPhoto: undefined,
|
|||
|
|
additionalPhotos: []
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/** Типовые наименования элементов по этажу подъезда (поэтажный осмотр). */
|
|||
|
|
export const FLOOR_ELEMENT_NAMES = [
|
|||
|
|
'Стены и потолок',
|
|||
|
|
'Напольное покрытие',
|
|||
|
|
'Лестничный марш',
|
|||
|
|
'Перила',
|
|||
|
|
'Окна и подоконники',
|
|||
|
|
'Освещение',
|
|||
|
|
'Почтовые ящики',
|
|||
|
|
'Двери в квартиры (состояние коробок)',
|
|||
|
|
'Колясочная (при наличии)'
|
|||
|
|
] as const;
|
|||
|
|
|
|||
|
|
/** Типовые элементы для секции «Парадная» (входная группа). */
|
|||
|
|
export const ENTRANCE_ELEMENT_NAMES = [
|
|||
|
|
'Входная дверь',
|
|||
|
|
'Козырьки',
|
|||
|
|
'Домофон / видеодомофон',
|
|||
|
|
'Освещение',
|
|||
|
|
'Уборка / состояние вестибюля'
|
|||
|
|
] as const;
|
|||
|
|
|
|||
|
|
/** Элементы по общим секциям (ключ — title секции). */
|
|||
|
|
export const COMMON_SECTION_ELEMENTS: Record<string, readonly string[]> = {
|
|||
|
|
'Кровля': ['Покрытие', 'Примыкания', 'Водосточная система', 'Выходы на кровлю', 'Ограждения'],
|
|||
|
|
'Подвал': ['Несущие конструкции', 'Коммуникации', 'Освещение', 'Вентиляция', 'Отсутствие протечек / затоплений', 'Двери и люки'],
|
|||
|
|
'Фундамент': ['Видимая часть фундамента', 'Отмостка', 'Гидроизоляция', 'Вентиляционные продухи'],
|
|||
|
|
'Фасад': ['Стены', 'Швы', 'Окна общего пользования', 'Отливы', 'Балконы (общие конструкции)'],
|
|||
|
|
'Благоустройство': [
|
|||
|
|
'Дорожки и проезды, тротуары',
|
|||
|
|
'Освещение дворовой территории',
|
|||
|
|
'Урны и контейнеры для мусора',
|
|||
|
|
'Контейнерная площадка',
|
|||
|
|
'Озеленение (газоны, кустарники)',
|
|||
|
|
'Детская / спортивная площадки',
|
|||
|
|
'Парковочные места',
|
|||
|
|
'Ограждение территории',
|
|||
|
|
'Крыльца и входные группы (со стороны двора)',
|
|||
|
|
'Ливневая канализация'
|
|||
|
|
],
|
|||
|
|
'Общий паркинг': ['Покрытие', 'Разметка', 'Освещение', 'Ограждение', 'Вентиляция (если подземный)'],
|
|||
|
|
'Технический этаж': ['Конструкции', 'Инженерное оборудование', 'Освещение', 'Доступ'],
|
|||
|
|
'Чердак': ['Конструкции', 'Утепление', 'Вентиляция', 'Освещение', 'Люки'],
|
|||
|
|
'Цоколь': ['Видимая часть цоколя', 'Отмостка', 'Гидроизоляция', 'Вентиляционные продухи']
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
/** Создать массив элементов МКД из списка названий (с уникальными id). */
|
|||
|
|
export function buildElementsFromNames(
|
|||
|
|
names: readonly string[],
|
|||
|
|
prefix: string
|
|||
|
|
): InspectionMKDElement[] {
|
|||
|
|
return names.map((name, idx) =>
|
|||
|
|
createElement(`${prefix}-${idx}-${Date.now()}`, name)
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/** Создать элементы этажа по шаблону. */
|
|||
|
|
export function buildFloorElements(entranceNumber: number, floorNumber: number): InspectionMKDElement[] {
|
|||
|
|
const prefix = `entrance-${entranceNumber}-floor-${floorNumber}`;
|
|||
|
|
return buildElementsFromNames(FLOOR_ELEMENT_NAMES, prefix);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/** Создать элементы парадной по шаблону. */
|
|||
|
|
export function buildEntranceElements(entranceNumber: number): InspectionMKDElement[] {
|
|||
|
|
const prefix = `entrance-${entranceNumber}`;
|
|||
|
|
return buildElementsFromNames(ENTRANCE_ELEMENT_NAMES, prefix);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/** Создать элементы для общей секции по title. */
|
|||
|
|
export function buildCommonSectionElements(sectionTitle: string, sectionId: string): InspectionMKDElement[] {
|
|||
|
|
const names = COMMON_SECTION_ELEMENTS[sectionTitle];
|
|||
|
|
if (!names || names.length === 0) return [];
|
|||
|
|
return buildElementsFromNames(names, sectionId);
|
|||
|
|
}
|