Files
paad/ts/puestos.ts
2023-10-03 18:22:51 +00:00

106 lines
3.0 KiB
TypeScript

import { createApp, reactive } from 'https://unpkg.com/petite-vue?module'
type Puesto = {
puesto_id: number,
nombre: string,
facultad_id: number,
}
type Carrera = {
carrera_id: number;
carrera_nombre: string;
clave_carrera: string;
}
type Materia = {
carrera_id: number;
clave_materia: string;
materia_id: number;
materia_nombre: string;
}
type Usuario = {
usuario_clave: string;
usuario_id: number;
usuario_nombre: string;
}
const app = createApp({
message: null,
puestos: [] as Puesto[],
carreras: [] as Carrera[],
materias: [] as Materia[],
usuarios: [] as Usuario[],
async nuevoPuesto(nuevoPuesto: string) {
try {
const res = await fetch('action/puesto.php', {
method: 'POST',
body: JSON.stringify({
puesto_nombre: nuevoPuesto
})
})
const data = await res.json()
this.puestos.push(data)
// order by puesto.nombre
this.puestos.sort((a: Puesto, b: Puesto) => a.nombre.localeCompare(b.nombre))
} catch (error) {
alert(`Error: ${error}`)
}
},
to_delete: null as Puesto | null,
async eliminarPuesto(puesto_id: number) {
try {
const res = await fetch('action/puesto.php', {
method: 'DELETE',
body: JSON.stringify({
puesto_id
})
})
const data = await res.json()
this.message = data.msg;
// after 3 seconds, remove the message
setTimeout(() => {
this.message = null
}, 3000)
this.puestos = this.puestos.filter((p: Puesto) => p.puesto_id !== puesto_id)
// order by puesto.nombre
this.puestos.sort((a: Puesto, b: Puesto) => a.nombre.localeCompare(b.nombre))
} catch (error) {
alert(`Error: ${error}`)
}
},
async actualizarPuesto(puesto_id: number, materias: Materia[], usuario_id: number | null) {
try {
const res = await fetch('action/puesto.php', {
method: 'PUT',
body: JSON.stringify({
puesto_id,
materias: materias.map(m => m.materia_id),
usuario_id
})
})
const data = await res.json()
this.message = data.msg;
// after 3 seconds, remove the message
setTimeout(() => {
this.message = null
}, 3000)
} catch (error) {
alert(`Error: ${error}`)
}
},
async mounted() {
this.puestos = await fetch('action/puesto.php').then(res => res.json())
this.carreras = await fetch('action/action_carreras.php').then(res => res.json())
this.materias = await fetch('action/action_materias.php').then(res => res.json())
this.usuarios = await fetch('action/usuarios.php').then(res => res.json())
}
}).mount('#app')