atualização do laudo

This commit is contained in:
Jessica_Faro 2025-09-13 15:44:47 -03:00
parent 1af8268943
commit d5d03b0dd0

View File

@ -1,5 +1,5 @@
// src/pages/LaudoManager.jsx
import React, { useState, useRef, useEffect } from "react";
import React, { useState, useEffect } from "react";
/* ===== Estilos embutidos ===== */
/* Eu coloquei os estilos aqui para simplificar a edição. */
@ -32,8 +32,8 @@ const styles = `
.small-muted { color:#7f95a8; font-size:13px; }
.empty { padding:40px; text-align:center; color:#7d97b4; }
/* notificação simples (sem backdrop escuro) */
.notice-card { position:fixed; top:20vh; left:50%; transform:translateX(-50%); background:#fff; border-radius:8px; padding:14px 18px; box-shadow:0 8px 30px rgba(10,20,40,0.12); z-index:13000; pointer-events:auto; }
/* notificação simples (centralizada) */
.notice-card { position:fixed; top:50%; left:50%; transform:translate(-50%,-50%); background:#fff; border-radius:8px; padding:14px 18px; box-shadow:0 8px 30px rgba(10,20,40,0.12); z-index:13000; pointer-events:auto; max-width:720px; }
`;
/* ===== Mock data (simula APIDOG) ===== */
@ -94,8 +94,11 @@ export default function LaudoManager() {
/* notificação simples (sem backdrop) para 'sem permissão' */
const [showNoPermission, setShowNoPermission] = useState(false);
/* pesquisa */
const [query, setQuery] = useState("");
/* Para simplificar: eu assumo aqui que estamos na visão da secretaria */
const isSecretary = true; // eu deixei true para forçar o comportamento "somente leitura"
const isSecretary = true; // permanece true (somente leitura)
useEffect(() => {
const el = document.createElement("style");
@ -122,35 +125,34 @@ export default function LaudoManager() {
setOpenDropdownId(prev => (prev === id ? null : id));
}
/* Quando clicar em Editar:
- se for secretaria eu mostro um aviso simples sem fundo escuro
- se for médico (isSecretary=false) eu abriria o editor (aqui eu deixei o mecanismo) */
/* (botao editar) */
function handleOpenViewer(laudo) {
setOpenDropdownId(null);
if (isSecretary) {
// eu mostro um aviso simples (sem modal que bloqueia)
// (notificação sem bloquear)
setShowNoPermission(true);
return;
}
setViewerLaudo(laudo);
}
/* Ao pedir impressão: eu fecho qualquer viewer aberto e abro a preview
- a pré-visualização NÃO bloqueia a página (removi backdrop) */
/* (botao imprimir) */
function handlePrint(laudo) {
// Evito o bug: fechar viewer antes de abrir preview
// evitar bug: fechar viewer antes de abrir preview
setViewerLaudo(null);
setPreviewLaudo(laudo);
setShowPreview(true);
setOpenDropdownId(null);
}
/* (botao excluir) */
function handleRequestDelete(laudo) {
setToDelete(laudo);
setOpenDropdownId(null);
setShowConfirmDelete(true);
}
/* (funcionalidade do botao de excluir) */
async function doConfirmDelete(confirm) {
if (!toDelete) return;
if (!confirm) {
@ -162,7 +164,7 @@ export default function LaudoManager() {
try {
const resp = await mockDeleteLaudo(toDelete.id);
if (resp.ok || resp === true) {
// eu removo o laudo da lista local
// removo o laudo da lista local
setLaudos(curr => curr.filter(l => l.id !== toDelete.id));
setShowConfirmDelete(false);
setToDelete(null);
@ -177,25 +179,40 @@ export default function LaudoManager() {
}
}
/* filtro de pesquisa (por pedido ou nome do paciente) */
const normalized = (s = "") => String(s).toLowerCase();
const filteredLaudos = laudos.filter(l => {
const q = normalized(query).trim();
if (!q) return true;
if (normalized(l.pedido).includes(q)) return true;
if (normalized(l.paciente?.nome).includes(q)) return true;
return false;
});
return (
<div className="laudo-wrap">
<div className="left-col">
<div className="title-row">
<div>
<div className="page-title">Gerenciamento de Laudo</div>
<div style={{color:"#7f95a8", marginTop:6}}>Visualização: Secretaria (Somente leitura)</div>
{/* removi a linha "Visualização: Secretaria" conforme pedido */}
</div>
</div>
<div style={{ marginBottom:12 }}>
<input placeholder="Pesquisar paciente ou pedido..." style={{ width:"100%", padding:12, borderRadius:8, border:"1px solid #e6eef8" }} />
<input
placeholder="Pesquisar paciente ou pedido..."
value={query}
onChange={e => setQuery(e.target.value)}
style={{ width:"100%", padding:12, borderRadius:8, border:"1px solid #e6eef8" }}
/>
</div>
{laudos.length === 0 ? (
{filteredLaudos.length === 0 ? (
<div className="empty">Nenhum laudo encontrado.</div>
) : (
<div style={{ borderRadius:8, overflow:"visible", boxShadow:"0 0 0 1px #eef6ff" }}>
{laudos.map((l) => (
{filteredLaudos.map((l) => (
<div className="laudo-row" key={l.id}>
<div className="col" style={{ flex: "0 0 160px" }}>
<div style={{ fontWeight:700 }}>{l.pedido}</div>
@ -312,7 +329,7 @@ export default function LaudoManager() {
</div>
)}
{/* Notificação simples: Sem permissão (exibe sem backdrop escuro) */}
{/* Notificação simples: Sem permissão (exibe sem backdrop escuro) - centralizada */}
{showNoPermission && (
<div className="notice-card" role="alert" aria-live="polite">
<div style={{ fontWeight:700, marginBottom:6 }}>Sem permissão para editar</div>