-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathoptions.html
More file actions
342 lines (302 loc) · 15.2 KB
/
Copy pathoptions.html
File metadata and controls
342 lines (302 loc) · 15.2 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
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CVflash 设置</title>
<link rel="stylesheet" href="options.css">
</head>
<body>
<div class="layout">
<nav class="sidebar">
<div class="sidebar__logo">
<span class="sidebar__mark" aria-hidden="true"></span>
<div>
<div class="sidebar__title">CVflash</div>
<div class="sidebar__subtitle">Resume Autofill Studio</div>
</div>
</div>
<ul class="nav">
<li class="nav__item active" data-tab="resumes">简历工作区</li>
<li class="nav__item" data-tab="api">模型与接口</li>
<li class="nav__item" data-tab="history">填充历史</li>
<li class="nav__item" data-tab="about">关于</li>
</ul>
</nav>
<main class="main">
<section id="tab-resumes" class="tab-content active">
<div class="tab-header">
<h2 class="tab-title">我的简历</h2>
<div class="tab-header__actions">
<button class="btn btn--ghost" id="btn-upload-pdf">上传 PDF</button>
<button class="btn btn--ghost" id="btn-import">导入 JSON</button>
<button class="btn btn--primary" id="btn-new-resume">新建简历</button>
</div>
</div>
<div id="category-filter" class="category-filter">
<button class="cat-btn active" data-cat="">全部</button>
</div>
<div id="resume-list" class="resume-list"></div>
<div id="pdf-progress" class="pdf-progress hidden">
<div class="pdf-progress__header">
<span id="pdf-progress-text" class="pdf-progress__text">正在解析 PDF...</span>
<span id="pdf-progress-timer" class="pdf-progress__timer"></span>
</div>
<div class="pdf-progress__bar"><div id="pdf-progress-fill" class="pdf-progress__fill"></div></div>
<div id="pdf-batch-status" class="pdf-batch-status hidden"></div>
</div>
<div id="resume-editor" class="resume-editor hidden">
<div class="editor-header">
<div class="editor-header__fields">
<input type="text" id="resume-name" class="input editor-name" placeholder="简历名称(如:前端工程师-2025)">
<input type="text" id="resume-category" class="input editor-category" placeholder="分类标签(如:前端、产品、校招)">
</div>
<div class="editor-header__actions">
<button class="btn btn--ghost" id="btn-export-resume">导出</button>
<button class="btn btn--secondary" id="btn-cancel-edit">取消</button>
<button class="btn btn--primary" id="btn-save-resume">保存</button>
</div>
</div>
<div class="card">
<div class="card__title">基本信息</div>
<div class="form-grid">
<div class="form-group">
<label class="label">姓名 *</label>
<input type="text" id="f-name" class="input" placeholder="张三">
</div>
<div class="form-group">
<label class="label">邮箱 *</label>
<input type="email" id="f-email" class="input" placeholder="zhangsan@example.com">
</div>
<div class="form-group">
<label class="label">手机号 *</label>
<input type="tel" id="f-phone" class="input" placeholder="13800000000">
</div>
<div class="form-group">
<label class="label">所在城市</label>
<input type="text" id="f-location" class="input" placeholder="北京市">
</div>
<div class="form-group">
<label class="label">LinkedIn</label>
<input type="url" id="f-linkedin" class="input" placeholder="linkedin.com/in/zhangsan">
</div>
<div class="form-group">
<label class="label">GitHub</label>
<input type="text" id="f-github" class="input" placeholder="github.com/zhangsan">
</div>
<div class="form-group form-group--full">
<label class="label">个人网站</label>
<input type="url" id="f-website" class="input" placeholder="https://zhangsan.dev">
</div>
</div>
</div>
<div class="card">
<div class="card__title">个人陈述 / 自我评价</div>
<textarea id="f-summary" class="input textarea" rows="4" placeholder="简要介绍你的职业背景、核心优势和求职意向..."></textarea>
</div>
<div class="card">
<div class="card__title">
教育背景
<button class="btn btn--ghost btn--sm" id="btn-add-edu">添加</button>
</div>
<div id="education-list" class="entries-list"></div>
</div>
<div class="card">
<div class="card__title">
工作 / 实习经历
<button class="btn btn--ghost btn--sm" id="btn-add-exp">添加</button>
</div>
<div id="experience-list" class="entries-list"></div>
</div>
<div class="card">
<div class="card__title">
项目经历
<button class="btn btn--ghost btn--sm" id="btn-add-proj">添加</button>
</div>
<div id="project-list" class="entries-list"></div>
</div>
<div class="card">
<div class="card__title">
科研经历
<button class="btn btn--ghost btn--sm" id="btn-add-research">添加</button>
</div>
<div id="research-list" class="entries-list"></div>
</div>
<div class="card">
<div class="card__title">
校园 / 社团经历
<button class="btn btn--ghost btn--sm" id="btn-add-activity">添加</button>
</div>
<div id="activity-list" class="entries-list"></div>
</div>
<div class="card">
<div class="card__title">技能</div>
<div class="form-group">
<input type="text" id="f-skills" class="input" placeholder="Python, SQL, Excel, Prompt Engineering(逗号分隔)">
</div>
</div>
<div class="card">
<div class="card__title">语言能力</div>
<div class="form-group">
<input type="text" id="f-languages" class="input" placeholder="中文(母语), 英语(流利)(逗号分隔)">
</div>
</div>
<div class="card">
<div class="card__title">证书</div>
<div class="form-group">
<input type="text" id="f-certifications" class="input" placeholder="CET-6, PMP, AWS Certified(逗号分隔)">
</div>
</div>
<div class="card">
<div class="card__title">荣誉奖项</div>
<div class="form-group">
<input type="text" id="f-awards" class="input" placeholder="国家奖学金, 优秀毕业生(逗号分隔)">
</div>
</div>
<div class="card">
<div class="card__title">兴趣爱好</div>
<div class="form-group">
<input type="text" id="f-hobbies" class="input" placeholder="阅读, 马拉松, 开源贡献(逗号分隔)">
</div>
</div>
</div>
</section>
<section id="tab-api" class="tab-content">
<div class="tab-header">
<h2 class="tab-title">模型与接口</h2>
</div>
<div class="card">
<div class="api-hero">
<div class="api-hero__eyebrow">Provider Stack</div>
<div class="api-hero__title">把模型选择变成一层清晰的控制台,而不是堆一排下拉框。</div>
<p class="api-hero__text">支持 OpenAI / ChatGPT、Gemini、Claude、OpenRouter,以及 Ollama、LM Studio、本地桥接服务与自定义接口。</p>
</div>
<div class="card__title">供应商预设</div>
<div id="provider-grid" class="provider-grid"></div>
<div id="provider-summary" class="provider-summary">
<div class="provider-summary__title">当前未选择供应商</div>
<div class="provider-summary__text">选择一个供应商后,接口地址和推荐模型会自动切换。</div>
</div>
</div>
<div class="card">
<div class="card__title">连接配置</div>
<div class="form-group">
<label class="label">API Key</label>
<div class="input-with-btn">
<input type="password" id="api-key-input" class="input" placeholder="填入你的 API Key">
<button class="btn btn--ghost btn--sm" id="btn-toggle-key">显示</button>
</div>
<div class="form-hint" id="api-key-hint">云端供应商通常需要 API Key;本地 Ollama / LM Studio 一般可留空。</div>
</div>
<div class="form-group">
<label class="label">接口地址</label>
<input type="text" id="api-base-select" class="input" placeholder="接口地址">
<div class="form-hint" id="api-base-hint">预设会自动填写,也可以改成本地或自建代理地址。</div>
</div>
<div class="form-group">
<label class="label">文本模型</label>
<input type="text" id="text-model-select" class="input" list="text-model-list" placeholder="输入或选择文本模型 ID">
<datalist id="text-model-list"></datalist>
<div class="form-hint" id="text-model-hint">列表是推荐值,你也可以直接填任意模型 ID。</div>
</div>
<div class="form-group">
<label class="label">视觉模型(截图识别用)</label>
<input type="text" id="vision-model-select" class="input" list="vision-model-list" placeholder="输入或选择视觉模型 ID">
<datalist id="vision-model-list"></datalist>
<div class="form-hint" id="vision-model-hint">当前供应商不建议单独使用视觉模型时,这里会自动提示。</div>
</div>
<div class="form-row">
<button class="btn btn--secondary" id="btn-test-api">测试连接</button>
<button class="btn btn--primary" id="btn-save-api">保存设置</button>
</div>
<div id="api-test-result" class="test-result hidden"></div>
</div>
<div class="card">
<div class="card__title">行为设置</div>
<label class="toggle-row">
<span>自动检测表单(打开页面时)</span>
<input type="checkbox" id="setting-auto-detect" class="toggle">
</label>
<label class="toggle-row">
<span>填充完成后显示通知</span>
<input type="checkbox" id="setting-show-notification" class="toggle" checked>
</label>
</div>
<div class="card">
<div class="card__title">Bridge 模式</div>
<label class="toggle-row">
<span>优先使用 Bridge API 决策</span>
<input type="checkbox" id="setting-bridge-enabled" class="toggle">
</label>
<div class="form-group">
<label class="label">Bridge URL</label>
<input type="text" id="bridge-url-input" class="input" placeholder="http://127.0.0.1:8787/decide">
<div class="form-hint">插件会把页面字段快照、简历数据、可选截图发到这个接口,并等待返回 commands 或 fieldMap。</div>
</div>
<div class="form-group">
<label class="label">Bridge Token(可选)</label>
<input type="password" id="bridge-token-input" class="input" placeholder="Bearer Token">
<div class="form-hint">如果你的本地/远程桥接服务需要鉴权,可在这里填写。</div>
</div>
<div class="form-group">
<label class="label">Bridge 超时(秒)</label>
<input type="number" id="bridge-timeout-input" class="input" min="5" max="180" step="1" placeholder="45">
<div class="form-hint">建议 30-60 秒。超时后会自动回退到内置模型链路。</div>
</div>
<div class="form-row">
<button class="btn btn--secondary" id="btn-test-bridge">测试 Bridge</button>
</div>
<div id="bridge-test-result" class="test-result hidden"></div>
</div>
<div class="card">
<div class="card__title">本地接入提示</div>
<div class="integration-notes">
<div class="integration-note">
<div class="integration-note__title">本地 Codex / OpenAI 兼容代理</div>
<div class="integration-note__text">选择“自定义 OpenAI 兼容”,填入 `http://127.0.0.1:PORT/v1`,模型名可直接写成你的代理模型 ID。</div>
</div>
<div class="integration-note">
<div class="integration-note__title">本地 Claude Code / Anthropic 兼容代理</div>
<div class="integration-note__text">选择“自定义 Anthropic 兼容”,填入桥接服务根地址,再填写 `claude-sonnet-4-0` 或你实际暴露的模型名。</div>
</div>
<div class="integration-note">
<div class="integration-note__title">本地通用模型</div>
<div class="integration-note__text">Ollama 与 LM Studio 的预设只是建议值;如果本机模型名字不同,直接覆盖输入框即可。</div>
</div>
</div>
</div>
</section>
<section id="tab-history" class="tab-content">
<div class="tab-header">
<h2 class="tab-title">填充历史</h2>
<button class="btn btn--ghost" id="btn-clear-history">清空历史</button>
</div>
<div id="history-list" class="history-list"></div>
</section>
<section id="tab-about" class="tab-content">
<div class="tab-header">
<h2 class="tab-title">关于 CVflash</h2>
</div>
<div class="card about-card">
<div class="about-logo">CV</div>
<h3>CVflash 雷电霸王简历 v1.0</h3>
<p>AI 驱动的校招表单自动填充插件,让投简历快如闪电。</p>
<div class="about-features">
<div class="feature">自动识别招聘网站表单结构</div>
<div class="feature">AI 语义匹配与自动填充</div>
<div class="feature">支持多供应商与本地模型入口</div>
<div class="feature">多套简历模板管理</div>
<div class="feature">数据本地存储,不上传简历内容</div>
</div>
<p class="about-tip">支持 Boss直聘、拉勾、智联、LinkedIn、Workday 等主流招聘平台</p>
</div>
</section>
</main>
</div>
<input type="file" id="file-import" accept=".json" style="display:none">
<input type="file" id="file-pdf" accept=".pdf" multiple style="display:none">
<script src="lib/model-config.js"></script>
<script src="lib/pdf.min.js"></script>
<script src="options.js"></script>
</body>
</html>