-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
254 lines (242 loc) · 12.1 KB
/
Copy pathindex.html
File metadata and controls
254 lines (242 loc) · 12.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
<!DOCTYPE html>
<html lang="zh-CN" data-theme="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>NetLearner — CCNA (200-301) / CCNP (350-401) / HCIA-Datacom (H12-811) / HCIP-Datacom (H12-821) 备考</title>
<meta name="description" content="考纲驱动 · AI 动态出题。覆盖 Cisco(CCNA 200-301 / CCNP ENCOR 350-401)和 Huawei(HCIA-Datacom H12-811 / HCIP-Datacom H12-821)认证备考。">
<meta http-equiv="Cache-Control" content="no-store, no-cache, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
<link rel="stylesheet" href="assets/css/main.css?v=5.0">
</head>
<body>
<nav class="nav">
<div class="nav-brand">NetLearner</div>
<div class="nav-links">
<a class="nav-link active" data-page="page-home" onclick="router.go('/')">首页</a>
<a class="nav-link" data-page="page-level-test" onclick="router.go('/level-test')">水平测试</a>
<a class="nav-link" data-page="page-exam" onclick="router.go('/exam')">模拟考试</a>
<a class="nav-link" data-page="page-wrong-answers" onclick="router.go('/wrong-answers')">错题本</a>
<a class="nav-link" data-page="page-planner" onclick="router.go('/planner')">学习计划</a>
<a class="nav-link" data-page="page-settings" onclick="router.go('/settings')">设置</a>
</div>
</nav>
<!-- HOME -->
<div id="page-home" class="page active">
<div class="container">
<div class="hero">
<h1><span>NetLearner</span></h1>
<div class="tagline">考纲驱动 · AI 动态出题</div>
<p class="desc">不再依赖任何静态题库。基于官方 Exam Topics 实时生成试题,永远对标最新考纲。覆盖 <strong>Cisco</strong>(CCNA 200-301 / CCNP ENCOR 350-401)和 <strong>Huawei</strong>(HCIA-Datacom H12-811 / HCIP-Datacom H12-821)两大认证体系。</p>
<div class="badges">
<span class="badge">官方考纲驱动</span>
<span class="badge">AI 动态出题</span>
<span class="badge">数据本地私有</span>
<span class="badge">纯前端免部署</span>
</div>
<div class="btn-wrap">
<button class="btn btn-primary" onclick="router.go('/level-test')">开始水平测试</button>
<button class="btn" onclick="router.go('/exam')">模拟考试</button>
</div>
</div>
<div class="card-grid">
<div class="card card-feature" onclick="router.go('/level-test')"><div class="icon">▣</div><h3>水平测试</h3><p>快速摸底·生成学习计划</p></div>
<div class="card card-feature" onclick="router.go('/exam')"><div class="icon">◷</div><h3>模拟考试</h3><p>全真模考·贴近真实考试</p></div>
<div class="card card-feature" onclick="router.go('/wrong-answers')"><div class="icon">✕</div><h3>错题本</h3><p>自动收录针对性重练</p></div>
<div class="card card-feature" onclick="router.go('/planner')"><div class="icon">⊞</div><h3>学习计划</h3><p>根据测评生成计划</p></div>
</div>
<div id="home-stats" style="margin-top:8px"></div>
<div style="display:flex;gap:8px;justify-content:center;margin-top:8px;padding:12px">
<button class="btn btn-sm" onclick="storage.export()">导出数据</button>
<button class="btn btn-sm" onclick="importData()">导入数据</button>
</div>
<div style="text-align:center;margin-top:24px;padding:12px;border-top:1px solid var(--border);font-size:12px;color:var(--text-muted)">
<p>所有数据存储在浏览器本地,不发送到任何服务器</p>
</div>
<!-- ABOUT / SOCIAL -->
<div style="margin-top:20px;padding:18px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-card);text-align:center">
<h3 style="font-size:14px;font-weight:700;margin-bottom:8px">关于 NetLearner</h3>
<p style="font-size:13px;color:var(--text-secondary);line-height:1.7;max-width:500px;margin:0 auto 10px">
一个<strong>免费 · 开源</strong>的双厂商认证刷题平台。
基于官方考纲加权随机抽题,覆盖 Cisco(CCNA / CCNP)和 Huawei(HCIA / HCIP)。
纯前端实现,无需注册,数据全部存在本地。
</p>
<p style="font-size:13px;color:var(--text-secondary);margin-bottom:10px">
如果这个项目帮到了你,欢迎去 GitHub 点个 ⭐,让更多人看到~
</p>
<div style="display:flex;gap:8px;justify-content:center;flex-wrap:wrap;font-size:12px">
<a class="btn btn-sm" href="https://github.com/StevenJoe619/NetLearner" target="_blank" rel="noopener">GitHub</a>
<a class="btn btn-sm" href="https://gitee.com/stevenjoe619/NetLearner" target="_blank" rel="noopener">Gitee</a>
<span class="btn btn-sm" style="opacity:0.8;cursor:default">小红书:纸乔 (432215372)</span>
</div>
</div>
</div>
</div>
<!-- LEVEL TEST -->
<div id="page-level-test" class="page">
<div class="container">
<h2 style="margin-bottom:6px">水平测试</h2>
<p class="text-muted" style="font-size:13px;margin-bottom:16px">覆盖核心知识域,评估当前水平,生成针对性学习计划</p>
<div id="lt-setup">
<div id="lt-buttons"></div>
<div class="card"><p class="text-muted" style="font-size:13px">水平测试按官方考纲加权出题,提交后获得等级评定和学习计划。</p></div>
</div>
<div id="lt-exam" style="display:none">
<div class="flex-between" style="margin-bottom:12px">
<button class="btn btn-sm" onclick="resetLT()">⬅ 重新选择</button>
<span id="lt-title" style="font-weight:600;font-size:14px"></span>
</div>
<div id="lt-body"></div>
</div>
</div>
</div>
<!-- EXAM (Mock) -->
<div id="page-exam" class="page">
<div class="container">
<h2 style="margin-bottom:12px">模拟考试</h2>
<div id="mock-list"></div>
<div id="mock-exam" style="display:none">
<div style="margin-bottom:8px"><button class="btn btn-sm" onclick="backMock()">⬅ 返回试卷列表</button></div>
<div class="exam-header">
<div><span id="exam-name" style="font-weight:600"></span></div>
<div class="timer" id="exam-timer"></div>
</div>
<div class="exam-progress">
<span id="exam-pos"></span>
<div class="progress-bar"><div class="progress-fill" id="pf"></div></div>
</div>
<div id="exam-body" style="margin-top:12px"></div>
<div class="qa">
<div class="qa-l">
<button class="btn btn-sm" onclick="examMark()">标记</button>
<button class="btn btn-sm" onclick="examGo('prev')">← 上一题</button>
<button class="btn btn-sm" onclick="examGo('next')">下一题 →</button>
</div>
<div class="qa-r">
<button class="btn btn-sm" onclick="toggleSheet()">答题卡</button>
<button class="btn btn-sm btn-danger" onclick="confirmSubmit()">交卷</button>
</div>
</div>
<div id="sheet-box" style="display:none;margin-top:12px">
<div class="card">
<div class="flex-between" style="margin-bottom:8px">
<span style="font-weight:600">答题卡</span>
<span id="sheet-cnt" class="text-muted" style="font-size:13px"></span>
</div>
<div class="sheet" id="sheet-grid"></div>
</div>
</div>
</div>
</div>
</div>
<!-- RESULT -->
<div id="page-result" class="page">
<div class="container"><div id="result-box" class="card"></div></div>
</div>
<!-- WRONG ANSWERS -->
<div id="page-wrong-answers" class="page">
<div class="container">
<div class="flex-between" style="margin-bottom:12px">
<h2>错题本</h2>
<div><button class="btn btn-sm" onclick="storage.export()">📤 导出</button> <button class="btn btn-sm btn-danger" onclick="clearWA()">🗑️ 清空</button></div>
</div>
<div id="wa-stats" style="margin-bottom:12px"></div>
<div class="fbar">
<select id="wa-dom" onchange="renderWA()"><option value="">全部域</option></select>
<select id="wa-st" onchange="renderWA()">
<option value="">全部状态</option>
<option value="need_review">需要复习</option>
<option value="almost">基本掌握</option>
<option value="mastered">已掌握</option>
</select>
<button class="btn btn-sm" onclick="startWR()">🔄 错题重练</button>
</div>
<div id="wa-list"></div>
</div>
</div>
<!-- PLANNER -->
<div id="page-planner" class="page">
<div class="container">
<div id="planner-empty" class="empty" style="display:none">
<div class="icon">📋</div><p>还没有学习计划</p>
<button class="btn btn-primary" onclick="router.go('/level-test')">完成水平测试</button>
</div>
<div id="planner-box" style="display:none">
<div class="flex-between" style="margin-bottom:12px">
<div><h2 id="plan-title"></h2><p class="text-muted" id="plan-sub" style="font-size:13px"></p></div>
<button class="btn btn-sm btn-danger" onclick="clearPlan()">清除</button>
</div>
<div id="plan-weeks"></div>
</div>
</div>
</div>
<!-- SETTINGS -->
<div id="page-settings" class="page">
<div class="container">
<h2 style="margin-bottom:20px">设置</h2>
<div class="card ss">
<h2>主题</h2>
<div class="sr">
<div><div class="lbl">显示主题</div><div class="desc">深色或浅色</div></div>
<div class="theme-tog">
<button class="theme-opt active" data-t="dark" onclick="setTheme('dark')">🌙 深色</button>
<button class="theme-opt" data-t="light" onclick="setTheme('light')">☀️ 浅色</button>
</div>
</div>
</div>
<div class="card ss">
<h2>🌐 语言</h2>
<div class="sr">
<div><div class="lbl">Cisco 考题语言</div><div class="desc">纯英文或双语(EN + CN)</div></div>
<div class="lang-tog">
<button class="lang-opt active" data-l="en" onclick="setLang('en')">🔤 纯英文</button>
<button class="lang-opt" data-l="bilingual" onclick="setLang('bilingual')">🌐 双语</button>
</div>
</div>
</div>
<div class="card ss">
<h2>📊 数据管理</h2>
<div class="sr">
<div><div class="lbl">存储</div><div class="desc">浏览器 localStorage</div></div>
<span style="font-size:13px;color:var(--text-muted)" id="sz">--</span>
</div>
<div style="display:flex;gap:8px;margin-top:10px;flex-wrap:wrap">
<button class="btn btn-sm" onclick="storage.export()">📤 导出全部数据</button>
<button class="btn btn-sm" onclick="importData()">📥 导入数据</button>
<button class="btn btn-sm btn-danger" onclick="clearAll()">🗑️ 清除所有</button>
</div>
<p style="font-size:12px;color:var(--text-muted);margin-top:8px">⚠️ 导出的 JSON 包含全部学习数据,请定期备份。</p>
</div>
<div class="card">
<h2 style="margin-bottom:8px">关于</h2>
<p style="font-size:14px;color:var(--text-secondary);line-height:1.7">
<strong>NetLearner</strong> — 考纲驱动 · AI 动态出题<br><br>
🔒 数据存在本地,不经过服务器<br>
📖 基于官方 Exam Topics 出题 · CCNA (200-301) · CCNP ENCOR (350-401) · HCIA-Datacom (H12-811) · HCIP-Datacom (H12-821)<br>
⚡ 纯前端,GitHub Pages 部署
</p>
<p style="font-size:12px;color:var(--text-muted);margin-top:8px">v4.0 · MIT License</p>
</div>
</div>
</div>
<!-- Modal -->
<div class="overlay" id="modal">
<div class="modal">
<h3 id="modal-t"></h3>
<p id="modal-msg"></p>
<div class="modal-actions">
<button class="btn btn-sm" onclick="closeModal()">取消</button>
<button class="btn btn-sm btn-danger" id="modal-confirm" onclick="closeModal()">确认</button>
</div>
</div>
</div>
<div class="toast" id="toast"></div>
<script src="assets/js/storage.js?v=5.0"></script>
<script src="assets/js/router.js?v=5.0"></script>
<script src="assets/js/exam-engine.js?v=5.0"></script>
<script src="assets/js/wrong-answer-service.js?v=5.0"></script>
<script src="assets/js/planner-generator.js?v=5.0"></script>
<script src="assets/js/app.js?v=5.0"></script>
</body>
</html>