se agrega en mantenedor de persona, subir foto

francisco/photos
Francisco Sandoval 2024-02-14 23:13:20 -03:00
parent ec8d4a7b7f
commit 71cd973e25
5 changed files with 121 additions and 61 deletions

View File

@ -3,48 +3,53 @@
</svelte:head> </svelte:head>
<script> <script>
import 'bootstrap/dist/css/bootstrap.min.css' import 'bootstrap/dist/css/bootstrap.min.css'
import '@adminkit/core/dist/css/app.css' import '@adminkit/core/dist/css/app.css'
import '@adminkit/core/dist/js/app.js' import '@adminkit/core/dist/js/app.js'
import 'bootstrap-icons/font/bootstrap-icons.css' import 'bootstrap-icons/font/bootstrap-icons.css'
import '../assets/colors.css' import '../assets/colors.css'
import '../assets/custom.css' import '../assets/custom.css'
import Navbar from './Navbar.svelte' import Navbar from './Navbar.svelte'
import Sidebar from './Sidebar.svelte' import Sidebar from './Sidebar.svelte'
import Footer from './Footer.svelte' import Footer from './Footer.svelte'
import Notifications from './Notifications.svelte' import Notifications from './Notifications.svelte'
import { getRoutes } from '$/routes/user.routes' import { getRoutes } from '$/routes/user.routes'
import { Router, Route, createHistory } from 'svelte-navigator' import { Router, Route, createHistory } from 'svelte-navigator'
import hashHistory from './hashHistory' import hashHistory from './hashHistory'
import { onMount } from 'svelte' import { onMount } from 'svelte'
import { getInfoToken } from '$/services/login' import { getInfoToken } from '$/services/login'
import { storeSession } from '$/stores/global' import { storeSession } from '$/stores/global'
import Toast from '$/components/Toast.svelte'; import Toast from '$/components/Toast.svelte';
import ActualizandoGtfs from '$/components/ActualizandoGtfs.svelte'; import ActualizandoGtfs from '$/components/ActualizandoGtfs.svelte';
import { getPhoto } from '$/services/personas';
let triggerEvent = false; let triggerEvent = false;
// @ts-ignore // @ts-ignore
const history = createHistory(hashHistory()) const history = createHistory(hashHistory())
let routes = [] let routes = []
let actualizando = true let actualizando = true
getRoutes() getRoutes()
.then(data => routes = data) .then(data => routes = data)
.catch(error => alert(error)) .catch(error => alert(error))
onMount(() => { onMount(() => {
triggerEvent && document.dispatchEvent(new Event('DOMContentLoaded')); triggerEvent && document.dispatchEvent(new Event('DOMContentLoaded'));
}) })
async function begin() { async function begin() {
try { try {
$storeSession = await getInfoToken() const data = await getInfoToken()
} catch (error) { const avatar_img = await getPhoto(data.persona.rut)
alert(error.message || error) $storeSession = { ...data, avatar_img }
} } catch (error) {
alert(error.message || error)
sessionStorage.clear();
document.location.href = '/';
} }
begin() }
begin()
</script> </script>
<div class="wrapper"> <div class="wrapper">

View File

