Skip to content

Commit 42ddeeb

Browse files
committed
feat(engine): 通用控件引擎升级——日历内容指纹/时序重排/跨行组合/项目地址并入描述/进度显示/年月单位匹配;华为AUI与满帮实测驱动
1 parent 933bbb3 commit 42ddeeb

9 files changed

Lines changed: 541 additions & 25 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,28 @@
33
本项目遵循 [Conventional Commits](https://www.conventionalcommits.org/),版本策略为 SemVer。
44
由 `git-cliff` 从提交历史生成(配置见 `cliff.toml`;本文件在无 git-cliff 环境下按同格式手动维护)。
55

6+
## [v0.2.23] - 2026-08-31
7+
8+
**通用控件引擎升级版**:按行为/内容特征识别控件,不为单个站点写适配。
9+
10+
### Features
11+
12+
- (**extension**) 日历面板内容指纹识别:浮层文本含「YYYY年M月」+ 星期表头(连续5个以上曜日字符)即认定日历——不再依赖组件库类名名单(华为 AUI 的 aui-popover 等自研组件直接支持)
13+
- (**extension**) 日历箭头单位化:年/月箭头分开点击(`prev-year`/`prev-month` 裸类名与 ant 的 `*-btn` 都认);日格前缀匹配支持农历混排文本(如「13十四」)
14+
- (**extension**) 下拉弹层时序重排:先耐心等面板(动画过渡期不误判),再补点包装层——修复把已开面板点成关闭的问题;弹层最小宽度门槛 60→36(性别等两字选项面板不再误杀)
15+
- (**extension**) 组合控件跨行识别:区号下拉(+86)+无标签号码输入框跨行布局(华为式)自动识别,号码写入文本框、区号保持默认
16+
- (**extension**) 无标签行标签继承 + 跨行 label 误配修复:通用行链回退(自研库行类名不在适配器名单时不再抓错别人的 label)
17+
- (**extension**) **项目地址并入项目描述**:站点项目条目没有链接字段时,档案里的项目地址自动追加进描述文本(多行控件换行/单行空格分隔),信息不丢
18+
- (**extension**) 年/月/日单位剥离匹配:级联下拉「2001年」能对上日期值「2001-03-18」;多行合并值的回读校验按空白折叠口径比对
19+
- (**extension**) 下拉类控件不吃手机号/邮箱/身份证/URL 强形状值(值形否决)
20+
- (**extension**) 填写进度显示:弹窗按钮实时显示当前阶段(规则直填/AI 映射 N 个字段/AI 选选项第 N 轮),AI 阶段不再像卡死
21+
- (**extension**) 别名:国籍 → 证件签发国家/地区/签发国家/地区/证件签发地
22+
- (**core/server/frontend**) 同步 v0.2.21-0.2.22 的档案完整度/暗色模式随版发布说明合并
23+
24+
### Bug Fixes
25+
26+
- (**extension**) 修复跨行区号守卫误杀普通下拉(zhiye 学历下拉→下一行文本框场景)
27+
628
## [v0.2.22] - 2026-08-31
729

830
**暗色模式版**:桌面三态外观 + 弹窗档案完整度。

‎core/autooffer_core/__init__.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
- testing/ 供各 Workstream 自测的 mock/fake 实现
1515
"""
1616

17-
__version__ = "0.2.22"
17+
__version__ = "0.2.23"
1818

1919
from autooffer_core.errors import (
2020
ActionError,

‎extension/manifest.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"manifest_version": 3,
33
"name": "AutoOffer 简历助手",
4-
"version": "0.2.22",
4+
"version": "0.2.23",
55
"description": "本地简历档案一键填写招聘表单:规则直填优先,数据不出本机。",
66
"permissions": [
77
"activeTab",

‎extension/src/background.js‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,11 +233,16 @@ async function handleAutofill(msg) {
233233
throw new Error("缺少目标标签页");
234234
}
235235
const sensitive = msg.sensitive ? 1 : 0;
236+
const setProgress = (text) =>
237+
chrome.storage.local
238+
.set({ aoProgress: { text, ts: Date.now() } })
239+
.catch(() => {});
236240
await aoLog("info", "fill.start", {
237241
url: msg.url || "",
238242
profile: msg.profileId,
239243
sensitive,
240244
});
245+
await setProgress("拉取档案…");
241246
const flat = await fetchJson(
242247
`${base}/api/v1/profiles/${encodeURIComponent(msg.profileId)}/flat?sensitive=${sensitive}`
243248
);
@@ -247,6 +252,7 @@ async function handleAutofill(msg) {
247252
});
248253

249254
// 第一段:本地规则直填(零 LLM)
255+
await setProgress("规则直填…");
250256
let report = await runFillPass(tabId, flat, {});
251257
await aoLog("info", "fill.pass1", {
252258
filled: report.counts ? report.counts.filled : 0,
@@ -260,6 +266,7 @@ async function handleAutofill(msg) {
260266
const unmatched = report.unmatched || [];
261267
const mapping = {};
262268
if (unmatched.length > 0 && msg.aiMapping !== false) {
269+
await setProgress(`AI 映射 ${unmatched.length} 个字段…`);
263270
const mappingResp = await fetchJson(
264271
`${base}/api/v1/mapping`,
265272
{
@@ -314,6 +321,7 @@ async function handleAutofill(msg) {
314321
if (picks.length === 0) {
315322
break;
316323
}
324+
await setProgress(`AI 选选项(第 ${round + 1} 轮,${picks.length} 项)…`);
317325
let overrides = {};
318326
try {
319327
const choiceResp = await fetchJson(
@@ -350,6 +358,7 @@ async function handleAutofill(msg) {
350358
}
351359

352360
const { aoHistory = [] } = await chrome.storage.local.get("aoHistory");
361+
await setProgress("");
353362
aoHistory.unshift({
354363
ts: Date.now(),
355364
url: msg.url || "",

0 commit comments

Comments
 (0)