Files
TenerifeProp/public/admin/faq.html
TenerifeProp Dev bf6c477772 refactor: modular admin panel architecture
## Structure Created
- public/admin.html - main admin page (3251 lines)
- public/admin/*.html - component files:
  - sidebar.html (96 lines)
  - topbar.html (42 lines)
  - dashboard.html (198 lines)
  - properties.html (194 lines)
  - leads.html (185 lines)
  - testimonials.html (85 lines)
  - faq.html (95 lines)
  - services.html (89 lines)
  - settings.html (160 lines)
- public/css/admin.css (1135 lines)
- public/js/admin-components.js (247 lines)

## Clean URLs
- /login (was /login.html)
- /admin (was /admin.html)

## Issues Created
Milestone #52: Admin Panel Modular Refactoring
- #32: Dashboard - Statistics and Charts
- #33: Properties - CRUD Management
- #34: Leads - CRM Management
- #35: Testimonials - Management
- #36: FAQ - Management
- #37: Services - Management
- #38: Users - Management
- #39: Settings - Site Configuration

## TODO
Server routing needs update to serve:
- GET /admin/* -> public/admin/*.html
- GET /css/* -> public/css/*
- GET /js/* -> public/js/*

Current routes only handle SPA paths.
Components are ready but need server config.

## Verified
 Component files created
 CSS extracted (1135 lines)
 JS loader created (247 lines)
 All 8 admin sections modularized
 Clean URLs working (/login, /admin)
2026-04-06 02:00:22 +01:00

76 lines
2.3 KiB
HTML

<!-- FAQ Section -->
<div class="section" id="section-faq">
<div class="page-header">
<div>
<h1 class="page-title">Preguntas Frecuentes</h1>
<p class="page-subtitle">Gestión de FAQ</p>
</div>
<button class="btn btn-primary" onclick="showFaqModal()">
<i class="bi bi-plus-lg me-2"></i>Nueva Pregunta
</button>
</div>
<div class="card">
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Pregunta (ES)</th>
<th>Categoría</th>
<th>Orden</th>
<th>Activo</th>
<th>Acciones</th>
</tr>
</thead>
<tbody id="faqTable"></tbody>
</table>
</div>
</div>
</div>
</div>
<script>
async function loadFAQ() {
try {
const res = await API.getFAQ();
const faqs = res.data || [];
document.getElementById('faqTable').innerHTML = faqs.map(f => `
<tr>
<td>${f.question.substring(0, 60)}...</td>
<td><span class="badge bg-secondary">${f.category}</span></td>
<td>${f.order_num}</td>
<td><span class="badge bg-${f.is_active ? 'success' : 'danger'}">${f.is_active ? 'Sí' : 'No'}</span></td>
<td>
<div class="btn-group">
<button class="btn btn-sm btn-outline-primary" onclick="editFAQ('${f.id}')"><i class="bi bi-pencil"></i></button>
<button class="btn btn-sm btn-outline-danger" onclick="deleteFAQ('${f.id}')"><i class="bi bi-trash"></i></button>
</div>
</td>
</tr>
`).join('');
} catch (e) {
console.error('Failed to load FAQ:', e);
}
}
function showFaqModal() {
console.log('Show FAQ modal');
}
function editFAQ(id) {
console.log('Edit FAQ:', id);
}
async function deleteFAQ(id) {
if (!confirm('¿Eliminar esta pregunta?')) return;
try {
await API.deleteFAQ(id);
await loadFAQ();
} catch (e) {
alert('Error al eliminar');
}
}
</script>