@ -1,29 +1,42 @@
<script> <script>
import { getTiposPersona } from "$/services/tipos_persona"; import { getPhoto } from "$/services/personas";
import { getTiposPersona } from "$/services/tipos_persona";
export let form = {} export let form = {}
export let es_nuevo = true export let es_nuevo = true
let tipos_tratamiento = []; let inputFile = null;
let rut = ''; let tipos_tratamiento = [];
let rut = '';
let urlPhoto = null
$: begin(es_nuevo) $: begin(es_nuevo)
$: !es_nuevo && (rut = `${form.rut || ''}-${form.dv || ''}`); $: !es_nuevo && (rut = `${form.rut || ''}-${form.dv || ''}`);
$: cargarPhoto(form.rut)
async function begin(es_nuevo) { async function begin(es_nuevo) {
try { try {
tipos_tratamiento = await getTiposPersona() tipos_tratamiento = await getTiposPersona()
} catch (error) { } catch (error) {
globalThis.toast.success(error.detail || error) globalThis.toast.success(error.detail || error)
}
} }
}
function onChangeRut({ target: { value } }) { async function cargarPhoto(rut) {
const valorRut = value.replace(/[.|-]/,''); try {
const dv = valorRut.substring(valorRut.length -1) if (!rut) return;
const rut = valorRut.substring(0, valorRut.length -1) urlPhoto = await getPhoto(rut)
form = { ...form, rut, dv } } catch (error) {
globalThis.toast.success(error.detail || error)
} }
}
function onChangeRut({ target: { value } }) {
const valorRut = value.replace(/[.|-]/,'');
const dv = valorRut.substring(valorRut.length -1)
const rut = valorRut.substring(0, valorRut.length -1)
form = { ...form, rut, dv }
}
</script> </script>
<div class="row"> <div class="row">
@ -84,3 +97,18 @@
<input type="text" bind:value={form.direccion} class="form-control"> <input type="text" bind:value={form.direccion} class="form-control">
</div> </div>
</div> </div>
<div class="row">
<div class="col-md-2">
{#if form.rut}
<img src={urlPhoto} class="img-fluid" alt="imagen de persona">
{/if}
</div>
<div class="col-md mb-3">
Fotografia
<div class="form-control">
<input type="file" bind:this={inputFile} accept=".jpg, .jpeg, .png" on:change={() => form.photo = inputFile}>
</div>
</div>
</div>

View File

@ -16,7 +16,7 @@
const params = useParams() const params = useParams()
const navigate = useNavigate() const navigate = useNavigate()
let es_nuevo = true; let es_nuevo = true;
let form = {} let form = { photo: null }
let loading = false; let loading = false;
let escritura = false let escritura = false

View File

@ -23,8 +23,6 @@ export async function getGtfsArchivoId(id) {
export async function createGtfsArchivo(data) { export async function createGtfsArchivo(data) {
const form = new FormData() const form = new FormData()
const directorioUpload = '/uploads'
form.append('ruta_archivo', directorioUpload)
form.append('status', 'PENDIENTE') form.append('status', 'PENDIENTE')
for (let key in data) { for (let key in data) {
if (key === 'archivo') { if (key === 'archivo') {

View File

@ -19,21 +19,50 @@ export async function getPersona(rut) {
} }
export async function createPersona(data) { export async function createPersona(data) {
const form = new FormData()
for (const key in data) {
if (data[key]?.files?.length) {
form.append(key, data[key].files[0], data[key].files[0].name)
} else {
form.append(key, data[key] || '')
}
}
const res = await fetch(`${base}/personas/`, { const res = await fetch(`${base}/personas/`, {
method: 'POST', method: 'POST',
body: JSON.stringify(data), body: form,
headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" } headers: { "Authorization": `Bearer ${getToken()}` }
}) })
if (!res.ok) throw await res.text() if (!res.ok) throw await res.text()
return res.json() return res.json()
} }
export async function updatePersona({ rut: id = null, ...data }) { export async function updatePersona({ rut: id = null, ...data }) {
console.log({ data })
const form = new FormData()
for (const key in data) {
if (data[key]?.files?.length) {
form.append(key, data[key].files[0], data[key].files[0].name)
} else {
form.append(key, data[key] || '')
}
}
const res = await fetch(`${base}/personas/${id}/`, { const res = await fetch(`${base}/personas/${id}/`, {
method: 'PATCH', method: 'PATCH',
body: JSON.stringify(data), body: form,
headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" } headers: { "Authorization": `Bearer ${getToken()}` }
}) })
if (!res.ok) throw await res.text() if (!res.ok) throw await res.text()
return res.json() return res.json()
} }
export async function getPhoto(id) {
const res = await fetch(`${base}/personas/photo/?id=${id}`, {
headers: { "Authorization": `Bearer ${getToken()}` }
})
if (!res.ok) throw await res.text()
const blob = await res.blob()
return URL.createObjectURL(blob);
}