Nuevas funcionalidades
This commit is contained in:
@@ -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; }
|
||||
|
||||
@@ -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>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}, []);
|
||||
|
||||
Reference in New Issue
Block a user