Files
servicio_social_front/components/admin/servicio/modificar/form.vue
T

437 lines
12 KiB
Vue
Raw Normal View History

2020-11-11 18:15:05 -06:00
<template>
2021-01-25 13:45:58 -06:00
<div class="container" :class="{ pad: padding }">
2021-01-05 02:04:07 -06:00
<BotonRegresar :path="'/admin/servicio'" />
2020-12-08 21:50:16 -06:00
<br /><br />
2020-11-11 18:15:05 -06:00
<p class="is-size-2">Editar información del alumno</p>
2020-12-08 21:50:16 -06:00
<br />
2020-11-11 18:15:05 -06:00
<div class="formulario">
<b-field label="Correo eletrónico alumno">
2020-11-13 16:46:50 -06:00
<b-input
type="email"
v-model="nuevo.correo"
2020-12-08 21:50:16 -06:00
:placeholder="viejo.correo"
>
2020-11-13 16:46:50 -06:00
</b-input>
2020-11-11 18:15:05 -06:00
</b-field>
2021-01-25 13:45:58 -06:00
<div v-if="status6()">
<b-field label="Fecha de inicio">
2020-11-13 16:46:50 -06:00
<b-datepicker
2020-12-03 17:47:48 -06:00
:placeholder="fecha(viejo.fechaInicio)"
2020-12-08 21:50:16 -06:00
icon="calendar-today"
2021-01-25 13:45:58 -06:00
v-model="fechaInicio[0]"
:min-date="minDate1"
2020-12-08 21:50:16 -06:00
>
2020-11-13 16:46:50 -06:00
</b-datepicker>
</b-field>
2021-01-25 13:45:58 -06:00
<transition name="fade">
<b-field label="Fecha de fin" v-if="fechaInicio[0]">
<b-datepicker
:placeholder="fecha(viejo.fechaInicio)"
v-model="fechaFin[0]"
:min-date="minDate2"
icon="calendar-today"
>
</b-datepicker>
</b-field>
</transition>
<b-field label="Dirección">
<b-input
type="text"
v-model="nuevo.direccion"
:placeholder="viejo.direccion"
>
</b-input>
</b-field>
<b-field label="Teléfono">
<b-input
type="number"
:placeholder="viejo.telefono"
v-model="nuevo.telefono"
maxlength="10"
></b-input>
</b-field>
<b-field label="Fecha de nacimiento">
<b-datepicker
:placeholder="fecha(viejo.fechaNacimiento)"
v-model="fechaNacimiento[0]"
icon="calendar-today"
>
</b-datepicker>
</b-field>
<p class="is-size-5" v-if="viejo.cartaAceptacion">Carta de aceptación</p>
<br />
<b-field v-if="viejo.cartaAceptacion">
<b-upload
v-model="nuevo.cartaAceptacion"
type="is-black"
v-on:input="validarExt(1)"
accept="application/pdf"
drag-drop
expanded
>
<section class="section">
<div class="content has-text-centered">
<p>
<b-icon icon="upload" size="is-large"></b-icon>
</p>
<p>
{{
nuevo.cartaAceptacion.name ||
"Arrastra aquí tu archivo o da click para buscar"
}}
</p>
</div>
</section>
</b-upload>
</b-field>
<p class="is-size-5" v-if="viejo.cartaTermino">Carta de término</p>
<br />
<b-field v-if="viejo.cartaTermino">
<b-upload
v-model="nuevo.cartaTermino"
type="is-black"
v-on:input="validarExt(2)"
accept="application/pdf"
drag-drop
expanded
>
<section class="section">
<div class="content has-text-centered">
<p>
<b-icon icon="upload" size="is-large"></b-icon>
</p>
<p>
{{
nuevo.cartaTermino.name ||
"Arrastra aquí tu archivo o da click para buscar"
}}
</p>
</div>
</section>
</b-upload>
</b-field>
<p class="is-size-5" v-if="viejo.informeGlobal">Informe global</p>
<br />
<b-field v-if="viejo.informeGlobal">
<b-upload
v-model="nuevo.informeGlobal"
type="is-black"
v-on:input="validarExt(3)"
accept="application/pdf"
drag-drop
expanded
>
<section class="section">
<div class="content has-text-centered">
<p>
<b-icon icon="upload" size="is-large"></b-icon>
</p>
<p>
{{
nuevo.informeGlobal.name ||
"Arrastra aquí tu archivo o da click para buscar"
}}
</p>
</div>
</section>
</b-upload>
</b-field>
</div>
2020-12-08 21:50:16 -06:00
<br />
2021-01-12 20:28:04 -06:00
<b-button v-if="mostrar()" @click="actualizarDialog()" class="is-info">
Actualizar Datos
</b-button>
2020-11-23 15:35:03 -06:00
<b-button v-else disabled class="is-info">Actualizar Datos</b-button>
2021-01-12 20:28:04 -06:00
<b-button @click="passwordDialog()" class="is-info">
Cambiar contraseña
</b-button>
2020-12-08 21:50:16 -06:00
<b-loading
:is-full-page="true"
v-model="isLoading"
2021-01-05 02:26:47 -06:00
:can-cancel="false"
2020-12-08 21:50:16 -06:00
></b-loading>
2020-11-11 18:15:05 -06:00
</div>
</div>
</template>
<script>
2020-12-08 21:50:16 -06:00
import axios from "axios";
import moment from "moment";
import validator from "validator";
2021-01-05 02:04:07 -06:00
import botonRegresar from "../../../botonRegresar";
2020-11-13 16:46:50 -06:00
2020-11-11 18:15:05 -06:00
export default {
2021-01-05 02:04:07 -06:00
components: {
botonRegresar,
},
2020-12-08 21:50:16 -06:00
data() {
2020-11-11 18:15:05 -06:00
return {
2020-12-08 21:50:16 -06:00
idServicio: localStorage.getItem("idServicio"),
2021-01-25 13:45:58 -06:00
idStatus: Number(localStorage.getItem("idStatus")),
2020-12-03 15:34:28 -06:00
viejo: {},
2020-11-11 18:15:05 -06:00
nuevo: {
2020-12-08 21:50:16 -06:00
correo: "",
fechaInicioFinal: "",
2020-11-13 16:46:50 -06:00
fechaFinFinal: null,
2020-11-11 18:15:05 -06:00
direccion: null,
telefono: null,
2020-11-13 16:46:50 -06:00
fechaNacimientoFinal: null,
cartaAceptacion: {},
cartaTermino: {},
2020-12-08 21:50:16 -06:00
informeGlobal: {},
2020-11-13 16:46:50 -06:00
},
fechaNacimiento: [],
fechaInicio: [],
fechaFin: [],
2021-01-06 00:10:12 -06:00
token: {
headers: {
token: window.localStorage.getItem("token"),
},
},
2020-12-08 21:50:16 -06:00
minDate1: new Date("2020-01-01"),
isLoading: false,
2021-01-25 13:45:58 -06:00
padding: false,
2020-12-08 21:50:16 -06:00
};
2020-11-13 16:46:50 -06:00
},
methods: {
2021-01-25 13:45:58 -06:00
status6(){
if(this.idStatus === 6) {
this.padding = true;
return false;
}
return true
},
2020-12-08 21:50:16 -06:00
obtenerRegistro() {
this.isLoading = true;
2020-12-03 15:34:28 -06:00
return axios
.get(
2021-01-06 17:43:26 -06:00
`${process.env.api}/servicio/admin?idServicio=${this.idServicio}`,
this.token
2020-12-03 15:34:28 -06:00
)
2020-12-08 21:50:16 -06:00
.then((res) => {
this.viejo = res.data;
2020-12-03 15:34:28 -06:00
})
2020-12-08 21:50:16 -06:00
.catch((err) => {
2021-01-22 18:50:32 -06:00
this.error(err.response.data.message);
2021-01-12 20:28:04 -06:00
})
.finally(() => {
this.isLoading = false;
2021-01-22 18:50:32 -06:00
});
2020-12-03 15:34:28 -06:00
},
2020-12-08 21:50:16 -06:00
dangerToast() {
2020-11-13 16:46:50 -06:00
this.$buefy.toast.open({
2020-12-08 21:50:16 -06:00
message: "Asegurate de ingresar un PDF",
type: "is-danger",
});
2020-11-13 16:46:50 -06:00
},
2020-12-08 21:50:16 -06:00
toast() {
2020-12-03 17:47:48 -06:00
this.$buefy.toast.open({
2020-12-08 21:50:16 -06:00
message: "Se han actualizado los datos",
type: "is-success",
});
2020-12-03 17:47:48 -06:00
},
2020-12-08 21:50:16 -06:00
mostrar() {
2020-11-13 16:46:50 -06:00
if (
validator.isEmail(this.nuevo.correo) ||
this.nuevo.direccion ||
this.nuevo.telefono ||
this.nuevo.fechaNacimientoFinal ||
2020-12-08 21:50:16 -06:00
(this.nuevo.fechaInicioFinal && this.nuevo.fechaFinFinal) ||
2020-11-13 16:46:50 -06:00
this.nuevo.cartaTermino.name ||
this.nuevo.cartaAceptacion.name ||
2020-12-03 17:47:48 -06:00
this.nuevo.informeGlobal.name
2020-11-13 16:46:50 -06:00
) {
2020-11-23 15:35:03 -06:00
if (this.nuevo.correo) {
if (validator.isEmail(this.nuevo.correo)) {
2020-12-08 21:50:16 -06:00
return true;
2020-11-23 15:35:03 -06:00
} else {
2020-12-08 21:50:16 -06:00
return false;
2020-11-23 15:35:03 -06:00
}
}
2020-12-08 21:50:16 -06:00
return true;
2020-11-11 18:15:05 -06:00
}
2020-11-23 15:35:03 -06:00
},
2020-12-08 21:50:16 -06:00
validarExt(a) {
const extPermitidas = /(.pdf)$/i;
2020-11-23 15:35:03 -06:00
switch (a) {
2020-12-08 21:50:16 -06:00
case 1:
if (!extPermitidas.exec(this.nuevo.cartaAceptacion.name)) {
this.dangerToast();
this.nuevo.cartaAceptacion = {};
}
break;
case 2:
if (!extPermitidas.exec(this.nuevo.cartaTermino.name)) {
this.dangerToast();
this.nuevo.cartaTermino = {};
}
break;
case 3:
if (!extPermitidas.exec(this.nuevo.informeGlobal.name)) {
this.dangerToast();
this.nuevo.informeGlobal = {};
}
break;
2020-11-23 15:35:03 -06:00
}
},
2020-12-08 21:50:16 -06:00
actualizar() {
2021-01-06 21:13:18 -06:00
const formData = new FormData();
2021-01-06 17:43:26 -06:00
const data = { idServicio: this.idServicio };
2021-01-06 21:13:18 -06:00
this.isLoading = true;
if (this.nuevo.direccion) data.direccion = this.nuevo.direccion;
if (this.nuevo.correo) data.correo = this.nuevo.correo;
if (this.nuevo.telefono) data.telefono = this.nuevo.telefono;
if (this.nuevo.fechaInicioFinal)
2021-01-06 17:43:26 -06:00
data.fechaInicio = this.nuevo.fechaInicioFinal;
2021-01-06 21:13:18 -06:00
if (this.nuevo.fechaFinFinal) data.fechaFin = this.nuevo.fechaFinFinal;
if (this.nuevo.fechaNacimientoFinal)
2021-01-06 17:43:26 -06:00
data.fechaNacimiento = this.nuevo.fechaNacimientoFinal;
2021-01-06 21:13:18 -06:00
formData.append("data", JSON.stringify(data));
if (this.nuevo.cartaAceptacion)
formData.append("cartaAceptacion", this.nuevo.cartaAceptacion);
if (this.nuevo.cartaTermino)
formData.append("cartaTermino", this.nuevo.cartaTermino);
if (this.nuevo.informeGlobal)
formData.append("informeGlobal", this.nuevo.informeGlobal);
2020-12-03 17:47:48 -06:00
axios
2021-01-06 00:10:12 -06:00
.put(`${process.env.api}/servicio/update`, formData, {
headers: {
"Content-Type": "multipart/form-data",
token: this.token.headers.token,
},
})
2020-12-08 21:50:16 -06:00
.then((res) => {
this.toast();
2021-01-06 17:43:26 -06:00
this.$router.push("/admin/servicio");
2020-12-03 17:47:48 -06:00
})
2020-12-08 21:50:16 -06:00
.catch((err) => {
2021-01-06 00:10:12 -06:00
this.error(err.response.data.message);
2021-01-12 20:28:04 -06:00
})
.finally(() => {
this.isLoading = false;
2021-01-22 18:50:32 -06:00
});
2020-11-30 19:59:46 -06:00
},
2020-12-08 21:50:16 -06:00
actualizarDialog() {
2020-11-30 19:59:46 -06:00
this.$buefy.dialog.confirm({
2020-12-08 21:50:16 -06:00
title: "Actualizar datos",
message: "¿Seguro(a) que quiere actualizar estos datos?",
confirmText: "Confirmar",
cancelText: "Cancelar",
type: "is-success",
2020-11-30 19:59:46 -06:00
hasIcon: true,
2020-12-08 21:50:16 -06:00
onConfirm: () => this.actualizar(),
});
2020-12-03 15:34:28 -06:00
},
2021-01-12 20:28:04 -06:00
passwordDialog() {
this.$buefy.dialog.confirm({
title: "Actualizar datos",
message: "¿Seguro(a) que quiere actualizar la contraseña?",
confirmText: "Confirmar",
cancelText: "Cancelar",
type: "is-success",
hasIcon: true,
onConfirm: () => this.password(),
});
},
password() {
this.isLoading = true;
const data = { idServicio: this.idServicio };
axios
.put(`${process.env.api}/usuario/new_password_alumno`, data, this.token)
.then((res) => {
this.$buefy.toast.open({
message: "Se ha enviado el correo con la nueva contraseña",
type: "is-success",
});
2021-01-22 18:50:32 -06:00
this.$router.push("/admin");
2021-01-12 20:28:04 -06:00
})
.catch((err) => {
2021-01-22 18:50:32 -06:00
this.error(err.response.data.message);
2021-01-12 20:28:04 -06:00
})
.finally(() => {
this.isLoading = false;
});
},
2021-01-06 00:10:12 -06:00
error(msj) {
let salir = false;
switch (msj) {
case "invalid signature":
2021-01-06 16:33:56 -06:00
msj = "Tu token no es valido, inicia sesión de nuevo.";
2021-01-06 15:27:23 -06:00
salir = true;
2021-01-06 00:10:12 -06:00
break;
case "jwt expired":
2021-01-06 16:33:56 -06:00
msj = "Tu sesión ha expirado, inicia sesión de nuevo.";
2021-01-06 15:27:23 -06:00
salir = true;
2021-01-06 00:10:12 -06:00
break;
2021-01-06 15:27:23 -06:00
case "jwt malformed":
2021-01-06 17:43:26 -06:00
msj = "No se encontro tu token, inicia sesión de nuevo.";
2021-01-06 15:27:23 -06:00
salir = true;
2021-01-06 00:10:12 -06:00
break;
2021-01-06 15:27:23 -06:00
case "No hay token":
2021-01-06 16:33:56 -06:00
msj = "Ocurrio un error al enviar tu token, inicia sesión de nuevo.";
2021-01-06 00:10:12 -06:00
salir = true;
2021-01-06 15:27:23 -06:00
break;
2021-01-06 00:10:12 -06:00
}
this.$buefy.dialog.alert({
title: "Error",
message: msj,
type: "is-danger",
hasIcon: true,
icon: "alert-circle",
iconPack: "mdi",
ariaRole: "alertdialog",
ariaModal: true,
});
2021-01-06 15:27:23 -06:00
if (salir == true) {
2021-01-06 00:10:12 -06:00
localStorage.clear();
this.$router.push(`/`);
}
},
2020-12-08 21:50:16 -06:00
fecha(date) {
2020-12-03 17:47:48 -06:00
if (date) {
2020-12-08 21:50:16 -06:00
const fecha = moment(date.substr(0, 10));
2021-01-21 19:23:26 -06:00
return `${fecha.date()}/${fecha.month() + 1}/${fecha.year()}`;
2020-12-03 17:47:48 -06:00
}
2020-12-08 21:50:16 -06:00
},
2020-11-13 16:46:50 -06:00
},
computed: {
2020-12-08 21:50:16 -06:00
minDate2() {
const min = new Date(this.fechaInicio);
return new Date(min.getFullYear(), min.getMonth() + 6, min.getDate());
},
2020-11-13 16:46:50 -06:00
},
watch: {
2020-12-08 21:50:16 -06:00
fechaInicio: function() {
this.nuevo.fechaInicioFinal = moment(this.fechaInicio[0]);
this.fechaFin[0] = null;
2020-11-13 16:46:50 -06:00
},
2020-12-08 21:50:16 -06:00
fechaFin: function() {
this.nuevo.fechaFinFinal = moment(this.fechaFin[0]);
},
fechaNacimiento: function() {
this.nuevo.fechaNacimientoFinal = moment(this.fechaNacimiento[0]);
2020-11-13 16:46:50 -06:00
},
2020-12-03 15:34:28 -06:00
},
2020-12-08 21:50:16 -06:00
created() {
this.obtenerRegistro();
},
};
2020-11-11 18:15:05 -06:00
</script>
2020-11-13 16:46:50 -06:00
<style scoped>
2020-12-08 21:50:16 -06:00
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.5s;
2020-11-13 16:46:50 -06:00
}
.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {
2020-12-08 21:50:16 -06:00
opacity: 0;
2020-11-13 16:46:50 -06:00
}
2021-01-25 13:45:58 -06:00
.pad {
padding-bottom: 5%;
padding-top: 5%;
}
2020-11-13 16:46:50 -06:00
</style>