Nuevas funcionalidades

This commit is contained in:
santiago
2025-10-30 23:30:06 +01:00
parent 7ea17feb2c
commit da1f197d57
3 changed files with 77 additions and 76 deletions
+45 -45
View File
@@ -25,8 +25,8 @@ export default function Page() {
const imprimirError = (err: unknown = {}, title = '¡Hubo un error!', onConfirm: () => void = () => {}) => {
let msg = typeof err === 'string' ? err : JSON.stringify(err);
if (typeof err === 'object' && err !== null) {
const anyErr = err as { message?: unknown; err?: unknown };
if (typeof anyErr.message === 'string') msg = anyErr.message;
const anyErr = err as { message?: unknown; err?: unknown };
if (typeof anyErr.message === 'string') msg = anyErr.message;
}
// Mostrar alerta simple
// eslint-disable-next-line no-alert
@@ -34,11 +34,11 @@ export default function Page() {
onConfirm();
// comportamiento original: limpiar token y redirigir si token error
if (typeof err === 'object' && err !== null) {
const anyErr = err as { err?: unknown };
if (anyErr.err === 'token error') {
try { localStorage.clear(); } catch (_) {}
router.push('/');
}
const anyErr = err as { err?: unknown };
if (anyErr.err === 'token error') {
try { localStorage.clear(); } catch (_) {}
router.push('/');
}
}
};
@@ -68,19 +68,19 @@ export default function Page() {
if (!idServicio) return;
updateIsLoading(true);
try {
const headers = responsable.token ? { Authorization: `Bearer ${responsable.token}` } : undefined;
const res = await axiosInstance.get<{ Usuario?: Record<string, unknown>; idCuestionarioPrograma?: number }>(`/servicio/admin?idServicio=${idServicio}`, { headers });
setAlumno(res.data.Usuario ?? null);
updateIsLoading(false);
if (res.data.idCuestionarioPrograma) router.push('/responsable');
const headers = responsable.token ? { Authorization: `Bearer ${responsable.token}` } : undefined;
const res = await axiosInstance.get<{ Usuario?: Record<string, unknown>; idCuestionarioPrograma?: number }>(`/servicio/admin?idServicio=${idServicio}`, { headers });
setAlumno(res.data.Usuario ?? null);
updateIsLoading(false);
if (res.data.idCuestionarioPrograma) router.push('/responsable');
} catch (err: unknown) {
updateIsLoading(false);
if (typeof err === 'object' && err !== null && 'response' in err) {
const anyErr = err as { response?: { data?: unknown } };
if (anyErr.response?.data) imprimirError(anyErr.response.data);
else imprimirError(err);
} else if (err instanceof Error) imprimirError(err.message);
else imprimirError(String(err));
updateIsLoading(false);
if (typeof err === 'object' && err !== null && 'response' in err) {
const anyErr = err as { response?: { data?: unknown } };
if (anyErr.response?.data) imprimirError(anyErr.response.data);
else imprimirError(err);
} else if (err instanceof Error) imprimirError(err.message);
else imprimirError(String(err));
}
};
@@ -100,35 +100,35 @@ export default function Page() {
return (
<section className="container my-5 px-3">
<div className="my-5 mensaje">
<p className="is-size-2">2025 Evaluación de la institución receptora de servicio social</p>
<p>
Estimado(a) responsable de programa de servicio social:
Te solicitamos llenar cuidadosamente los campos solicitados a continuación para poder
validar el término del servicio social de nuestro alumno(a)
</p>
<p>
Los datos están sujetos al aviso de privacidad integral que se puede consultar en el sitio web:
<a href="https://www.acatlan.unam.mx/normatividad" target="_blank" rel="noreferrer"> www.acatlan.unam.mx/normatividad</a>
</p>
</div>
<div className="my-5 mensaje">
<p className="is-size-2">2025 Evaluación de la institución receptora de servicio social</p>
<p>
Estimado(a) responsable de programa de servicio social:
Te solicitamos llenar cuidadosamente los campos solicitados a continuación para poder
validar el término del servicio social de nuestro alumno(a)
</p>
<p>
Los datos están sujetos al aviso de privacidad integral que se puede consultar en el sitio web:
<a href="https://www.acatlan.unam.mx/normatividad" target="_blank" rel="noreferrer"> www.acatlan.unam.mx/normatividad</a>
</p>
</div>
<BotonRegresar />
<BotonRegresar />
{idServicio !== null && (
<CuestionarioResponsbale2
idServicio={idServicio}
responsable={{ token: responsable.token }}
imprimirMensaje={imprimirMensaje}
imprimirWarning={imprimirWarning}
imprimirError={imprimirError}
updateIsLoading={updateIsLoading}
/>
)}
{idServicio !== null && (
<CuestionarioResponsbale2
idServicio={idServicio}
responsable={{ token: responsable.token }}
imprimirMensaje={imprimirMensaje}
imprimirWarning={imprimirWarning}
imprimirError={imprimirError}
updateIsLoading={updateIsLoading}
/>
)}
{isLoading && (
<div className="vh"><h3>Cargando...</h3></div>
)}
{isLoading && (
<div className="vh"><h3>Cargando...</h3></div>
)}
<style jsx>{`
.SINO * { margin: 0.5rem 0 !important; }
+21 -21
View File
@@ -67,35 +67,35 @@ export default function Page() {
return (
<section className="container px-2 pb-6">
<BotonRegresar />
<BotonRegresar />
<div className="has-text-justified is-size-6 mb-6">
<p className="block is-size-4">Estimado(a) responsable del programa de servicio social:</p>
<div className="has-text-justified is-size-6 mb-6">
<p className="block is-size-4">Estimado(a) responsable del programa de servicio social:</p>
<p className="block">
Te solicitamos llenar cuidadosamente los campos solicitados a continuación para iniciar el trámite de registro de servicio social de nuestro alumno(a), quien a su vez completará posteriormente el proceso en este mismo sistema con otros datos.
</p>
<p className="block">
Te solicitamos llenar cuidadosamente los campos solicitados a continuación para iniciar el trámite de registro de servicio social de nuestro alumno(a), quien a su vez completará posteriormente el proceso en este mismo sistema con otros datos.
</p>
<p className="block">
Es muy importante escribir correctamente el correo del alumno para que el sistema pueda enviarle la notificación correspondiente de que ya puede ingresar a completar su registro. También debes tomar en cuenta que la fecha de inicio NO se podrá modificar, sólo la fecha de término en caso de que el alumno no cumpla las 480 horas en el periodo mínimo de 6 meses. Al siguiente día de la fecha de término programada, se activará la opción de cargar la carta de término y llenar el cuestionario de desempeño del alumno. En caso de que exista algún error en los datos o cartas emitidas se les notificará en este panel en cuanto el Departamento de Servicio Social y Bolsa de Trabajo revise su solicitud, para que realicen la corrección correspondiente.
</p>
</div>
<p className="block">
Es muy importante escribir correctamente el correo del alumno para que el sistema pueda enviarle la notificación correspondiente de que ya puede ingresar a completar su registro. También debes tomar en cuenta que la fecha de inicio NO se podrá modificar, sólo la fecha de término en caso de que el alumno no cumpla las 480 horas en el periodo mínimo de 6 meses. Al siguiente día de la fecha de término programada, se activará la opción de cargar la carta de término y llenar el cuestionario de desempeño del alumno. En caso de que exista algún error en los datos o cartas emitidas se les notificará en este panel en cuanto el Departamento de Servicio Social y Bolsa de Trabajo revise su solicitud, para que realicen la corrección correspondiente.
</p>
</div>
<h2 className="title">Añadir Servicio Social</h2>
<h2 className="title">Añadir Servicio Social</h2>
<NuevoServicio
responsable={responsable}
imprimirMensaje={imprimirMensaje}
imprimirWarning={imprimirWarning}
imprimirError={imprimirError}
updateIsLoading={updateIsLoading}
/>
<NuevoServicio
responsable={responsable}
imprimirMensaje={imprimirMensaje}
imprimirWarning={imprimirWarning}
imprimirError={imprimirError}
updateIsLoading={updateIsLoading}
/>
<BotonRegresar />
<BotonRegresar />
{isLoading && (<div className="vh"><h3>Cargando...</h3></div>)}
{isLoading && (<div className="vh"><h3>Cargando...</h3></div>)}
<style jsx>{``}</style>
<style jsx>{``}</style>
</section>
);
}
+11 -10
View File
@@ -2,7 +2,7 @@
import React, { useEffect, useState } from "react";
import { axiosInstance } from "@/api/config";
import type { AxiosError } from "axios";
import type { AxiosError } from "axios";
type Responsable = {
idUsuario?: number;
@@ -67,6 +67,7 @@ export default function NuevoServicio({
setPrograma({});
};
// Validacion para mostrar el boton
const mostrarBoton = () => {
if (!alumno.idUsuario) return true;
if (!correo) return true;
@@ -76,7 +77,7 @@ export default function NuevoServicio({
return false;
};
// Funcion parA Buscar alumno
// Funcion para Buscar alumno
const buscarAlumno = async () => {
updateIsLoading(true);
try {
@@ -156,20 +157,20 @@ export default function NuevoServicio({
const onFileChange = (f?: File) => {
if (!f) { setFile(null); return; }
if (f.size >= 20000000) {
imprimirError({ message: 'El tamaño del archivo exede los 20MB' });
setFile(null);
return;
imprimirError({ message: 'El tamaño del archivo exede los 20MB' });
setFile(null);
return;
}
setFile(f);
};
useEffect(() => {
if (responsable.idTipoUsuario === 2) {
const md = new Date();
md.setDate(md.getDate() - 16);
setMinDate(md);
updateFechas();
obtenerProgramas();
const md = new Date();
md.setDate(md.getDate() - 16);
setMinDate(md);
updateFechas();
obtenerProgramas();
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);