Files
TenerifeProp/ADMIN_PANEL_PLAN.md
APAW Agent Sync 8c1b897b9d feat(admin): replace prompt() with Bootstrap modals for CRUD operations
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
2026-05-16 00:43:04 +01:00

8.6 KiB
Raw Blame History

План доработки административного раздела 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() для редактирования.
  • Что нужно:
    1. Добавить testimonialModal в admin.html
    2. Создать showTestimonialModal(property=null) в admin.js
    3. Создать saveTestimonial() с вызовом API.createTestimonial() / API.updateTestimonial()
    4. Привязать кнопку "Añadir testimonio" к showTestimonialModal()

2. Servicios — кнопка "Añadir servicio" бездейственна

  • Issue: #31
  • Проблема: Нет модального окна для создания. Кнопка — простой <button> без обработчика.
  • Текущий код: editService() использует prompt().
  • Что нужно:
    1. Добавить serviceModal в admin.html
    2. Создать showServiceModal() / saveService() в admin.js
    3. Привязать кнопку

3. FAQ — кнопка "Añadir pregunta" бездейственна

  • Issue: #32
  • Проблема: Нет модального окна для создания.
  • Текущий код: editFAQ() использует prompt().
  • Что нужно:
    1. Добавить faqModal в admin.html
    2. Создать showFAQModal() / saveFAQ() в admin.js
    3. Привязать кнопку

4. Leads — кнопка "Añadir lead manualmente" бездейственна

  • Issue: #33
  • Проблема: Кнопка не имеет обработчика.
  • Текущий код: Нет функций для создания lead из админки.
  • Что нужно:
    1. Добавить leadModal в admin.html
    2. Создать showLeadModal() / saveLead() в admin.js
    3. API endpoint POST /api/admin/leads уже существует в бэкенде
    4. Привязать кнопку

5. Dashboard — графики пустые

  • Issue: #34
  • Проблема: Блоки "Rendimiento mensual", "Fuentes de tráfico", "Propiedades por tipo", "Estado de leads", "Top 5 propiedades" — пустые.
  • Возможные причины:
    • Chart.js не инициализируется из-за отсутствия <canvas> элементов
    • Данные приходят пустыми из API
    • Ошибка в initCharts()
  • Что нужно:
    1. Проверить initCharts() в admin.js
    2. Проверить <canvas id="..."> элементы в admin.html
    3. Проверить данные из API.getAdminStats() и API.getAnalyticsCharts()

6. Settings — не проверена полная цепочка сохранения

  • Issue: #35
  • Проблема: Кнопка "Guardar cambios" присутствует, но E2E-проверка не проводилась.
  • Что нужно:
    1. Изменить значение → Сохранить → Перезагрузить страницу
    2. Проверить что значение сохранилось

Порядок исправления (приоритет)

Приоритет Задача 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/testimonials
  • API.createService(data) — должен POST /api/admin/services
  • API.createFAQ(data) — должен POST /api/admin/faq
  • API.createLead(data) — должен POST /api/admin/leads (уже есть)

Следующие шаги

  1. Phase 1 — Модалы создания (Issues #30, #31, #32, #33)

    • @lead-developer создаёт HTML модалы
    • @lead-developer добавляет JS функции
    • @code-skeptic ревью
  2. Phase 2 — Графики Dashboard (Issue #34)

    • @lead-developer исправляет initCharts()
    • @frontend-developer проверяет вёрстку canvas
  3. Phase 3 — Settings E2E (Issue #35)

    • @sdet-engineer пишет тест
    • Ручная проверка если тест проходит
  4. 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