This commit is contained in:
2021-01-11 15:15:07 -06:00
parent 72391853bc
commit 25c49ff8ed
11 changed files with 375 additions and 386 deletions
+1 -1
View File
@@ -63,4 +63,4 @@ export default {
},
},
};
</script>
</script>
+14 -15
View File
@@ -1,15 +1,14 @@
<template>
<div>
<div class="mensajeDiv" v-for="mensaje in Mensajes" :key="mensaje.status">
<div v-if="mensaje.mensaje != '' && mensaje.status == status">
<p class="mensaje has-text-justified">
<span class="block is-size-5">Estimado alumno(a): </span
><br /><br />
{{ mensaje.mensaje }}
</p>
</div>
<div v-if="mensaje.mensaje != '' && mensaje.status == status">
<p class="mensaje has-text-justified">
<span class="block is-size-5">Estimado alumno(a): </span><br /><br />
{{ mensaje.mensaje }}
</p>
</div>
</div>
</div>
</template>
<style scoped>
@@ -20,9 +19,9 @@
<script>
export default {
data(){
return{
Mensajes: [
data() {
return {
Mensajes: [
{ status: 1, mensaje: "" },
{ status: 2, mensaje: "" },
{
@@ -53,8 +52,8 @@ export default {
mensaje: "servicio cancelado",
},
],
}
},
props:[ 'status']
}
</script>
};
},
props: ["status"],
};
</script>
+1 -1
View File
@@ -150,4 +150,4 @@ export default {
this.maxDate.setFullYear(j);
},
};
</script>
</script>
+2 -4
View File
@@ -65,7 +65,6 @@
</div>
</template>
<script>
import axios from "axios";
export default {
@@ -83,7 +82,6 @@ export default {
props: ["idCuestionario", "informeGlobal", "idServicio"],
watch: {
file() {
if (this.file.size >= 20000000) {
this.$buefy.dialog.alert({
title: "Error",
@@ -145,7 +143,7 @@ export default {
idServicio: this.idServicio,
};
const formData = new FormData();
formData.append("data", JSON.stringify(data));
formData.append("informeGlobal", this.file);
@@ -180,4 +178,4 @@ export default {
},
},
};
</script>
</script>
+83 -85
View File
@@ -1,91 +1,89 @@
<template>
<div class="progressBar my-6">
<b-steps
type="is-success"
size="is-large"
:has-navigation="false"
v-model="activeStep"
>
<b-step-item
:visible="activeStep < 6"
:clickable="false"
label="Pre Registro"
icon="account-plus"
></b-step-item>
<b-step-item
:visible="activeStep < 6"
:clickable="false"
label="Pre Registro Validado"
icon="account-clock"
></b-step-item>
<b-step-item
:visible="activeStep < 6"
:clickable="false"
label="Registro"
icon="account"
></b-step-item>
<b-step-item
:visible="activeStep < 6"
:clickable="false"
label="Pre Termino"
icon="account-details"
></b-step-item>
<b-step-item
:visible="activeStep < 6"
:clickable="false"
label="Termino"
icon="account-clock"
></b-step-item>
<b-step-item
:visible="activeStep < 6"
:clickable="false"
label="Liberacion"
icon="account-check"
></b-step-item>
<div class="progressBar my-6">
<b-steps
type="is-success"
size="is-large"
:has-navigation="false"
v-model="activeStep"
>
<b-step-item
:visible="activeStep < 6"
:clickable="false"
label="Pre Registro"
icon="account-plus"
></b-step-item>
<b-step-item
:visible="activeStep < 6"
:clickable="false"
label="Pre Registro Validado"
icon="account-clock"
></b-step-item>
<b-step-item
:visible="activeStep < 6"
:clickable="false"
label="Registro"
icon="account"
></b-step-item>
<b-step-item
:visible="activeStep < 6"
:clickable="false"
label="Pre Termino"
icon="account-details"
></b-step-item>
<b-step-item
:visible="activeStep < 6"
:clickable="false"
label="Termino"
icon="account-clock"
></b-step-item>
<b-step-item
:visible="activeStep < 6"
:clickable="false"
label="Liberacion"
icon="account-check"
></b-step-item>
<b-step-item
:clickable="false"
:visible="activeStep == 6"
label="Carta Aceptación Rechazada"
class="bad"
icon="file"
type="is-danger"
></b-step-item>
<b-step-item
:clickable="false"
:visible="activeStep == 7"
label="Carta Termino Rechazada"
icon="file"
class="bad"
type="is-danger "
></b-step-item>
<b-step-item
:clickable="false"
:visible="activeStep == 8"
label="Informe Global Rechazado"
icon="file"
class="bad"
type="is-danger"
></b-step-item>
<b-step-item
:clickable="false"
:visible="activeStep == 9"
label="Cancelado"
icon="account-cancel"
class="bad"
type="is-danger bad"
></b-step-item>
</b-steps>
</div>
<b-step-item
:clickable="false"
:visible="activeStep == 6"
label="Carta Aceptación Rechazada"
class="bad"
icon="file"
type="is-danger"
></b-step-item>
<b-step-item
:clickable="false"
:visible="activeStep == 7"
label="Carta Termino Rechazada"
icon="file"
class="bad"
type="is-danger "
></b-step-item>
<b-step-item
:clickable="false"
:visible="activeStep == 8"
label="Informe Global Rechazado"
icon="file"
class="bad"
type="is-danger"
></b-step-item>
<b-step-item
:clickable="false"
:visible="activeStep == 9"
label="Cancelado"
icon="account-cancel"
class="bad"
type="is-danger bad"
></b-step-item>
</b-steps>
</div>
</template>
<script>
export default {
data(){
return{
}
},
props:['activeStep']
}
</script>
data() {
return {};
},
props: ["activeStep"],
};
</script>
+232 -233
View File
@@ -1,176 +1,176 @@
<template>
<section>
<h1 class="title is-1 titleAnadir">
Añadir Servicio Social
</h1>
<div
class="columns is-variable is-1-mobile is-0-tablet is-3-desktop is-8-widescreen is-2-fullhd pl-0"
>
<div class="column pl-0">
<form>
<b-field class="column p-0 my-5 is-full">
<input
class="input column "
v-model="noCuenta"
message="Solo numeros"
required="required"
maxlength="9"
type="number"
placeholder="Cuenta"
min="0"
/>
<section>
<h1 class="title is-1 titleAnadir">
Añadir Servicio Social
</h1>
<div
class="columns is-variable is-1-mobile is-0-tablet is-3-desktop is-8-widescreen is-2-fullhd pl-0"
>
<div class="column pl-0">
<form>
<b-field class="column p-0 my-5 is-full">
<input
class="input column "
v-model="noCuenta"
message="Solo numeros"
required="required"
maxlength="9"
type="number"
placeholder="Cuenta"
min="0"
/>
<p class="control">
<b-button class="button is-info" @click="buscarAlumno()"
>Buscar</b-button
>
</p>
</b-field>
<p class="control">
<b-button class="button is-info" @click="buscarAlumno()"
>Buscar</b-button
>
</p>
</b-field>
<b-field label="Nombre">
<div class="input">{{ alumno.nombre }}</div>
</b-field>
<b-field label="Nombre">
<div class="input">{{ alumno.nombre }}</div>
</b-field>
<b-field label="Carrera">
<div class="input">{{ alumno.carrera }}</div>
</b-field>
<b-field label="Carrera">
<div class="input">{{ alumno.carrera }}</div>
</b-field>
<b-field label="Créditos">
<div class="input">
{{ alumno.creditos }}<span v-if="alumno.creditos">%</span>
</div>
</b-field>
<b-field label="Seleccione programa">
<b-select
placeholder="Seleccionar"
expanded
v-model="programaSelectedID"
>
<option value="">Seleccionar</option>
<option
v-for="programa in programas"
v-bind:key="programa.idPrograma"
:value="programa.idPrograma"
>{{ programa.programa }}</option
>
</b-select>
</b-field>
<b-field label="Institución">
<div class="input">{{ programaSelected.institucion }}</div>
</b-field>
<b-field label="Dependencia">
<div class="input">{{ programaSelected.dependencia }}</div>
</b-field>
<b-field label="Clave del programa">
<div class="input">{{ programaSelected.clavePrograma }}</div>
</b-field>
<div v-if="programaSelected.acatlan == true">
<b-field label="Programa interno">
<b-input
v-model="programaSelected.programaInterno"
placeholder="Programa interno"
></b-input>
</b-field>
<b-field label="Profesor">
<b-input
v-model="programaSelected.profesor"
placeholder="Profesor"
></b-input>
</b-field>
</div>
<b-field label="Fecha de inicio">
<b-datepicker
placeholder="Inicio"
icon="calendar-today"
v-model="alumno.inicio"
:min-date="minDate"
>
</b-datepicker>
</b-field>
<b-field label="Fecha de fin" v-if="alumno.inicio">
<b-datepicker
placeholder="Fin"
v-model="alumno.fin"
:min-date="minDate2"
icon="calendar-today"
>
</b-datepicker>
</b-field>
<b-field label="Correo">
<b-input
placeholder="Email"
type="email"
v-model="alumno.correo"
></b-input>
</b-field>
<h3 class="title is-4 mt-6">
Carta de aceptación (en formato .PDF. No se aceptan fotos).
</h3>
<b-field>
<b-upload
v-model="file"
drag-drop
type="is-black"
expanded
accept="application/pdf"
>
<section class="section">
<div class="content has-text-centered">
<p>
<b-icon icon="upload" size="is-large"></b-icon>
</p>
<p>
{{
file.name ||
"Arrastra aquí tu archivo o da click para buscar"
}}
</p>
<p>Tamaño máximo 20MB</p>
</div>
</section>
</b-upload>
</b-field>
</form>
<div class="my-6">
<b-button
tag="router-link"
to="/responsable"
type="is-info is-light "
icon-left="arrow-left-box"
class="border-info"
style="float: left;"
size="is-mediumm"
>
regresar
</b-button>
<!-- <BotonRegresar :path="'/responsable'" /> -->
<b-field class="derecha">
<button
:disabled="disabled()"
class="button enviar is-success is-mediumm"
@click="Enviar()"
>
Enviar
</button>
</b-field>
</div>
<b-field label="Créditos">
<div class="input">
{{ alumno.creditos }}<span v-if="alumno.creditos">%</span>
</div>
</b-field>
<b-field label="Seleccione programa">
<b-select
placeholder="Seleccionar"
expanded
v-model="programaSelectedID"
>
<option value="">Seleccionar</option>
<option
v-for="programa in programas"
v-bind:key="programa.idPrograma"
:value="programa.idPrograma"
>{{ programa.programa }}</option
>
</b-select>
</b-field>
<b-field label="Institución">
<div class="input">{{ programaSelected.institucion }}</div>
</b-field>
<b-field label="Dependencia">
<div class="input">{{ programaSelected.dependencia }}</div>
</b-field>
<b-field label="Clave del programa">
<div class="input">{{ programaSelected.clavePrograma }}</div>
</b-field>
<div v-if="programaSelected.acatlan == true">
<b-field label="Programa interno">
<b-input
v-model="programaSelected.programaInterno"
placeholder="Programa interno"
></b-input>
</b-field>
<b-field label="Profesor">
<b-input
v-model="programaSelected.profesor"
placeholder="Profesor"
></b-input>
</b-field>
</div>
<b-loading :is-full-page="true" v-model="isLoading" :can-cancel="false" />
</section>
<b-field label="Fecha de inicio">
<b-datepicker
placeholder="Inicio"
icon="calendar-today"
v-model="alumno.inicio"
:min-date="minDate"
>
</b-datepicker>
</b-field>
<b-field label="Fecha de fin" v-if="alumno.inicio">
<b-datepicker
placeholder="Fin"
v-model="alumno.fin"
:min-date="minDate2"
icon="calendar-today"
>
</b-datepicker>
</b-field>
<b-field label="Correo">
<b-input
placeholder="Email"
type="email"
v-model="alumno.correo"
></b-input>
</b-field>
<h3 class="title is-4 mt-6">
Carta de aceptación (en formato .PDF. No se aceptan fotos).
</h3>
<b-field>
<b-upload
v-model="file"
drag-drop
type="is-black"
expanded
accept="application/pdf"
>
<section class="section">
<div class="content has-text-centered">
<p>
<b-icon icon="upload" size="is-large"></b-icon>
</p>
<p>
{{
file.name ||
"Arrastra aquí tu archivo o da click para buscar"
}}
</p>
<p>Tamaño máximo 20MB</p>
</div>
</section>
</b-upload>
</b-field>
</form>
<div class="my-6">
<b-button
tag="router-link"
to="/responsable"
type="is-info is-light "
icon-left="arrow-left-box"
class="border-info"
style="float: left;"
size="is-mediumm"
>
regresar
</b-button>
<!-- <BotonRegresar :path="'/responsable'" /> -->
<b-field class="derecha">
<button
:disabled="disabled()"
class="button enviar is-success is-mediumm"
@click="Enviar()"
>
Enviar
</button>
</b-field>
</div>
</div>
</div>
<b-loading :is-full-page="true" v-model="isLoading" :can-cancel="false" />
</section>
</template>
<script>
import "buefy/dist/buefy.css";
@@ -182,11 +182,11 @@ export default {
data() {
return {
token: {
headers:{
token: window.localStorage.getItem('token')
}
headers: {
token: window.localStorage.getItem("token"),
},
},
isLoading:false,
isLoading: false,
noCuenta: "",
sizeOk: "",
searched: false,
@@ -287,30 +287,29 @@ export default {
},
correoValidado() {
if (validator.isEmail(this.alumno.correo)) {
return "";
}
},
error(msj){
let salir =false;
switch(msj){
case 'invalid signature':
msj= "Tu token no es valido, inicia sesión de nuevo."
salir=true
break;
case 'jwt expired':
msj= "Tu sesión ha expirado, inicia sesión de nuevo."
salir=true
break;
case 'jwt malformed':
msj= "No se encontro tu token, inicia sesión de nuevo."
salir=true
break;
case 'No hay token':
msj= "Ocurrio un error al enviar tu token, inicia sesión de nuevo."
salir=true
break;
}
error(msj) {
let salir = false;
switch (msj) {
case "invalid signature":
msj = "Tu token no es valido, inicia sesión de nuevo.";
salir = true;
break;
case "jwt expired":
msj = "Tu sesión ha expirado, inicia sesión de nuevo.";
salir = true;
break;
case "jwt malformed":
msj = "No se encontro tu token, inicia sesión de nuevo.";
salir = true;
break;
case "No hay token":
msj = "Ocurrio un error al enviar tu token, inicia sesión de nuevo.";
salir = true;
break;
}
this.$buefy.dialog.alert({
title: "Error",
@@ -321,19 +320,20 @@ export default {
iconPack: "mdi",
ariaRole: "alertdialog",
ariaModal: true,
});
if (salir == true) {
localStorage.clear()
this.$router.push(`/`)
}
});
if (salir == true) {
localStorage.clear();
this.$router.push(`/`);
}
},
buscarAlumno() {
this.isLoading=true
this.isLoading = true;
axios
.get(`${process.env.api}/usuario/escolares?numeroCuenta=${this.noCuenta}`,this.token)
.get(
`${process.env.api}/usuario/escolares?numeroCuenta=${this.noCuenta}`,
this.token
)
.then((resp) => {
this.alumno.cuenta = this.noCuenta;
this.alumno.nombre = resp.data.nombre;
this.alumno.carrera = resp.data.carrera;
@@ -343,14 +343,14 @@ export default {
this.searched = true;
})
.catch((error) => {
this.error(error.response.data.message)
this.error(error.response.data.message);
})
.finally(()=>{
this.isLoading = false
.finally(() => {
this.isLoading = false;
});
},
Enviar() {
this.isLoading=true
this.isLoading = true;
const data = {
idUsuario: this.alumno.idAlumno,
idPrograma: this.programaSelected.idPrograma,
@@ -362,17 +362,17 @@ export default {
profesor: this.programaSelected.profesor,
fechaInicio: moment(this.alumno.inicio),
fechaFin: moment(this.alumno.fin),
};
const formData = new FormData();
formData.append("alumno", JSON.stringify(data));
formData.append("cartaAceptacion", this.file);
};
const formData = new FormData();
formData.append("alumno", JSON.stringify(data));
formData.append("cartaAceptacion", this.file);
axios
.post(`${process.env.api}/servicio/nuevo`, formData, {
headers: {
"Content-Type": "multipart/form-data",
token:this.token.headers.token
token: this.token.headers.token,
},
})
.then((res) => {
@@ -389,10 +389,10 @@ export default {
this.reset();
})
.catch((error) => {
this.error(error.response.data.message)
this.error(error.response.data.message);
})
.finally(()=>{
this.isLoading = false
.finally(() => {
this.isLoading = false;
});
},
},
@@ -423,24 +423,19 @@ export default {
this.programaSelected.activo = this.programas[i].activo;
}
}
}
else{
this.programaSelected.institucion = "";
this.programaSelected.dependencia = "";
this.programaSelected.programa = "";
this.programaSelected.clavePrograma = "";
this.programaSelected.acatlan = "";
this.programaSelected.activo = "";
//this.programaSelected.idUsuario = "";
this.programaSelected.programaInterno = "";
this.programaSelected.profesor = "";
} else {
this.programaSelected.institucion = "";
this.programaSelected.dependencia = "";
this.programaSelected.programa = "";
this.programaSelected.clavePrograma = "";
this.programaSelected.acatlan = "";
this.programaSelected.activo = "";
//this.programaSelected.idUsuario = "";
this.programaSelected.programaInterno = "";
this.programaSelected.profesor = "";
}
},
file() {
if (this.file.size >= 20000000) {
this.$buefy.dialog.alert({
title: "Error",
@@ -460,14 +455,18 @@ export default {
},
},
mounted() {
axios
.get(`${process.env.api}/programa?idUsuario=${localStorage.getItem("idUsuario")}`, this.token)
.then((resp) => {
this.programas = resp.data;
.get(
`${process.env.api}/programa?idUsuario=${localStorage.getItem(
"idUsuario"
)}`,
this.token
)
.then((resp) => {
this.programas = resp.data;
})
.catch((error) => {
this.error(error.response.data.message)
this.error(error.response.data.message);
});
},
computed: {
+24 -25
View File
@@ -1,28 +1,27 @@
<template>
<section class="mensaje has-text-justified is-size-6 ">
<p class="block is-size-5">
Estimado(a) responsable de programa de servicio social:
</p>
<section class="mensaje has-text-justified is-size-6 ">
<p class="block is-size-5">
Estimado(a) responsable de programa de servicio social:
</p>
<p class="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 class="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>
</section>
<p class="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 class="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>
</section>
</template>
+1 -3
View File
@@ -16,7 +16,7 @@
</template>
<style scoped>
.container{
.container {
padding: 0.75rem;
}
</style>
@@ -129,7 +129,6 @@ export default {
this.token
)
.then((resp) => {
this.activeStep = resp.data.Status.idStatus - 1;
this.status = resp.data.Status.idStatus;
@@ -173,4 +172,3 @@ export default {
},
};
</script>
+8 -2
View File
@@ -84,8 +84,14 @@ export default {
window.localStorage.setItem("idUsuario", resp.data.Usuario.idUsuario);
window.localStorage.setItem("token", resp.data.token);
window.localStorage.setItem("nombre", resp.data.Usuario.nombre);
window.localStorage.setItem("idTipoUsuario", resp.data.Usuario.TipoUsuario.idTipoUsuario);
window.localStorage.setItem("tipoUsuario", resp.data.Usuario.TipoUsuario.tipoUsuario);
window.localStorage.setItem(
"idTipoUsuario",
resp.data.Usuario.TipoUsuario.idTipoUsuario
);
window.localStorage.setItem(
"tipoUsuario",
resp.data.Usuario.TipoUsuario.tipoUsuario
);
window.localStorage.setItem("usuario", resp.data.Usuario.usuario);
this.$router.push(`/${resp.data.Usuario.TipoUsuario.tipoUsuario}`);
})
-9
View File
@@ -1,9 +0,0 @@
<template>
<section>
hola
</section>
</template>
<script>
export default {};
</script>
+9 -8
View File
@@ -1,26 +1,27 @@
<template>
<div class="container">
<BotonRegresar :path="'/responsable'" />
<BotonRegresar :path="'/responsable'" />
<Texto />
<FormServicioSocial />
</div>
</template>
<script>
import Texto from "../../../components/responsable/nuevoTexto"
import Texto from "../../../components/responsable/nuevoTexto";
import BotonRegresar from "../../../components/botonRegresar";
import FormSerivicioSocial from "../../../components/responsable/formServicioSocial"
import FormSerivicioSocial from "../../../components/responsable/formServicioSocial";
export default {
components:{
components: {
Texto,
BotonRegresar,FormSerivicioSocial
}
}
BotonRegresar,
FormSerivicioSocial,
},
};
</script>
<style scoped>
.container{
.container {
padding: 0.75rem;
}
</style>