periodos.ts 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import { createApp, reactive } from 'https://unpkg.com/petite-vue?module'
  2. type Carrera = {
  3. carrera_id: number;
  4. carrera_nombre: string;
  5. clave_carrera: string;
  6. facultad_id: number;
  7. facultad_nombre: string;
  8. nivel_id: number;
  9. nivel_nombre: string;
  10. }
  11. type Nivel = {
  12. nivel_id: number;
  13. nivel_nombre: string;
  14. }
  15. const app = createApp({
  16. carreras: [] as Carrera[],
  17. niveles: [] as Nivel[],
  18. message: {} as Record<string, string>,
  19. async setNivel(carrera: Carrera, nivel: Nivel) {
  20. if (carrera.nivel_id === nivel.nivel_id) {
  21. return
  22. }
  23. carrera.nivel_id = nivel.nivel_id
  24. carrera.nivel_nombre = nivel.nivel_nombre
  25. await fetch('action/carrera.php', {
  26. method: 'PUT',
  27. body: JSON.stringify({
  28. carrera_id: carrera.carrera_id,
  29. nivel_id: nivel.nivel_id
  30. })
  31. })
  32. .then(res => res.json())
  33. .then(res => {
  34. this.message.title = "Actualización"
  35. this.message.text = res.error ?? res.success
  36. this.message.type = res.error ? 'danger' : 'success'
  37. this.message.timestamp = new Date().toLocaleTimeString()
  38. })
  39. },
  40. async mounted() {
  41. this.carreras = await fetch('action/carrera.php').then(res => res.json())
  42. this.niveles = await fetch('action/nivel.php').then(res => res.json())
  43. // group by facultad_id
  44. const carreras = this.carreras.reduce((acc, cur) => {
  45. const { facultad_nombre } = cur
  46. if (!acc[facultad_nombre]) {
  47. acc[facultad_nombre] = []
  48. }
  49. acc[facultad_nombre].push(cur)
  50. return acc
  51. }, {} as Record<number, Carrera[]>)
  52. this.carreras = Object.entries(carreras).map(([facultad_nombre, carreras]) => ({
  53. facultad_nombre: facultad_nombre,
  54. carreras
  55. }))
  56. }
  57. }).mount('#app')