Files
VPS 4 Builder 4e03e06e32
continuous-integration/webhook Falha no build do client (VPS4)
feat(client): config token-first — apenas token + URL + pasta + senha local
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>
2026-05-31 15:37:09 +02:00

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>