From aab729cd4a1812fda2bc4db03cd0878bbb8e8860 Mon Sep 17 00:00:00 2001 From: esteban Date: Thu, 23 Jul 2026 07:34:16 -0500 Subject: [PATCH] form create --- public/forms/formulario-inscripcion.json | 106 ++++++ src/components/forms/DynamicForm.vue | 441 ++++++++++++++++++++++ src/i18n/es.json | 68 +++- src/pages/[locale]/formulario/index.astro | 27 ++ 4 files changed, 641 insertions(+), 1 deletion(-) create mode 100644 public/forms/formulario-inscripcion.json create mode 100644 src/components/forms/DynamicForm.vue create mode 100644 src/pages/[locale]/formulario/index.astro diff --git a/public/forms/formulario-inscripcion.json b/public/forms/formulario-inscripcion.json new file mode 100644 index 0000000..dd3f451 --- /dev/null +++ b/public/forms/formulario-inscripcion.json @@ -0,0 +1,106 @@ +{ + "action": "/api/formulario/send", + "submit_label": "form.submit", + "steps": [ + { + "label": "form.step1", + "column": 2, + "fields": [ + { "key": "nombre", "label": "form.nombre", "type": "text", "required": true }, + { "key": "apellido", "label": "form.apellido", "type": "text", "required": true }, + { "key": "fecha_nacimiento", "label": "form.fecha_nacimiento", "type": "date", "required": true }, + { "key": "nacionalidad", "label": "form.nacionalidad", "type": "text", "required": true }, + { "key": "documentos", "label": "form.documentos", "type": "text", "required": true, "colspan": 2 }, + { + "key": "sexo", + "label": "form.sexo", + "type": "radio", + "colspan": 2, + "required": true, + "options": [ + { "value": "M", "label": "form.sexo.m" }, + { "value": "F", "label": "form.sexo.f" }, + { "value": "Otro", "label": "form.sexo.o" } + ] + }, + { "key": "direccion_completa", "label": "form.direccion", "type": "text", "required": true, "colspan": 2 }, + { "key": "ciudad", "label": "form.ciudad", "type": "text", "required": true }, + { "key": "estado", "label": "form.estado", "type": "text", "required": true }, + { "key": "pais", "label": "form.pais", "type": "text", "required": true }, + { "key": "postal", "label": "form.codigo_postal", "type": "text", "required": true }, + { "key": "telefono", "label": "form.mobile", "type": "text", "required": true }, + { "key": "whatsapp", "label": "form.whatsapp", "type": "text", "required": true }, + { "key": "email", "label": "form.correo", "type": "email", "required": true, "colspan": 2 } + ] + }, + { + "label": "form.step2", + "column": 2, + "fields": [ + { "key": "profesion", "label": "form.profesion", "type": "text", "required": true }, + { "key": "lugar_trabajo_actual", "label": "form.lugar_trabajo_actual", "type": "text", "required": true }, + { "key": "nivel_academico", "label": "form.nivel_academico", "type": "text", "required": true, "colspan": 2 }, + { + "key": "idioma", + "label": "form.idioma", + "type": "checkbox", + "required": true, + "colspan": 2, + "levels": { + "options": [ + { "value": "Basico", "label": "form.nivel.basico" }, + { "value": "Intermedio", "label": "form.nivel.intermedio" }, + { "value": "Avanzado", "label": "form.nivel.avanzado" } + ] + }, + "options": [ + { "value": "Espanol", "label": "form.idioma.esp" }, + { "value": "Ingles", "label": "form.idioma.ing" }, + { "value": "Hebreo", "label": "form.idioma.heb" }, + { "value": "Portugues", "label": "form.idioma.port" }, + { "value": "Otro", "label": "form.idioma.otro" } + ] + }, + { "key": "idioma_otro", "label": "form.idioma_otro", "type": "text", "required": false, "colspan": 2, "showWhen": { "field": "idioma", "value": "Otro" } }, + { "key": "voluntariado_anterior", "label": "form.voluntariado_anterior", "type": "radio", "required": true, "colspan": 2, "options": + [ + { "value": "si", "label": "form.voluntariado_anterior.si" }, + { "value": "no", "label": "form.voluntariado_anterior.no" } + ] + }, + { "key": "caso_si", "label": "form.caso_si", "type": "textarea", "required": false, "colspan": 2, "showWhen": { "field": "voluntariado_anterior", "value": "si" } } + ] + }, + { + "label": "form.step3", + "fields": [ + { + "key": "areas_colaborar", + "label": "form.areas_colaborar", + "type": "checkbox", + "required": true, + "options": [ + { "value": "Ayuda Humanitaria", "label": "form.areas.ayuda_humanitaria" }, + { "value": "Educacion", "label": "form.areas.educacion" }, + { "value": "Desarrollo Comunitario", "label": "form.areas.desarrollo_comunitario" }, + { "value": "Liderazgo", "label": "form.areas.liderazgo" }, + { "value": "Logistica", "label": "form.areas.logistica" }, + { "value": "Organizacion de Eventos", "label": "form.areas.organizacion_eventos" }, + { "value": "Comunicacion Institucional", "label": "form.areas.comunicacion_institucional" }, + { "value": "Fotografia y Medios", "label": "form.areas.fotografia_medios" }, + { "value": "Recaudacion de Fondos", "label": "form.areas.recaudacion_fondos" }, + { "value": "Gestion de Proyectos", "label": "form.areas.gestion_proyectos" }, + { "value": "Traduccion e Interpretacion", "label": "form.areas.traduccion_interpretacion" }, + { "value": "Asesoria Juridica", "label": "form.areas.asesoria_juridica" }, + { "value": "Servicios Medicos", "label": "form.areas.servicios_medicos" }, + { "value": "Diplomacia Publica", "label": "form.areas.diplomacia_publica" }, + { "value": "Administracion", "label": "form.areas.administracion" }, + { "value": "Tecnologia e Innovacion", "label": "form.areas.tecnologia_innovacion" }, + { "value": "Otra", "label": "form.areas.otra" } + ] + }, + { "key": "areas_otra", "label": "form.areas_otra", "type": "text", "required": false, "showWhen": { "field": "areas_colaborar", "value": "Otra" } } + ] + } + ] +} diff --git a/src/components/forms/DynamicForm.vue b/src/components/forms/DynamicForm.vue new file mode 100644 index 0000000..015befa --- /dev/null +++ b/src/components/forms/DynamicForm.vue @@ -0,0 +1,441 @@ + + + diff --git a/src/i18n/es.json b/src/i18n/es.json index 2d6249e..da530ce 100644 --- a/src/i18n/es.json +++ b/src/i18n/es.json @@ -200,5 +200,71 @@ "footer.form.name": "Nombre y Apellido", "footer.form.mesagge": "Escriba su mensaje", "footer.form.button": "Enviar", - "footer.reserved": "©2026. Todos los Derechos Reservados. Centro del Reino de Paz y Justicia" + "footer.reserved": "©2026. Todos los Derechos Reservados. Centro del Reino de Paz y Justicia", + "form.page_title": "SOLICITUD DE INSCRIPCIÓN COMO VOLUNTARIO", + "form.page_desc": "Completá tus datos para formar parte del Centro del Reino de Paz y Justicia.", + "form.step1": "Datos Personales", + "form.step2": "Formación Academica y Experiencia", + "form.nombre": "Nombre", + "form.apellido": "Apellido", + "form.documentos": "Documento de Identidad / Pasaporte", + "form.fecha_nacimiento": "Fecha de Nacimiento", + "form.nacionalidad": "Nacionalidad", + "form.sexo": "Sexo", + "form.sexo.m": "Masculino", + "form.sexo.f": "Femenino", + "form.sexo.o": "Otro", + "form.direccion": "Dirección Completa", + "form.ciudad": "Ciudad", + "form.estado": "Estado / Provincia", + "form.pais": "País", + "form.codigo_postal": "Código Postal", + "form.mobile": "Teléfono Móvil", + "form.whatsapp": "WhatsApp", + "form.correo": "Correo Electrónico", + "form.profesion": "Profesión u ocupación", + "form.lugar_trabajo_actual": "Lugar de trabajo actual", + "form.nivel_academico": "Nivel académico", + "form.idioma": "Idiomas que domina", + "form.idioma.esp": "Español", + "form.idioma.ing": "Inglés", + "form.idioma.heb": "Hebreo", + "form.idioma.port": "Portugués", + "form.idioma.otro": "Otro", + "form.idioma_otro": "Otro (especificar)", + "form.voluntariado_anterior": "¿Ha realizado voluntariado anteriormente?", + "form.voluntariado_anterior.si": "Sí", + "form.voluntariado_anterior.no": "No", + "form.caso_si": "En caso afirmativo, indique dónde y en qué funciones", + "form.nivel.basico": "Básico", + "form.nivel.intermedio": "Intermedio", + "form.nivel.avanzado": "Avanzado", + "form.step3": "Áreas de Colaboración", + "form.areas_colaborar": "Seleccione las áreas en las que desea colaborar", + "form.areas.ayuda_humanitaria": "Ayuda Humanitaria", + "form.areas.educacion": "Educación", + "form.areas.desarrollo_comunitario": "Desarrollo Comunitario", + "form.areas.liderazgo": "Liderazgo", + "form.areas.logistica": "Logística", + "form.areas.organizacion_eventos": "Organización de Eventos", + "form.areas.comunicacion_institucional": "Comunicación Institucional", + "form.areas.fotografia_medios": "Fotografía y Medios", + "form.areas.recaudacion_fondos": "Recaudación de Fondos", + "form.areas.gestion_proyectos": "Gestión de Proyectos", + "form.areas.traduccion_interpretacion": "Traducción e Interpretación", + "form.areas.asesoria_juridica": "Asesoría Jurídica", + "form.areas.servicios_medicos": "Servicios Médicos / Primeros Auxilios", + "form.areas.diplomacia_publica": "Diplomacia Pública", + "form.areas.administracion": "Administración", + "form.areas.tecnologia_innovacion": "Tecnología e Innovación", + "form.areas.otra": "Otra", + "form.areas_otra": "Otra (especificar)", + "form.submit": "Enviar Formulario", + "form.next": "Siguiente", + "form.back": "Anterior", + "form.sending": "Enviando...", + "form.success": "¡Enviado con éxito!", + "form.error": "Error al enviar", + "form.required": "Este campo es obligatorio", + "form.config_error": "Error al cargar el formulario. Intentá de nuevo más tarde." } diff --git a/src/pages/[locale]/formulario/index.astro b/src/pages/[locale]/formulario/index.astro new file mode 100644 index 0000000..956d16e --- /dev/null +++ b/src/pages/[locale]/formulario/index.astro @@ -0,0 +1,27 @@ +--- +import MainLayout from "@/layouts/MainLayout.astro"; +import Header from "@/components/Header.astro"; +import FooterSection from "@/components/section/FooterSection.astro"; +import DynamicForm from "@/components/forms/DynamicForm.vue"; +import { createTranslator } from "@/i18n"; + +const tl = createTranslator(Astro.currentLocale); +--- + + +
+
+
+
+
+

+ {tl("form.page_title")} +

+ + +
+
+ +