Replace browser prompt()-based editing with proper Bootstrap 5 modal dialogs for testimonials, services, FAQs, and leads. This provides better UX with form validation, structured input fields, and i18n support (ES/RU) instead of raw prompt dialogs. - Add testimonialModal, serviceModal, faqModal, leadModal to admin.html - Add show*/save* methods in admin.js for each entity type - Wire leads.html 'Add lead' button to leadModal - Add modal JS modules (FAQModal, LeadModal, ServiceModal) - Add unit and e2e tests for modals and API client
8.6 KiB
8.6 KiB
План доработки административного раздела TenerifeProp
Результаты визуального тестирования
Дата тестирования: 2026-05-15
Скрипт: tests/scripts/admin-panel-deep-test.js
Milestone: #68 Admin Panel — Fix Broken Functionality
Зеленая зона (работает)
| Раздел | Функционал | Статус |
|---|---|---|
| Dashboard | Стат-карточки загружаются из API | ✅ |
| Dashboard | Быстрые фильтры Semana/Mes/Ano | ✅ |
| Propiedades | Карточки отображаются, фильтры работают | ✅ |
| Propiedades | "Añadir propiedad" открывает модал | ✅ |
| Propiedades | Кнопки Ver/Editar/Eliminar на карточках | ✅ |
| Leads | Таблица загружается, статусы отображаются | ✅ |
| Usuarios | "Añadir usuario" открывает модал | ✅ |
| Settings | Поля загружаются из API | ✅ |
| Sidebar | Навигация между разделами | ✅ |
| Topbar | Переключение языка ES/RU | ✅ |
| Auth | Login/Logout работает | ✅ |
Красная зона (не работает)
1. Testimonios — кнопка "Añadir testimonio" бездейственна
- Issue: #30
- Проблема: Кнопка не имеет
onclickилиdata-bs-toggle. Нет модального окна для создания. - Текущий код:
editTestimonial()используетprompt()для редактирования. - Что нужно:
- Добавить
testimonialModalвadmin.html - Создать
showTestimonialModal(property=null)вadmin.js - Создать
saveTestimonial()с вызовомAPI.createTestimonial()/API.updateTestimonial() - Привязать кнопку "Añadir testimonio" к
showTestimonialModal()
- Добавить
2. Servicios — кнопка "Añadir servicio" бездейственна
- Issue: #31
- Проблема: Нет модального окна для создания. Кнопка — простой
<button>без обработчика. - Текущий код:
editService()используетprompt(). - Что нужно:
- Добавить
serviceModalвadmin.html - Создать
showServiceModal()/saveService()вadmin.js - Привязать кнопку
- Добавить
3. FAQ — кнопка "Añadir pregunta" бездейственна
- Issue: #32
- Проблема: Нет модального окна для создания.
- Текущий код:
editFAQ()используетprompt(). - Что нужно:
- Добавить
faqModalвadmin.html - Создать
showFAQModal()/saveFAQ()вadmin.js - Привязать кнопку
- Добавить
4. Leads — кнопка "Añadir lead manualmente" бездейственна
- Issue: #33
- Проблема: Кнопка не имеет обработчика.
- Текущий код: Нет функций для создания lead из админки.
- Что нужно:
- Добавить
leadModalвadmin.html - Создать
showLeadModal()/saveLead()вadmin.js - API endpoint
POST /api/admin/leadsуже существует в бэкенде - Привязать кнопку
- Добавить
5. Dashboard — графики пустые
- Issue: #34
- Проблема: Блоки "Rendimiento mensual", "Fuentes de tráfico", "Propiedades por tipo", "Estado de leads", "Top 5 propiedades" — пустые.
- Возможные причины:
- Chart.js не инициализируется из-за отсутствия
<canvas>элементов - Данные приходят пустыми из API
- Ошибка в
initCharts()
- Chart.js не инициализируется из-за отсутствия
- Что нужно:
- Проверить
initCharts()вadmin.js - Проверить
<canvas id="...">элементы вadmin.html - Проверить данные из
API.getAdminStats()иAPI.getAnalyticsCharts()
- Проверить
6. Settings — не проверена полная цепочка сохранения
- Issue: #35
- Проблема: Кнопка "Guardar cambios" присутствует, но E2E-проверка не проводилась.
- Что нужно:
- Изменить значение → Сохранить → Перезагрузить страницу
- Проверить что значение сохранилось
Порядок исправления (приоритет)
| Приоритет | Задача | Issue | Почему первым |
|---|---|---|---|
| P0 | Добавить модал для Testimonios | #30 | Контент-критично |
| P0 | Добавить модал для Servicios | #31 | Контент-критично |
| P0 | Добавить модал для FAQ | #32 | Контент-критично |
| P1 | Добавить модал для Leads | #33 | Операционно важно |
| P1 | Исправить графики Dashboard | #34 | Визуальная ценность |
| P2 | Проверить Settings E2E | #35 | Дополнительно |
Технический подход к исправлению
Унифицированная структура модала
Для всех 4 новых модалов использовать паттерн аналогичный propertyModal:
<div class="modal fade" id="{name}Modal" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">...</div>
<div class="modal-body">...</form>...</div>
<div class="modal-footer">
<button data-bs-dismiss="modal">Cancelar</button>
<button onclick="admin.save{Name}()">Guardar</button>
</div>
</div>
</div>
</div>
Унифицированная структура JS-функций
show{Name}Modal(item = null) {
const modal = document.getElementById('{name}Modal')
if (!modal) return
// Reset or fill form
modal._editId = item ? item.id : null
new bootstrap.Modal(modal).show()
}
async save{Name}() {
const modal = document.getElementById('{name}Modal')
const data = {} // collect from form
const res = modal._editId
? await API.update{Name}(modal._editId, data)
: await API.create{Name}(data)
if (res.success) {
bootstrap.Modal.getInstance(modal)?.hide()
this.load{Name}s()
this.showNotification('Guardado', 'success')
}
}
API Client (api.js) — проверить наличие методов
API.createTestimonial(data)— должен POST/api/admin/testimonialsAPI.createService(data)— должен POST/api/admin/servicesAPI.createFAQ(data)— должен POST/api/admin/faqAPI.createLead(data)— должен POST/api/admin/leads(уже есть)
Следующие шаги
-
Phase 1 — Модалы создания (Issues #30, #31, #32, #33)
- @lead-developer создаёт HTML модалы
- @lead-developer добавляет JS функции
- @code-skeptic ревью
-
Phase 2 — Графики Dashboard (Issue #34)
- @lead-developer исправляет
initCharts() - @frontend-developer проверяет вёрстку canvas
- @lead-developer исправляет
-
Phase 3 — Settings E2E (Issue #35)
- @sdet-engineer пишет тест
- Ручная проверка если тест проходит
-
Phase 4 — Финальное визуальное тестирование
- Перезапустить
admin-panel-deep-test.js - Цель: 100% pass rate, 0 warnings
- Перезапустить
Резюме
| Метрика | До | После (цель) |
|---|---|---|
| Разделов | 10 | 10 |
| Проходят тест | 7 | 10 |
| Предупреждения | 3 | 0 |
| Провальные | 0 | 0 |
| Модалов открывается | 2/6 | 6/6 |
Milestone: https://git.softuniq.eu/UniqueSoft/TenerifeProp/milestone/68