iter(g344): 错误汇总条随字段校验实时重算

This commit is contained in:
HIsheR
2026-10-27 02:27:39 +08:00
parent 7ac36ad320
commit b288652e20
7 changed files with 64 additions and 34 deletions
+16
View File
@@ -1726,6 +1726,21 @@ function checkInvalidRing(pkgs) {
return issues;
}
/*** 校验汇总条实时性:条子只在提交时算一次,用户改好字段后「有 3 项需要修改」会一直骗人 ***/
function checkFormSummary(pkgs) {
const issues = [];
for (const pkg of pkgs) {
if (pkg.type !== 'skin-dom') continue;
const formPath = path.join(ROOT, pkg.dir, 'src', 'form.ts');
if (!fs.existsSync(formPath)) continue;
const src = fs.readFileSync(formPath, 'utf8');
if (!/dispatchEvent\(new CustomEvent\('ua:field-validated'\)\)/.test(src)) issues.push(`${pkg.name}/src/form.ts 的字段落笔没有通知:表单算不出实时错误数`);
if (!/addEventListener\('ua:field-validated', refreshSummary\)/.test(src)) issues.push(`${pkg.name}/src/form.ts 没订阅字段校验事件:汇总条会停在提交那一刻的数字`);
if (!/if \(quiet \|\| summary\.hidden\) return;/.test(src)) issues.push(`${pkg.name}/src/form.ts 的重算缺自激防护:validate → paint → 事件 → 再 validate 会无限递归`);
}
return issues;
}
/*** 校验同义词表:目标 id 必须真实存在(改名后残留会让回退指到空气),同一个词不得归两组(歧义会让结果随表序漂移) ***/
function checkSynonyms(ids) {
const issues = [];
@@ -1811,6 +1826,7 @@ function cmdVerify() {
issues.push(...checkFormErrorLink(pkgs)); // 表单错误文案必须被控件关联
issues.push(...checkFormReset(pkgs)); // 重置按钮必须真复位
issues.push(...checkInvalidRing(pkgs)); // 错误环只该在聚焦时亮
issues.push(...checkFormSummary(pkgs)); // 汇总条必须实时重算
issues.push(...checkSynonyms(new Set(pkgs.flatMap((p) => (p.docs?.components ?? []).map((c) => c.id))))); // 同义词表指向的组件必须真实存在
checkDarkTokens(issues);
checkTokenParity(issues);