4e03e06e32
continuous-integration/webhook Falha no build do client (VPS4)
Config UI simplificado: - Remove campos: Nome do PC, E-mail do Servidor, Senha do Servidor, Usuário do Painel (7 campos → 4 campos). - Mantém: Token, URL do Servidor, Pasta para Monitorar, Senha do Painel. - Botão "Verificar": chama GET /api/auth/device-info e exibe card com Clínica e PC identificados antes de salvar. - Ao salvar: valida token no servidor, clientName vem do pc_name retornado. - Token já salvo: verificado automaticamente ao abrir as configurações. - Login simplificado: pede só a senha (sem campo de usuário). client-monitor.js: - server-identified: se pcName vier do servidor, atualiza config.clientName localmente para manter em sincronia com o cadastro. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
152 lines
7.8 KiB
HTML
152 lines
7.8 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="pt-BR">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>ScoreOdonto - Configuração</title>
|
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
|
|
<link rel="stylesheet" href="config-ui.css">
|
|
</head>
|
|
<body>
|
|
<div id="toast" class="toast"></div>
|
|
<div class="page-container">
|
|
<!-- HEADER -->
|
|
<header class="header">
|
|
<div class="logo">
|
|
<span class="logo-icon">🦷</span>
|
|
<div class="logo-text">
|
|
<h1>ScoreOdonto</h1>
|
|
<p>Dental Client Setup</p>
|
|
</div>
|
|
</div>
|
|
<div style="display: flex; align-items: center; gap: 8px;">
|
|
<div class="brand-domain">rx.scoreodonto.com</div>
|
|
<span id="app-version-badge" style="font-size: 10px; background: rgba(130,87,229,0.15); color: rgba(180,160,255,0.8); padding: 2px 8px; border-radius: 20px; border: 1px solid rgba(130,87,229,0.2); font-family: 'JetBrains Mono', monospace; letter-spacing: 0.5px;">Client v...</span>
|
|
</div>
|
|
</header>
|
|
|
|
<main class="main-content">
|
|
|
|
<!-- 1. TELA DE LOGIN -->
|
|
<div id="login-container" class="container-panel">
|
|
<div class="panel-header">
|
|
<h2>🔒 Acesso Restrito</h2>
|
|
<p>Insira a senha do painel para alterar as configurações.</p>
|
|
</div>
|
|
<form id="login-form" class="login-form">
|
|
<div class="form-group">
|
|
<label for="login-password">🔑 Senha do Painel</label>
|
|
<input type="password" id="login-password" placeholder="Digite a senha" required>
|
|
</div>
|
|
<div class="login-actions">
|
|
<button type="button" id="btn-login-cancel" class="btn btn-outline">Minimizar</button>
|
|
<button type="submit" id="btn-login-submit" class="btn btn-primary">Entrar</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
|
|
<!-- 2. TELA DE CONFIGURAÇÃO -->
|
|
<div id="settings-container" class="container-panel hidden">
|
|
|
|
<!-- Card de identidade do dispositivo (preenchido após validar o token) -->
|
|
<div id="device-card" class="hidden" style="
|
|
background: linear-gradient(135deg, rgba(124,77,255,0.12), rgba(0,229,255,0.08));
|
|
border: 1px solid rgba(124,77,255,0.3);
|
|
border-radius: 12px;
|
|
padding: 14px 18px;
|
|
margin-bottom: 18px;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 14px;">
|
|
<span style="font-size: 2rem; line-height:1;">🏥</span>
|
|
<div>
|
|
<div id="device-clinic" style="font-weight:700; font-size:1rem;"></div>
|
|
<div id="device-pc" style="font-size:0.8rem; opacity:0.7; margin-top:2px;"></div>
|
|
</div>
|
|
<span style="margin-left:auto; background:rgba(34,197,94,0.15); color:#16a34a; border:1px solid rgba(34,197,94,0.3); border-radius:20px; padding:3px 12px; font-size:0.75rem; font-weight:700;">✓ Token válido</span>
|
|
</div>
|
|
|
|
<form id="config-form" class="config-form">
|
|
<div class="form-grid">
|
|
|
|
<!-- Token do servidor (único campo de credencial) -->
|
|
<div class="form-group full-width">
|
|
<label for="token">🔑 Token do Dispositivo</label>
|
|
<div style="display:flex; gap:8px;">
|
|
<input type="text" id="token"
|
|
placeholder="Cole aqui o token gerado no painel do servidor"
|
|
autocomplete="off" spellcheck="false"
|
|
style="font-family:'JetBrains Mono',monospace; font-size:0.82rem; flex:1;">
|
|
<button type="button" id="btn-verify-token" class="btn btn-outline" style="white-space:nowrap;">
|
|
<span id="verify-spinner" class="spinner"></span>
|
|
<span id="verify-text">Verificar</span>
|
|
</button>
|
|
</div>
|
|
<small class="help-text">Token gerado em <b>Clínicas e Acessos</b> no painel do servidor. Ao verificar, a clínica e o PC são identificados automaticamente.</small>
|
|
</div>
|
|
|
|
<!-- URL do servidor -->
|
|
<div class="form-group">
|
|
<label for="serverUrl">🌐 URL do Servidor</label>
|
|
<input type="text" id="serverUrl"
|
|
placeholder="https://rx.scoreodonto.com"
|
|
autocomplete="off">
|
|
</div>
|
|
|
|
<!-- Pasta a monitorar -->
|
|
<div class="form-group">
|
|
<label for="monitorPath">📁 Pasta para Monitorar</label>
|
|
<input type="text" id="monitorPath"
|
|
placeholder="C:\ProgramData\RF\Dental Sensor\Images"
|
|
autocomplete="off">
|
|
</div>
|
|
|
|
<!-- Senha do painel local -->
|
|
<div class="form-group full-width">
|
|
<label for="adminPassword">🔒 Senha do Painel Local</label>
|
|
<div class="password-wrapper">
|
|
<input type="password" id="adminPassword"
|
|
placeholder="Protege o acesso a estas configurações"
|
|
autocomplete="off">
|
|
<button type="button" id="toggle-admin-password" class="btn-toggle-password">👁️</button>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<!-- AÇÕES -->
|
|
<div class="form-actions">
|
|
<button type="button" id="btn-test" class="btn btn-outline">
|
|
<span id="test-spinner" class="spinner"></span>
|
|
<span id="test-text">⚡ Testar Conexão</span>
|
|
</button>
|
|
<div class="right-buttons">
|
|
<button type="button" id="btn-cancel" class="btn btn-text">Minimizar</button>
|
|
<button type="submit" id="btn-save" class="btn btn-primary">
|
|
<span id="save-spinner" class="spinner"></span>
|
|
<span>💾 Salvar Configurações</span>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
|
|
<!-- TERMINAL LOGS -->
|
|
<div class="terminal-container">
|
|
<div class="terminal-header">
|
|
<h3>📜 Logs do Sistema</h3>
|
|
<button type="button" class="btn btn-outline btn-sm" id="btn-copy-logs" title="Copiar logs">
|
|
<span id="copy-icon">📋</span> Copiar
|
|
</button>
|
|
</div>
|
|
<div class="terminal-body" id="terminal-logs">
|
|
<div class="log-line">[Sistema] Aguardando logs do monitor...</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</main>
|
|
</div>
|
|
<script src="config-ui.js"></script>
|
|
</body>
|
|
</html>
|