atualização do laudo
This commit is contained in:
parent
1af8268943
commit
d5d03b0dd0
@ -1,5 +1,5 @@
|
|||||||
// src/pages/LaudoManager.jsx
|
// src/pages/LaudoManager.jsx
|
||||||
import React, { useState, useRef, useEffect } from "react";
|
import React, { useState, useEffect } from "react";
|
||||||
|
|
||||||
/* ===== Estilos embutidos ===== */
|
/* ===== Estilos embutidos ===== */
|
||||||
/* Eu coloquei os estilos aqui para simplificar a edição. */
|
/* Eu coloquei os estilos aqui para simplificar a edição. */
|
||||||
@ -32,8 +32,8 @@ const styles = `
|
|||||||
.small-muted { color:#7f95a8; font-size:13px; }
|
.small-muted { color:#7f95a8; font-size:13px; }
|
||||||
.empty { padding:40px; text-align:center; color:#7d97b4; }
|
.empty { padding:40px; text-align:center; color:#7d97b4; }
|
||||||
|
|
||||||
/* notificação simples (sem backdrop escuro) */
|
/* notificação simples (centralizada) */
|
||||||
.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; }
|
.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) ===== */
|
/* ===== Mock data (simula APIDOG) ===== */
|
||||||
@ -94,8 +94,11 @@ export default function LaudoManager() {
|
|||||||
/* notificação simples (sem backdrop) para 'sem permissão' */
|
/* notificação simples (sem backdrop) para 'sem permissão' */
|
||||||
const [showNoPermission, setShowNoPermission] = useState(false);
|
const [showNoPermission, setShowNoPermission] = useState(false);
|
||||||
|
|
||||||
|
/* pesquisa */
|
||||||
|
const [query, setQuery] = useState("");
|
||||||
|
|
||||||
/* Para simplificar: eu assumo aqui que estamos na visão da secretaria */
|
/* 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(() => {
|
useEffect(() => {
|
||||||
const el = document.createElement("style");
|
const el = document.createElement("style");
|
||||||
@ -122,35 +125,34 @@ export default function LaudoManager() {
|
|||||||
setOpenDropdownId(prev => (prev === id ? null : id));
|
setOpenDropdownId(prev => (prev === id ? null : id));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Quando clicar em Editar:
|
/* (botao 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) */
|
|
||||||
function handleOpenViewer(laudo) {
|
function handleOpenViewer(laudo) {
|
||||||
setOpenDropdownId(null);
|
setOpenDropdownId(null);
|
||||||
if (isSecretary) {
|
if (isSecretary) {
|
||||||
// eu mostro um aviso simples (sem modal que bloqueia)
|
// (notificação sem bloquear)
|
||||||
setShowNoPermission(true);
|
setShowNoPermission(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setViewerLaudo(laudo);
|
setViewerLaudo(laudo);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Ao pedir impressão: eu fecho qualquer viewer aberto e abro a preview
|
/* (botao imprimir) */
|
||||||
- a pré-visualização NÃO bloqueia a página (removi backdrop) */
|
|
||||||
function handlePrint(laudo) {
|
function handlePrint(laudo) {
|
||||||
// Evito o bug: fechar viewer antes de abrir preview
|
// evitar bug: fechar viewer antes de abrir preview
|
||||||
setViewerLaudo(null);
|
setViewerLaudo(null);
|
||||||
setPreviewLaudo(laudo);
|
setPreviewLaudo(laudo);
|
||||||
setShowPreview(true);
|
setShowPreview(true);
|
||||||
setOpenDropdownId(null);
|
setOpenDropdownId(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (botao excluir) */
|
||||||
function handleRequestDelete(laudo) {
|
function handleRequestDelete(laudo) {
|
||||||
setToDelete(laudo);
|
setToDelete(laudo);
|
||||||
setOpenDropdownId(null);
|
setOpenDropdownId(null);
|
||||||
setShowConfirmDelete(true);
|
setShowConfirmDelete(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (funcionalidade do botao de excluir) */
|
||||||
async function doConfirmDelete(confirm) {
|
async function doConfirmDelete(confirm) {
|
||||||
if (!toDelete) return;
|
if (!toDelete) return;
|
||||||
if (!confirm) {
|
if (!confirm) {
|
||||||
@ -162,7 +164,7 @@ export default function LaudoManager() {
|
|||||||
try {
|
try {
|
||||||
const resp = await mockDeleteLaudo(toDelete.id);
|
const resp = await mockDeleteLaudo(toDelete.id);
|
||||||
if (resp.ok || resp === true) {
|
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));
|
setLaudos(curr => curr.filter(l => l.id !== toDelete.id));
|
||||||
setShowConfirmDelete(false);
|
setShowConfirmDelete(false);
|
||||||
setToDelete(null);
|
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 (
|
return (
|
||||||
<div className="laudo-wrap">
|
<div className="laudo-wrap">
|
||||||
<div className="left-col">
|
<div className="left-col">
|
||||||
<div className="title-row">
|
<div className="title-row">
|
||||||
<div>
|
<div>
|
||||||
<div className="page-title">Gerenciamento de Laudo</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>
|
</div>
|
||||||
|
|
||||||
<div style={{ marginBottom:12 }}>
|
<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>
|
</div>
|
||||||
|
|
||||||
{laudos.length === 0 ? (
|
{filteredLaudos.length === 0 ? (
|
||||||
<div className="empty">Nenhum laudo encontrado.</div>
|
<div className="empty">Nenhum laudo encontrado.</div>
|
||||||
) : (
|
) : (
|
||||||
<div style={{ borderRadius:8, overflow:"visible", boxShadow:"0 0 0 1px #eef6ff" }}>
|
<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="laudo-row" key={l.id}>
|
||||||
<div className="col" style={{ flex: "0 0 160px" }}>
|
<div className="col" style={{ flex: "0 0 160px" }}>
|
||||||
<div style={{ fontWeight:700 }}>{l.pedido}</div>
|
<div style={{ fontWeight:700 }}>{l.pedido}</div>
|
||||||
@ -312,7 +329,7 @@ export default function LaudoManager() {
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Notificação simples: Sem permissão (exibe sem backdrop escuro) */}
|
{/* Notificação simples: Sem permissão (exibe sem backdrop escuro) - centralizada */}
|
||||||
{showNoPermission && (
|
{showNoPermission && (
|
||||||
<div className="notice-card" role="alert" aria-live="polite">
|
<div className="notice-card" role="alert" aria-live="polite">
|
||||||
<div style={{ fontWeight:700, marginBottom:6 }}>Sem permissão para editar</div>
|
<div style={{ fontWeight:700, marginBottom:6 }}>Sem permissão para editar</div>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user