From 8956de8eaa68befdf5771473ee4190da85e361f6 Mon Sep 17 00:00:00 2001
From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com>
Date: Thu, 12 Mar 2026 22:23:15 -0500
Subject: [PATCH] =?UTF-8?q?fix:=20ruta=20doble=20en=20local=5Ffile=20al=20?=
=?UTF-8?q?mostrar=20imagen=20de=20orden=20m=C3=A9dica?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
La BD guarda local_file con 'uploads/media/...' incluido.
El código le añadía otro 'uploads/media/' dando ruta doble.
- lab_ordenes.php: helper _resolveImg() detecta si el path
ya empieza con 'uploads/' y no añade el prefijo de nuevo
- enfermero_portal.php: nueva función resImg() con misma lógica,
usada en _cardHTML() al renderizar la imagen de la orden
---
enfermero_portal.php | 12 ++++++++++--
lab_ordenes.php | 12 +++++++++---
2 files changed, 19 insertions(+), 5 deletions(-)
diff --git a/enfermero_portal.php b/enfermero_portal.php
index ab294b2..a2318ef 100644
--- a/enfermero_portal.php
+++ b/enfermero_portal.php
@@ -415,9 +415,9 @@ const portal = {
${item.orden_local_file ? `
-
-
@@ -563,6 +563,14 @@ function esc(s) {
({ '<':'<','>':'>','&':'&','"':'"',"'":''' }[c]));
}
+// Resolver ruta de imagen: evita duplicar "uploads/media/"
+function resImg(f) {
+ if (!f) return '';
+ if (/^https?:\/\//i.test(f)) return esc(f);
+ if (String(f).startsWith('uploads/')) return esc(f);
+ return `uploads/media/${esc(f)}`;
+}
+
document.addEventListener('DOMContentLoaded', () => {
portal.init();
agendaNueva.init();
diff --git a/lab_ordenes.php b/lab_ordenes.php
index fc3361d..72e9ddb 100644
--- a/lab_ordenes.php
+++ b/lab_ordenes.php
@@ -268,9 +268,15 @@ async function verOrden(id) {
}).join('');
// Imagen de la orden
- const imgSrc = o.local_file
- ? `uploads/media/${esc(o.local_file)}`
- : (o.conv_local_file ? `uploads/media/${esc(o.conv_local_file)}` : null);
+ // local_file puede venir con la ruta ya incluida (ej. "uploads/media/2026/02/x.jpg")
+ // o solo con el nombre de archivo — normalizamos para evitar ruta duplicada
+ function _resolveImg(f) {
+ if (!f) return null;
+ if (/^https?:\/\//i.test(f)) return f;
+ if (f.startsWith('uploads/')) return f;
+ return `uploads/media/${f}`;
+ }
+ const imgSrc = _resolveImg(o.local_file) || _resolveImg(o.conv_local_file) || null;
// Botones de acción según estado
const botonesAccion = renderBotones(o);