Files
servicio_social_front/components/admin/servicio/programa/cargaMasiva.vue
T
Lemuel Marquez 2f92ddea4a identacion
2021-01-05 15:14:10 -06:00

99 lines
2.5 KiB
Vue

<template>
<div>
<p class="is-size-2 mb-5">Carga Masiva</p>
<b-field v-if="true">
<b-upload
v-model="csv"
type="is-black"
v-on:input="validarExt()"
drag-drop
expanded
>
<section class="section">
<div class="content has-text-centered">
<p>
<b-icon icon="upload" size="is-large"></b-icon>
</p>
<p>
{{
csv.name || "Arrastra aquí tu archivo o da click para buscar"
}}
</p>
</div>
</section>
</b-upload>
</b-field>
<b-button v-if="csv.name" @click="actualizarDialog()" class="is-info"
>Enviar archivo</b-button
>
<b-button v-else disabled class="is-info">Enviar archivo</b-button>
<b-loading
:is-full-page="true"
v-model="isLoading"
:can-cancel="false"
></b-loading>
</div>
</template>
<script>
export default {
data() {
return {
csv: {},
isLoading: false,
toastType: null,
toastMessage: null,
};
},
methods: {
validarExt() {
const extPermitidas = /(.csv)$/i;
if (!extPermitidas.exec(this.csv.name)) {
this.toastType = "is-danger";
this.toastMessage = "Asegurate de ingresar un archivo .CSV";
this.toast();
this.csv = {};
}
},
toast() {
this.$buefy.toast.open({
message: this.toastMessage,
type: this.toastType,
});
},
dialog() {
this.$buefy.dialog.confirm({
title: "Carga masiva",
message: "¿Seguro(a) que quiere enviar este archivo?",
confirmText: "Confirmar",
cancelText: "Cancelar",
type: "is-success",
hasIcon: true,
onConfirm: () => this.enviarCargaMasiva(),
});
},
enviarCargaMasiva() {
this.isLoading = true;
const formData = new FormData();
if (this.cartaAceptacion) {
formData.append("cartaAceptacion", this.cartaAceptacion);
}
axios
.put(`${process.env.api}/programa/carga_masiva`, formData)
.then((res) => {
this.isLoading = false;
this.toastType = "is-success";
this.toastMessage = "Se ha enviado la carga masiva con éxito";
this.toast();
})
.catch((err) => {
this.isLoading = false;
this.toastType = "is-danger";
this.toastMessage = err.response.data.message;
this.toast();
});
},
},
};
</script>