feat: consolidate backend improvements, frontend UX fixes and Wasabi storage support
This commit is contained in:
@@ -7,9 +7,22 @@
|
||||
<meta name="description" content="Sistema de gerenciamento de imagens de raio-X dental">
|
||||
<link rel="icon" href="/favicon.svg" type="image/svg+xml">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Outfit:wght@300;400;500;600;700&display=swap">
|
||||
<link rel="stylesheet" href="/style.css">
|
||||
</head>
|
||||
<body>
|
||||
<!-- Overlay Global de Alerta Wasabi -->
|
||||
<div id="wasabi-alert-banner" class="wasabi-alert-banner" style="display: none;">
|
||||
<span class="wasabi-alert-icon">⚠️</span>
|
||||
<div class="wasabi-alert-content">
|
||||
<strong>Atenção:</strong> Falha de autenticação com o Wasabi S3 (<span id="wasabi-alert-error">Erro 403</span>). As imagens não poderão ser salvas ou visualizadas. Por favor, verifique suas configurações de armazenamento imediatamente.
|
||||
</div>
|
||||
<button class="wasabi-alert-btn" onclick="openSettingsTab()">Configurar Agora</button>
|
||||
</div>
|
||||
|
||||
<!-- App Layout Container -->
|
||||
<div class="app-container">
|
||||
<!-- Sidebar -->
|
||||
<aside class="sidebar">
|
||||
@@ -22,8 +35,8 @@
|
||||
|
||||
<nav class="sidebar-nav">
|
||||
<div class="nav-section-title">Menu Principal</div>
|
||||
<a href="/" class="nav-item active" id="menu-dashboard" onclick="if(window.location.pathname === '/') { showView('gallery'); return false; }">
|
||||
<i class="fa-solid fa-chart-line"></i> Dashboard
|
||||
<a href="/" class="nav-item active" id="menu-dashboard" onclick="if(window.location.pathname === '/') { showPatientsView(); return false; }">
|
||||
<i class="fa-solid fa-images"></i> Galeria
|
||||
</a>
|
||||
<a href="#" class="nav-item" id="menu-new-patient" onclick="openCreatePatientModal(); return false;">
|
||||
<i class="fa-solid fa-user-plus"></i> Novo Paciente
|
||||
@@ -157,28 +170,54 @@
|
||||
|
||||
<!-- View 1: Transforms -->
|
||||
<div id="transformViewWrapper" class="transform-view-wrapper">
|
||||
<div id="transformOptions" class="transform-grid"></div>
|
||||
<div id="transformActionArea" class="transform-action-area" style="display: none;">
|
||||
<!-- Ajuste Fino de Rotação -->
|
||||
<div class="fine-tune-section">
|
||||
<span class="fine-tune-title">
|
||||
📐 Ajuste Fino de Ângulo (Sensor Inclinado)
|
||||
</span>
|
||||
<div class="fine-tune-controls">
|
||||
<button type="button" class="btn btn-secondary btn-small" onclick="adjustFineTune(-5)" title="Rotacionar -5°">🔄 -5°</button>
|
||||
<button type="button" class="btn btn-secondary btn-small" onclick="adjustFineTune(-1)" title="Rotacionar -1°">🔄 -1°</button>
|
||||
|
||||
<div id="fineTuneValDisplay" class="fine-tune-display">
|
||||
0°
|
||||
</div>
|
||||
|
||||
<button type="button" class="btn btn-secondary btn-small" onclick="adjustFineTune(1)" title="Rotacionar +1°">🔄 +1°</button>
|
||||
<button type="button" class="btn btn-secondary btn-small" onclick="adjustFineTune(5)" title="Rotacionar +5°">🔄 +5°</button>
|
||||
|
||||
<button type="button" class="btn btn-danger btn-small" id="btnResetFineTune" onclick="resetFineTune()" style="display: none;" title="Resetar ajuste fino">Reset</button>
|
||||
<div id="newTransformLayout" class="new-transform-layout">
|
||||
<!-- Painel Original -->
|
||||
<div class="transform-panel panel-original">
|
||||
<h3 class="panel-title">Original</h3>
|
||||
<div class="img-container">
|
||||
<img id="originalImgPreview" src="" alt="Original">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Painel Preview -->
|
||||
<div class="transform-panel panel-preview">
|
||||
<h3 class="panel-title">Preview</h3>
|
||||
<div class="img-container">
|
||||
<img id="transformedImgPreview" src="" alt="Transformed">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Barra de ferramentas lateral -->
|
||||
<div class="transform-sidebar">
|
||||
<h3 class="sidebar-title">Ajuste</h3>
|
||||
<div class="sidebar-buttons" id="sidebarTransformButtons" style="display: flex; flex-direction: column; gap: 8px; align-items: center; width: 100%;">
|
||||
<button type="button" class="sidebar-btn" onclick="adjustFineTune(-5)" title="Rotacionar -5°" style="margin-bottom: 4px;">
|
||||
<span class="icon">↺</span>
|
||||
<span class="label">-5°</span>
|
||||
</button>
|
||||
<button type="button" class="sidebar-btn" onclick="adjustFineTune(-1)" title="Rotacionar -1°" style="margin-bottom: 4px;">
|
||||
<span class="icon">↺</span>
|
||||
<span class="label">-1°</span>
|
||||
</button>
|
||||
|
||||
<div id="fineTuneValDisplay" class="fine-tune-display" style="min-width: 40px; padding: 6px; font-size: 1rem; margin: 8px 0;">0°</div>
|
||||
|
||||
<button type="button" class="sidebar-btn" onclick="adjustFineTune(1)" title="Rotacionar +1°" style="margin-top: 4px;">
|
||||
<span class="icon">↻</span>
|
||||
<span class="label">+1°</span>
|
||||
</button>
|
||||
<button type="button" class="sidebar-btn" onclick="adjustFineTune(5)" title="Rotacionar +5°" style="margin-top: 4px;">
|
||||
<span class="icon">↻</span>
|
||||
<span class="label">+5°</span>
|
||||
</button>
|
||||
|
||||
<button type="button" class="btn btn-danger btn-small" id="btnResetFineTune" onclick="resetFineTune()" style="display: none; margin-top: 12px; width: 100%;" title="Resetar ajuste">Reset</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="transformActionArea" class="transform-action-area" style="display: none;">
|
||||
<!-- Apenas a observação e os botões de salvar ficaram na área inferior -->
|
||||
|
||||
<div class="form-group">
|
||||
<label>Nova Observação / Detalhes (Opcional):</label>
|
||||
<textarea id="newImageRemark" class="form-control" rows="2" placeholder="Ex: Raio-X Dente 45..."></textarea>
|
||||
@@ -219,7 +258,7 @@
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h2>Novo Paciente</h2>
|
||||
<div class="modal-close" onclick="closeCreatePatientModal()">×</div>
|
||||
<div class="modal-close">×</div>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form id="create-patient-form" onsubmit="submitCreatePatient(event)">
|
||||
@@ -269,7 +308,7 @@
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h2>Nova GTO</h2>
|
||||
<div class="modal-close" onclick="closeCreateGtoModal()">×</div>
|
||||
<div class="modal-close">×</div>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form id="create-gto-form" onsubmit="submitCreateGto(event)">
|
||||
@@ -297,7 +336,7 @@
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h2>⚙️ Configurações da Conta</h2>
|
||||
<span class="close-modal" onclick="closeSettingsModal()">×</span>
|
||||
<span class="modal-close">×</span>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form id="settingsForm" onsubmit="updateCredentials(event)">
|
||||
@@ -338,7 +377,7 @@
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h2>👥 Gerenciamento de Usuários</h2>
|
||||
<span class="modal-close" onclick="closeUserManagementModal()">×</span>
|
||||
<span class="modal-close">×</span>
|
||||
</div>
|
||||
<div class="modal-body" style="display: flex; gap: 24px; flex-direction: row; flex-wrap: wrap; align-items: flex-start;">
|
||||
<!-- Formulário de Cadastro (Esquerda) -->
|
||||
@@ -395,7 +434,7 @@
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h2>🔌 Configuração do Wasabi Storage</h2>
|
||||
<span class="modal-close" onclick="closePluginsModal()">×</span>
|
||||
<span class="modal-close">×</span>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form id="pluginsForm" onsubmit="updatePluginsConfig(event)">
|
||||
@@ -445,7 +484,7 @@
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h2>🔄 Sincronização e Envio de Imagens</h2>
|
||||
<span class="modal-close" onclick="closeSyncModal()">×</span>
|
||||
<span class="modal-close">×</span>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="sync-tabs">
|
||||
|
||||
Reference in New Issue
Block a user