const page = CarPassPage; const APPROVED_STATUSES = new Set(["approved", "verified"]); const state = { centers: [], selectedCenterId: null, }; function selectedCenter() { return state.centers.find((item) => item.id === state.selectedCenterId) || null; } function statusLabel(status) { return { pending: "На проверке", approved: "Подтверждено", verified: "Подтверждено", rejected: "Отклонено", needs_changes: "Нужны правки", draft: "Черновик", suspended: "Приостановлено", }[status] || status || "Черновик"; } function setValue(form, name, value) { const input = form.elements[name]; if (input) input.value = Array.isArray(value) ? value.join(", ") : value ?? ""; } function renderCenters() { const root = document.querySelector("#centersList"); root.innerHTML = state.centers.length ? state.centers.map((center) => ` `).join("") : `
Заявок СТО пока нет. Заполните форму справа.
`; root.querySelectorAll("[data-center]").forEach((button) => { button.addEventListener("click", () => { state.selectedCenterId = Number(button.dataset.center); renderCenters(); fillForm(); }); }); } function fillForm() { const form = document.querySelector("#serviceProfileForm"); const center = selectedCenter(); form.reset(); document.querySelector("#centerTitle").textContent = center ? (center.display_name || center.name) : "Новая заявка СТО"; document.querySelector("#centerHint").textContent = center ? [center.city, center.address, center.phone].filter(Boolean).join(" · ") || "Дополните карточку, чтобы клиентам было проще записаться." : "Заполните карточку сервиса и отправьте ее на проверку."; document.querySelector("#centerStatus").textContent = statusLabel(center?.verification_status); document.querySelector("#saveCenterBtn").textContent = center ? "Сохранить профиль" : "Отправить заявку"; document.querySelector("#openSettingsLink").classList.toggle("hidden", !center || !APPROVED_STATUSES.has(center.verification_status)); if (!center) return; [ "display_name", "legal_name", "country", "city", "address", "phone", "contact_person", "working_hours", "specializations", "description", "business_registration_number", "facade_photo_url", "document_photo_urls", "additional_photo_urls", ].forEach((name) => setValue(form, name, center[name])); } function payloadFromForm(form) { const data = page.formData(form); return { display_name: data.display_name, legal_name: data.legal_name || null, country: data.country || null, city: data.city || null, address: data.address || null, phone: data.phone || null, contact_person: data.contact_person || null, working_hours: data.working_hours || null, specializations: page.csvList(data.specializations), description: data.description || null, business_registration_number: data.business_registration_number || null, facade_photo_url: data.facade_photo_url || null, document_photo_urls: page.csvList(data.document_photo_urls), additional_photo_urls: page.csvList(data.additional_photo_urls), }; } async function loadCenters() { state.centers = await page.api("/service-centers/my"); if (!state.selectedCenterId && state.centers.length) state.selectedCenterId = state.centers[0].id; if (state.selectedCenterId && !state.centers.some((item) => item.id === state.selectedCenterId)) { state.selectedCenterId = state.centers[0]?.id || null; } renderCenters(); fillForm(); } document.querySelector("#newCenterBtn").addEventListener("click", () => { state.selectedCenterId = null; renderCenters(); fillForm(); }); document.querySelector("#serviceProfileForm").addEventListener("submit", async (event) => { event.preventDefault(); const center = selectedCenter(); await page.runAction(document.querySelector("#saveCenterBtn"), center ? "Сохраняю..." : "Отправляю...", async () => { const saved = await page.api(center ? `/service-centers/${center.id}` : "/service-centers", { method: center ? "PATCH" : "POST", body: JSON.stringify(payloadFromForm(event.currentTarget)), }); state.selectedCenterId = saved.id; await loadCenters(); page.toast(center ? "Профиль СТО обновлен" : "Заявка отправлена на проверку"); }); }); page.boot(loadCenters);