Stable 2-ago-2023
This commit is contained in:
149
ts/client.ts
Normal file
149
ts/client.ts
Normal file
@@ -0,0 +1,149 @@
|
||||
// @ts-ignore Import module
|
||||
import { createApp, reactive } from 'https://unpkg.com/petite-vue?module'
|
||||
|
||||
export interface PeridoV1 {
|
||||
IdNivel: number;
|
||||
IdPeriodo: number;
|
||||
NombreNivel: string;
|
||||
NombrePeriodo: string;
|
||||
in_db: boolean;
|
||||
linked: boolean;
|
||||
}
|
||||
|
||||
|
||||
export interface PeridoV2 {
|
||||
ClaveCarrera: string;
|
||||
FechaFin: string;
|
||||
FechaInicio: string;
|
||||
IdPeriodo: number;
|
||||
NombreCarrera: string;
|
||||
}
|
||||
|
||||
const webServices = {
|
||||
getPeriodosV1: async (): Promise<PeridoV1[]> => {
|
||||
try {
|
||||
const response = await fetch('periodos.v1.php');
|
||||
return await response.json();
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
return [];
|
||||
}
|
||||
},
|
||||
getPeriodosV2: async (): Promise<PeridoV2[]> => {
|
||||
try {
|
||||
const response = await fetch('periodos.v2.php');
|
||||
return await response.json();
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const store = reactive({
|
||||
periodosV1: [] as PeridoV1[],
|
||||
periodosV2: [] as PeridoV2[],
|
||||
|
||||
errors: [] as string[],
|
||||
fechas(idPeriodo: number): { inicio: string, fin: string } {
|
||||
const periodo = this.periodosV2.find((periodo: PeridoV2) => periodo.IdPeriodo === idPeriodo);
|
||||
return {
|
||||
inicio: periodo ? periodo.FechaInicio : '',
|
||||
fin: periodo ? periodo.FechaFin : ''
|
||||
}
|
||||
},
|
||||
periodov1(idPeriodo: number): PeridoV1 | undefined {
|
||||
return this.periodosV1.find((periodo: PeridoV1) => periodo.IdPeriodo === idPeriodo);
|
||||
},
|
||||
periodov2(idPeriodo: number): PeridoV2[] {
|
||||
return this.periodosV2.filter((periodo: PeridoV2) => periodo.IdPeriodo === idPeriodo);
|
||||
},
|
||||
async addPeriodo(periodo: PeridoV1 | PeridoV2) {
|
||||
try {
|
||||
const result = await fetch('backend/periodos.php', {
|
||||
method: 'POST',
|
||||
body: JSON.stringify({
|
||||
...periodo,
|
||||
...this.fechas(periodo.IdPeriodo)
|
||||
}),
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
}).then((response) => response.json());
|
||||
if (result.success) {
|
||||
this.periodosV1 = this.periodosV1.map((periodoV1: PeridoV1) => {
|
||||
if (periodoV1.IdPeriodo === periodo.IdPeriodo) {
|
||||
periodoV1.in_db = true;
|
||||
}
|
||||
return periodoV1;
|
||||
});
|
||||
return result;
|
||||
}
|
||||
else {
|
||||
this.errors.push(result.message);
|
||||
}
|
||||
} catch (error) {
|
||||
this.errors.push(error);
|
||||
}
|
||||
},
|
||||
|
||||
async addCarreras(idPeriodo: number) {
|
||||
try {
|
||||
const periodoV1 = this.periodov1(idPeriodo) as PeridoV1;
|
||||
const periodoV2 = this.periodov2(idPeriodo) as PeridoV2[];
|
||||
|
||||
const data = periodoV2.map(({ ClaveCarrera, NombreCarrera }: PeridoV2) =>
|
||||
({
|
||||
ClaveCarrera: ClaveCarrera,
|
||||
NombreCarrera: NombreCarrera,
|
||||
IdNivel: periodoV1.IdNivel,
|
||||
})
|
||||
);
|
||||
|
||||
const result = await fetch('backend/carreras.php', {
|
||||
method: 'POST',
|
||||
body: JSON.stringify(data),
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
}).then((response) => response.json());
|
||||
if (result.success) {
|
||||
await webServices.getPeriodosV1().then((periodosV1) => {
|
||||
this.periodosV1 = periodosV1;
|
||||
});
|
||||
|
||||
await webServices.getPeriodosV2().then((periodosV2) => {
|
||||
this.periodosV2 = periodosV2;
|
||||
});
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
this.errors.push(error);
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
createApp({
|
||||
store,
|
||||
info(IdPeriodo: number): PeridoV2 {
|
||||
const periodo = store.periodosV2.find((periodo: PeridoV2) => periodo.IdPeriodo === IdPeriodo &&
|
||||
periodo.FechaInicio != '' && periodo.FechaFin != '');
|
||||
return periodo
|
||||
},
|
||||
complete(IdPeriodo: number): boolean {
|
||||
const info = this.info(IdPeriodo);
|
||||
return info !== undefined;
|
||||
},
|
||||
mounted: async () => {
|
||||
|
||||
await webServices.getPeriodosV1().then((periodosV1) => {
|
||||
store.periodosV1 = periodosV1;
|
||||
});
|
||||
|
||||
await webServices.getPeriodosV2().then((periodosV2) => {
|
||||
store.periodosV2 = periodosV2;
|
||||
});
|
||||
|
||||
}
|
||||
}).mount()
|
||||
Reference in New Issue
Block a user