feat(conx_db): complete edit/add modals with nombre, estado, version fields

- Edit modal: added Nombre, Versión, Estado (select) fields
- Add modal: added Nombre, Versión, Estado (select) fields
- loadData() JS mapping: includes nombre, estado, version
- updateItem() payload: sends nombre, estado, version to backend

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Lizandro Guarnizo
2026-05-21 10:14:40 -05:00
co-authored by Copilot
parent 03ccc75337
commit 4cb564890d
+83 -2
View File
@@ -24,11 +24,13 @@
<table class="table-auto w-full">
<thead class="text-sm text-left py-4 border-b border-gray-300">
<tr class="text-left font-semibold border-collapse">
<th class="py-2 px-3 border-b">Nombre</th>
<th class="py-2 px-3 border-b">Puerto</th>
<th class="py-2 px-3 border-b">Usuario</th>
<th class="py-2 px-3 border-b">Password</th>
<th class="py-2 px-3 border-b">Tipo DB</th>
<th class="py-2 px-3 border-b">Servidor</th>
<th class="py-2 px-3 border-b">Estado</th>
<th class="py-2 px-3 border-b">Versión</th>
<th class="py-2 px-3 border-b"></th>
</tr>
</thead>
@@ -36,13 +38,19 @@
<template x-for="data in datos" :key="data.id">
<tr class="hover:bg-gray-100">
<td class="py-3 text-xs px-3 border-b" x-text="data.nombre || '—'"></td>
<td class="py-3 text-xs px-3 border-b" x-text="data.puerto"></td>
<td class="py-3 text-xs px-3 border-b" x-text="data.usuario"></td>
<td class="py-3 text-xs px-3 border-b" x-text="data.password"></td>
<td class="py-3 text-xs px-3 border-b" x-text="tipos.find(ts => ts.ID == data.tipo_db_id)?.nombre || '-'"></td>
<td class="py-3 text-xs px-3 border-b">
<span x-text="(servidores.find(serv => serv.ID == data.servidor_id)?.nombre ?? '-') + ' - ' + (servidores.find(serv => serv.ID == data.servidor_id)?.ip_servidor ?? '')"></span>
</td>
<td class="py-3 text-xs px-3 border-b">
<span class="px-2 py-0.5 rounded-full text-xs font-semibold"
:class="data.estado === 'activo' ? 'bg-green-100 text-green-800' : 'bg-red-100 text-red-800'"
x-text="data.estado || 'activo'"></span>
</td>
<td class="py-3 text-xs px-3 border-b" x-text="data.version || '—'"></td>
<td class="py-3 text-xs px-3 border-b w-24">
<div class="flex items-center gap-2">
<button @click="openViewModal(data)" title="Ver">
@@ -107,6 +115,13 @@
<div class="bg-white rounded-lg shadow-lg p-6 w-11/12 max-w-lg">
<h2 class="text-xl font-bold mb-4">Ver conexión DB</h2>
<div class="flex flex-col sm:flex-row justify-between gap-4 mb-4">
<div class="w-full">
<label class="block mb-2">Nombre:</label>
<input type="text" x-model="selectedItem.nombre" disabled class="border border-gray-300 rounded p-2 w-full" placeholder="Nombre de la conexión" />
</div>
</div>
<div class="flex flex-col sm:flex-row justify-between gap-4 mb-4">
<div class="w-full">
<label class="block mb-2">Puerto:</label>
@@ -144,6 +159,21 @@
<label class="block mb-2">Password:</label>
<input type="text" x-model="selectedItem.password" disabled class="border border-gray-300 rounded p-2 w-full" placeholder="Password" />
</div>
<div class="w-full">
<label class="block mb-2">Versión:</label>
<input type="text" x-model="selectedItem.version" disabled class="border border-gray-300 rounded p-2 w-full" placeholder="Ej: 8.0, 15.2" />
</div>
</div>
<div class="flex flex-col sm:flex-row justify-between gap-4 mb-4">
<div class="w-full">
<label class="block mb-2">Estado:</label>
<select x-model="selectedItem.estado" disabled class="border border-gray-300 rounded p-2 w-full">
<option value="activo">Activo</option>
<option value="inactivo">Inactivo</option>
<option value="mantenimiento">Mantenimiento</option>
</select>
</div>
</div>
<div class="flex justify-end gap-2 text-sm">
@@ -156,6 +186,13 @@
<div class="bg-white rounded-lg shadow-lg p-6 w-11/12 max-w-lg">
<h2 class="text-xl font-bold mb-4">Editar conexión DB</h2>
<div class="flex flex-col sm:flex-row justify-between gap-4 mb-4">
<div class="w-full">
<label class="block mb-2">Nombre:</label>
<input type="text" x-model="selectedItem.nombre" class="border border-gray-300 rounded p-2 w-full" placeholder="Nombre de la conexión" />
</div>
</div>
<div class="flex flex-col sm:flex-row justify-between gap-4 mb-4">
<div class="w-full">
<label class="block mb-2">Puerto:</label>
@@ -193,7 +230,23 @@
<label class="block mb-2">Password:</label>
<input type="text" x-model="selectedItem.password" class="border border-gray-300 rounded p-2 w-full" placeholder="Password" />
</div>
<div class="w-full">
<label class="block mb-2">Versión:</label>
<input type="text" x-model="selectedItem.version" class="border border-gray-300 rounded p-2 w-full" placeholder="Ej: 8.0, 15.2" />
</div>
</div>
<div class="flex flex-col sm:flex-row justify-between gap-4 mb-4">
<div class="w-full">
<label class="block mb-2">Estado:</label>
<select x-model="selectedItem.estado" class="border border-gray-300 rounded p-2 w-full">
<option value="activo">Activo</option>
<option value="inactivo">Inactivo</option>
<option value="mantenimiento">Mantenimiento</option>
</select>
</div>
</div>
<div class="flex justify-between gap-2 text-sm">
<button @click="updateItem()" class="px-4 py-2 bg-[#8eb02f] text-white rounded">Actualizar</button>
<button @click="closeModals()" class="px-4 py-2 bg-gray-600 text-white rounded">Cerrar</button>
@@ -205,6 +258,13 @@
<div class="bg-white rounded-lg shadow-lg p-6 w-11/12 max-w-lg">
<h2 class="text-xl font-bold mb-4">Añadir conexión DB</h2>
<div class="flex flex-col sm:flex-row justify-between gap-4 mb-4">
<div class="w-full">
<label class="block mb-2">Nombre:</label>
<input type="text" x-model="selectedItem.nombre" class="border border-gray-300 rounded p-2 w-full" placeholder="Nombre de la conexión" />
</div>
</div>
<div class="flex flex-col sm:flex-row justify-between gap-4 mb-4">
<div class="w-full">
<label class="block mb-2">Puerto:</label>
@@ -242,6 +302,21 @@
<label class="block mb-2">Password:</label>
<input type="text" x-model="selectedItem.password" class="border border-gray-300 rounded p-2 w-full" placeholder="Password" />
</div>
<div class="w-full">
<label class="block mb-2">Versión:</label>
<input type="text" x-model="selectedItem.version" class="border border-gray-300 rounded p-2 w-full" placeholder="Ej: 8.0, 15.2" />
</div>
</div>
<div class="flex flex-col sm:flex-row justify-between gap-4 mb-4">
<div class="w-full">
<label class="block mb-2">Estado:</label>
<select x-model="selectedItem.estado" class="border border-gray-300 rounded p-2 w-full">
<option value="activo">Activo</option>
<option value="inactivo">Inactivo</option>
<option value="mantenimiento">Mantenimiento</option>
</select>
</div>
</div>
<div class="flex justify-between gap-2 text-sm">
@@ -308,9 +383,12 @@
}).then(response => {
this.datos = response.data.registros.map(data => ({
id: data.ID,
nombre: data.nombre,
puerto: data.puerto,
usuario: data.usuario,
password: data.password,
estado: data.estado,
version: data.version,
tipo_db_id: data.tipo_db_id,
servidor_id: data.servidor_id,
created_at: data.CreatedAt,
@@ -443,9 +521,12 @@
}
const dataToSend = {
nombre: this.selectedItem.nombre,
puerto: this.selectedItem.puerto,
usuario: this.selectedItem.usuario,
password: this.selectedItem.password,
estado: this.selectedItem.estado || 'activo',
version: this.selectedItem.version,
tipo_db_id: this.selectedItem.tipo_db_id,
servidor_id: this.selectedItem.servidor_id,
};