# Formularios
# views > Formulario.vue
# Componente > Formulario > BaseInput.vue
Estos componentes de formulario se explican en otro tutorial
<BaseInput
v-model="form.producto.title"
type="text"
label="Producto">
</BaseInput>
# Storage de archivos/imágenes
Tenemos un v-if que comprueba si tenemos una imagen que mostrar, sino pasamos al v-else que muestra un cuadrado con fondo gris
<img
v-if="form.src"
:src="form.src"
class="avatar rounded mb-2"
:style="{ height: form.size, width: form.size }">
</img>
<div
v-else
class="avatar bg-gray-500 bg-opacity-100 rounded-lg"
:style="{ height: form.size, width: form.size }">
</div>
# Botón input guardar
Si no estoy editando mostramos el botón guardar v-if que permite seleccionar un archivo y agregarlo a supabase junto con los datos
<label
v-if="form.editar === false"
class="flex content-center btn btn-wide btn-accent"
for="single"
>
{{ form.uploading ? "Guardando ..." : "Guardar" }}
<input
style="visibility: hidden; position: absolute"
type="file"
id="single"
accept="image/*"
@change="form.subirArchivoAgregar"
:disabled="form.uploading"
/>
</label>
# Botón input editar
Si estoy editando el botón input actualiza la imagen y dos datos
<label
v-else="form.editar === true"
class="flex content-center btn btn-accent"
for="single"
>
{{ form.uploading ? "Actualizando ..." : "Actualizar" }}
<input
style="visibility: hidden; position: absolute"
type="file"
id="single"
accept="image/*"
@change="form.subirArchivoActualizar"
:disabled="form.uploading"
/>
</label>
# Tabla de elementos
Mostramos los elementos de la base de datos
# Botón editar
El botón editar obtiene los datos rellenado los campos y cambia el botón guardar por el botón Actualizar
<button
@click.prevent="
form.obtenerDatoId(item.id);
form.editar = !form.editar;
"
class="btn btn-primary">
</button>
# Botón editar
El botón eliminar elimina los datos.
<button @click="form.eliminarDato(item.id)" class="btn btn-danger">
Eliminar
</button>