se agrega lectura de permiso al acceder a la pantalla

francisco/photos
Francisco Sandoval 2024-01-07 21:25:33 -03:00
parent 684ff2e65b
commit 0e00aa4425
16 changed files with 146 additions and 81 deletions

View File

@ -3,7 +3,8 @@
import { getAplicaciones } from "$/services/aplicaciones"; import { getAplicaciones } from "$/services/aplicaciones";
import PageTitle from "$/components/PageTitle.svelte"; import PageTitle from "$/components/PageTitle.svelte";
import ModalAplicacion from "./ModalAplicacion.svelte"; import ModalAplicacion from "./ModalAplicacion.svelte";
import { getPermisoPath } from "$/stores/global"; import { useLocation } from "svelte-navigator";
import { getPermisosPath } from "$/services/usuarios";
const limit = 15; const limit = 15;
let page = 1; let page = 1;
@ -13,7 +14,12 @@
let aplicaciones = [] let aplicaciones = []
let aplicacion = null let aplicacion = null
let loading = false; let loading = false;
let permiso_app = getPermisoPath() let escritura = false;
let location = useLocation()
getPermisosPath($location.pathname)
.then(data => escritura = data.escritura)
.catch(error => console.log({ error }))
$: onPage(page) $: onPage(page)
@ -49,7 +55,7 @@
<div class="card"> <div class="card">
<div class="card-header"> <div class="card-header">
{#if permiso_app.escritura} {#if escritura}
<button class="btn btn-primary" on:click|preventDefault={onNuevo}> <button class="btn btn-primary" on:click|preventDefault={onNuevo}>
<i class="bi bi-plus-lg"></i> Nuevo <i class="bi bi-plus-lg"></i> Nuevo
</button> </button>
@ -113,6 +119,7 @@
{#if aplicacion} {#if aplicacion}
<ModalAplicacion <ModalAplicacion
{aplicacion} {aplicacion}
{escritura}
on:close={() => aplicacion = null} on:close={() => aplicacion = null}
on:refresh={() => onPage(page)} on:refresh={() => onPage(page)}
/> />

View File

@ -2,13 +2,12 @@
import Modal from "../../components/Modal.svelte"; import Modal from "../../components/Modal.svelte";
import { getAplicacion, createAplicacion, updateAplicacion, deleteAplicacion } from "$/services/aplicaciones"; import { getAplicacion, createAplicacion, updateAplicacion, deleteAplicacion } from "$/services/aplicaciones";
import { createEventDispatcher } from "svelte"; import { createEventDispatcher } from "svelte";
import { getPermisoPath } from "$/stores/global";
const dispatch = createEventDispatcher(); const dispatch = createEventDispatcher();
export let aplicacion = {} export let aplicacion = {};
export let escritura = false;
let form = {} let form = {}
let loading = false; let loading = false;
let permiso_app = getPermisoPath()
$: begin(aplicacion.id_aplicacion) $: begin(aplicacion.id_aplicacion)
@ -63,7 +62,7 @@
<Modal title={'Aplicacion #' + (aplicacion.id_aplicacion || 'Nuevo')} <Modal title={'Aplicacion #' + (aplicacion.id_aplicacion || 'Nuevo')}
size="lg" size="lg"
on:close={() => dispatch('close')}> on:close={() => dispatch('close')}>
<div class={"form" + (permiso_app.escritura ? '' : ' disabled')}> <div class={"form" + (escritura ? '' : ' disabled')}>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-3">ID</div> <div class="col-md-3">ID</div>
<div class="col-md"> <div class="col-md">
@ -94,7 +93,7 @@
</div> </div>
</div> </div>
<svelte:fragment slot="buttons"> <svelte:fragment slot="buttons">
{#if permiso_app.escritura} {#if escritura}
<button class="btn btn-primary"type="submit" disabled={loading}>Guardar</button> <button class="btn btn-primary"type="submit" disabled={loading}>Guardar</button>
<button class="btn btn-danger" on:click|preventDefault={onDelete} disabled={loading}>Eliminar</button> <button class="btn btn-danger" on:click|preventDefault={onDelete} disabled={loading}>Eliminar</button>
{/if} {/if}

View File

@ -1,11 +1,11 @@
<script> <script>
import { Link } from 'svelte-navigator' import { Link, useLocation } from 'svelte-navigator'
import Paginate from '$/components/Paginate.svelte' import Paginate from '$/components/Paginate.svelte'
import PageTitle from '$/components/PageTitle.svelte' import PageTitle from '$/components/PageTitle.svelte'
import { getComunas, getComuna, createComuna, updateComuna, deleteComuna } from '$/services/comunas' import { getComunas, getComuna, createComuna, updateComuna, deleteComuna } from '$/services/comunas'
import Modal from '$/components/Modal.svelte'; import Modal from '$/components/Modal.svelte';
import FormComuna from './Form.svelte'; import FormComuna from './Form.svelte';
import { getPermisoPath } from '$/stores/global'; import { getPermisosPath } from '$/services/usuarios';
let comuna = null let comuna = null
let es_nuevo = true let es_nuevo = true
@ -13,7 +13,12 @@
let page = 1 let page = 1
let loading = false; let loading = false;
const limit = 15 const limit = 15
let permiso_app = getPermisoPath() let escritura = false;
let location = useLocation()
getPermisosPath($location.pathname)
.then(data => escritura = data.escritura)
.catch(error => console.log({ error }))
$: onPage(page) $: onPage(page)
@ -79,7 +84,7 @@
<div class="card"> <div class="card">
<div class="card-header"> <div class="card-header">
<div class="mb-3 d-flex"> <div class="mb-3 d-flex">
{#if permiso_app.escritura} {#if escritura}
<button class="btn btn-primary me-3" <button class="btn btn-primary me-3"
on:click|preventDefault={onNuevo}> on:click|preventDefault={onNuevo}>
<i class="bi bi-plus-lg"></i> Nuevo <i class="bi bi-plus-lg"></i> Nuevo
@ -131,15 +136,15 @@
<Modal title="Comuna" <Modal title="Comuna"
on:close={() => comuna = null} on:close={() => comuna = null}
> >
<div class={permiso_app.escritura ? "" : "disabled"}> <div class={escritura ? "" : "disabled"}>
<FormComuna bind:form={comuna} {es_nuevo} /> <FormComuna bind:form={comuna} {es_nuevo} />
</div> </div>
<svelte:fragment slot="buttons"> <svelte:fragment slot="buttons">
{#if permiso_app.escritura} {#if escritura}
<button type="submit" class="btn btn-primary">Guardar</button> <button type="submit" class="btn btn-primary">Guardar</button>
{/if} {/if}
{#if !es_nuevo && permiso_app.escritura} {#if !es_nuevo && escritura}
<button class="btn btn-danger" on:click|preventDefault={onDelete}>Eliminar</button> <button class="btn btn-danger" on:click|preventDefault={onDelete}>Eliminar</button>
{/if} {/if}
</svelte:fragment> </svelte:fragment>

View File

@ -7,14 +7,13 @@
createParaderoImagen, createParaderoImagen,
deleteParaderoImagen, deleteParaderoImagen,
} from "$/services/paraderos"; } from "$/services/paraderos";
import { getPermisoPath } from "$/stores/global";
import IconLoading from "../../components/IconLoading.svelte"; import IconLoading from "../../components/IconLoading.svelte";
export let parada = null; export let parada = null;
export let escritura = false;
let form = {}; let form = {};
let imagenes = []; let imagenes = [];
let loading = false; let loading = false;
let permiso_app = getPermisoPath();
$: init(!!parada); $: init(!!parada);
@ -81,7 +80,7 @@
</div> </div>
Propiedades: Propiedades:
<form on:submit|preventDefault={onSave} class={permiso_app.escritura ? '' : 'disabled'}> <form on:submit|preventDefault={onSave} class={escritura ? '' : 'disabled'}>
<div class="input-group mb-3"> <div class="input-group mb-3">
<div class="input-group-text">Identificador</div> <div class="input-group-text">Identificador</div>
<input <input
@ -108,7 +107,7 @@
/> />
</div> </div>
<hr /> <hr />
{#if permiso_app.escritura} {#if escritura}
<div class="text-center"> <div class="text-center">
<button type="submit" class="btn btn-primary" <button type="submit" class="btn btn-primary"
><i class="bi bi-save" /> Guardar</button ><i class="bi bi-save" /> Guardar</button
@ -133,7 +132,7 @@
{/each} {/each}
<!-- agregar imagen --> <!-- agregar imagen -->
{#if permiso_app.escritura} {#if escritura}
<form action="" on:submit|preventDefault={onSaveImagen}> <form action="" on:submit|preventDefault={onSaveImagen}>
<div class="card"> <div class="card">
<div class="card-body"> <div class="card-body">

View File

@ -5,15 +5,14 @@
import { getTiposDispositivo } from "../../services/tipos_dispositivo"; import { getTiposDispositivo } from "../../services/tipos_dispositivo";
import { url_base } from "../../services/_config"; import { url_base } from "../../services/_config";
import { getInfoPublic } from '../../services/paraderos'; import { getInfoPublic } from '../../services/paraderos';
import { getPermisoPath } from '$/stores/global';
export let parada = null; export let parada = null;
export let escritura = false;
let loading = false; let loading = false;
let tipos_dispositivos = []; let tipos_dispositivos = [];
let dispositivos = []; let dispositivos = [];
let url_qrcode = null; let url_qrcode = null;
let nuevoDispositivo = null; let nuevoDispositivo = null;
let permiso_app = getPermisoPath()
async function fetchDispositivos({ id_paradero = null }) { async function fetchDispositivos({ id_paradero = null }) {
try { try {
@ -94,7 +93,7 @@
<td>{disp.id_dispositivo}</td> <td>{disp.id_dispositivo}</td>
<td>{disp.tipo_dispositivo?.descripcion || '--'}</td> <td>{disp.tipo_dispositivo?.descripcion || '--'}</td>
<td> <td>
{#if permiso_app.escritura} {#if escritura}
<a href={"#"} on:click|preventDefault={() => onDelete(disp)}><i class="bi bi-trash text-danger"></i></a> <a href={"#"} on:click|preventDefault={() => onDelete(disp)}><i class="bi bi-trash text-danger"></i></a>
{/if} {/if}
</td> </td>
@ -103,7 +102,7 @@
</tbody> </tbody>
</table> </table>
{#if permiso_app.escritura} {#if escritura}
<div class="my-3 text-center"> <div class="my-3 text-center">
<button class="btn btn-outline-primary" on:click|preventDefault={() => nuevoDispositivo = {}}>Nuevo Dispositivo</button> <button class="btn btn-outline-primary" on:click|preventDefault={() => nuevoDispositivo = {}}>Nuevo Dispositivo</button>
</div> </div>

View File

@ -6,10 +6,18 @@
import FormParadero from "./FormParadero.svelte"; import FormParadero from "./FormParadero.svelte";
import FormParaderoDispositivos from "./FormParaderoDispositivos.svelte"; import FormParaderoDispositivos from "./FormParaderoDispositivos.svelte";
import FormParaderoServicios from "./FormParaderoServicios.svelte"; import FormParaderoServicios from "./FormParaderoServicios.svelte";
import { useLocation } from "svelte-navigator";
import { getPermisosPath } from "$/services/usuarios";
const dispatch = createEventDispatcher(); const dispatch = createEventDispatcher();
export let parada = null; export let parada = null;
let canvas = null; let canvas = null;
let tab = 0; let tab = 0;
let escritura = false;
let location = useLocation()
getPermisosPath($location.pathname)
.then(data => escritura = data.escritura)
.catch(error => console.log({ error }))
$: init(!!parada); $: init(!!parada);
@ -76,10 +84,10 @@
</div> </div>
<div class="offcanvas-body bg-white py-3"> <div class="offcanvas-body bg-white py-3">
{#if tab === 0} {#if tab === 0}
<FormParadero {parada} /> <FormParadero {parada} {escritura} />
{/if} {/if}
{#if tab === 1} {#if tab === 1}
<FormParaderoDispositivos {parada} /> <FormParaderoDispositivos {parada} {escritura} />
{/if} {/if}
{#if tab === 2} {#if tab === 2}
<FormParaderoServicios {parada} /> <FormParaderoServicios {parada} />

View File

@ -1,14 +1,22 @@
<script> <script>
import { Link } from 'svelte-navigator' import { Link, useLocation } from 'svelte-navigator'
import Paginate from '$/components/Paginate.svelte' import Paginate from '$/components/Paginate.svelte'
import { getPersonas } from '$/services/personas'; import { getPersonas } from '$/services/personas';
import PageTitle from '$/components/PageTitle.svelte'; import PageTitle from '$/components/PageTitle.svelte';
import { getPermisoPath } from '$/stores/global'; import { getPermisosPath } from '$/services/usuarios';
import { storePermisoApp } from '$/stores/global';
let page = 1; let page = 1;
let limit = 15; let limit = 15;
let personas = { results: [], count: 0 }; let personas = { results: [], count: 0 };
let loading = false; let loading = false;
let permiso_app = getPermisoPath() let escritura = false;
let location = useLocation()
getPermisosPath($location.pathname)
.then(data => escritura = data.escritura)
.then(() => storePermisoApp.set({ ...$storePermisoApp, personas: { escritura } }))
.catch(error => console.log({ error }))
$: onPage(page) $: onPage(page)
@ -29,7 +37,7 @@
<div class="card"> <div class="card">
<div class="card-header"> <div class="card-header">
{#if permiso_app.escritura} {#if escritura}
<Link to='/personas/nuevo' class="btn btn-primary"> <Link to='/personas/nuevo' class="btn btn-primary">
<i class="bi bi-plus-lg"></i> Nuevo <i class="bi bi-plus-lg"></i> Nuevo
</Link> </Link>
@ -61,7 +69,7 @@
</div> </div>
<div class="card-footer"> <div class="card-footer">
<Paginate <Paginate
offset={(page - 1) / limit} forcePage={page}
{limit} {limit}
count={personas.count} count={personas.count}
on:page={ev => page = ev.detail} on:page={ev => page = ev.detail}

View File

@ -1,6 +1,6 @@
<script> <script>
import { onMount } from 'svelte' import { onMount } from 'svelte'
import { getPermisoPath, storeLayout } from '$/stores/global' import { storeLayout, storePermisoApp } from '$/stores/global'
import FormPersona from './Form.svelte' import FormPersona from './Form.svelte'
import { Link, useParams, useNavigate } from 'svelte-navigator'; import { Link, useParams, useNavigate } from 'svelte-navigator';
import { getPersona, createPersona, updatePersona } from '$/services/personas'; import { getPersona, createPersona, updatePersona } from '$/services/personas';
@ -18,8 +18,9 @@
let es_nuevo = true; let es_nuevo = true;
let form = {} let form = {}
let loading = false; let loading = false;
let permiso_app = getPermisoPath() let escritura = false
$: escritura = $storePermisoApp?.personas?.escritura;
$: es_nuevo = !$params.rut $: es_nuevo = !$params.rut
$: begin($params) $: begin($params)
@ -56,7 +57,7 @@
<form action="" on:submit|preventDefault={onSave}> <form action="" on:submit|preventDefault={onSave}>
<div class="card"> <div class="card">
<div class="card-header d-flex"> <div class="card-header d-flex">
{#if permiso_app.escritura} {#if escritura}
<button type="submit" class="btn btn-primary"><i class="bi bi-save"></i> Guardar</button> <button type="submit" class="btn btn-primary"><i class="bi bi-save"></i> Guardar</button>
{/if} {/if}
<div class="m-auto"></div> <div class="m-auto"></div>
@ -64,7 +65,7 @@
</div> </div>
<div class="card-body"> <div class="card-body">
<h4 class="h4 mb-3">Datos de la persona</h4> <h4 class="h4 mb-3">Datos de la persona</h4>
<div class={permiso_app.escritura ? "" : "disabled"}> <div class={escritura ? "" : "disabled"}>
<FormPersona bind:form={form} {es_nuevo} /> <FormPersona bind:form={form} {es_nuevo} />
</div> </div>
</div> </div>

View File

@ -3,7 +3,8 @@
import { getRoles } from "$/services/roles"; import { getRoles } from "$/services/roles";
import PageTitle from "$/components/PageTitle.svelte"; import PageTitle from "$/components/PageTitle.svelte";
import ModalRol from "./ModalRol.svelte"; import ModalRol from "./ModalRol.svelte";
import { getPermisoPath } from "$/stores/global"; import { useLocation } from "svelte-navigator";
import { getPermisosPath } from "$/services/usuarios";
const limit = 15; const limit = 15;
let page = 1; let page = 1;
@ -13,9 +14,12 @@
let roles = [] let roles = []
let rol = null let rol = null
let loading = false; let loading = false;
let permiso_app = getPermisoPath() let escritura = false;
let location = useLocation()
console.log({ permiso_app }) getPermisosPath($location.pathname)
.then(data => escritura = data.escritura)
.catch(error => console.log({ error }))
$: onPage(page) $: onPage(page)
@ -51,7 +55,7 @@
<div class="card"> <div class="card">
<div class="card-header"> <div class="card-header">
{#if permiso_app.escritura} {#if escritura}
<button class="btn btn-primary" on:click|preventDefault={onNuevo}> <button class="btn btn-primary" on:click|preventDefault={onNuevo}>
<i class="bi bi-plus-lg"></i> Nuevo <i class="bi bi-plus-lg"></i> Nuevo
</button> </button>
@ -101,7 +105,7 @@
</div> </div>
{#if rol} {#if rol}
<ModalRol {rol} on:close={() => rol = null} on:refresh={() => onPage(page)} /> <ModalRol {rol} on:close={() => rol = null} on:refresh={() => onPage(page)} {escritura} />
{/if} {/if}
<style> <style>

View File

@ -4,7 +4,6 @@
import { createRol, getRol, updateRol } from "$/services/roles"; import { createRol, getRol, updateRol } from "$/services/roles";
import { createRolyaplicacion, deleteRolyaplicacion, getRolesyaplicaciones, updateRolyaplicacion } from "$/services/roles_aplicaciones"; import { createRolyaplicacion, deleteRolyaplicacion, getRolesyaplicaciones, updateRolyaplicacion } from "$/services/roles_aplicaciones";
import { createRolLinea, deleteRolLinea, getRolLineas } from '$/services/roles_lineas'; import { createRolLinea, deleteRolLinea, getRolLineas } from '$/services/roles_lineas';
import { getPermisoPath } from "$/stores/global";
import { createEventDispatcher } from "svelte"; import { createEventDispatcher } from "svelte";
import TabForm from "./TabForm.svelte"; import TabForm from "./TabForm.svelte";
import TabAplicaciones from "./TabAplicaciones.svelte"; import TabAplicaciones from "./TabAplicaciones.svelte";
@ -14,9 +13,9 @@
const dispatch = createEventDispatcher() const dispatch = createEventDispatcher()
export let rol = {}; export let rol = {};
export let escritura = false;
let loading = false let loading = false
let form = {} let form = {}
let permiso_app = getPermisoPath()
let permisos_app = [] let permisos_app = []
let permisos_lineas = [] let permisos_lineas = []
let tab = 0 let tab = 0
@ -151,7 +150,7 @@
<div class="p-3 bg-white"> <div class="p-3 bg-white">
{#if tab === 0} {#if tab === 0}
<TabForm bind:form={form} escritura={permiso_app.escritura} /> <TabForm bind:form={form} {escritura} />
{/if} {/if}
{#if tab === 1} {#if tab === 1}
@ -165,7 +164,7 @@
<svelte:fragment slot="buttons"> <svelte:fragment slot="buttons">
{#if permiso_app.escritura} {#if escritura}
{#if tab === 0} {#if tab === 0}
<button class="btn btn-primary" type="submit" disabled={loading}> <button class="btn btn-primary" type="submit" disabled={loading}>
<i class="bi bi-save"></i> Guardar <i class="bi bi-save"></i> Guardar

View File

@ -2,8 +2,26 @@
import TableResponsive from "$/components/TableResponsive.svelte"; import TableResponsive from "$/components/TableResponsive.svelte";
export let permisos = [] export let permisos = []
let resultado = []
let search = '';
function normalize_string(str) {
if (!str) return str;
return str.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "");
}
function filtrar_lineas(search) {
return permisos.filter(el => !search || normalize_string(el.route_long_name).includes(normalize_string(search)))
}
$: resultado = filtrar_lineas(search)
</script> </script>
<div class="input-group my-3">
<input type="text" class="form-control" bind:value={search} placeholder="Nombre de línea...">
<div class="input-group-text"><i class="bi bi-search"></i></div>
</div>
<TableResponsive> <TableResponsive>
<thead> <thead>
<tr> <tr>
@ -13,7 +31,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{#each permisos as linea} {#each resultado as linea}
<tr> <tr>
<td>{linea.route_long_name}</td> <td>{linea.route_long_name}</td>
<td>{linea.vigente ? '✅' : '⛔'}</td> <td>{linea.vigente ? '✅' : '⛔'}</td>

View File

@ -1,18 +1,24 @@
<script> <script>
import { getPermisoPath } from "$/stores/global"; import { useLocation } from "svelte-navigator";
import IconLoading from "../../components/IconLoading.svelte"; import IconLoading from "../../components/IconLoading.svelte";
import Modal from "../../components/Modal.svelte"; import Modal from "../../components/Modal.svelte";
import { createLetreroLUR, deleteLetreroLUR } from "../../services/letreros_lur"; import { createLetreroLUR, deleteLetreroLUR } from "../../services/letreros_lur";
import { createLinea, updateLinea } from "../../services/lineas"; import { createLinea, updateLinea } from "../../services/lineas";
import FormRuta from "./FormRuta.svelte"; import FormRuta from "./FormRuta.svelte";
import { createEventDispatcher } from "svelte"; import { createEventDispatcher } from "svelte";
import { getPermisosPath } from "$/services/usuarios";
const dispatch = createEventDispatcher(); const dispatch = createEventDispatcher();
export let ruta = null; export let ruta = null;
let form = {}; let form = {};
let error_messages = null; let error_messages = null;
let loading = false; let loading = false;
let permiso_app = getPermisoPath(); let escritura = false;
let location = useLocation()
getPermisosPath($location.pathname)
.then(data => escritura = data.escritura)
.catch(error => console.log({ error }))
$: form = { ...ruta }; $: form = { ...ruta };
@ -57,7 +63,7 @@
size="xl" size="xl"
on:close={() => dispatch("close")} on:close={() => dispatch("close")}
> >
<div class={permiso_app.escritura ? "" : "disabled"}> <div class={escritura ? "" : "disabled"}>
<FormRuta {form} /> <FormRuta {form} />
</div> </div>
@ -72,7 +78,7 @@
{/if} {/if}
<svelte:fragment slot="buttons"> <svelte:fragment slot="buttons">
{#if permiso_app.escritura} {#if escritura}
<button <button
class="btn btn-primary" class="btn btn-primary"
type="submit" type="submit"

View File

@ -1,15 +1,21 @@
<script> <script>
import { Link } from 'svelte-navigator' import { Link, useLocation } from 'svelte-navigator'
import Paginate from '$/components/Paginate.svelte' import Paginate from '$/components/Paginate.svelte'
import PageTitle from '$/components/PageTitle.svelte' import PageTitle from '$/components/PageTitle.svelte'
import { getUsuarios } from '$/services/usuarios' import { getPermisosPath, getUsuarios } from '$/services/usuarios'
import { getPermisoPath } from '$/stores/global'; import { storePermisoApp } from '$/stores/global';
let usuarios = { count: 0, results: [] } let usuarios = { count: 0, results: [] }
let page = 1 let page = 1
const limit = 15 const limit = 15
let loading = false let loading = false
let permiso_app = getPermisoPath() let escritura = false;
let location = useLocation()
getPermisosPath($location.pathname)
.then(data => escritura = data.escritura)
.then(() => storePermisoApp.set({ ...$storePermisoApp, usuarios: { escritura } }))
.catch(error => console.log({ error }))
$: onPage(page) $: onPage(page)
@ -31,7 +37,7 @@
<div class="card"> <div class="card">
<div class="card-header"> <div class="card-header">
<div class="mb-3 d-flex"> <div class="mb-3 d-flex">
{#if permiso_app.escritura} {#if escritura}
<Link to='/usuarios/nuevo' class="btn btn-primary"> <Link to='/usuarios/nuevo' class="btn btn-primary">
<i class="bi bi-plus-lg"></i> Nuevo <i class="bi bi-plus-lg"></i> Nuevo
</Link> </Link>

View File

@ -1,10 +1,10 @@
<script> <script>
import { onMount } from 'svelte' import { onMount } from 'svelte'
import { getPermisoPath, storeLayout } from '$/stores/global' import { storeLayout, storePermisoApp } from '$/stores/global'
import PageTitle from '$/components/PageTitle.svelte'; import PageTitle from '$/components/PageTitle.svelte';
import FormPersona from '../personas/Form.svelte' import FormPersona from '../personas/Form.svelte'
import FormUsuario from './Form.svelte' import FormUsuario from './Form.svelte'
import { Link, useParams, useNavigate } from 'svelte-navigator'; import { Link, useParams, useNavigate, useLocation } from 'svelte-navigator';
import { getUsuario, createUsuario, updateUsuario, deleteUsuario } from '$/services/usuarios'; import { getUsuario, createUsuario, updateUsuario, deleteUsuario } from '$/services/usuarios';
import { updatePersona } from '$/services/personas'; import { updatePersona } from '$/services/personas';
@ -22,8 +22,10 @@
let form_usuario = {} let form_usuario = {}
let clave2 = '' let clave2 = ''
let loading = false; let loading = false;
let permiso_app = getPermisoPath() let escritura = false;
$: console.log({ $storePermisoApp })
$: escritura = $storePermisoApp?.usuarios?.escritura;
$: es_nuevo = !$params.login $: es_nuevo = !$params.login
$: begin($params) $: begin($params)
@ -75,15 +77,15 @@
<PageTitle {loading}>{es_nuevo ? 'Nuevo Usuario': 'Editar Usuario'}</PageTitle> <PageTitle {loading}>{es_nuevo ? 'Nuevo Usuario': 'Editar Usuario'}</PageTitle>
<form action="" on:submit|preventDefault={onSave} class={permiso_app.escritura ? '' : 'disabled'}> <form action="" on:submit|preventDefault={onSave}>
<div class="card"> <div class="card">
<div class="card-header d-flex"> <div class="card-header d-flex">
{#if permiso_app.escritura} {#if escritura}
<button type="submit" class="btn btn-primary"> <button type="submit" class="btn btn-primary">
<i class="bi bi-save"></i> Guardar <i class="bi bi-save"></i> Guardar
</button> </button>
{/if} {/if}
{#if !es_nuevo && permiso_app.escritura} {#if !es_nuevo && escritura}
<button type="button" class="btn btn-danger ms-2" <button type="button" class="btn btn-danger ms-2"
on:click|preventDefault={onDelete}> on:click|preventDefault={onDelete}>
<i class="bi bi-trash"></i> Eliminar <i class="bi bi-trash"></i> Eliminar
@ -92,7 +94,7 @@
<div class="m-auto"></div> <div class="m-auto"></div>
<Link to="/usuarios" class="btn btn-outline-secondary">Volver</Link> <Link to="/usuarios" class="btn btn-outline-secondary">Volver</Link>
</div> </div>
<div class="card-body"> <div class={"card-body" + (escritura ? '' : ' disabled')}>
<h4 class="h4 mb-3">Datos de la persona</h4> <h4 class="h4 mb-3">Datos de la persona</h4>
<FormPersona bind:form={form_persona} {es_nuevo} /> <FormPersona bind:form={form_persona} {es_nuevo} />
<hr> <hr>

View File

@ -18,6 +18,16 @@ export async function getUsuario(id) {
return res.json() return res.json()
} }
export async function getPermisosPath(path) {
const res = await fetch(`${base}/usuarios/permisos/`, {
method: 'POST',
body: JSON.stringify({ path }),
headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" }
})
if (!res.ok) throw await res.text()
return res.json()
}
export async function getPermisosApp() { export async function getPermisosApp() {
const res = await fetch(`${base}/usuarios/permisos/`, { const res = await fetch(`${base}/usuarios/permisos/`, {
method: 'POST', method: 'POST',
@ -47,6 +57,7 @@ export async function updateUsuario({ login: id = null, ...data }) {
return res.json() return res.json()
} }
export async function deleteUsuario(id) { export async function deleteUsuario(id) {
const res = await fetch(`${base}/usuarios/${id}/`, { const res = await fetch(`${base}/usuarios/${id}/`, {
method: 'DELETE', method: 'DELETE',

View File

@ -8,13 +8,6 @@ export const storeParaderos = writable(cacheParaderos);
export const storeSession = writable({}); export const storeSession = writable({});
export const storeLayout = writable({ showSidebar: true }); export const storeLayout = writable({ showSidebar: true });
export const storePermisos = writable([]); export const storePermisos = writable([]);
export const storePermisoApp = writable({});
storeParaderos.subscribe(val => sessionStorage.setItem('cache-paraderos', JSON.stringify(val))) storeParaderos.subscribe(val => sessionStorage.setItem('cache-paraderos', JSON.stringify(val)))
export function getPermisoPath(path = null) {
let location = useLocation()
let pathname = null
location.subscribe(val => pathname = val.pathname)
return { escritura: true };
}