208 lines
9.2 KiB
HTML
208 lines
9.2 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>CV Application</title>
|
|
<link rel="stylesheet" href="/static/style.css">
|
|
<link rel="stylesheet" href="/static/carbone.js">
|
|
</head>
|
|
<body>
|
|
<div class="app">
|
|
<!-- Sidebar -->
|
|
<nav class="sidebar">
|
|
<div class="sidebar-header">
|
|
<h1>CV Application</h1>
|
|
<p>AI-Powered CV Management</p>
|
|
</div>
|
|
<ul class="nav">
|
|
<li><a href="#" class="nav-link active" data-page="dashboard">Dashboard</a></li>
|
|
<li><a href="#" class="nav-link" data-page="candidates">Candidates</a></li>
|
|
<li><a href="#" class="nav-link" data-page="batches">Batches</a></li>
|
|
<li><a href="#" class="nav-link" data-page="generated">Generated CVs</a></li>
|
|
</ul>
|
|
<ul class="nav" style="margin-top:auto">
|
|
<li class="nav-section">
|
|
<a href="#" class="nav-section-title" onclick="toggleNavSection('admin-section')">Admin ▾</a>
|
|
<ul class="nav-sub" id="admin-section">
|
|
<li><a href="#" class="nav-link" data-page="templates">Templates</a></li>
|
|
<li><a href="#" class="nav-link" data-page="admin-users">Users</a></li>
|
|
<li><a href="#" class="nav-link" data-page="admin-health">System Health</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="nav-section">
|
|
<a href="#" class="nav-section-title" onclick="toggleNavSection('settings-section')">Settings ▾</a>
|
|
<ul class="nav-sub" id="settings-section">
|
|
<li><a href="#" class="nav-link" data-page="settings-ai">AI Provider</a></li>
|
|
<li><a href="#" class="nav-link" data-page="settings-appearance">Appearance</a></li>
|
|
<li><a href="#" class="nav-link" data-page="settings-branding">Branding</a></li>
|
|
<li><a href="#" class="nav-link" data-page="settings-onlyoffice">ONLYOFFICE</a></li>
|
|
<li><a href="#" class="nav-link" data-page="settings-notifications">Notifications</a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</nav>
|
|
|
|
<!-- Main content -->
|
|
<main class="main">
|
|
<!-- DASHBOARD -->
|
|
<div id="page-dashboard" class="page active">
|
|
<h2 style="margin-bottom:20px">Dashboard</h2>
|
|
<div class="stats-grid" id="stats-grid"></div>
|
|
<div class="card">
|
|
<div class="card-header"><span class="card-title">Recent Candidates</span></div>
|
|
<div id="recent-candidates"></div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- CANDIDATES -->
|
|
<div id="page-candidates" class="page">
|
|
<div class="flex-between mb-16">
|
|
<h2>Candidates</h2>
|
|
<button class="btn" onclick="showUploadZone()">+ Upload CV</button>
|
|
</div>
|
|
<div id="candidate-upload-area" style="display:none;margin-bottom:16px">
|
|
<div class="card">
|
|
<div class="upload-zone" id="upload-zone" onclick="document.getElementById('file-input').click()">
|
|
<p style="font-size:16px; margin-bottom:8px">Drop CV file here or click to browse</p>
|
|
<p class="text-muted text-sm">Supports PDF, DOCX, TXT, DOC</p>
|
|
</div>
|
|
<input type="file" id="file-input" accept=".pdf,.docx,.doc,.txt,.rtf" style="display:none" onchange="uploadFile(this.files[0])">
|
|
<div id="upload-status" style="margin-top:12px"></div>
|
|
</div>
|
|
</div>
|
|
<div class="flex mb-16 gap-8">
|
|
<input type="text" id="search-input" placeholder="Search by name, email, or keyword..." style="flex:1">
|
|
<button class="btn" onclick="searchCandidates()">Search</button>
|
|
</div>
|
|
<div id="candidates-list"></div>
|
|
</div>
|
|
|
|
<!-- TEMPLATES (Word/Carbone only) -->
|
|
<div id="page-templates" class="page">
|
|
<h2 style="margin-bottom:20px">CV Templates</h2>
|
|
<div class="card mb-16">
|
|
<div class="card-header"><span class="card-title">How It Works</span></div>
|
|
<div class="text-sm text-muted">
|
|
1. Download the master template (.docx) with all data tags<br>
|
|
2. Open in Microsoft Word, customize fonts/colors/layout, save<br>
|
|
3. Upload your customized .docx back here<br>
|
|
4. Generate CVs by merging candidate data with your template -> PDF
|
|
</div>
|
|
<button class="btn mt-16" onclick="downloadMasterTemplate()">Download Master Template (.docx)</button>
|
|
<button class="btn btn-outline mt-16" style="margin-left:8px" onclick="viewTagsHelp()">View Tags Help</button>
|
|
<button class="btn btn-outline mt-16" style="margin-left:8px" onclick="downloadHelpPdf()">Download Help (.pdf)</button>
|
|
</div>
|
|
<div class="card mb-16">
|
|
<div class="card-header">
|
|
<span class="card-title">Inline Editor</span>
|
|
<span id="onlyoffice-status" class="badge badge-orange">checking...</span>
|
|
</div>
|
|
<div class="text-sm text-muted mb-16">
|
|
Edit templates directly in your browser with ONLYOFFICE Document Server. No need to download/upload — just click "Edit" and save changes online.
|
|
</div>
|
|
<div id="onlyoffice-templates-list"></div>
|
|
</div>
|
|
<div class="card mb-16">
|
|
<div class="card-header"><span class="card-title">Upload Custom Template</span></div>
|
|
<div class="form-group">
|
|
<label>Template Name</label>
|
|
<input type="text" id="carbone-template-name" placeholder="e.g. Corporate Blue, Minimalist Professional">
|
|
</div>
|
|
<div class="upload-zone" id="carbone-upload-zone" onclick="document.getElementById('carbone-file-input').click()">
|
|
<p style="font-size:16px; margin-bottom:8px">Drop your .docx file here or click to browse</p>
|
|
<p class="text-muted text-sm">Must be a .docx file with Carbone tags from the master template</p>
|
|
</div>
|
|
<input type="file" id="carbone-file-input" accept=".docx,.doc,.odt,.rtf" style="display:none" onchange="uploadCarboneTemplate(this.files[0])">
|
|
<div id="carbone-upload-status" style="margin-top:12px"></div>
|
|
</div>
|
|
<div class="card">
|
|
<div class="card-header"><span class="card-title">Saved Templates</span></div>
|
|
<div id="carbone-templates-list"></div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- BATCHES -->
|
|
<div id="page-batches" class="page">
|
|
<div id="batches-list-view">
|
|
<h2 style="margin-bottom:20px">CV Batches</h2>
|
|
<div class="flex mb-16 gap-8">
|
|
<button class="btn" onclick="showCreateBatchModal()">+ New Batch</button>
|
|
<button class="btn btn-outline" onclick="showUploadBatchModal()">Upload Document</button>
|
|
</div>
|
|
<div id="batches-list"></div>
|
|
</div>
|
|
<div id="batch-detail-view" style="display:none"></div>
|
|
</div>
|
|
|
|
<!-- GENERATED CVs -->
|
|
<div id="page-generated" class="page">
|
|
<h2 style="margin-bottom:20px">Generated CVs</h2>
|
|
<div id="generated-list"></div>
|
|
</div>
|
|
|
|
<!-- ADMIN: USERS -->
|
|
<div id="page-admin-users" class="page">
|
|
<h2 style="margin-bottom:20px">Users</h2>
|
|
<div class="card"><p class="text-muted">User management with role-based access control — coming soon.</p></div>
|
|
</div>
|
|
|
|
<!-- ADMIN: SYSTEM HEALTH -->
|
|
<div id="page-admin-health" class="page">
|
|
<h2 style="margin-bottom:20px">System Health</h2>
|
|
<div class="card"><p class="text-muted">Service status dashboard — coming soon.</p></div>
|
|
</div>
|
|
|
|
<!-- SETTINGS: AI PROVIDER -->
|
|
<div id="page-settings-ai" class="page">
|
|
<h2 style="margin-bottom:20px">AI Provider</h2>
|
|
<div class="card"><p class="text-muted">Configure AI provider, model, and API key — coming soon.</p></div>
|
|
</div>
|
|
|
|
<!-- SETTINGS: APPEARANCE -->
|
|
<div id="page-settings-appearance" class="page">
|
|
<h2 style="margin-bottom:20px">Appearance</h2>
|
|
<div class="card"><p class="text-muted">Theme and display settings — coming soon.</p></div>
|
|
</div>
|
|
|
|
<!-- SETTINGS: BRANDING -->
|
|
<div id="page-settings-branding" class="page">
|
|
<h2 style="margin-bottom:20px">Branding</h2>
|
|
<div class="card"><p class="text-muted">Company name, logo, and header text — coming soon.</p></div>
|
|
</div>
|
|
|
|
<!-- SETTINGS: ONLYOFFICE -->
|
|
<div id="page-settings-onlyoffice" class="page">
|
|
<h2 style="margin-bottom:20px">ONLYOFFICE</h2>
|
|
<div class="card"><p class="text-muted">ONLYOFFICE connection URL and JWT secret — coming soon.</p></div>
|
|
</div>
|
|
|
|
<!-- SETTINGS: NOTIFICATIONS -->
|
|
<div id="page-settings-notifications" class="page">
|
|
<h2 style="margin-bottom:20px">Notifications</h2>
|
|
<div class="card"><p class="text-muted">Email notification settings — coming soon.</p></div>
|
|
</div>
|
|
</main>
|
|
</div>
|
|
|
|
<!-- Modals -->
|
|
<div class="modal-overlay" id="modal-overlay"></div>
|
|
|
|
<!-- Chat slide-in panel -->
|
|
<div id="batch-chat-panel" class="chat-panel" style="display:none">
|
|
<div class="chat-panel-header">
|
|
<h3>Batch Discussion</h3>
|
|
<button class="btn btn-sm btn-danger" onclick="closeBatchChat()">Close</button>
|
|
</div>
|
|
<div class="chat-panel-messages" id="batch-chat-messages"></div>
|
|
<div class="chat-panel-input">
|
|
<textarea id="batch-chat-input" placeholder="Type your message..." rows="2"></textarea>
|
|
<button class="btn" onclick="sendBatchChat()">Send</button>
|
|
</div>
|
|
</div>
|
|
|
|
<script src="/static/app.js?v=19"></script>
|
|
<script src="/static/carbone.js?v=16"></script>
|
|
<script src="/static/batches.js?v=3"></script>
|
|
</body>
|
|
</html> |