- FastAPI backend with SQLAlchemy ORM and SQLite - AI chatbot with OpenAI-compatible LLM integration (SSE streaming) - Admin panel for content management, LLM config, token management - Anonymous access with 3-question limit, token-based access control - Recruiter intent detection with admin notification - Resume generator (JD-based, Markdown to Word export) - Chinese localized public interface Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
67 lines
3.3 KiB
HTML
67 lines
3.3 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh-CN">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>CareerBot Admin - Experience</title>
|
|
<link rel="stylesheet" href="/static/css/style.css">
|
|
</head>
|
|
<body>
|
|
<div class="admin-layout">
|
|
<aside class="admin-sidebar">
|
|
<div class="logo">CareerBot Admin</div>
|
|
<nav>
|
|
<a href="/admin/dashboard"><span class="icon">■</span> Dashboard</a>
|
|
<a href="/admin/profile"><span class="icon">☺</span> Profile</a>
|
|
<a href="/admin/education"><span class="icon">☆</span> Education</a>
|
|
<a href="/admin/experience"><span class="icon">✎</span> Experience</a>
|
|
<a href="/admin/skills"><span class="icon">★</span> Skills</a>
|
|
<a href="/admin/tokens"><span class="icon">⚷</span> Access Tokens</a>
|
|
<a href="/admin/messages"><span class="icon">✉</span> Messages <span class="nav-badge" id="nav-badge" style="display:none;"></span></a>
|
|
<a href="/admin/llm-config"><span class="icon">⚙</span> LLM Config</a>
|
|
<a href="/admin/resume"><span class="icon">✍</span> Resume Gen</a>
|
|
<a href="#" onclick="adminLogout()"><span class="icon">→</span> Logout</a>
|
|
</nav>
|
|
</aside>
|
|
<main class="admin-content">
|
|
<div class="admin-header">
|
|
<h2>Work Experience</h2>
|
|
<button class="btn btn-primary" onclick="showExperienceModal()">+ Add New</button>
|
|
</div>
|
|
<div class="admin-card">
|
|
<table class="data-table">
|
|
<thead><tr><th>Period</th><th>Company</th><th>Position</th><th>Actions</th></tr></thead>
|
|
<tbody id="experience-tbody"></tbody>
|
|
</table>
|
|
</div>
|
|
</main>
|
|
</div>
|
|
|
|
<!-- Modal -->
|
|
<div class="modal-overlay" id="experience-modal">
|
|
<div class="modal">
|
|
<h3>Work Experience Entry</h3>
|
|
<input type="hidden" id="exp-id">
|
|
<div class="form-row">
|
|
<div class="form-group"><label>Start Date</label><input type="text" id="exp-start_date" placeholder="2020.1"></div>
|
|
<div class="form-group"><label>End Date</label><input type="text" id="exp-end_date" placeholder="2025.5"></div>
|
|
</div>
|
|
<div class="form-row">
|
|
<div class="form-group"><label>Company</label><input type="text" id="exp-company"></div>
|
|
<div class="form-group"><label>Position</label><input type="text" id="exp-position"></div>
|
|
</div>
|
|
<div class="form-group"><label>Company Introduction</label><textarea id="exp-company_intro" rows="3"></textarea></div>
|
|
<div class="form-group"><label>Responsibilities</label><textarea id="exp-responsibilities" rows="6"></textarea></div>
|
|
<div class="form-group"><label>Achievements</label><textarea id="exp-achievements" rows="6"></textarea></div>
|
|
<div class="form-group"><label>Sort Order</label><input type="number" id="exp-sort_order" value="0"></div>
|
|
<div class="modal-actions">
|
|
<button class="btn" onclick="closeModal('experience-modal')">Cancel</button>
|
|
<button class="btn btn-primary" onclick="saveExperience()">Save</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script src="/static/js/admin.js"></script>
|
|
</body>
|
|
</html>
|