atualização do laudo
This commit is contained in:
parent
1af8268943
commit
d5d03b0dd0
@ -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>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user