This commit is contained in:
2025-09-26 17:23:30 -06:00
3 changed files with 76 additions and 0 deletions

View File

@@ -55,10 +55,24 @@
</div>
</div>
<div class="scroll">
<<<<<<< HEAD
<div v-if="loading.users" class="muted">Cargando usuarios</div>
<div v-else class="grid">
<UserCard v-for="u in filteredUsers" :key="u.username" :item="u" :mode="layoutMode"
@toggleDisable="toggleDisable" @remove="removeUser" @edit="openEditUser" />
=======
<form @submit.prevent="createUser" class="row" style="margin-bottom:10px;">
<input v-model="form.username" placeholder="usuario" required class="toggle"/>
<input v-model="form.password" placeholder="contraseña" required class="toggle"/>
<input v-model="form.vlan" placeholder="VLAN" class="toggle"/>
<label class="row toggle" style="gap:6px;"><input type="checkbox" v-model="form.disabled"/> deshabilitado</label>
<button type="submit" class="icon-btn">Crear / Actualizar</button>
</form>
<div v-if="loading.users" class="muted">Cargando usuarios</div>
<div v-else class="grid">
<UserCard v-for="u in filteredUsers" :key="u.username" :item="u" :mode="layoutMode"
@toggleDisable="toggleDisable" @remove="removeUser" />
>>>>>>> c92df7bb9a1b22aee21d2c083ea163d21ab1a722
</div>
</div>
</main>
@@ -89,11 +103,14 @@
</select>
</div>
</Modal>
<<<<<<< HEAD
<Modal :open="showUserForm" :title="userFormMode==='edit' ? 'Editar usuario' : (userFormMode==='guest' ? 'Agregar invitado' : 'Agregar usuario')"
@close="showUserForm=false">
<UserForm :model-value="userFormModel" :mode="userFormMode" @submit="handleUserFormSubmit" @cancel="showUserForm=false" />
</Modal>
=======
>>>>>>> c92df7bb9a1b22aee21d2c083ea163d21ab1a722
</template>
<script setup>
@@ -101,12 +118,19 @@ import { onMounted, reactive, ref, computed } from 'vue';
import EventCard from './components/EventCard.js';
import UserCard from './components/UserCard.js';
import Modal from './components/Modal.vue';
<<<<<<< HEAD
import UserForm from './components/UserForm.vue';
=======
>>>>>>> c92df7bb9a1b22aee21d2c083ea163d21ab1a722
const users = ref([]);
const requests = ref([]);
const loading = reactive({ users: false, requests: false });
<<<<<<< HEAD
// formulario inline removido: se usa modal con UserForm
=======
const form = reactive({ username: '', password: '', vlan: '', disabled: false });
>>>>>>> c92df7bb9a1b22aee21d2c083ea163d21ab1a722
const showEventFilters = ref(false);
const showUserFilters = ref(false);
@@ -136,6 +160,20 @@ async function fetchRequests() {
} finally { loading.requests = false; }
}
<<<<<<< HEAD
=======
async function createUser() {
const payload = { ...form };
if (!payload.vlan) delete payload.vlan;
await fetch('/api/users', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload) });
form.username = '';
form.password = '';
form.vlan = '';
form.disabled = false;
await fetchUsers();
}
>>>>>>> c92df7bb9a1b22aee21d2c083ea163d21ab1a722
async function toggleDisable(u) {
await fetch(`/api/users/${encodeURIComponent(u.username)}`, {
method: 'PATCH',
@@ -215,6 +253,7 @@ function applyTheme() {
document.documentElement.classList.toggle('light', theme.value === 'light');
}
<<<<<<< HEAD
const showUserForm = ref(false);
const userFormMode = ref('create'); // 'create' | 'edit' | 'guest'
const userFormModel = ref({ username:'', password:'', vlan:'', disabled:false });
@@ -247,4 +286,9 @@ async function handleUserFormSubmit(data) {
await fetchUsers();
showUserForm.value = false;
}
=======
function openAddUser() { /* placeholder for advanced modal */ }
function openAddGuest() { /* placeholder for advanced modal */ }
function openSettings() { /* placeholder for advanced modal */ }
>>>>>>> c92df7bb9a1b22aee21d2c083ea163d21ab1a722
</script>