diff --git a/back/app/Http/Controllers/ExamenController.php b/back/app/Http/Controllers/ExamenController.php
index a6dff66..1b4a5fc 100644
--- a/back/app/Http/Controllers/ExamenController.php
+++ b/back/app/Http/Controllers/ExamenController.php
@@ -366,6 +366,9 @@ public function generarPreguntas($examenId)
/**
* 4. INICIAR EXAMEN (marcar hora inicio)
*/
+/**
+ * 4. INICIAR EXAMEN (marcar hora inicio e incrementar intentos)
+ */
public function iniciarExamen(Request $request)
{
$request->validate([
@@ -383,7 +386,7 @@ public function iniciarExamen(Request $request)
], 403);
}
- // Traer datos del área-proceso directamente desde la DB
+ // Obtener datos del área-proceso
$areaProceso = \DB::table('area_proceso')
->join('procesos', 'area_proceso.proceso_id', '=', 'procesos.id')
->join('areas', 'area_proceso.area_id', '=', 'areas.id')
@@ -405,7 +408,7 @@ public function iniciarExamen(Request $request)
], 400);
}
- // Verificar que no exceda el número máximo de intentos
+ // Verificar límite de intentos
if ($areaProceso && $examen->intentos >= $areaProceso->proceso_intentos_maximos) {
return response()->json([
'success' => false,
@@ -413,16 +416,15 @@ public function iniciarExamen(Request $request)
], 403);
}
- // Marcar hora inicio si no está iniciado
- if (!$examen->hora_inicio) {
- $examen->update([
- 'hora_inicio' => now(),
- 'estado' => 'en_progreso',
- 'intentos' => $examen->intentos + 1
- ]);
- }
+ // 🔥 Incrementar intento y marcar inicio
+ $examen->increment('intentos');
- // Obtener preguntas con toda la información
+ $examen->update([
+ 'hora_inicio' => now(), // Hora normal del servidor
+ 'estado' => 'en_progreso'
+ ]);
+
+ // Obtener preguntas completas
$preguntas = $this->examenService->obtenerPreguntasExamen($examen);
return response()->json([
@@ -442,9 +444,7 @@ public function iniciarExamen(Request $request)
}
- /**
- * 5. RESPONDER PREGUNTA
- */
+
public function responderPregunta($preguntaAsignadaId, Request $request)
{
$request->validate([
diff --git a/back/app/Http/Controllers/PostulanteAuthController.php b/back/app/Http/Controllers/PostulanteAuthController.php
index 7e07c69..8617eec 100644
--- a/back/app/Http/Controllers/PostulanteAuthController.php
+++ b/back/app/Http/Controllers/PostulanteAuthController.php
@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Postulante;
+use App\Models\ResultadoAdmision;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Auth;
@@ -145,7 +146,7 @@ class PostulanteAuthController extends Controller
}
-public function obtenerPagosPostulante(Request $request)
+ public function obtenerPagosPostulante(Request $request)
{
$postulante = $request->user(); // o Auth::guard('postulante')->user();
@@ -209,7 +210,7 @@ public function obtenerPagosPostulante(Request $request)
// ===============================
// 3️⃣ BANCO NACIÓN
// ===============================
- $urlBanco = 'https://inscripciones.admision.unap.edu.pe/api/get-pagos-banco-dni';
+ $urlBanco = 'https://inscripciones.admision.unap.edu.pe/api/get-pagos-banco';
$responseBanco = Http::post($urlBanco, [
'dni' => $dni,
diff --git a/back/routes/api.php b/back/routes/api.php
index 67fd8fa..27bf6e8 100644
--- a/back/routes/api.php
+++ b/back/routes/api.php
@@ -99,6 +99,7 @@ Route::prefix('postulante')->group(function () {
Route::get('/me', [PostulanteAuthController::class, 'me']);
Route::get('/pagos', [PostulanteAuthController::class, 'obtenerPagosPostulante']);
Route::get('/postulante/mis-procesos',[PostulanteAuthController::class, 'misProcesos']);
+ Route::get('/mis-procesos', [PostulanteAuthController::class, 'misProcesos']);
});
@@ -154,4 +155,5 @@ Route::middleware(['auth:postulante'])->group(function () {
// Finalizar examen
Route::post('/examen/{examen}/finalizar', [ExamenController::class, 'finalizarExamen']);
+
});
\ No newline at end of file
diff --git a/front/src/assets/images/boletabn.jpg b/front/src/assets/images/boletabn.jpg
new file mode 100644
index 0000000..b097c63
Binary files /dev/null and b/front/src/assets/images/boletabn.jpg differ
diff --git a/front/src/assets/images/buses-una.jpg b/front/src/assets/images/buses-una.jpg
new file mode 100644
index 0000000..295f7f5
Binary files /dev/null and b/front/src/assets/images/buses-una.jpg differ
diff --git a/front/src/assets/images/caja.png b/front/src/assets/images/caja.png
new file mode 100644
index 0000000..d9437de
Binary files /dev/null and b/front/src/assets/images/caja.png differ
diff --git a/front/src/assets/images/pagalo.png b/front/src/assets/images/pagalo.png
new file mode 100644
index 0000000..b9f2635
Binary files /dev/null and b/front/src/assets/images/pagalo.png differ
diff --git a/front/src/assets/img3.jpg b/front/src/assets/img3.jpg
new file mode 100644
index 0000000..07eb6c2
Binary files /dev/null and b/front/src/assets/img3.jpg differ
diff --git a/front/src/components/WebPage.vue b/front/src/components/WebPage.vue
index e3c7542..6b9ed73 100644
--- a/front/src/components/WebPage.vue
+++ b/front/src/components/WebPage.vue
@@ -3,39 +3,30 @@
-
-
diff --git a/front/src/components/WebPageSections/ConvocatoriasSection.vue b/front/src/components/WebPageSections/ConvocatoriasSection.vue
index e8d6497..704a4de 100644
--- a/front/src/components/WebPageSections/ConvocatoriasSection.vue
+++ b/front/src/components/WebPageSections/ConvocatoriasSection.vue
@@ -7,198 +7,281 @@
Convocatorias Vigentes
- Selecciona el proceso de admisión que se ajuste a tu perfil
+
+ Selecciona el proceso de admisión que se ajuste a tu perfil
+
+
-
-
-
- Principal
-
-
-
-
-
-
-
-
- Proceso de admisión general para todas las carreras profesionales de pregrado.
- Examen de conocimientos: 15 de diciembre 2023.
-
-
-
-
-
-
Acciones Rápidas
-
-
+
+
+
+
-
-
-
Preinscripción en Línea
-
Completa tu preinscripción de manera digital y segura
-
+
Postulantes del CEPRE
-
-
- Iniciar Preinscripción
-
-
+
+
+
+
+
+
+ Modalidad extraordinaria para perfiles específicos
-
-
-
-
-
-
-
-
- postulaNTES DEL CEPRE
-
-
-
-
- postulaNTES DEL CEPRE
-
-
+
+
+
\ No newline at end of file
diff --git a/front/src/components/WebPageSections/HeroSection.vue b/front/src/components/WebPageSections/HeroSection.vue
index 8c97a15..98d9a16 100644
--- a/front/src/components/WebPageSections/HeroSection.vue
+++ b/front/src/components/WebPageSections/HeroSection.vue
@@ -1,37 +1,102 @@
-
+
+
+
+
+
-
Convocatoria 2026
+
+
Convocatoria 2026
+
+
+ Inscripciones abiertas
+
+
+
- Admision
- 2026
+ Admisión 2026
+
- Forma parte de la comunidad universitaria más prestigiosa del país.
-
Admisión 2024-I | Inscripciones abiertas
+ Forma parte de una comunidad académica de excelencia.
+ Postula, infórmate y conoce el proceso.
+
-
+
- Postular Ahora
+ Postular ahora
+
- Tour Virtual
+ Tour virtual
+
+
+
+
+ 44
+ Programas
+
+
+ 3
+ Áreas
+
+
+ +10
+ Sedes
+
+
+
+
-
-
@@ -39,109 +104,371 @@
\ No newline at end of file
diff --git a/front/src/components/WebPageSections/ModalidadesSection.vue b/front/src/components/WebPageSections/ModalidadesSection.vue
index 7982daa..7760b00 100644
--- a/front/src/components/WebPageSections/ModalidadesSection.vue
+++ b/front/src/components/WebPageSections/ModalidadesSection.vue
@@ -8,15 +8,41 @@
-
-
-
+
+
+
+
+
- {{ modalidad.nombre }}
- {{ modalidad.descripcion }}
-
- {{ modalidad.estado }}
-
+
+ Ordinario
+ Proceso regular de admisión, orientado a postulantes que rinden el examen general.
+
+ Disponible
+
+
+
+
+
+
+ Extraordinario
+ Modalidades especiales (por ejemplo: primeros puestos, deportistas calificados u otros).
+
+ Requisitos especiales
+
+
+
+
+
+
+
+
+ Sedes
+ Postulación según la sede disponible, con vacantes y condiciones específicas por ubicación.
+
+ Por sede
@@ -24,12 +50,8 @@
\ No newline at end of file
diff --git a/front/src/components/WebPageSections/ProcessSection.vue b/front/src/components/WebPageSections/ProcessSection.vue
index a68b498..234b33f 100644
--- a/front/src/components/WebPageSections/ProcessSection.vue
+++ b/front/src/components/WebPageSections/ProcessSection.vue
@@ -1,33 +1,65 @@
-
+
-
-
-
-
+
+
+
+
+ Fechas referenciales. Verifica el cronograma oficial de la Dirección de Admisión
+
+
+
+
+/* Tablet */
+@media (max-width: 992px) {
+ .section-title {
+ font-size: 1.85rem;
+ }
+ .modern-steps :deep(.ant-steps-item-title) {
+ font-size: 0.92rem;
+ }
+}
+
+/* Mobile */
+@media (max-width: 768px) {
+ .process-section {
+ padding: 24px 0;
+ }
+
+ .section-title {
+ font-size: 1.55rem;
+ }
+
+ .process-card {
+ padding: 12px 10px 10px;
+ }
+
+ .modern-steps {
+ padding: 4px 4px;
+ }
+
+ /* en vertical se ve mejor con un poquito más de alto */
+ .modern-steps :deep(.ant-steps-item-icon) {
+ width: 28px;
+ height: 28px;
+ line-height: 28px;
+ }
+}
+
\ No newline at end of file
diff --git a/front/src/components/WebPageSections/ProgramasSection.vue b/front/src/components/WebPageSections/ProgramasSection.vue
index f41757b..fae2d47 100644
--- a/front/src/components/WebPageSections/ProgramasSection.vue
+++ b/front/src/components/WebPageSections/ProgramasSection.vue
@@ -1,59 +1,102 @@
-
+
-
+
-
-
-
-
-
-
- {{ carrera.descripcion }}
-
- Vacantes: {{ carrera.vacantes }}
- Puntaje: {{ carrera.puntaje }}
-
- Ver plan de estudios
-
+
+
+
+
+
+
+
+
{{ a.nombre }}
+
{{ a.descripcion }}
+
+
+
+
Programas: {{ a.programas }}
+
Enfoque: {{ a.enfoque }}
+
Duración: {{ a.duracion }}
-
-
+
+
+ Ver detalle del área
+
+
+
\ No newline at end of file
diff --git a/front/src/components/WebPageSections/StatsSection.vue b/front/src/components/WebPageSections/StatsSection.vue
index ad0368e..f06ba09 100644
--- a/front/src/components/WebPageSections/StatsSection.vue
+++ b/front/src/components/WebPageSections/StatsSection.vue
@@ -1,24 +1,41 @@
-
-
+
+
+
-
25+
-
Carreras Profesionales
+
+ 25+
+
+
Carreras Profesionales
+
-
98%
-
Indice de Satisfacción
+
+ 98%
+
+
Índice de Satisfacción
+
-
15,000+
-
Estudiantes Activos
+
+ 15,000+
+
+
Estudiantes Activos
+
-
85%
-
Egresados Laborando
+
+ 85%
+
+
Egresados Laborando
@@ -26,38 +43,158 @@
\ No newline at end of file
diff --git a/front/src/components/nabvar.vue b/front/src/components/nabvar.vue
index fa95146..15822d0 100644
--- a/front/src/components/nabvar.vue
+++ b/front/src/components/nabvar.vue
@@ -2,11 +2,7 @@
-
\ No newline at end of file
diff --git a/front/src/router/index.js b/front/src/router/index.js
index 7831dc8..f261f4c 100644
--- a/front/src/router/index.js
+++ b/front/src/router/index.js
@@ -32,6 +32,12 @@ const routes = [
name: 'DashboardPostulante',
component: () => import('../views/postulante/Dashboard.vue'),
meta: { requiresAuth: true}
+ },
+ {
+ path: '/portal-postulante/test',
+ name: 'TestPostulante',
+ component: () => import('../views/postulante/Test.vue'),
+ meta: { requiresAuth: true}
},
{
path: '/portal-postulante/examen/:examenId',
@@ -52,6 +58,12 @@ const routes = [
component: () => import('../views/postulante/Pagos.vue'),
meta: { requiresAuth: true }
},
+ {
+ path: '/portal-postulante/mis-procesos',
+ name: 'PanelProcesos',
+ component: () => import('../views/postulante/MisProcesos.vue'),
+ meta: { requiresAuth: true }
+ },
]
diff --git a/front/src/views/postulante/Dashboard.vue b/front/src/views/postulante/Dashboard.vue
index 14f7ac3..27add32 100644
--- a/front/src/views/postulante/Dashboard.vue
+++ b/front/src/views/postulante/Dashboard.vue
@@ -1,355 +1,609 @@
-
-
-
-
-
-
-
-
-
-
-
-
- Asignar Examen
-
-
-
-
-
-
-
-
-
- {{ examenStore.examenActual.proceso?.nombre || 'No asignado' }}
-
-
- {{ examenStore.examenActual.area?.nombre || 'No asignado' }}
-
-
- {{ examenStore.examenActual.intentos || 0 }}
-
-
-
- {{ getEstadoTexto }}
-
-
-
- Pagado ({{ examenStore.examenActual.tipo_pago }})
-
-
-
-
-
-
- Seleccionar Área
-
-
-
-
- Iniciar Examen
-
-
-
-
- Ver Resultados
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Test de admisión
+
Tu evaluación está aquí
+
+
+
+
+
+ Disponible desde: {{ state.eligibility.testAvailableAt }}
+
+
+ Fecha límite: {{ state.eligibility.testExpiresAt }}
+
+
+
+
+
+
+
+
+
+
+
Acción
+
+
+ {{ testCtaText }}
+
+
+
+ Entra cuando estés listo. Si estás en progreso, puedes continuar.
+
+
+ No disponible por el momento.
+
+
+
+
+
+
+
{{ totalApplications }}
+
Postulaciones
+
+
+
+ {{ state.eligibility.isEligibleToApply ? "Sí" : "No" }}
+
+
Apto
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Veces que postuló
+
{{ totalApplications }}
+
+
+
+
+
+
+
+
+
+
+ {{ eligibilityTag.text }}
+
+
+ {{ testStatusUi.text }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ record.status }}
+
+
+
+
+
+ Ver
+
+ Postular
+
+
+
+
+ Debes estar apto para postular.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ item.processName }}
+
{{ item.status }}
+
+
+
+ Postuló el: {{ item.createdAt }}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
+
diff --git a/front/src/views/postulante/LoginView.vue b/front/src/views/postulante/LoginView.vue
index 3b6845e..f06d526 100644
--- a/front/src/views/postulante/LoginView.vue
+++ b/front/src/views/postulante/LoginView.vue
@@ -2,315 +2,544 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
![Logo institucional]()
+
UNA
+
+
+
+
Plataforma de Postulantes
+
Admisión 2026
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
- Recordarme
-
-
-
- ¿Olvidó su contraseña?
-
-
-
-
-
+
+
+
+
+
+
- {{ isRegister ? 'Registrarse' : 'Iniciar Sesión' }}
+ Recordarme
+
+
+ ¿Olvidó su contraseña?
+
+
+
+
+
+ {{ isRegister ? "Registrarse" : "Iniciar Sesión" }}
+
+
+
+
+
+
+ {{ isRegister ? "¿Ya tiene una cuenta?" : "¿No tiene una cuenta?" }}
+
+
+
+ {{ isRegister ? "Iniciar sesión" : "Registrarse" }}
-
-
-
-
-
-
-
-
- {{ isRegister
- ? '¿Ya tiene una cuenta?'
- : '¿No tiene una cuenta?'
- }}
-
-
-
-
-
- {{ isRegister ? 'Iniciar sesión' : 'Registrarse' }}
-
+
-
-
-
-
-
-
-
-
-
+
\ No newline at end of file
diff --git a/front/src/views/postulante/MisProcesos.vue b/front/src/views/postulante/MisProcesos.vue
new file mode 100644
index 0000000..4a11f4d
--- /dev/null
+++ b/front/src/views/postulante/MisProcesos.vue
@@ -0,0 +1,222 @@
+
+
+
+
+
+
Mis procesos de admisión
+
Resultados registrados por DNI
+
+
+
+
+
+
+
+
+
+ Total de procesos: {{ procesos.length }}
+
+
+
+
+
+
+
+
+
+
+ {{ record.nombre || '-' }}
+
+
+
+
+
+
+ {{ record.puntaje ?? '-' }}
+
+
+
+
+
+
+ {{ aptoTexto(record.apto) }}
+
+
+
+
+
+
+ Ver detalle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/front/src/views/postulante/Pagos.vue b/front/src/views/postulante/Pagos.vue
index 82d3ea2..4fd9305 100644
--- a/front/src/views/postulante/Pagos.vue
+++ b/front/src/views/postulante/Pagos.vue
@@ -1,79 +1,145 @@
-
+
- Mis Pagos Realizados
+
+
+
Mis Pagos Realizados
+
Historial de pagos registrados en el sistema
+
+
+
+
+
+
+
+ Total de pagos encontrados: {{ pagos.length }}
+
-
-
- Total de pagos encontrados: {{ pagos.length }}
-
+
+
-
+
-
- {{ record.tipo.toUpperCase() }}
+
+ {{ tipoLabel(record.tipo) }}
+
+
+
+
{{ record.codigo || '-' }}
+
+ {{ record.estado }}
+
+
+
+
+
+
+
+
+ {{ getUso(record) }}
+
+
+ {{ record.proceso_nombre || record.proceso }}
+
+
+
+
+
- S/ {{ Number(record.monto).toFixed(2) }}
+
+ S/ {{ Number(record.monto || 0).toFixed(2) }}
+
+
- {{ formatFecha(record.fecha_pago) }}
+ {{ formatFecha(record.fecha_pago) }}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/front/src/views/postulante/PreguntasExamen.vue b/front/src/views/postulante/PreguntasExamen.vue
index a04c9e9..774e475 100644
--- a/front/src/views/postulante/PreguntasExamen.vue
+++ b/front/src/views/postulante/PreguntasExamen.vue
@@ -10,8 +10,9 @@
Intentos: {{ examenInfo.intentos }} / {{ examenInfo.intentos_maximos }}
Tiempo restante:
+
-
-
-
+
+
+
+
+
+
-
+
-
-
-
-
-
+
+
+
+
-
+ :value="opcion.key.toString()"
class="opcion-radio"
>
{{ getLetraOpcion(opcion.key) }}.
@@ -65,11 +76,10 @@
-
-
-
-
+
-
-
+
+
+
+
+ Anterior
+
+
+
+
+ Guardar respuesta y continuar
+
+
+
+ Siguiente
+
+
+
+
+
-
+
+
+
+
+
+
Resumen del Examen
-
Total preguntas: {{ preguntasTransformadas.length }}
-
Respondidas: {{ preguntasRespondidas }} de {{ preguntasTransformadas.length }}
+
Total preguntas: {{ totalPreguntas }}
+
Respondidas (guardadas): {{ preguntasRespondidas }} de {{ totalPreguntas }}
Progreso:
-
+
+
-
+