112 Commits

Author SHA1 Message Date
santiago e20aa76db3 Modificaciones 2026-01-19 13:20:22 -06:00
stern ae077e367e Uso de NodeJS 16.15.1 y establecimiento de puerto 2025-08-13 12:43:27 -06:00
santiago ab75e97fa4 Modificacinoes en envio de correo 2025-08-11 10:25:57 -06:00
santiago 88716e1b40 Modificaion a la url de api definitivos 2025-08-10 17:00:50 -06:00
santiago c03ee96e07 Modificaion de la url de profesores 2025-08-10 16:54:40 -06:00
santiago 3dfe973014 Modificacion de la version en el package.json 2025-08-10 14:17:02 -06:00
santiago ef3e7aeb16 Agregar boton para verificar 2025-08-10 13:47:19 -06:00
santiago 511922d332 Modificaciones finales 2025-08-09 18:51:31 -06:00
santiago 544d340ce6 Se agregaron las modificaciones 2025-08-09 18:17:29 -06:00
santiago 38ef641f7f Se modifico el destinatario sea por numero de cuenta 2025-08-09 08:34:33 -06:00
santiago d74a3cfdcf Agregar mensaje de error en el servicio de profesores 2025-07-29 11:58:06 -06:00
santiago b84fc840a9 Merge remote-tracking branch 'origin' 2025-07-28 18:48:13 -06:00
smoreno b496447700 Merge pull request 'Modificaciones en el front de cedetec 7/28/25' (#1) from santiago into dev
Reviewed-on: #1
2025-07-28 18:43:43 -06:00
santiago ce31fd5ea0 Modificaciones en el front de cedetec 7/28/25 2025-07-28 15:35:34 -06:00
puma99 834d1ee77e cambio login titulo 2023-01-30 13:26:08 -06:00
Marco 60298f5c00 decimal 2022-09-02 12:53:55 -05:00
Andres2908 a25c709ae0 validar ticket 2022-08-08 11:19:06 -05:00
Andres2908 0817b129e3 captura de datos 2022-08-07 16:03:07 -05:00
Andres2908 446a98e0c5 validacion 2022-08-07 16:00:54 -05:00
Andres2908 966a9956c1 validaciones 2022-08-07 14:36:39 -05:00
Andres2908 c59e37cad3 api 2022-08-05 16:47:06 -05:00
Andres2908 a50011d673 port 2022-08-05 16:46:24 -05:00
Andres2908 9436da3e37 fecha 2022-08-05 16:44:10 -05:00
Andres2908 6955bb37f4 captura de datos 2022-08-05 15:50:19 -05:00
Andres2908 bbc84e3f03 footer 2022-08-04 17:46:19 -05:00
Andres2908 90b9e626d5 ultimos cambios 2022-08-04 17:11:57 -05:00
Andres2908 ec3ad54203 limpia de variables 2022-07-29 13:59:43 -05:00
Andres2908 8f748cbc41 motivo 2022-07-29 13:56:23 -05:00
Andres2908 f6bb33dce5 nuxt config 2022-07-28 22:21:09 -05:00
Andres2908 151009356e modal props 2022-07-28 22:20:41 -05:00
Andres2908 823b4c31e7 correccion de codigo 2022-07-28 13:23:21 -05:00
Andres2908 de0029a3ee modal declinar 2022-07-28 00:55:47 -05:00
Andres2908 b318ad742d validar ticket 2022-07-28 00:49:13 -05:00
Andres2908 adbf32efbe puerto 2022-05-17 13:33:46 -05:00
Andres2908 80b81e35a2 correciones 2022-05-17 00:06:40 -05:00
Andres2908 9af00d7d2d Merge branch 'master' into dev 2022-05-16 22:43:08 -05:00
Andres2908 f96636b0a7 numeroCuenta 2022-05-16 22:18:44 -05:00
Andres2908 c242c13731 api 2022-05-11 09:34:54 -05:00
Andres2908 08633003c2 api 2022-05-11 09:34:19 -05:00
Andres2908 ce9dee24c3 separacion del credito 2022-05-10 23:36:02 -05:00
Andres2908 482cd647a1 tabla y restar credito 2022-05-10 23:00:14 -05:00
Andres2908 95160460e0 conexion de endpoints 2022-05-10 21:47:21 -05:00
Andres2908 b8f19ba6ef cargarCredito 2022-05-07 02:26:27 -05:00
Andres2908 f892d8bc75 . 2022-05-06 01:47:06 -05:00
Andres2908 d9c25da266 correccion del reporte 2022-05-06 01:45:36 -05:00
Andres2908 5ec54596e0 selector 2022-05-05 23:38:11 -05:00
Andres2908 cc5183db68 pagina impresion 2022-05-05 23:15:27 -05:00
Andres2908 19f99a558c api 2022-05-05 11:36:20 -05:00
Andres2908 83d97ea3bb zoom 2022-05-05 09:22:08 -05:00
Andres2908 22ef828e83 aumento del zoom 2022-05-04 23:23:53 -05:00
Andres2908 0faee3b869 correccion 2022-05-04 22:06:00 -05:00
Andres2908 dbe4d42aef simplificacion de codigo 2022-03-29 14:30:59 -06:00
Andres2908 fca7349537 validacion de ticket 2022-03-29 14:30:24 -06:00
Andres2908 4b7867065f renombre funcion 2022-03-23 00:34:04 -06:00
Andres2908 534c89b2ee tabla 2022-03-22 18:21:39 -06:00
Andres2908 b215ec615f loading tabla 2022-03-21 23:32:54 -06:00
Andres2908 6e27de0833 produccion 2022-03-21 23:15:26 -06:00
Andres2908 c7017b2968 ultimos cambios 2022-03-21 19:15:24 -06:00
Andres2908 d3acc1f574 api 2022-03-21 16:40:13 -06:00
Andres2908 e66f738012 minimos cambios 2022-03-21 15:18:16 -06:00
Andres2908 682e08f00e folio del ticket 2022-03-21 14:02:41 -06:00
Andres2908 87ff6c5269 ultimas correcciones 2022-03-21 13:12:30 -06:00
Andres2908 4d1619c09b reporte y login 2022-03-19 21:00:20 -06:00
Andres2908 d2ed0ff465 Cambios revision 2022-03-19 20:26:29 -06:00
Andres2908 0913fc6166 loading 2022-03-18 18:24:59 -06:00
Andres2908 0d2f040297 taxto y nueva imagen 2022-03-18 17:36:52 -06:00
Andres2908 911e650043 correciones 2022-03-18 15:04:36 -06:00
Andres2908 942f29859d fecha y cambios minimos 2022-03-18 11:24:38 -06:00
Andres2908 4123f51841 estilos 2022-03-18 11:18:58 -06:00
Andres2908 33adb35397 mostramos el motivo 2022-03-18 01:28:12 -06:00
Andres2908 1097d89cde modal de declinacion 2022-03-18 00:28:49 -06:00
Andres2908 4b97608c3e acordeon 2022-03-17 18:53:37 -06:00
Andres2908 e76c4b8a2c codigo 2022-03-17 15:56:44 -06:00
Andres2908 598c6327f1 Estilos 2022-03-17 15:56:09 -06:00
Andres2908 ea1d9f28cf Correo y actualizacion de la 2da pagina 2022-03-17 11:58:19 -06:00
Andres2908 8301c8229d api 2022-03-17 00:45:27 -06:00
Andres2908 e51da59352 2da pagina (servicios) 2022-03-17 00:26:53 -06:00
Andres2908 5fe0100d10 cancelacion de una inscripcion 2022-03-15 18:51:07 -06:00
Andres2908 762fb8e6ce actualizacion del ticket 2022-03-15 18:27:20 -06:00
Andres2908 4e0c70aae1 Cuenta 2022-03-14 23:45:43 -06:00
Andres2908 e650d2ce24 campos editables 2022-03-14 23:38:59 -06:00
Andres2908 d28cf16b9a habilitamos las 4 areas 2022-03-14 16:29:00 -06:00
Andres2908 de6cb42901 Merge branch 'dev' into master 2022-03-13 22:48:04 -06:00
Andres2908 7c1580d399 Usuario en el nav 2022-03-13 22:47:36 -06:00
Andres2908 4c384bcb1b limpieza del código 2022-03-09 13:11:31 -06:00
Andres2908 067f0f9ad6 Merge branch 'dev' into master 2022-03-09 13:10:28 -06:00
Andres2908 755c48e789 Numero de cuenta 2022-03-09 10:04:07 -06:00
Andres2908 248d0a429f CAmbio al zoom 2022-03-09 00:52:43 -06:00
Marco ad8246a10a minimos cambios 2022-03-08 14:22:19 -06:00
Marco 633f5ce333 Merge branch 'dev' 2022-03-08 14:10:55 -06:00
Marco d12a92cfde Cambio en el texto de indicaciones 2022-03-08 14:10:09 -06:00
Andres2908 7c00fe6bee animación de carga en el ticekt 2022-03-08 00:25:47 -06:00
Andres2908 79b63ffa73 Regresamos al login cuando se inscribe 2022-03-08 00:10:55 -06:00
Andres2908 b0c7611f67 Zoom al ticket 2022-03-07 23:53:05 -06:00
Andres2908 5d2cc532ba imagen correcta 2022-03-07 15:53:42 -06:00
Andres2908 8d9b9ef5cd solucion del problema 2022-03-07 11:47:09 -06:00
Andres2908 a64262575c Solucion del build 2022-03-07 11:30:05 -06:00
Andres2908 cf0a8273d9 puerto 2022-03-07 11:11:55 -06:00
Andres2908 90114e78b6 Api de producción 2022-03-07 10:54:57 -06:00
Andres2908 b2012998c3 Ultima revisión y eliminación de comentarios 2022-03-07 09:25:31 -06:00
Andres2908 07744dc9be Correccion de textos 2022-03-06 22:48:21 -06:00
Andres2908 63e64bfde4 api 2022-03-06 20:04:29 -06:00
Andres2908 3643efb2d4 multiple correccion de bugs 2022-03-06 20:01:55 -06:00
Andres2908 6d8f7f44ab validaciones y validacion de la inscripcion sin ticket 2022-03-06 18:40:35 -06:00
Andres2908 fd249de706 pasamos de folio a ticket y corrección del monto 2022-03-06 14:56:15 -06:00
Andres2908 4d12028609 responsive 2022-03-06 13:45:26 -06:00
Andres2908 b9e7680ddf cambio de textos en el login y en el reglamento 2022-03-06 11:06:08 -06:00
Andres2908 da78027337 Merge branch 'dev' of https://repositorio.acatlan.unam.mx/CIDWA/inscripciones_front into saavedra 2022-03-04 01:05:59 -06:00
Andres2908 800760e824 cambios en la escritura 2022-03-04 01:04:19 -06:00
Andres2908 fe13ba17c0 Ligeros cambios 2022-03-03 23:09:44 -06:00
Andres2908 e891fdeb7b Merge branch 'saavedra' into dev 2022-03-01 23:16:43 -06:00
Andres2908 6dede0754c api venus 2022-03-01 22:56:38 -06:00
30 changed files with 16649 additions and 11005 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 129 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

+163 -15
View File
@@ -1,28 +1,23 @@
<!--
<template> <template>
<div class="full-h is-flex is-justify-content-center is-align-items-center"> <div class="full-h is-flex is-justify-content-center is-align-items-center">
<form class="box"> <form class="box">
<div class="has-text-centered"> <div class="has-text-centered">
<h2 class="is-size-4"> <h2 class="is-size-4">
<strong <strong>Inscripción a servicios de CeDeTec</strong>
>Inscripción para el uso de mesas para dispositivos móviles
personales</strong
>
</h2> </h2>
</div> </div>
<b-field label="Número de cuenta" :type="error"> <b-field label="Número de cuenta" :type="error">
<b-input <b-input
type="text" type="text"
placeholder="Número de cuenta"
@keyup.enter.native="login()" @keyup.enter.native="login()"
v-model="numeroCuenta" v-model="numeroCuenta"
/> />
</b-field> </b-field>
<b-field <b-field label="Contraseña" :type="error">
label="Contraseña"
message="Recuerda que tu contraseña es tu NIP de escolares"
:type="error"
>
<b-input <b-input
type="password" type="password"
placeholder="NIP de escolares" placeholder="NIP de escolares"
@@ -32,6 +27,13 @@
/> />
</b-field> </b-field>
<p class="font" :class="colorSize">
Si no recuerdas tu NIP de escolares, ingresa:
<a href="https://sistemas.acatlan.unam.mx/recuperanip/" target="_blanc"
>aquí</a
>
</p>
<div class="has-text-centered"> <div class="has-text-centered">
<b-button <b-button
@click="login()" @click="login()"
@@ -42,6 +44,10 @@
</b-button> </b-button>
</div> </div>
</form> </form>
<b-button @click="$router.push('/profesor/registro-profesor')">
Ir al registro de profesor
</b-button>
</div> </div>
</template> </template>
@@ -69,25 +75,23 @@ export default {
numeroCuenta: this.numeroCuenta, numeroCuenta: this.numeroCuenta,
passwordUser: this.password, passwordUser: this.password,
} }
this.updateIsLoading(true) this.updateIsLoading(true)
axios axios
.post(`${process.env.api}/usuario/login`, data) .post(`${process.env.api}/Usuario/login`, data)
.then((res) => { .then((res) => {
const info = res.data.Usuario const info = res.data.Usuario
localStorage.setItem('token', res.data.token) localStorage.setItem('token', res.data.token)
localStorage.setItem('idUsuario', info.idUsuario) localStorage.setItem('idUsuario', info.idUsuario)
localStorage.setItem('nombre', info.nombre) localStorage.setItem('nombre', info.nombre)
localStorage.setItem('numeroCuenta', info.numeroCuenta) localStorage.setItem('generacion', info.generacion)
localStorage.setItem('usuario', info.numeroCuenta)
localStorage.setItem('idCarrera', info.idCarrera) localStorage.setItem('idCarrera', info.idCarrera)
localStorage.setItem('carrera', info.carrera) localStorage.setItem('carrera', info.carrera)
this.updateIsLoading(false) this.$router.push('/registro')
this.$router.push(`/registro`)
}) })
.catch((err) => { .catch((err) => {
console.log(err)
this.error = 'is-danger' this.error = 'is-danger'
this.updateIsLoading(false) this.updateIsLoading(false)
this.imprimirError(err.response.data) this.imprimirError(err.response.data)
@@ -103,10 +107,24 @@ export default {
if (this.error) this.error = '' if (this.error) this.error = ''
}, },
}, },
computed: {
colorSize() {
return { fontColor: this.error == 'is-danger' }
},
},
} }
</script> </script>
<style scoped> <style scoped>
.font {
font-size: 12px;
padding-bottom: 10px;
}
.fontColor {
color: red;
}
.full-h { .full-h {
height: 75vh; height: 75vh;
} }
@@ -115,3 +133,133 @@ form {
width: 30rem; width: 30rem;
} }
</style> </style>
-->
<template>
<div class="full-h is-flex is-justify-content-center is-align-items-center">
<form class="box">
<div class="has-text-centered">
<div class="titulo">
<h2 class="is-size-4">Sistema de Inscripciones a CEDETEC</h2>
<h2 class="is-size-4">para Profesores</h2>
</div>
</div>
<b-field label="Número de trabajador" :type="error">
<b-input
type="text"
placeholder="Ingresa tu número de trabajador"
@keyup.enter.native="buscarProfesor()"
v-model="numeroTrabajador"
/>
</b-field>
<div class="has-text-centered">
<b-button class="is-primary "
@click="buscarProfesor"
type="is-primary"
:disabled="!numeroTrabajador"
>
Buscar
</b-button>
</div>
<p v-if="mensaje" class="has-text-centered mt-4">{{ mensaje }}</p>
</form>
</div>
</template>
<script >
import axios from 'axios'
import { errorBuscar, profesorYaInscrito } from '~/utils/alerts'
export default {
props: {
imprimirMensaje: { type: Function, required: true },
imprimirWarning: { type: Function, required: true },
imprimirError: { type: Function, required: true },
updateIsLoading: { type: Function, required: false, default: () => {} },
},
data() {
return {
numeroTrabajador: '',
profesor: null,
mensaje: '',
error: '',
}
},
methods: {
buscarProfesor() {
this.updateIsLoading(true)
axios
.get(`${process.env.VUE_APP_API}/api/profesores/${this.numeroTrabajador}`)
.then((res) => {
this.profesor = res.data;
const { id_cuenta, nombre } = res.data;
if (nombre && id_cuenta ) {
// Guardar en localStorage
localStorage.setItem('profesorId', id_cuenta);
localStorage.setItem('profesorNombre', nombre);
this.$router.replace({
path: '/profesor/bienvenida'
//query: { nombre, idUsuario, numeroCuenta }
})
}
else {
//Borrar
/*
this.profesor = null
this.error = 'is-danger'
this.mensaje = 'Profesor no encontrado o sin nombre registrado.'
this.imprimirWarning('No se encontró al profesor.')
*/
errorBuscar();
}
})
.catch((err) => {
//this.profesor = null
//this.error = 'is-danger'
//this.mensaje = 'Solo está permitido el acceso a profesores inscritos en la universidad.'
//this.imprimirWarning(err.response?.data?.message || 'Error al buscar')
//errorBuscar();
const status = err.response?.status;
if (status === 409) {
profesorYaInscrito();
} else {
errorBuscar();
}
})
.finally(() => {
this.updateIsLoading(false)
})
},
},
}
</script>
<style scoped>
.full-h {
height: 75vh;
}
.is-primary {
background-color: green;
}
.titulo {
margin-bottom: 25px;
color: goldenrod;
}
form {
width: 30rem;
}
</style>
+148
View File
@@ -0,0 +1,148 @@
<template>
<div class="box">
<p class="pb-2"><b>Número de cuenta: </b> {{ numeroCuenta }}</p>
<b-field label="Ticket" horizontal grouped>
<b-input v-model="folioA" :disabled="switchFolio" maxlength="6"></b-input>
<p class="control">
<b-button
type="is-primary"
icon-left="pencil"
@click="habilitar('folio')"
>
</b-button>
</p>
</b-field>
<b-field label="Cantidad" horizontal>
<b-input class="pb-5 px-4" expanded v-model="montoA" :disabled="switchMonto" type="number" step="0.01"/>
<p class="control">
<b-button
type="is-primary"
icon-left="pencil"
@click="habilitar('monto')"
>
</b-button>
</p>
</b-field>
<b-field label="Fecha del ticket" horizontal>
<b-datepicker
v-model="fechaTicketA"
:disabled="switchFecha"
:max-date="maxDate"
icon="calendar-today"
>
</b-datepicker>
<p class="control">
<b-button
type="is-primary"
icon-left="pencil"
@click="habilitar('fecha')"
>
</b-button>
</p>
</b-field>
<div class="has-text-centered pb-2">
<b-button
type="is-success"
@click="
imprimirWarning(
'¿Estas seguro de querer actualizar esta información?',
actualizarTicket
)
"
>Actualizar datos</b-button
>
</div>
</div>
</template>
<script>
import axios from 'axios'
export default {
props: {
imprimirMensaje: { type: Function, required: true },
imprimirError: { type: Function, required: true },
imprimirWarning: { type: Function, required: true },
updateIsLoading: { type: Function, require: true },
folio: { type: String, required: true },
monto: { type: String, required: true },
token: { type: Object, required: true },
fechaTicket: { type: Date, required: true },
},
data() {
return {
numeroCuenta: localStorage.getItem('noCuenta'),
switchFolio: true,
switchMonto: true,
switchFecha: true,
folioA: '',
montoA: '',
fechaTicketA: null,
maxDate: new Date(),
}
},
methods: {
habilitar(tipo) {
tipo == 'folio' && this.switchFolio == true
? (this.switchFolio = false)
: (this.switchFolio = true)
tipo == 'monto' && this.switchMonto == true
? (this.switchMonto = false)
: (this.switchMonto = true)
tipo == 'fecha' && this.switchFecha == true
? (this.switchFecha = false)
: (this.switchFecha = true)
},
actualizarTicket() {
const data = {
idInscripcion: Number(localStorage.getItem('inscripcion')),
folio: this.folioA,
monto: this.montoA,
fechaTicket: this.fechaTicketA,
}
this.updateIsLoading(true)
axios
.put(`${process.env.api}/admin/actualizar_ticket`, data, this.token)
.then((res) => {
this.updateIsLoading(false)
this.imprimirMensaje(res.data.message)
this.bloquearBotones()
localStorage.setItem('monto', this.montoA)
localStorage.setItem('folio', this.folioA)
localStorage.setItem('fechaTicket', this.fechaTicketA)
this.$emit('actualizarFolio')
})
.catch((err) => {
this.updateIsLoading(false)
this.imprimirError(err.response.data)
})
},
bloquearBotones() {
this.switchFolio = true
this.switchMonto = true
this.switchFecha = true
},
diaMin(today) {
return new Date(
today.getFullYear(),
today.getMonth(),
today.getDate() - today.getDate() + 1
)
},
},
created() {
;(this.folioA = this.folio),
(this.montoA = this.monto),
(this.fechaTicketA = this.fechaTicket)
},
}
</script>
-31
View File
@@ -1,31 +0,0 @@
<template>
<div>
<div class="columns">
<b-field class="column" label="Apertura de inscripciones">
<b-datepicker
placeholder="Type or select a date..."
icon="calendar-today"
editable
>
</b-datepicker>
</b-field>
<b-field class="column" label="Termino de inscripciones">
<b-datepicker
placeholder="Type or select a date..."
icon="calendar-today"
editable
>
</b-datepicker>
</b-field>
</div>
<div class="has-text-centered">
<b-button class="is-success"> Asignar Fechas </b-button>
</div>
</div>
</template>
<script></script>
<style scoped></style>
+38
View File
@@ -0,0 +1,38 @@
<template>
<div class="block pt-5" v-if="motivo">
<div class="has-text-centered pb-4">
<b-tag type="is-danger" size="is-medium">Ticket declinado</b-tag>
</div>
<p class="box"><b>Motivo: </b>{{ motivo }}</p>
</div>
</template>
<script>
import axios from 'axios'
export default {
props: {
folio: { type: String, required: true },
token: { type: Object, required: true },
},
data() {
return {
motivo: '',
}
},
methods: {
traerMotivo() {
axios
.get(`${process.env.api}/admin/motivo?folio=${this.folio}`, this.token)
.then((res) => {
this.motivo = res.data.motivo
})
.catch((err) => {
console.log(err.response.data)
})
},
},
created() {
this.traerMotivo()
},
}
</script>
+1 -3
View File
@@ -51,7 +51,6 @@ export default {
methods: { methods: {
login() { login() {
if (this.usuario && this.password && !this.error) { if (this.usuario && this.password && !this.error) {
console.log(typeof this.usuario)
const data = { const data = {
usuario: this.usuario, usuario: this.usuario,
password: this.password, password: this.password,
@@ -61,13 +60,12 @@ export default {
axios axios
.post(`${process.env.api}/admin/login`, data) .post(`${process.env.api}/admin/login`, data)
.then((res) => { .then((res) => {
const info = res.data localStorage.setItem('usuario', res.data.Usuario.usuario)
localStorage.setItem('token', res.data.token) localStorage.setItem('token', res.data.token)
this.updateIsLoading(false) this.updateIsLoading(false)
this.$router.push(`/${'admin'}`) this.$router.push(`/${'admin'}`)
}) })
.catch((err) => { .catch((err) => {
console.log(err)
this.error = 'is-danger' this.error = 'is-danger'
this.updateIsLoading(false) this.updateIsLoading(false)
this.imprimirError(err.response.data) this.imprimirError(err.response.data)
+79
View File
@@ -0,0 +1,79 @@
<template>
<form class="modal-card">
<header class="modal-card-head">
<h5 class="modal-card-title">
¿Estás seguro de querer declinar este ticket?
</h5>
</header>
<section class="modal-card-body">
<b-field label="Motivo por el cual vas a declinar el ticket">
<b-input type="textarea" maxlength="100" v-model="motivo" expanded />
</b-field>
</section>
<footer
class="modal-card-foot"
style="display: flex; justify-content: space-between"
>
<b-button type="is-danger" @click="$emit('close')"> Cancelar </b-button>
<b-button
type="is-success"
@click="declinarInscripcion(), $emit('close')"
:disabled="!motivo"
>
Enviar
</b-button>
</footer>
</form>
</template>
<script>
import axios from 'axios'
export default {
props: {
token: { type: Object, required: true },
folio: { type: String, required: true },
numeroCuenta: { type: String, required: true },
fechaTicket: { type: Date, required: true },
idArea: { type: Number, required: true },
monto: { type: Number, required: true },
imprimirError: { type: Function, required: true },
imprimirMensaje: { type: Function, required: true },
updateIsLoading: { type: Function, required: true },
},
data() {
return {
motivo: '',
}
},
methods: {
declinarInscripcion() {
const data = {
numeroCuenta: this.numeroCuenta,
idArea: this.idArea,
folio: this.folio,
motivo: this.motivo,
validacion: 0,
}
this.updateIsLoading(true)
axios
.put(`${process.env.api}/admin/validar`, data, this.token)
.then((res) => {
this.updateIsLoading(false)
this.imprimirMensaje(res.data.message)
})
.catch((err) => {
this.updateIsLoading(false)
this.imprimirError(err.response.data)
})
.finally(() => {
this.$router.go(-1)
})
},
},
}
</script>
+6 -10
View File
@@ -4,7 +4,7 @@
<b-field class="column" label="Fecha inicio"> <b-field class="column" label="Fecha inicio">
<b-datepicker <b-datepicker
v-model="inicio" v-model="inicio"
:min-date="minDate1" :min-date="minDate"
:max-date="maxDate" :max-date="maxDate"
icon="calendar-today" icon="calendar-today"
rounded rounded
@@ -15,7 +15,7 @@
<b-field class="column" label="Fecha fin"> <b-field class="column" label="Fecha fin">
<b-datepicker <b-datepicker
v-model="fin" v-model="fin"
:min-date="minDate2" :min-date="inicio"
:max-date="maxDate" :max-date="maxDate"
icon="calendar-today" icon="calendar-today"
rounded rounded
@@ -36,15 +36,13 @@ import fileDownload from 'js-file-download'
export default { export default {
props: { props: {
updateIsLoading: { type: Function, require: true }, updateIsLoading: { type: Function, required: true },
tipo: { type: String, require: true },
}, },
data() { data() {
return { return {
token: '', token: '',
minDate1: new Date('2022-01-01'), minDate: new Date('2022-01-01'),
minDate2: new Date(),
maxDate: new Date(), maxDate: new Date(),
inicio: new Date(), inicio: new Date(),
@@ -57,17 +55,15 @@ export default {
this.updateIsLoading(true) this.updateIsLoading(true)
axios axios
.get( .get(
`${process.env.api}/admin/reporte?inicio=${this.inicio}&fin=${this.fin}&tipo=${this.tipo}`, `${process.env.api}/admin/reporte?inicio=${this.inicio}&fin=${this.fin}`,
this.token this.token
) )
.then((res) => { .then((res) => {
fileDownload(res.data, `reporte.csv`) fileDownload(res.data, `inscripcionesCEDETEC.csv`)
this.updateIsLoading(false) this.updateIsLoading(false)
}) })
.catch((err) => { .catch((err) => {
console.log(err)
this.updateIsLoading(false) this.updateIsLoading(false)
// this.imprimirError(err.response.data)
}) })
}, },
}, },
+113 -25
View File
@@ -39,7 +39,7 @@
{{ props.row.Usuario.numeroCuenta }} {{ props.row.Usuario.numeroCuenta }}
</b-table-column> </b-table-column>
<b-table-column field="folio" label="Folio" centered v-slot="props" <b-table-column field="ticket" label="Ticket" centered v-slot="props"
>{{ props.row.folio }} >{{ props.row.folio }}
</b-table-column> </b-table-column>
@@ -48,22 +48,56 @@
</b-table-column> </b-table-column>
<b-table-column <b-table-column
field="confirmacion" field="Fecha"
label="Confirmación" label="Fecha y hora"
centered
v-slot="props"
>{{ hora(props.row.fechaInscripcion) }}</b-table-column
>
<b-table-column
field="inscripcion"
label="Inscripción"
centered centered
v-slot="props" v-slot="props"
> >
<b-tag :type="types(props.row.confirmacion)"> <b-button
{{ props.row.confirmacion }} type="is-success"
</b-tag> v-if="!props.row.folio && !props.row.monto && !props.row.fechaTicket"
@click="
usuario(
props.row.Usuario.numeroCuenta,
props.row.Usuario.idUsuario,
props.row.idArea
),
imprimirWarning(
'¿Estas seguro de querer validar esta inscripción ?',
validarSinTicket
)
"
>Validar</b-button
>
</b-table-column> </b-table-column>
<b-table-column field="cantidad" label="Cantidad" centered v-slot="props"> <b-table-column centered v-slot="props">
{{ props.row.monto }} <b-button
type="is-danger"
@click="
inscripcion(props.row.idInscripcion),
imprimirWarning(
'¿Estas seguro de querer cancelar esta inscripción ?',
cancelarInscripcion
)
"
>Cancelar</b-button
>
</b-table-column> </b-table-column>
<b-table-column field="ticket" label="Ticket" centered v-slot="props"> <b-table-column centered v-slot="props">
<b-button type="is-info" @click="verTicket(props.row)" <b-button
type="is-info"
v-if="props.row.folio"
@click="verTicket(props.row)"
>Ver ticket</b-button >Ver ticket</b-button
> >
</b-table-column> </b-table-column>
@@ -73,8 +107,15 @@
<script> <script>
import axios from 'axios' import axios from 'axios'
import moment from 'moment'
export default { export default {
props: {
updateIsLoading: { type: Function, required: true },
imprimirError: { type: Function, required: true },
imprimirMensaje: { type: Function, required: true },
imprimirWarning: { type: Function, required: true },
},
data() { data() {
return { return {
token: '', token: '',
@@ -82,40 +123,87 @@ export default {
inscripciones: [], inscripciones: [],
isPaginated: true, isPaginated: true,
currentPage: 1, currentPage: 1,
perPage: 5, perPage: 10,
data: {},
dataIns: {},
validacion: '2', validacion: '2',
numeroCuenta: '', numeroCuenta: '',
} }
}, },
methods: { methods: {
types(value) {
return value === true ? 'is-success' : 'is-danger'
},
todasInscripciones() { todasInscripciones() {
this.updateIsLoading(true)
axios axios
.get( .get(
`${process.env.api}/admin/todas_inscripciones?validacion=${this.validacion}&numeroCuenta=${this.numeroCuenta}`, `${process.env.api}/admin/todas_inscripciones?validacion=${this.validacion}&numeroCuenta=${this.numeroCuenta}`,
this.token this.token
) )
.then((res) => { .then((res) => {
this.updateIsLoading(false)
this.inscripciones = res.data this.inscripciones = res.data
}) })
.catch((err) => { .catch((err) => {
console.log(err) this.updateIsLoading(false)
// this.imprimirError(err.response.data) this.imprimirError(err.response.data)
}) })
}, },
verTicket(value) { verTicket(value) {
console.log(value) this.$router.push('/admin/ticket')
this.$router.push({ localStorage.setItem('idArea', value.idArea)
path: '/admin/ticket/', localStorage.setItem('monto', value.monto)
query: { localStorage.setItem('folio', value.folio)
folio: value.folio, localStorage.setItem('fechaTicket', value.fechaTicket)
monto: value.monto, localStorage.setItem('noCuenta', value.Usuario.numeroCuenta)
fecha: value.fechaTicket, localStorage.setItem('inscripcion', value.idInscripcion)
}, localStorage.setItem('validacion', this.validacion)
}) },
usuario(noCuenta, usuario, idArea) {
this.data.numeroCuenta = noCuenta
this.data.idUsuario = usuario
this.data.idArea = idArea
},
validarSinTicket() {
this.updateIsLoading(true)
axios
.put(
`${process.env.api}/admin/validar_sin_ticket`,
this.data,
this.token
)
.then((res) => {
this.updateIsLoading(false)
this.imprimirMensaje(res.data.message)
this.todasInscripciones()
})
.catch((err) => {
this.updateIsLoading(false)
this.imprimirError(err.response.data)
})
},
inscripcion(inscripcion) {
this.dataIns.idInscripcion = inscripcion
},
cancelarInscripcion() {
this.updateIsLoading(true)
axios
.put(
`${process.env.api}/admin/cancelar_inscripcion`,
this.dataIns,
this.token
)
.then((res) => {
this.imprimirMensaje(res.data.message)
this.updateIsLoading(false)
this.todasInscripciones()
})
.catch((err) => {
this.imprimirError(err.response.data)
this.updateIsLoading(false)
})
},
hora(value) {
return moment(value).format('LLL')
}, },
}, },
watch: { watch: {
+98 -44
View File
@@ -1,46 +1,47 @@
<template> <template>
<div class="columns"> <div class="columns px-2">
<div class="column py-5"> <div class="column is-one-third py-5">
<b-image <figure class="containerImg">
class="img" <b-image class="zoom" :src="urlTicket" alt="Imagen del ticket">
:src="this.urlTicket" </b-image>
alt="Imagen del ticket" </figure>
></b-image>
</div> </div>
<div class="column is-1"></div>
<div class="column mt-6"> <div class="column mt-6">
<p> <p>
Administrador por favor revisa que todos los datos sean correctos, en Administrador por favor revisa que todos los datos sean correctos, en
caso de ser así valida el ticket caso de ser así valida el ticket y la inscripción.
</p> </p>
<div class="box"> <IsCancelacion :folio="folio" :token="token" v-if="validacion === 0" />
<p><b>Folio:</b> {{ $route.query.folio }}</p>
<p><b>Cantidad: </b> {{ $route.query.monto }}</p> <DatosTicket
<p><b>Fecha del ticket:</b> {{ fecha($route.query.fecha) }}</p> :imprimirMensaje="imprimirMensaje"
</div> :imprimirError="imprimirError"
:imprimirWarning="imprimirWarning"
:updateIsLoading="updateIsLoading"
:folio="folio"
:monto="monto"
:fechaTicket="fechaTicket"
:token="token"
@actualizarFolio="actualizarFolio"
/>
<div class="has-text-centered pb-5"> <div class="has-text-centered pb-5">
<b-button <b-button
type="is-success" type="is-success"
@click=" @click="
validacion(1), imprimirWarning(
imprimirWarning( '¿ Estas seguro que los datos son correctos y quieres validar este ticket ?',
'¿ Estas seguro que los datos son correctos y quieres validar este ticekt ?', validar
validar )
)
" "
>Validar</b-button >Validar</b-button
> >
<b-button <b-button label="Declinar" type="is-danger" @click="declinarTicket()" />
type="is-danger"
@click="
validacion(0),
imprimirWarning(
'¿ Estas seguro que los datos son incorrectos y quieres declinar el ticket ?',
validar
)
"
>Denegar</b-button
>
<b-button type="is-info" @click="regresar()">Regresar</b-button> <b-button type="is-info" @click="regresar()">Regresar</b-button>
</div> </div>
</div> </div>
@@ -49,41 +50,58 @@
<script> <script>
import axios from 'axios' import axios from 'axios'
import moment from 'moment' import DatosTicket from './datosTicket.vue'
import ModalDeclinar from './modalDeclinar.vue'
import IsCancelacion from './isCancelacion.vue'
export default { export default {
components: {
DatosTicket,
ModalDeclinar,
IsCancelacion,
},
props: { props: {
imprimirMensaje: { type: Function, require: true }, imprimirMensaje: { type: Function, required: true },
imprimirError: { type: Function, require: true }, imprimirError: { type: Function, required: true },
imprimirWarning: { type: Function, required: true }, imprimirWarning: { type: Function, required: true },
updateIsLoading: { type: Function, require: true }, updateIsLoading: { type: Function, required: true },
}, },
data() { data() {
return { return {
token: '', token: '',
numeroCuenta: localStorage.getItem('noCuenta'),
fechaTicket: new Date(localStorage.getItem('fechaTicket')),
folio: localStorage.getItem('folio'),
monto: localStorage.getItem('monto'),
isFullPage: true,
urlTicket: '', urlTicket: '',
validado: null, validacion: localStorage.getItem('validacion'),
zoom: 1,
} }
}, },
methods: { methods: {
traerTicket() { traerTicket() {
this.updateIsLoading(true)
axios axios
.get(`${process.env.api}/admin/ticket?folio=${this.$route.query.folio}`) .get(`${process.env.api}/admin/ticket?folio=${this.folio}`)
.then((res) => { .then((res) => {
this.updateIsLoading(false)
this.urlTicket = res.config.url this.urlTicket = res.config.url
}) })
.catch((err) => { .catch((err) => {
this.updateIsLoading(false)
this.imprimirError(err.response.data) this.imprimirError(err.response.data)
}) })
}, },
validacion(value) {
this.validado = value
},
validar() { validar() {
const data = { const data = {
folio: this.$route.query.folio, numeroCuenta: localStorage.getItem('noCuenta'),
validacion: this.validado, folio: this.folio,
idArea: localStorage.getItem('idArea'),
validacion: 1,
} }
this.updateIsLoading(true) this.updateIsLoading(true)
@@ -94,7 +112,6 @@ export default {
this.imprimirMensaje(res.data.message) this.imprimirMensaje(res.data.message)
}) })
.catch((err) => { .catch((err) => {
console.log(err)
this.updateIsLoading(false) this.updateIsLoading(false)
this.imprimirError(err.response.data) this.imprimirError(err.response.data)
}) })
@@ -102,11 +119,33 @@ export default {
this.$router.go(-1) this.$router.go(-1)
}) })
}, },
fecha(fecha) { declinarTicket() {
return moment(fecha).format('L') const modalProps = {
token: this.token,
folio: this.folio,
numeroCuenta: this.numeroCuenta,
fechaTicket: this.fechaTicket,
monto: Number(localStorage.getItem('monto')),
idArea: Number(localStorage.getItem('idArea')),
imprimirError: this.imprimirError,
imprimirMensaje: this.imprimirMensaje,
updateIsLoading: this.updateIsLoading,
}
this.$buefy.modal.open({
props: modalProps,
parent: this,
component: ModalDeclinar,
hasModalCard: true,
customClass: 'custom-class custom-class-2',
trapFocus: true,
})
},
actualizarFolio() {
this.folio = localStorage.getItem('folio')
}, },
regresar() { regresar() {
this.$router.go(-1) this.$router.push('/admin')
}, },
}, },
created() { created() {
@@ -123,4 +162,19 @@ export default {
width: 350px; width: 350px;
padding-bottom: 470px; padding-bottom: 470px;
} }
.zoom {
transition: transform 0.2s;
}
.zoom:hover {
transform: scale(2);
position: relative;
display: flex;
height: 300px;
margin-top: 55%;
margin-bottom: 55%;
margin-left: 10%;
margin-right: 10%;
}
</style> </style>
+20
View File
@@ -0,0 +1,20 @@
<template>
<div>
<b-table :data="data" :columns="columns"></b-table>
</div>
</template>
<script>
export default {
props: { data: { type: Array, required: true } },
data() {
return {
columns: [
{ field: 'color', label: 'Color' },
{ field: 'tamaño', label: 'Tamaño' },
{ field: 'costo', label: 'Costo' },
],
}
},
}
</script>
+12 -2
View File
@@ -1,5 +1,5 @@
<template> <template>
<header> <header v-if="!isInIframe">
<div class="container py-3"> <div class="container py-3">
<div <div
class=" class="
@@ -31,7 +31,17 @@
</template> </template>
<script> <script>
export default {} export default {
data() {
return {
isInIframe: false,
};
},
mounted() {
// Detecta si se está mostrando dentro de un iframe
this.isInIframe = window.self !== window.top;
},
};
</script> </script>
<style scoped> <style scoped>
+6 -14
View File
@@ -1,13 +1,9 @@
<template> <template>
<section> <section>
<div class="container is-flex is-justify-content-flex-end"> <div
<!-- <div class="container is-flex is-justify-content-space-between is-align-items-center"
class="
container
is-flex is-justify-content-space-between is-align-items-center
"
> >
<h2 class="m-2 has-text-white">{{ usuario }}</h2> --> <h2 class="m-2 has-text-white">{{ usuario }}</h2>
<b-button <b-button
type="is-danger" type="is-danger"
@@ -23,19 +19,15 @@
<script> <script>
export default { export default {
// data() { data() {
// return { usuario: localStorage.getItem('usuario') } return { usuario: localStorage.getItem('usuario') }
// }, },
methods: { methods: {
cerrarSesion() { cerrarSesion() {
localStorage.clear() localStorage.clear()
this.$router.replace('/') this.$router.replace('/')
}, },
}, },
created() {
// if (!localStorage.getItem(''))
// this.cerrarSesion()
},
} }
</script> </script>
+81 -67
View File
@@ -1,23 +1,5 @@
<template> <template>
<div> <div>
<!-- <p class="subtitle is-4"><b>Seleccione el área.</b></p>
<div class="block">
<b-radio v-model="idArea" v-if="area1" native-value="1"
><b-icon icon="microsoft-windows" size="is-small"></b-icon>
Windows</b-radio
>
<b-radio v-model="idArea" v-if="areaMac && area2" native-value="2"
><b-icon icon="apple" size="is-small"></b-icon> Macintosh</b-radio
>
<b-radio v-model="idArea" v-if="area3" native-value="3"
><b-icon icon="linux" size="is-small"></b-icon> Linux</b-radio
>
<b-radio v-model="idArea" v-if="area4" native-value="4"
><b-icon icon="laptop" size="is-small"></b-icon> Mesa para Lap</b-radio
>
</div> -->
<p class="subtitle is-4"> <p class="subtitle is-4">
<b <b
>Captura la siguiente información tal cual se muestra en tu ticket de >Captura la siguiente información tal cual se muestra en tu ticket de
@@ -27,18 +9,41 @@
<p class="subtitle is-5"> <p class="subtitle is-5">
Recuerda que la aportación es voluntaria y el área destinada debe ser Recuerda que la aportación es voluntaria y el área destinada debe ser
CEDETEC CEDETEC.
</p>
<div class="block">
<b-radio v-model="idArea" v-if="area1" native-value="1"
><b-icon icon="microsoft-windows" size="is-small"></b-icon>
Windows</b-radio
>
<b-radio v-model="idArea" v-if="areaMac && area2" native-value="2"
><b-icon icon="apple" size="is-small"></b-icon> Mac</b-radio
>
<b-radio v-model="idArea" v-if="area3" native-value="3"
><b-icon icon="linux" size="is-small"></b-icon> Linux</b-radio
>
</div>
<p class="pb-5">
Por favor captura los siguientes datos que se encuentran en tu ticket que
se te entregó en cajas.
</p> </p>
<div class="columns"> <div class="columns">
<b-image
class="column mx-2"
:src="require('@/assets/ticket.jpeg')"
alt="Ticket Acatlán"
ratio="16by10"
></b-image>
<div class="column pr-5"> <div class="column pr-5">
<b-field label="Folio">
<b-input type="text" maxlength="5" v-model="folio"></b-input>
</b-field>
<b-field label="Monto"> <b-field label="Monto">
<b-input v-model="monto" type="number" maxlength="5"></b-input> <b-input v-model="monto" type="number" step="0.01"></b-input>
</b-field> </b-field>
<b-field label="Fecha">
<b-field label="Fecha de Ticket">
<b-datepicker <b-datepicker
v-model="fechaTicket" v-model="fechaTicket"
placeholder="Selecciona la fecha" placeholder="Selecciona la fecha"
@@ -49,6 +54,10 @@
</b-datepicker> </b-datepicker>
</b-field> </b-field>
<b-field label="Ticket">
<b-input maxlength="6" v-model="folio"></b-input>
</b-field>
<b-field> <b-field>
<b-upload <b-upload
v-model="dropFiles" v-model="dropFiles"
@@ -83,13 +92,6 @@
</span> </span>
</div> </div>
</div> </div>
<b-image
class="column pl-5"
:src="require('@/assets/ticket.jpeg')"
alt="Ticket Acatlán"
ratio="16by9"
></b-image>
</div> </div>
<b-field> <b-field>
@@ -101,10 +103,10 @@
<div class="has-text-centered pb-5"> <div class="has-text-centered pb-5">
<b-button <b-button
:disabled="!(idArea !== '' && terminos)" :disabled="!(idArea !== '' && terminos) || disabledError"
@click=" @click="
imprimirWarning( imprimirWarning(
'¿Estas seguro de querer inscribirte a esta área?', '¿Los datos para la inscripción a CEDETEC son correctos?',
inscribir inscribir
) )
" "
@@ -125,47 +127,60 @@ export default {
imprimirError: { type: Function, required: true }, imprimirError: { type: Function, required: true },
updateIsLoading: { type: Function, required: true }, updateIsLoading: { type: Function, required: true },
inscripcionesUsuario: { type: Array, required: true }, inscripcionesUsuario: { type: Array, required: true },
idUsuario: { type: Number, required: true },
}, },
data() { data() {
const today = new Date() const today = new Date()
return { return {
datosUsuario: {}, idArea: '',
areaMac: false, areaMac: false,
area1: true, area1: true,
area2: true, area2: true,
area3: true, area3: true,
area4: true,
error: false, error: false,
disabledError: false,
idArea: '4',
folio: '', folio: '',
monto: '', monto: '',
fechaTicket: null,
dropFiles: [],
terminos: false, terminos: false,
fechaTicket: '', idCarrera: '',
dia: 10, usuario: '',
generacion: 0,
token: '',
minDate: this.diaMin(today), minDate: this.diaMin(today),
maxDate: new Date(), maxDate: new Date(),
dropFiles: [],
} }
}, },
methods: { methods: {
async inscribir() { async inscribir() {
let formData = new FormData() if (this.dropFiles.length > 0 && !this.folio) {
if ( if (!this.fechaTicket) {
this.monto && return this.imprimirError({
this.monto <= 20 && message: 'Por favor ingresa la fecha del ticket.',
this.inscripcionesUsuario.length > 0 })
) } else {
return this.imprimirError({
message: 'Por favor ingresa el campo de monto.',
})
}
}
if (this.monto && this.monto < 20 && this.inscripcionesUsuario.length > 0)
this.error = true this.error = true
else this.error = false else this.error = false
let formData = new FormData()
if (this.error === false) { if (this.error === false) {
formData.append('idUsuario', this.datosUsuario.idUsuario) formData.append('idUsuario', this.idUsuario)
formData.append('numeroCuenta', this.usuario)
formData.append('folio', this.folio) formData.append('folio', this.folio)
if (this.monto === '') this.monto = 0
formData.append('monto', this.monto) formData.append('monto', this.monto)
formData.append('idArea', this.idArea) formData.append('idArea', this.idArea)
formData.append('fechaTicket', this.fechaTicket) formData.append('fechaTicket', this.fechaTicket)
@@ -176,22 +191,18 @@ export default {
.post( .post(
`${process.env.api}/usuario/inscripcionUsuario`, `${process.env.api}/usuario/inscripcionUsuario`,
formData, formData,
this.datosUsuario.token this.token
) )
.then((res) => { .then((res) => {
this.$emit('pedirInscripciones')
this.updateIsLoading(false) this.updateIsLoading(false)
this.$emit('pedirInscripciones')
this.imprimirMensaje(res.data.message) this.imprimirMensaje(res.data.message)
this.clear() this.clear()
}) })
.catch((err) => { .catch((err) => {
console.log(err)
this.updateIsLoading(false) this.updateIsLoading(false)
this.imprimirError(err.response.data) this.imprimirError(err.response.data)
}) })
.finally((res) => {
this.areaPermitida()
})
} else { } else {
this.imprimirError({ this.imprimirError({
message: 'El monto mínimo para esta inscripción es de $20 pesos.', message: 'El monto mínimo para esta inscripción es de $20 pesos.',
@@ -200,8 +211,8 @@ export default {
}, },
areaPermitida() { areaPermitida() {
if ( if (
this.datosUsuario.idCarrera === 11122 || (this.idCarrera === 20425 || this.idCarrera === 20226) &&
this.datosUsuario.idCarrera === 20226 this.generacion < 2022
) )
this.areaMac = true this.areaMac = true
@@ -209,7 +220,6 @@ export default {
if (this.inscripcionesUsuario[i].idArea === 1) this.area1 = false if (this.inscripcionesUsuario[i].idArea === 1) this.area1 = false
if (this.inscripcionesUsuario[i].idArea === 2) this.area2 = false if (this.inscripcionesUsuario[i].idArea === 2) this.area2 = false
if (this.inscripcionesUsuario[i].idArea === 3) this.area3 = false if (this.inscripcionesUsuario[i].idArea === 3) this.area3 = false
if (this.inscripcionesUsuario[i].idArea === 4) this.area4 = false
} }
}, },
diaMin(today) { diaMin(today) {
@@ -223,20 +233,15 @@ export default {
this.idArea = '' this.idArea = ''
this.folio = '' this.folio = ''
this.monto = '' this.monto = ''
this.fechaTicket = '' ;(this.fechaTicket = null), (this.terminos = false)
this.terminos = false
this.dropFiles = [] this.dropFiles = []
}, },
deleteDropFile(index) { deleteDropFile(index) {
this.dropFiles.splice(index, 1) this.dropFiles.splice(index, 1)
}, },
getLocalhostInfo() { getLocalhostInfo() {
this.datosUsuario.idUsuario = Number(localStorage.getItem('idUsuario')) this.idCarrera = Number(localStorage.getItem('idCarrera'))
this.datosUsuario.numeroCuenta = localStorage.getItem('numeroCuenta') this.token = {
this.datosUsuario.nombre = localStorage.getItem('idnombre')
this.datosUsuario.carrera = localStorage.getItem('carrera')
this.datosUsuario.idCarrera = localStorage.getItem('idCarrera')
this.datosUsuario.token = {
headers: { headers: {
token: localStorage.getItem('token'), token: localStorage.getItem('token'),
}, },
@@ -244,16 +249,25 @@ export default {
}, },
}, },
watch: { watch: {
inscripcionesUsuario() { inscripcionesUsuario(value) {
if (value.length > 0) this.idArea = ''
this.areaPermitida() this.areaPermitida()
}, },
dropFiles(value) { dropFiles(value) {
if (value.length > 1) this.deleteDropFile(0) if (value.length > 1) this.deleteDropFile(0)
}, },
fechaTicket(fechaT) {
if (fechaT > this.maxDate) this.disabledError = true
else this.disabledError = false
},
}, },
created() { created() {
this.areaPermitida() this.usuario = localStorage.getItem('usuario')
this.generacion = localStorage.getItem('generacion')
this.getLocalhostInfo() this.getLocalhostInfo()
this.areaPermitida()
}, },
} }
</script> </script>
+6 -15
View File
@@ -1,6 +1,6 @@
<template> <template>
<div class="columns"> <div class="columns">
<div class="column box mr-5"> <div class="column box mx-2">
<p>Cuenta: {{ datosUsuario.numeroCuenta }}</p> <p>Cuenta: {{ datosUsuario.numeroCuenta }}</p>
<p>Nombre: {{ datosUsuario.nombre }}</p> <p>Nombre: {{ datosUsuario.nombre }}</p>
<p>Correo: {{ datosUsuario.numeroCuenta }}@pcpuma.unam.acatlan.mx</p> <p>Correo: {{ datosUsuario.numeroCuenta }}@pcpuma.unam.acatlan.mx</p>
@@ -22,17 +22,8 @@
{{ area(props.row.idArea) }} {{ area(props.row.idArea) }}
</b-table-column> </b-table-column>
<b-table-column <b-table-column field="tiempo" label="Tiempo asignado" centered>
field="tiempo" 3600 minutos(s)
label="Tiempo disponible"
centered
v-slot="props"
>
{{ props.row.tiempo }} minutos(s)
</b-table-column>
<b-table-column field="status" label="Confirmo" centered v-slot="props">
{{ confirmacion(props.row.status) }}
</b-table-column> </b-table-column>
</b-table> </b-table>
</div> </div>
@@ -42,7 +33,7 @@
export default { export default {
props: { props: {
inscripcionesUsuario: { type: Array, required: true }, inscripcionesUsuario: { type: Array, required: true },
area: { type: Function, require: true }, area: { type: Function, required: true },
}, },
data() { data() {
return { return {
@@ -52,7 +43,7 @@ export default {
methods: { methods: {
icono(idArea) { icono(idArea) {
if (idArea === 1) return 'microsoft-windows' if (idArea === 1) return 'microsoft-windows'
if (idArea === 2) return 'mac' if (idArea === 2) return 'apple'
return idArea === 3 ? 'linux' : 'laptop' return idArea === 3 ? 'linux' : 'laptop'
}, },
confirmacion(status) { confirmacion(status) {
@@ -60,7 +51,7 @@ export default {
}, },
getLocalhostInfo() { getLocalhostInfo() {
this.datosUsuario.idUsuario = localStorage.getItem('idUsuario') this.datosUsuario.idUsuario = localStorage.getItem('idUsuario')
this.datosUsuario.numeroCuenta = localStorage.getItem('numeroCuenta') this.datosUsuario.numeroCuenta = localStorage.getItem('usuario')
this.datosUsuario.nombre = localStorage.getItem('nombre') this.datosUsuario.nombre = localStorage.getItem('nombre')
this.datosUsuario.carrera = localStorage.getItem('carrera') this.datosUsuario.carrera = localStorage.getItem('carrera')
this.token = { this.token = {
+3 -12
View File
@@ -18,14 +18,6 @@
<b-step-item <b-step-item
step="2" step="2"
label="Confirmación"
type="is-success"
:clickable="isStepsClickable"
>
</b-step-item>
<b-step-item
step="3"
label="Validación" label="Validación"
type="is-success" type="is-success"
:clickable="isStepsClickable" :clickable="isStepsClickable"
@@ -38,8 +30,8 @@
<script> <script>
export default { export default {
props: { props: {
inscripcion: { type: Object, require: true }, inscripcion: { type: Object, required: true },
area: { type: Function, require: true }, area: { type: Function, required: true },
}, },
data() { data() {
return { return {
@@ -55,8 +47,7 @@ export default {
}, },
methods: { methods: {
step() { step() {
if (this.inscripcion.confirmacion === true) this.activeStep = 1 if (this.inscripcion.validacion === 1) this.activeStep = 1
if (this.inscripcion.validacion === 1) this.activeStep = 2
}, },
}, },
created() { created() {
+8 -3
View File
@@ -3,8 +3,9 @@
<Header /> <Header />
<Logout /> <Logout />
<div class="full-h container px-4">
<nuxt /> <nuxt />
</div>
<Footer /> <Footer />
</div> </div>
@@ -24,4 +25,8 @@ export default {
} }
</script> </script>
<style scoped></style> <style>
.full-h {
min-height: 75vh;
}
</style>
+5 -7
View File
@@ -1,8 +1,6 @@
export default { export default {
ssr: false, ssr: false,
/* Server de pruebas */ server: { port: 3131 },
// server: { port: },
server: { port: 3136 },
target: 'static', target: 'static',
head: { head: {
title: 'Inscripciones CEDETEC', title: 'Inscripciones CEDETEC',
@@ -24,9 +22,9 @@ export default {
axios: {}, axios: {},
build: {}, build: {},
env: { env: {
api: 'http://localhost:3000', // api: 'http://localhost:3000',
// api: "https://890af9d598a4.ngrok.io" //api: 'https://venus.acatlan.unam.mx/inscripciones_test', Esta es la que tenia
// api: 'https://venus.acatlan.unam.mx/inscripciones_test', // api: 'https://venus.acatlan.unam.mx/inscripciones',
// api: "https://venus.acatlan.unam.mx/produccion", VUE_APP_API: process.env.VUE_APP_API
}, },
} }
+15307 -10638
View File
File diff suppressed because it is too large Load Diff
+4 -2
View File
@@ -5,16 +5,18 @@
"scripts": { "scripts": {
"dev": "nuxt", "dev": "nuxt",
"build": "nuxt build", "build": "nuxt build",
"start": "nuxt start", "start": "source ~/.nvm/nvm.sh && nvm use 16.15.1 && npm install && nuxt build && nuxt generate && nuxt start -p 3136",
"generate": "nuxt generate" "generate": "nuxt generate"
}, },
"dependencies": { "dependencies": {
"@nuxt/components": "^2.2.1",
"@nuxtjs/axios": "^5.13.1", "@nuxtjs/axios": "^5.13.1",
"core-js": "^3.9.1", "core-js": "^3.9.1",
"js-file-download": "^0.4.12", "js-file-download": "^0.4.12",
"moment": "^2.29.1", "moment": "^2.29.1",
"nuxt": "^2.15.3", "nuxt": "2.17.2",
"nuxt-buefy": "^0.4.4", "nuxt-buefy": "^0.4.4",
"sweetalert2": "^11.22.2",
"validator": "^13.6.0" "validator": "^13.6.0"
}, },
"devDependencies": { "devDependencies": {
+61 -14
View File
@@ -2,22 +2,19 @@
<div class="container"> <div class="container">
<b-tabs v-model="activeTab"> <b-tabs v-model="activeTab">
<b-tab-item label="Tabla de tickets"> <b-tab-item label="Tabla de tickets">
<TableTickets /> <TableTickets
:updateIsLoading="updateIsLoading"
:imprimirError="imprimirError"
:imprimirMensaje="imprimirMensaje"
:imprimirWarning="imprimirWarning"
/>
</b-tab-item> </b-tab-item>
<b-tab-item label="Reportes"> <b-tab-item label="Reportes">
<p class="title is-5"> <p class="title is-5">
Selecciona el periodo del que quieres obtener un reporte. Selecciona el periodo del que quieres obtener un reporte.
</p> </p>
<Reporte :updateIsLoading="updateIsLoading" :tipo="'reporte'" /> <Reporte :updateIsLoading="updateIsLoading" />
</b-tab-item>
<b-tab-item label="Generar CSV">
<p class="title is-5">
Selecciona el periodo para generar un archivo CSV y alimnetar la base
del AT.
</p>
<GenerarCSV :updateIsLoading="updateIsLoading" :tipo="'CSV'" />
</b-tab-item> </b-tab-item>
</b-tabs> </b-tabs>
</div> </div>
@@ -26,15 +23,11 @@
<script> <script>
import TableTickets from '~/components/admin/tableTickets.vue' import TableTickets from '~/components/admin/tableTickets.vue'
import Reporte from '~/components/admin/reporte.vue' import Reporte from '~/components/admin/reporte.vue'
import GenerarCSV from '~/components/admin/reporte.vue'
import FechasInscripcion from '~/components/admin/fechasInscripcion.vue'
export default { export default {
components: { components: {
TableTickets, TableTickets,
Reporte, Reporte,
GenerarCSV,
FechasInscripcion,
}, },
data() { data() {
return { return {
@@ -45,6 +38,60 @@ export default {
updateIsLoading(booleanValue) { updateIsLoading(booleanValue) {
this.isLoading = booleanValue this.isLoading = booleanValue
}, },
imprimirError(err = {}, title = '¡Hubo un error!', onConfirm = () => {}) {
this.$buefy.dialog.alert({
ariaRole: 'alertdialog',
ariaModal: true,
type: 'is-danger',
title,
message: err.message,
confirmText: 'Entendido',
hasIcon: true,
iconPack: 'mdi',
icon: 'alert-octagon',
onConfirm: () => onConfirm(),
})
if (err.err && err.err === 'token error') {
localStorage.clear()
this.$router.push('/')
}
},
imprimirMensaje(message, title = '¡Felicidades!', onConfirm = () => {}) {
this.$buefy.dialog.alert({
ariaRole: 'alertdialog',
ariaModal: true,
type: 'is-success',
title,
message,
confirmText: 'Ok',
hasIcon: true,
iconPack: 'mdi',
icon: 'check-circle',
onConfirm: () => onConfirm(),
})
},
imprimirWarning(
message,
onConfirm = () => {},
title = '¡Espera un minuto!',
onCancel = () => {}
) {
this.$buefy.dialog.alert({
ariaRole: 'alertdialog',
ariaModal: true,
type: 'is-warning',
title,
message,
confirmText: 'Confirmar',
canCancel: true,
cancelText: 'Cancelar',
hasIcon: true,
iconPack: 'mdi',
icon: 'help-circle',
onConfirm: () => onConfirm(),
onCancel: () => onCancel(),
})
},
}, },
} }
</script> </script>
+10 -2
View File
@@ -6,6 +6,8 @@
:imprimirWarning="imprimirWarning" :imprimirWarning="imprimirWarning"
:updateIsLoading="updateIsLoading" :updateIsLoading="updateIsLoading"
/> />
<b-loading :is-full-page="true" v-model="isLoading" :can-cancel="false" />
</div> </div>
</template> </template>
@@ -17,7 +19,9 @@ export default {
Ticket, Ticket,
}, },
data() { data() {
return {} return {
isLoading: false,
}
}, },
methods: { methods: {
updateIsLoading(booleanValue) { updateIsLoading(booleanValue) {
@@ -41,7 +45,11 @@ export default {
this.$router.push('/') this.$router.push('/')
} }
}, },
imprimirMensaje(message, title = '¡Felicidades!', onConfirm = () => {}) { imprimirMensaje(
message,
title = '¡Acción confirmada!',
onConfirm = () => {}
) {
this.$buefy.dialog.alert({ this.$buefy.dialog.alert({
ariaRole: 'alertdialog', ariaRole: 'alertdialog',
ariaModal: true, ariaModal: true,
+7
View File
@@ -1,5 +1,7 @@
<template> <template>
<section class="container"> <section class="container">
<RegistroProfesor ></RegistroProfesor>
<LoginUser <LoginUser
v-if="type === 'User'" v-if="type === 'User'"
:imprimirMensaje="imprimirMensaje" :imprimirMensaje="imprimirMensaje"
@@ -8,6 +10,8 @@
:updateIsLoading="updateIsLoading" :updateIsLoading="updateIsLoading"
/> />
<LoginAdmin <LoginAdmin
v-if="type === 'Admin'" v-if="type === 'Admin'"
:imprimirMensaje="imprimirMensaje" :imprimirMensaje="imprimirMensaje"
@@ -16,6 +20,8 @@
:updateIsLoading="updateIsLoading" :updateIsLoading="updateIsLoading"
/> />
<div class="has-text-centered"> <div class="has-text-centered">
<b-button @click="types()">{{ type }}</b-button> <b-button @click="types()">{{ type }}</b-button>
</div> </div>
@@ -27,6 +33,7 @@
<script> <script>
import LoginUser from '@/components/Login' import LoginUser from '@/components/Login'
import LoginAdmin from '@/components/admin/login' import LoginAdmin from '@/components/admin/login'
import RegistroProfesor from '@/pages/profesor/registro-profesor.vue'
export default { export default {
components: { LoginUser, LoginAdmin }, components: { LoginUser, LoginAdmin },
+105
View File
@@ -0,0 +1,105 @@
<template>
<div>
<div class="has-text-centered mt-6">
<h1 class="title is-3">¡Bienvenido al sistema de inscripciones CEDETEC!</h1>
</div>
<div class="content mt-4 px-5 card">
<p class="text1">
Profesor(a): <strong>{{ nombre }}</strong>, al realizar su inscripción tendrá acceso a los siguientes servicios que ofrece el CEDETEC en el área de profesores:
</p>
<ol>
<li>Préstamo de equipo de cómputo.</li>
<li>Mesas para trabajar con sus dispositivos móviles personales o con los módulos de PC PUMA.</li>
</ol>
<p>
Adicionalmente, y bajo disponibilidad del espacio, su programa podrá reservar la sala de usos múltiples para que usted pueda utilizarla con los alumnos.
</p>
<p><strong>Nota:</strong> La inscripción se realiza cada semestre.</p>
<div class="btn-ins">
<button class="btn-first" type="button" @click="realizarInscripcion">Realizar Inscripcion</button>
</div>
</div>
</div>
</template>
<script>
import axios from 'axios';
import { errorAlInscribir, inscripcionExitosa } from '~/utils/alerts';
export default {
data() {
return {
nombre: '',
correo: '',
idUsuario: null,
numeroCuenta: null
};
},
mounted() {
this.idUsuario = localStorage.getItem('profesorId');
this.nombre = localStorage.getItem('profesorNombre');
//this.numeroCuenta = localStorage.getItem('profesorNumeroCuenta');
},
methods: {
realizarInscripcion() {
const payload = {
id_cuenta: this.idUsuario,
nombre: this.nombre,
//correo: 'smtrabajos5@gmail.com'
correo: `${this.idUsuario}@pcpuma.acatlan.unam.mx` // esta es el codigo para produccion
}
axios.post(`${process.env.VUE_APP_API}/api/profesores/inscripcion`,payload)
.then(() => {
inscripcionExitosa(payload.correo);
this.$router.push('/'); //Redirige a la pantalla original despues de la inscripcion
})
.catch((err) => {
//this.imprimirError('No se pudo enviar el correo.');
console.error(err);
errorAlInscribir();
});
}
}
}
</script>
<style scoped>
h1 {
color: goldenrod;
padding-bottom: 20px;
}
ol {
padding-left: 50px;
}
.btn-ins {
text-align: center;
padding-bottom: 20px;
}
.text1 {
padding-top: 20px;
}
/*
.btn-first {
background-color: goldenrod; #1d3d6f
width: 350px;
height: 50px;
color: white;
box-shadow: 0px 4px 20px rgba(40, 35, 97, 0.5);
}
*/
</style>
+20
View File
@@ -0,0 +1,20 @@
<template>
<div>
<div>
<ol>
<li><strong>Asunto</strong>: Inscripción CEDETEC</li>
<li>Estimado profesor(a) {{ nombre }}</li>
<li>Informo que su inscripción fue realizad con éxito.</li>
</ol>
</div>
<div>
<h3><strong>¿Cómo puede hacer uso de los servicios?</strong></h3>
Es necesario revise los siguientes videos para solicitar equipo en el área de profesores.
</div>
<div>
<strong>Nota</strong>:
<p>Es importante revisar los <strong>lineamientos de uso</strong> para hacer uso de los servicios que ofrece el CEDETEC. </p>
</div>
</div>
</template>
+285 -91
View File
@@ -1,110 +1,298 @@
<template> <template>
<div class="container"> <div class="container px-2">
<h2 class="title is-5">Mesa para dispositivos moviles</h2> <section>
<ol> <p class="title is-3 has-text-centered color">
<li> Los servicios que ofrece el Centro de Desarrollo Tecnológico (CeDeTec)
El servicio solo esta disponible para alumnos vigentes de licenciatura son:
</li> </p>
<li>
Este servicio requiere de una aportación voluntaria que podrás realizar <ul class="pb-5">
en cajas (planta baja del edificio A4) <li class="pl-3">a) Préstamo de equipo de cómputo</li>
</li> <li class="pl-3">b) Préstamo de mesas para dispositivos móviles</li>
<li> <li class="pl-3">c) Impresión</li>
Al realizar tu inscripción se te otorgan 60 hrs, en caso de acabarse, <li class="pl-3">d) Ploteo</li>
podrás adquirir más tiempo, realizando nuevamente una aportación <li class="pl-3">e) Escaneo</li>
voluntaria. </ul>
</li>
<li> <b-collapse
Esta inscripción es válida para hacer uso de mesas dentro del CEDETEC class="card"
donde podrás trabajar con tus dispositivos móviles solo actividades animation="slide"
académicas :open="isOpen == 1"
</li> @open="isOpen = index1"
<li> :aria-id="'contentIdForA11y5-' + index1"
<p>El servicio se realiza de la siguiente manera:</p> >
<ul class="pl-5"> <template #trigger="props">
<li> <div
a. Ingresar al Departamento de Servicios de para verificar la class="card-header"
disponibilidad de espacio que se muestra en la pantalla que se role="button"
encuentra en la entrada :aria-controls="'contentIdForA11y5-' + index1"
</li> :aria-expanded="props.open"
<li> >
b. Dirigirse al Departamento de Servicios de Cómputo (planta baja <p class="card-header-title">
del CEDETEC) Servicios que requieren inscripción y confirmación
</li> </p>
<li> <a class="card-header-icon">
c. Desinfectar tus manos con gel antes de utilizar los equipos para <b-icon :icon="props.open ? 'menu-down' : 'menu-up'"> </b-icon>
la asignación de tiempo </a>
</li> </div>
<li> </template>
d. Indicar en el sistema <div class="card-content">
<ul class="pl-5"> <div class="content">
<li>l. Número de cuenta</li> <ol>
<li>ll. Elegir mesa para laptop</li> <li class="pl-3">
<li>lll. Elegir tiempo (15, 30, 45, 60, 90, 120 min)</li> <b>Préstamo de equipos de cómputo:</b> Con Sistemas Operativos
<li>lV. El sistema te indicará la mesa a utilizar</li> Windows, MacOS, Linux y el software sugerido por la
<li> licenciatura.
V. En caso de terminar tu tiempo y deseas renovar, tendrás que </li>
ir solicitarlo nuevamente en los equipos de asignación de
tiempo. <li class="pl-3">
<b>Mesas para trabajar con dispositivos móviles:</b> Los
dispositivos deberán estar configurados a la red de pcpuma.
</li>
</ol>
<p class="pt-5">
<b
>Para hacer uso de estos servicios es necesario hacer los
siguientes pasos:</b
>
</p>
<p class="pt-5"><b>Paso 1: Registro</b></p>
<p>
Solo podran ingresar alumnos vigentes de licenciatura al sitio
<a href="https://inscripcion-cedetec.acatlan.unam.mx/">
https://inscripcion-cedetec.acatlan.unam.mx/</a
>
con su numero de cuenta y NIP de escolares para:
</p>
<ul>
<li class="pl-3">
Elegir área (PCNET, Macintosh o Linux) según la carrera y el
semestre
</li>
<li class="pl-3">
Agregar datos (monto, fecha, número de ticket de la aportación
voluntaria que hiciste en cajas).
</li> </li>
</ul> </ul>
</li>
</ul>
</li>
<li>
El servicio está sujeto a lineamientos de uso que deberás tener
presentes para cualquier usuario
<ul class="pl-5"> <p class="pt-5"><b>Paso 2 Confirmación</b></p>
<li>a. Traer su propio cargador</li>
<li>b. No permite mover mobiliario o multicontactos</li>
<li>
c. La red de PCPUMA del equipo personal deberá estar previamente
configurada
</li>
<li>d. Solo podrá estar una persona por mesa</li>
<li>e. Deberás portar todo el tiempo el cubrebocas</li>
<li>f. No podrás ingresar e ingerir alimentos o bebidas</li>
<li>g. Deberás permanecer en orden y en silencio</li>
<li>
h. El espacio deberá estar limpio al terminar el tiempo asignado
</li>
<li>
i. Las mesas no podrán utilizarse para actividades de recortes,
armado, pegado de piezas o apuntes
</li>
</ul>
</li>
</ol>
<p class="py-4"> <p>
Nota: En caso de no respetar estos lineamientos básicos será suspendida su Es indispensable ingresar al sitio
inscripción a este servicio <a
</p> href=" https://kalinga.acatlan.unam.mx/cedetec/"
target="_blanc"
>
https://kalinga.acatlan.unam.mx/cedetec/
</a>
para conocer:
</p>
<b-field> <ul>
<b-checkbox v-model="lineamientos"> <li class="pl-3">La forma de usar los servicios</li>
Acepto que todos los datos ingresados en esta aplicación son verdaderos, <li class="pl-3">Lineamientos y sanciones</li>
de no ser así mi inscripción será cancelada. </ul>
</b-checkbox>
</b-field>
<div class="has-text-centered pb-5"> <p class="pt-5">
<b-button Después de haber visto los videos y leído los lineamientos y
:disabled="!lineamientos" sanciones, tendrás que aceptar que has leído y entendido los
@click="pushRegistro" puntos anteriores al ingresar tu número de cuenta y correo
type="is-success" institucional(pcpuma).
>Aceptar</b-button </p>
<p class="pt-5"><b>Notas:</b></p>
<ul class="pt-5">
<li class="pl-3">Cupo limitado</li>
<li class="pl-3">
El aforo dependerá del color del semáforo de riesgo epidémico.
</li>
<li class="pl-3">
Solo podrás hacer uso de los servicios si realizas la
confirmación
</li>
<li class="pl-3">
La inscripción te habilita 60 hrs. para ambos servicios, que
podrás hacer uso de lunes a viernes en el horario de 9:00 a
19:45 En caso de terminarse las horas asignadas, podrás
renovarse realizando una aportación voluntaria e ingresar al
sitio:
<a href="https://inscripcion-cedetec.acatlan.unam.mx"
>https://inscripcion-cedetec.acatlan.unam.mx</a
>
</li>
</ul>
</div>
</div>
</b-collapse>
<b-collapse
class="card"
animation="slide"
:open="isOpen == 1"
@open="isOpen = index1"
:aria-id="'contentIdForA11y5-' + index1"
> >
<template #trigger="props">
<div
class="card-header"
role="button"
:aria-controls="'contentIdForA11y5-' + index1"
:aria-expanded="props.open"
>
<p class="card-header-title">Ingreso al CeDeTec:</p>
<a class="card-header-icon">
<b-icon :icon="props.open ? 'menu-down' : 'menu-up'"> </b-icon>
</a>
</div>
</template>
<div class="card-content">
<div class="content">
<ul>
<li class="pl-3">
Revisar la <b>disponibilidad</b> de equipos de cómputo y mesas
para dispositivos,
<b>en la pantalla ubicada en la entrada principal.</b> Es
importante este punto para evitar aglomeraciones y respetar el
aforo.
</li>
<li class="pl-3">
Dirigirse a los equipos de asignación de tiempo para hacer la
solicitud de equipo o mesa para dispositivos móviles.
</li>
</ul>
</div>
</div>
</b-collapse>
<b-collapse
class="card"
animation="slide"
:open="isOpen == 1"
@open="isOpen = index1"
:aria-id="'contentIdForA11y5-' + index1"
>
<template #trigger="props">
<div
class="card-header"
role="button"
:aria-controls="'contentIdForA11y5-' + index1"
:aria-expanded="props.open"
>
<p class="card-header-title">
Servicios que NO requieren inscripción y confirmación
</p>
<a class="card-header-icon">
<b-icon :icon="props.open ? 'menu-down' : 'menu-up'"> </b-icon>
</a>
</div>
</template>
<div class="card-content">
<div class="content">
<ul>
<li class="pl-3">
Los servicios de impresión, escaneo y ploteo
<b>requieren de un pago que se realiza en cajas</b> (planta baja
edificio A4).
</li>
<p class="pl-3 pt-4">
Al realizar el pago en cajas indicar pago a CEDETEC y monto.
</p>
<p class="pl-3">
Solo se permiten ticket cuyo concepto sea CEDETEC.
</p>
<p class="pl-3">
El ticket debe ser del mes en que se realiza la impresión.
</p>
</ul>
<p class="subtitle is-2 pt-5">Impresión</p>
<p>De acuerdo al tamaño y color se tienen los siguientes costos</p>
<Tabla :data="dataImpresion" />
<p class="subtitle is-2">Ploteo</p>
<p>De acuerdo al tamaño y color se tienen los siguientes costos</p>
<Tabla :data="dataPloteo" />
<p class="subtitle is-2">Escaneo:</p>
<p>Precio por tamaño:</p>
<ul class="pb-5">
<li class="pl-3">Carta y oficio <b>$ 1.00</b></li>
<li class="pl-3">Doble Carta <b>$ 2.00</b></li>
<li class="pl-3">60 x 45 cms. ó 90 x 60 cms. <b>$ 5.00</b></li>
<li class="pl-3">Trae USB</li>
</ul>
</div>
</div>
</b-collapse>
</section>
<p class="subtitle is-4 has-text-centered pt-5">
¿Desear continuar con la inscripción ?
</p>
<div class="has-text-centered pb-5">
<b-button type="is-info" @click="pushRegistro">Continuar</b-button>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import Tabla from '@/components/informacion/tablaCostos.vue'
export default { export default {
components: {
Tabla,
},
data() { data() {
return { return {
lineamientos: false, isOpen: 0,
index1: 0,
index2: 1,
index3: 2,
dataImpresion: [
{
color: 'Negro',
tamaño: 'carta/oficio',
costo: '$ 1.00 por cada página',
},
{
color: 'Negro',
tamaño: 'doble carta',
costo: '$ 2.00 por cada página',
},
{
color: 'Color',
tamaño: 'diferentes tamaños',
costo:
'1) El usuario presenta el archivo en el área de impresión (planta baja del CeDeTec) para que el operador le indique el costo <br/> 2) Ir cajas a pagar <br/> 3) Regresar a CeDeTec para entregar ticket y hacer la impresión',
},
],
dataPloteo: [
{
color: 'Negro',
tamaño: '60x45 cm',
costo: '$14.00',
},
{
color: 'Negro',
tamaño: '90x60 cm',
costo: '$16.50',
},
{
color: 'Color',
tamaño: '60x45 cm o 90x60 cm',
costo:
'1) El usuario presenta el archivo en el área de impresión (planta baja del CeDeTec) para que el operador le indique el costo. <br /> 2) Ir cajas a pagar <br/> 3) Regresar a CeDeTec para entregar ticket y hacer la impresión',
},
],
} }
}, },
methods: { methods: {
@@ -114,3 +302,9 @@ export default {
}, },
} }
</script> </script>
<style scoped>
.color {
color: #1d3d6f;
}
</style>
+17 -10
View File
@@ -1,6 +1,6 @@
<template> <template>
<div class="container"> <div class="container py-2 px-2">
<p class="title is-3"> <p class="title is-3 has-text-centered">
Inscripción para hacer uso de mesa para dispositivos móviles Inscripción para hacer uso de mesa para dispositivos móviles
</p> </p>
@@ -18,8 +18,11 @@
:imprimirError="imprimirError" :imprimirError="imprimirError"
:updateIsLoading="updateIsLoading" :updateIsLoading="updateIsLoading"
:inscripcionesUsuario="inscripcionesUsuario" :inscripcionesUsuario="inscripcionesUsuario"
:idUsuario="idUsuario"
@pedirInscripciones="pedirInscripciones" @pedirInscripciones="pedirInscripciones"
/> />
<b-loading :is-full-page="true" v-model="isLoading" :can-cancel="false" />
</div> </div>
</template> </template>
@@ -38,16 +41,17 @@ export default {
}, },
data() { data() {
return { return {
datosUsuario: {}, idUsuario: '',
inscripcionesUsuario: [], inscripcionesUsuario: [],
isLoading: false,
} }
}, },
methods: { methods: {
async pedirInscripciones() { async pedirInscripciones() {
await axios await axios
.get( .get(
`${process.env.api}/usuario/inscripciones?idUsuario=${this.datosUsuario.idUsuario}`, `${process.env.api}/usuario/inscripciones?idUsuario=${this.idUsuario}`,
this.datosUsuario.token this.token
) )
.then((res) => { .then((res) => {
this.inscripcionesUsuario = res.data this.inscripcionesUsuario = res.data
@@ -94,7 +98,10 @@ export default {
hasIcon: true, hasIcon: true,
iconPack: 'mdi', iconPack: 'mdi',
icon: 'check-circle', icon: 'check-circle',
onConfirm: () => onConfirm(), onConfirm: () => {
this.$router.push(`/`)
localStorage.clear()
},
}) })
}, },
imprimirWarning( imprimirWarning(
@@ -109,9 +116,9 @@ export default {
type: 'is-warning', type: 'is-warning',
title, title,
message, message,
confirmText: 'Confirmar', confirmText: 'Si',
canCancel: true, canCancel: true,
cancelText: 'Cancelar', cancelText: 'No',
hasIcon: true, hasIcon: true,
iconPack: 'mdi', iconPack: 'mdi',
icon: 'help-circle', icon: 'help-circle',
@@ -121,8 +128,8 @@ export default {
}, },
}, },
created() { created() {
this.datosUsuario.idUsuario = Number(localStorage.getItem('idUsuario')) this.idUsuario = Number(localStorage.getItem('idUsuario'))
this.datosUsuario.token = { this.token = {
headers: { token: localStorage.getItem('token') }, headers: { token: localStorage.getItem('token') },
} }
this.pedirInscripciones() this.pedirInscripciones()
+46
View File
@@ -0,0 +1,46 @@
// src/utils/alerts.js
import Swal from 'sweetalert2';
export const inscripcionExitosa = (correo) => {
Swal.fire({
title: '¡Inscripción exitosa!',
html: `Hemos enviado un correo a<br><strong>${correo}</strong> por favor revisar su correo.`,
icon: 'success',
confirmButtonText: 'Aceptar',
confirmButtonColor: '#28a745',
backdrop: true,
allowOutsideClick: false,
});
};
export const errorAlInscribir = () => {
Swal.fire({
title: 'Error',
text: 'No se pudo completar la inscripción. Intenta más tarde.',
icon: 'error',
confirmButtonText: 'Aceptar',
confirmButtonColor: '#d33',
});
};
//Por favor confirme que la informacion enviada es correcta en caso contrario redirigirse a su programa academico
export const errorBuscar = () => {
Swal.fire({
title: 'Error',
text: 'Su número de trabajador no fue encontrado en nuestro sistema. Por favor, acudir a su Programa Académico para que reporte el problema al DSC.',
icon: 'error',
confirmButtonText: 'Aceptar',
confirmButtonColor: '#d33',
});
};
export const profesorYaInscrito = () => {
Swal.fire({
title: 'Error',
text: 'El profesor ya esta inscrito, por favor verificar el correo enviado anteriormente.',
icon: 'error',
confirmButtonText: 'Aceptar',
confirmButtonColor: '#d33',
})
}