From 170950014cdda334cf926c5b7bfd558631c9da6a Mon Sep 17 00:00:00 2001 From: Rodrigo_R Date: Wed, 30 Aug 2023 00:03:29 -0400 Subject: [PATCH 1/3] Se agregan todas las pagina de roles y rolesaplicaciones --- src/layouts/Sidebar.svelte | 5 + src/pages/roles/Admin.svelte | 109 +++++++ src/pages/roles/ModalRol.svelte | 275 ++++++++++++++++++ src/pages/rolesaplicaciones/Admin.svelte | 121 ++++++++ .../ModalRolaplicacion.svelte | 95 ++++++ src/routes/user.routes.js | 5 + src/services/roles.js | 47 +++ src/services/rolesyaplicaciones.js | 58 ++++ 8 files changed, 715 insertions(+) create mode 100644 src/pages/roles/Admin.svelte create mode 100644 src/pages/roles/ModalRol.svelte create mode 100644 src/pages/rolesaplicaciones/Admin.svelte create mode 100644 src/pages/rolesaplicaciones/ModalRolaplicacion.svelte create mode 100644 src/services/roles.js create mode 100644 src/services/rolesyaplicaciones.js diff --git a/src/layouts/Sidebar.svelte b/src/layouts/Sidebar.svelte index c43b03a..6aca2e4 100644 --- a/src/layouts/Sidebar.svelte +++ b/src/layouts/Sidebar.svelte @@ -58,6 +58,11 @@ Personas + + + Roles + + diff --git a/src/pages/roles/Admin.svelte b/src/pages/roles/Admin.svelte new file mode 100644 index 0000000..7d9c147 --- /dev/null +++ b/src/pages/roles/Admin.svelte @@ -0,0 +1,109 @@ + + +Roles + +
+
+ +
+
+
+ + + + + + + + + + {#each roles as app, index} + + + + + + {/each} + +
Nro + onOrderBy('id_rol')}>ID + {#if ordering === 'id_rol'}{/if} + {#if ordering === '-id_rol'}{/if} + + onOrderBy('nombre_rol')}>Nombre + {#if ordering === 'nombre_rol'}{/if} + {#if ordering === '-nombre_rol'}{/if} +
{offset + index + 1}{app.id_rol} onEdita(app)}>{app.nombre_rol}
+
+
+ +
+ +{#if rol} + rol = null} + on:refresh={() => onPage(page)} + /> +{/if} + + \ No newline at end of file diff --git a/src/pages/roles/ModalRol.svelte b/src/pages/roles/ModalRol.svelte new file mode 100644 index 0000000..c45832b --- /dev/null +++ b/src/pages/roles/ModalRol.svelte @@ -0,0 +1,275 @@ + + +
+ dispatch('close')}> +
+
+
Rol ID
+
+ {#if rol.id_rol} + + {:else} + + {/if} +
+
+
+
Nombre Rol
+
+ +
+
+

Permiso a aplicaciones

+
+                
+               
+              
+ + +
+
+
+ + + + + + + + + + + {#each form3 as aplicacion} + + + + + + + + + {/each} + + +
AplicacionesAccesoSolo visualizar
{aplicacion.nombre_app}
+
+
+
+
+ + + + +
+
diff --git a/src/pages/rolesaplicaciones/Admin.svelte b/src/pages/rolesaplicaciones/Admin.svelte new file mode 100644 index 0000000..84bbce2 --- /dev/null +++ b/src/pages/rolesaplicaciones/Admin.svelte @@ -0,0 +1,121 @@ + + +rolesyaplicaciones +
+ {data2} + {#each data2 as rol} + {rol.id_rol} + {rol.id_aplicacion} + {/each} +
+ +
+
+ +
+
+
+ + + + + + + + + + + {#each roles as app, index} + + + + + + + {/each} + +
Nro + onOrderBy('id_aplicacion')}>ID rol + {#if ordering === 'id_aplicacion'}{/if} + {#if ordering === '-id_aplicacion'}{/if} + + onOrderBy('id_rol')}>Id app + {#if ordering === 'id_rol'}{/if} + {#if ordering === '-id_rol'}{/if} + Solo Visualizar
{offset + index + 1}{app.id_rol} onEdita(app)}>{app.id_aplicacion}{app.solo_visualizar}
+
+
+ +
+ +{#if rol} + rol = null} + on:refresh={() => onPage(page)} + /> +{/if} + + + \ No newline at end of file diff --git a/src/pages/rolesaplicaciones/ModalRolaplicacion.svelte b/src/pages/rolesaplicaciones/ModalRolaplicacion.svelte new file mode 100644 index 0000000..5589475 --- /dev/null +++ b/src/pages/rolesaplicaciones/ModalRolaplicacion.svelte @@ -0,0 +1,95 @@ + + +
+ dispatch('close')}> +
+
+
ID app
+
+ {#if rol.id_aplicacion} + + {:else} + + {/if} +
+
+
+
ID rol
+
+ +
+
+
+
+ + +
+
+
+ + + + +
+
\ No newline at end of file diff --git a/src/routes/user.routes.js b/src/routes/user.routes.js index d1f4d21..d10f84d 100644 --- a/src/routes/user.routes.js +++ b/src/routes/user.routes.js @@ -11,6 +11,8 @@ import PagePersonaCreate from '$/pages/personas/Persona.svelte' import PagePersonaModifica from '$/pages/personas/Persona.svelte' import PageMapaParaderos from '$/pages/mapas/Paraderos.svelte' import PageMapaRutas from '$/pages/mapas/Rutas.svelte' +import PageRoles from '$/pages/roles/Admin.svelte' +import PageRolesyAplicaciones from '$/pages/rolesaplicaciones/Admin.svelte' export const routes = [ { path: '/', component: PageHome }, @@ -19,6 +21,8 @@ export const routes = [ { path: '/usuarios', component: PageUsuarios }, { path: '/usuarios/nuevo', component: PageUsuarioCreate }, { path: '/usuarios/:login', component: PageUsuarioModifica }, + { path: '/roles', component: PageRoles }, + { path: '/rolesaplicaciones', component: PageRolesyAplicaciones }, { path: '/comunas', component: PageComunas }, { path: '/personas', component: PagePersonas }, { path: '/personas/nuevo', component: PagePersonaCreate }, @@ -26,4 +30,5 @@ export const routes = [ { path: '/mapas/paraderos', component: PageMapaParaderos }, { path: '/mapas/rutas', component: PageMapaRutas }, { path: '*', component: PageError }, + ] \ No newline at end of file diff --git a/src/services/roles.js b/src/services/roles.js new file mode 100644 index 0000000..e7bafe3 --- /dev/null +++ b/src/services/roles.js @@ -0,0 +1,47 @@ +import { base, getToken } from './_config' + +export async function getRoles(params) { + const query = !params ? '' : '?' + (new URLSearchParams(params).toString()); + const res = await fetch(`${base}/roles/${query}`, { + headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" } + }) + if (!res.ok) throw await res.json() + return res.json() +} + +export async function getRol(id) { + const res = await fetch(`${base}/roles/${id}/`, { + headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" } + }) + if (!res.ok) throw await res.json() + return res.json() +} + +export async function createRol(data) { + const res = await fetch(`${base}/roles/`, { + method: 'POST', + body: JSON.stringify(data), + headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" } + }) + if (!res.ok) throw await res.json() + return res.json() +} + +export async function updateRol({ id_rol: id, ...data }) { + const res = await fetch(`${base}/roles/${id}/`, { + method: 'PATCH', + body: JSON.stringify(data), + headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" } + }) + if (!res.ok) throw await res.json() + return res.json() +} + +export async function deleteRol(id) { + const res = await fetch(`${base}/roles/${id}/`, { + method: 'DELETE', + headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" } + }) + if (!res.ok) throw await res.json() + return res.text() +} \ No newline at end of file diff --git a/src/services/rolesyaplicaciones.js b/src/services/rolesyaplicaciones.js new file mode 100644 index 0000000..6b2a789 --- /dev/null +++ b/src/services/rolesyaplicaciones.js @@ -0,0 +1,58 @@ +import { base, getToken } from './_config' + +export async function getRolesyaplicaciones(idRol) { + const params = idRol ? { id_rol: idRol } : null; // Preparar los parámetros de la consulta + const query = params ? '?' + new URLSearchParams(params).toString() : ''; + const res = await fetch(`${base}/rolyaplicacion/${query}`, { + headers: {"Authorization": `Bearer ${getToken()}`,"Content-Type": "application/json"} + }); + if (!res.ok) throw await res.json(); + return res.json(); +} + +export async function getRolesaplicaciones(params) { + const query = !params ? '' : '?' + (new URLSearchParams(params).toString()); + const res = await fetch(`${base}/rolyaplicacion/${query}`, { + headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" } + }) + if (!res.ok) throw await res.json() + return res.json() +} + + +export async function getRolyaplicacion(id) { + const res = await fetch(`${base}/rolyaplicacion/${id}/`, { + headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" } + }) + if (!res.ok) throw await res.json() + return res.json() +} + +export async function createRolyaplicacion(data) { + const res = await fetch(`${base}/rolyaplicacion/`, { + method: 'POST', + body: JSON.stringify(data), + headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" } + }) + if (!res.ok) throw await res.json() + return res.json() +} + +export async function updateRolyaplicacion({ id_rol_app: id, ...data }) { + const res = await fetch(`${base}/rolyaplicacion/${id}/`, { + method: 'PATCH', + body: JSON.stringify(data), + headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" } + }) + if (!res.ok) throw await res.json() + return res.json() +} + +export async function deleteRolyaplicacion(id) { + const res = await fetch(`${base}/rolyaplicacion/${id}/`, { + method: 'DELETE', + headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" } + }) + if (!res.ok) throw await res.json() + return res.text() +} \ No newline at end of file From cad292e25a294baf4a3059b76a5cd9965f803bff Mon Sep 17 00:00:00 2001 From: Francisco Sandoval Date: Tue, 5 Sep 2023 18:04:26 -0300 Subject: [PATCH 2/3] se usa openstreetmap --- src/assets/imagen.png | Bin 0 -> 8343 bytes src/assets/parada-de-autobus.png | Bin 0 -> 9938 bytes src/pages/mapas/FormParadero.svelte | 111 +++++++++++ src/pages/mapas/Paraderos.svelte | 286 ++++++++++++++-------------- src/pages/mapas/Rutas.svelte | 210 ++++++++++---------- 5 files changed, 359 insertions(+), 248 deletions(-) create mode 100644 src/assets/imagen.png create mode 100644 src/assets/parada-de-autobus.png create mode 100644 src/pages/mapas/FormParadero.svelte diff --git a/src/assets/imagen.png b/src/assets/imagen.png new file mode 100644 index 0000000000000000000000000000000000000000..e61ff32e6681fe6715ed02560e3a9fe57e2d9101 GIT binary patch literal 8343 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 literal 0 HcmV?d00001 diff --git a/src/assets/parada-de-autobus.png b/src/assets/parada-de-autobus.png new file mode 100644 index 0000000000000000000000000000000000000000..10db639c73eb2d99296d7e4b4b41542e1446324d GIT binary patch literal 9938 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 literal 0 HcmV?d00001 diff --git a/src/pages/mapas/FormParadero.svelte b/src/pages/mapas/FormParadero.svelte new file mode 100644 index 0000000..167b9b2 --- /dev/null +++ b/src/pages/mapas/FormParadero.svelte @@ -0,0 +1,111 @@ + + + + +{#if parada} +
dispatch('close')}>
+{/if} + + +{#if parada} + +{/if} \ No newline at end of file diff --git a/src/pages/mapas/Paraderos.svelte b/src/pages/mapas/Paraderos.svelte index 2880d0c..cefc3e2 100644 --- a/src/pages/mapas/Paraderos.svelte +++ b/src/pages/mapas/Paraderos.svelte @@ -1,38 +1,70 @@ -Paraderos + + + + -
-
-
-
- -
-
-
-
Región
- -
-
-
-
-
Comuna
- -
-
-
-
- -
-
-
-
- {#if loading} - - Cargando ubicaciones... - {/if} -
+
+
+ + {#if loading}{/if} + Paraderos + +
+
+
+
Región
+
-
- {#if google_api_key} - onMostrarParaderos(ev.detail)} - /> - {/if} +
+
+
Comuna
+ +
+
+
+
+ +
+
+
+
+
+
+
-{#if paradero} - paradero = null} /> -{/if} \ No newline at end of file + parada = null} /> \ No newline at end of file diff --git a/src/pages/mapas/Rutas.svelte b/src/pages/mapas/Rutas.svelte index 68362e1..0726542 100644 --- a/src/pages/mapas/Rutas.svelte +++ b/src/pages/mapas/Rutas.svelte @@ -1,142 +1,134 @@ -Paraderos + + + + -
-
-
-
-
-
Operador
- -
-
-
-
-
Linea
- -
-
-
- {#if loading} - - Cargando rutas... - {/if} -
+ +
+
+ + {#if loading}{/if} + Rutas + +
+
+
+
Operador
+
-
- {#if google_api_key} -
- onPolyline(ev.detail)} - /> -
- {/if} +
+
+
Linea
+ +
+
+
+ +
+
+
From 49f8c84bdfb2c4b2fb6e90d6fad571d78d2695c8 Mon Sep 17 00:00:00 2001 From: Francisco Sandoval Date: Thu, 7 Sep 2023 10:59:19 -0300 Subject: [PATCH 3/3] se guarda paradero e imagenes --- src/assets/partida.png | Bin 0 -> 1909 bytes src/assets/termino.png | Bin 0 -> 3272 bytes src/pages/mapas/FormParadero.svelte | 104 ++++++++++++++++++---------- src/pages/mapas/Rutas.svelte | 34 ++++++--- src/services/paraderos.js | 29 ++++++-- 5 files changed, 115 insertions(+), 52 deletions(-) create mode 100644 src/assets/partida.png create mode 100644 src/assets/termino.png diff --git a/src/assets/partida.png b/src/assets/partida.png new file mode 100644 index 0000000000000000000000000000000000000000..15de2895ed5f2a11b5da42bb3a65c093f46b87f1 GIT binary patch literal 1909 zcmV-*2a5QKP)FzjJSO^<%nc#vVWC;f#a9jvXOo6%tt> z3y=^Cq!0uPBo-{lCK3n*7VNS?ELgJ0#>#>P5(ouI1V~7cEDTo6!d^IbYza^7nep2_ zkM?v=Kkhj!YNm11Hm-5TE=TTvQ(aZ}@t^U&xx&Bg5~$?QegMT_Rx$aZ_NEa`xS+o^?>f;eFf` zAJs(sO>xm&WpwgS5*06dqiRYuK9Fe#!_;3mPQ5T;Nj z5t{>J#8z7#iM9d34XcUaf#tF;^9#YET8Mno)I*s+z4L1g8XZ1e9Pxa7I7~ z*1bA4A$TR=P0g%i;wq?B5GoGJm{m-q0#q<6B)`jG$uk)KU*pmsRfT%(2BqO~oa-w- z1TutJkBTB-27-Wr31EPLuy#*!pOm-cxmzoTAV~wzeI$2v(0%%ektzt91?tOJH>JZT z4XIawdhHsa(|nX%GC^tq%#_-~CFp?F<-rvmClqW!2s56}=?Gg)&o6z@2o8B?oRyEt ziTg$1MwR$mP5l0VEeM@cIfx7?7&HW#P^4%`*^rS9_-q^Oj$kbT4{nQs|L<$73$6EJ z?3zQX4qNIq*gqF2{GgGltJDI-A50US+XY^c3Rumdw;X!S;r9pH$70&Ya`&yD|4x(W z3vDn6XCvAtB6QB<_jicD(L#n2fow%+{JhjN%cNrDzqg9t7XZ*Jj?RhRz9cr>v?5!S z=*3Q2v(gLT=SKl(eDgHXXN}Qq`>~cF`Gk1xNDHYLwjzWJ9-Vi%9STJQ6=bIZ(D_%6 z=5O-db~`6?=ygZ&hYb+0TP`s^2Dek833|iP`a_=L8})?CzCiKEb#R~yj^@ztg@$P#WF>+r{@}kyzF*+X;z1$}ErFKs{?c>SF z6<%xLwi}IK712u`z2tGzp>Ny% z!T5t|N^ieR^SIJ#)Hc+a-4S%wA)|&r5Rfs&A4sOF-uyp?tmz_t^EYo&&j1~5Q2*{p z^8fe@{^K$7e>*_)!)4r$8brBbx<=OdH=+H049?JNYhw_41<)&w)uRQd3*n;2O(<@U zrlp%28%iB@M~%iSr*XH-6#je&cV(ERQ>PhuVIrLfYa?k5q4jRu+xCq_2)iTQGT}@@ zPlk>7l}D3d;FgL=tw0!G#LB&X zsoG)j=6QyO1d)k^_}z#BPtPd!8L*ZRt-At1?ns;F@AF99Z={=03g2JFO@+R9X^?6^ z;9(HiFryQD`&=T-c%*DypSMPmI7QEQx^AGCJu;@<>@cZFpPOt39+?1;>@Jl@rzn

{+qQCuRIE8%k` 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 + // imagenes import IconParada from '$/assets/parada-de-autobus.png' - import ImagenParadero from '$/assets/imagen.png' - import { getParadero } from '$/services/paraderos' + // servicios + import { getParadero, updateParadero, getParaderoImagenes, createParaderoImagen, deleteParaderoImagen } from '$/services/paraderos' + // libs import { createEventDispatcher } from "svelte" const dispatch = createEventDispatcher() export let parada = null let canvas = null let form = {} + let imagenes = [] $: init(!!parada) @@ -19,11 +22,42 @@ try { if (parada) { form = await getParadero(parada.id_paradero) + imagenes = await getParaderoImagenes(parada.id_paradero) } } catch(error) { alert(error) } } + + async function onSave() { + try { + await updateParadero(form) + alert('Información guardada') + } catch(error) { + alert(error) + } + } + + async function onSaveImagen({ target: form }) { + try { + const [ file = null ] = form.file1.files; + await createParaderoImagen(parada.id_paradero, file) + imagenes = await getParaderoImagenes(parada.id_paradero) + form.file1.value = '' + } catch (error) { + alert(error) + } + } + + async function onDeleteImagen({ id_paradero_imagen }) { + try { + if (!confirm('Estás seguro de eliminar la imagen?')) return; + await deleteParaderoImagen(id_paradero_imagen) + imagenes = imagenes.filter(imagen => imagen.id_paradero_imagen !== id_paradero_imagen) + } catch (error) { + alert(error) + } + }

@@ -46,53 +80,47 @@
Propiedades: -
-
Nombre
- -
-
-
Descripción
- -
-
-
- -
+
+
+
Nombre
+ +
+
+
Descripción
+ +
+
+
+ +
+
+ {#each imagenes as imagen} - - + {/each} -
-
-
- +
+
+
+
+ +
+
+
- -
+
diff --git a/src/pages/mapas/Rutas.svelte b/src/pages/mapas/Rutas.svelte index 0726542..83ab5fb 100644 --- a/src/pages/mapas/Rutas.svelte +++ b/src/pages/mapas/Rutas.svelte @@ -3,7 +3,8 @@ import PageTitle from "$/components/PageTitle.svelte"; import IconLoading from "$/components/IconLoading.svelte"; - import imagenParada from '$/assets/parada-de-autobus.png' + import imagenPartida from '$/assets/partida.png' + import imagenTermino from '$/assets/termino.png' import { onMount } from "svelte"; // servicios @@ -19,13 +20,20 @@ let id_linea = '' let loading = false let polyline = null - let iconParada = null + let iconPartida = null + let iconTermino = null let L = null let marker1 = null let marker2 = null - getOperadores().then(data => operadores = data).catch(error => alert(error)) - getLineas().then(data => lineas = data).catch(error => alert(error)) + getOperadores() + .then(data => data.sort((a,b) => a.nombre_operador < b.nombre_operador? -1 : 1)) + .then(data => operadores = data) + .catch(error => alert(error)) + getLineas() + .then(data => data.sort((a,b) => a.nombre_linea < b.nombre_linea? -1 : 1)) + .then(data => lineas = data) + .catch(error => alert(error)) $: cargar_coordenadas(id_operador, id_linea) @@ -36,9 +44,17 @@ function create_map() { if (!elMap) return; if (!L) L = globalThis.L; - if (!iconParada) { - iconParada = L.icon({ - iconUrl: imagenParada, + if (!iconPartida) { + iconPartida = L.icon({ + iconUrl: imagenPartida, + iconSize: [64, 64], + iconAnchor: [32, 64], + popupAnchor: [0, -32] + }) + } + if (!iconTermino) { + iconTermino = L.icon({ + iconUrl: imagenTermino, iconSize: [64, 64], iconAnchor: [32, 64], popupAnchor: [0, -32] @@ -78,8 +94,8 @@ myMap.fitBounds(polyline.getBounds()); if (coordenadas) { - marker1 = L.marker(coordenadas[0], { icon: iconParada }).addTo(myMap) - marker2 = L.marker(coordenadas[coordenadas.length -1], { icon: iconParada }).addTo(myMap) + marker1 = L.marker(coordenadas[0], { icon: iconPartida }).addTo(myMap) + marker2 = L.marker(coordenadas[coordenadas.length -1], { icon: iconTermino }).addTo(myMap) } } catch (error) { diff --git a/src/services/paraderos.js b/src/services/paraderos.js index f60768c..600f607 100644 --- a/src/services/paraderos.js +++ b/src/services/paraderos.js @@ -2,7 +2,7 @@ import { base, getToken } from './_config' export function getUrlImagen(id_paradero) { - return `${base}/paraderos/image/${id_paradero}` + return `${base}/paraderos-image/${id_paradero}` } export async function getParaderos(params) { @@ -51,15 +51,34 @@ export async function deleteParadero(id) { return res.json() } -export async function saveImageParadero(id = null, file) { - const form = new FormData() - form.append('imagen', file) +export async function getParaderoImagenes(id_paradero) { + const res = await fetch(`${base}/paraderos-image/?id_paradero=${id_paradero}`, { + headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" } + }) + if (!res.ok) throw await res.text() + return res.json() +} - const res = await fetch(`${base}/paraderos/image/${id}/`, { +export async function createParaderoImagen(id_paradero, file) { + const form = new FormData() + form.append('id_paradero', id_paradero) + form.append('imagen', file) + form.append('content_type', file.type) + + const res = await fetch(`${base}/paraderos-image/`, { method: 'POST', body: form, headers: { "Authorization": `Bearer ${getToken()}` } }) if (!res.ok) throw await res.text() return res.json() +} + +export async function deleteParaderoImagen(id_paradero_imagen) { + const res = await fetch(`${base}/paraderos-image/${id_paradero_imagen}/`, { + method: 'DELETE', + headers: { "Authorization": `Bearer ${getToken()}` } + }) + if (!res.ok) throw await res.text() + return res.text() } \ No newline at end of file