Actualizar configuracion.html
This commit is contained in:
@@ -346,7 +346,7 @@
|
||||
<script>
|
||||
let cachedTemplates = {};
|
||||
let currentTemplateType = null;
|
||||
let localGuilds = []; // Guardará los gremios cargados para la IA
|
||||
let localGuilds = [];
|
||||
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
if (!localStorage.getItem("token")) window.location.href = "index.html";
|
||||
@@ -364,7 +364,6 @@
|
||||
lucide.createIcons();
|
||||
|
||||
try {
|
||||
// 1. Cargamos todos los gremios del usuario
|
||||
const resGuilds = await fetch(`${API_URL}/guilds`, { headers: { "Authorization": `Bearer ${localStorage.getItem("token")}` } });
|
||||
const dataGuilds = await resGuilds.json();
|
||||
|
||||
@@ -376,9 +375,7 @@
|
||||
localGuilds = dataGuilds.guilds;
|
||||
list.innerHTML = '';
|
||||
|
||||
// 2. Para cada gremio, mostramos su fila
|
||||
localGuilds.forEach(g => {
|
||||
// El array de keywords lo leemos del JSONB de la BD (si existe), si no, un array vacío.
|
||||
const keywords = Array.isArray(g.ia_keywords) ? g.ia_keywords : [];
|
||||
|
||||
const tagsHtml = keywords.length > 0
|
||||
@@ -428,13 +425,11 @@
|
||||
const guildId = document.getElementById('iaModalGuildId').value;
|
||||
const rawKeywords = document.getElementById('iaModalKeywords').value;
|
||||
|
||||
// Limpiamos y convertimos el texto en un array
|
||||
const keywordsArray = rawKeywords.split(',')
|
||||
.map(k => k.trim().toLowerCase())
|
||||
.filter(k => k.length > 0);
|
||||
|
||||
try {
|
||||
// Hacemos el PUT a la nueva ruta que vamos a crear en el servidor
|
||||
const res = await fetch(`${API_URL}/guilds/${guildId}/ia-rules`, {
|
||||
method: 'PUT',
|
||||
headers: { "Content-Type": "application/json", "Authorization": `Bearer ${localStorage.getItem("token")}` },
|
||||
@@ -444,7 +439,7 @@
|
||||
if (res.ok) {
|
||||
showToast("✅ Reglas de IA guardadas correctamente.");
|
||||
closeIaModal();
|
||||
loadIaRules(); // Recargamos la lista
|
||||
loadIaRules();
|
||||
} else {
|
||||
showToast("❌ Error al guardar las reglas.", true);
|
||||
}
|
||||
@@ -453,7 +448,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
// Modificamos showTab para cargar la IA al entrar a Proveedores
|
||||
function showTab(tabId) {
|
||||
document.querySelectorAll('.tab-content').forEach(el => el.classList.add('hidden'));
|
||||
document.getElementById(`view-${tabId}`).classList.remove('hidden');
|
||||
@@ -470,7 +464,7 @@
|
||||
if(tabId === 'whatsapp') { checkWhatsappStatus(); }
|
||||
if(tabId === 'providers') {
|
||||
loadProviderCredentials();
|
||||
loadIaRules(); // <--- AÑADIDO AQUI
|
||||
loadIaRules();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -651,6 +645,10 @@
|
||||
await fetch(`${API_URL}/companies/${id}`, { method: 'DELETE', headers: { "Authorization": `Bearer ${localStorage.getItem("token")}` } });
|
||||
loadCompanies();
|
||||
}
|
||||
|
||||
// ==========================================
|
||||
// CARGA DE ESTADOS Y GESTIÓN DE SEGURIDAD
|
||||
// ==========================================
|
||||
async function loadStatusesConfig() {
|
||||
const list = document.getElementById('listStatuses');
|
||||
list.innerHTML = '<p class="text-center text-xs text-gray-400 mt-10">Cargando...</p>';
|
||||
@@ -661,12 +659,25 @@
|
||||
data.statuses.forEach(s => {
|
||||
const div = document.createElement('div');
|
||||
div.className = "p-3 border border-gray-100 rounded-lg bg-gray-50 flex justify-between items-center group hover:border-blue-200 transition-colors";
|
||||
div.innerHTML = `<div class="flex items-center gap-3"><div class="w-3 h-3 rounded-full bg-${s.color}-500"></div><span class="font-bold text-gray-700 text-sm">${s.name}</span></div><button onclick="deleteStatus(${s.id})" class="text-gray-300 hover:text-red-500"><i data-lucide="trash-2" class="w-4 h-4"></i></button>`;
|
||||
|
||||
// SI ES DEL SISTEMA, PONEMOS UN CANDADO. SI NO, LA PAPELERA.
|
||||
const actionBtn = s.is_system
|
||||
? `<i data-lucide="lock" class="w-4 h-4 text-slate-300" title="Estado del sistema (Imborrable)"></i>`
|
||||
: `<button onclick="deleteStatus(${s.id})" class="text-gray-300 hover:text-red-500"><i data-lucide="trash-2" class="w-4 h-4"></i></button>`;
|
||||
|
||||
div.innerHTML = `
|
||||
<div class="flex items-center gap-3">
|
||||
<div class="w-3 h-3 rounded-full bg-${s.color}-500"></div>
|
||||
<span class="font-bold text-gray-700 text-sm">${s.name}</span>
|
||||
</div>
|
||||
${actionBtn}
|
||||
`;
|
||||
list.appendChild(div);
|
||||
});
|
||||
lucide.createIcons();
|
||||
} catch(e) { list.innerHTML = '<p class="text-red-500 text-xs text-center">Error</p>'; }
|
||||
}
|
||||
|
||||
async function addStatus() {
|
||||
const input = document.getElementById('newStatusInput');
|
||||
const color = document.getElementById('newStatusColor').value;
|
||||
@@ -677,13 +688,19 @@
|
||||
if(res.ok) { showToast("Añadido"); input.value = ""; loadStatusesConfig(); }
|
||||
} catch(e) { showToast("Error", true); }
|
||||
}
|
||||
|
||||
async function deleteStatus(id) {
|
||||
if(!confirm("¿Borrar?")) return;
|
||||
if(!confirm("¿Borrar este estado? Asegúrate de que ningún servicio lo esté utilizando.")) return;
|
||||
try {
|
||||
const res = await fetch(`${API_URL}/statuses/${id}`, { method: 'DELETE', headers: { "Authorization": `Bearer ${localStorage.getItem("token")}` } });
|
||||
const json = await res.json();
|
||||
if(res.ok) { showToast("Eliminado"); loadStatusesConfig(); } else { showToast(json.error || "Error", true); }
|
||||
} catch(e) { showToast("Error", true); }
|
||||
if(res.ok) {
|
||||
showToast("Estado eliminado");
|
||||
loadStatusesConfig();
|
||||
} else {
|
||||
showToast(json.error || "Error al borrar", true);
|
||||
}
|
||||
} catch(e) { showToast("Error de conexión", true); }
|
||||
}
|
||||
|
||||
function showToast(msg, isError = false) {
|
||||
|
||||
Reference in New Issue
Block a user