feat(web3): rule 表加「规则名称」列 → 前端展示「违反哪条规则」
数据明细(不合规行)当前只展示「哪个字段不合规」,没有「哪条规则被违反」。
desc 是给 LLM 看的自然语言(含「必须 18 位」指令式描述),
不适合直接给用户看。加独立字段 name 给前端展示,desc 继续喂 LLM。
【schema 变更】
- rule.name TEXT NOT NULL DEFAULT ''(老规则保持空串,迁移不破坏存量)
- _migrate_rule_name():ALTER TABLE ADD COLUMN name(幂等,123 条老规则验证保留)
【API 校验】
- RulePayload.name: str = PydField(..., min_length=1) —— 必填
- RuleOut.name: str = "" —— 老规则空串兜底
【检测引擎链路】
- CompiledFieldRules.rules 5 元 → 6 元(追加 name)
- _load_task_compiled snapshot / rule_list 都带 name
- _evaluate_row 返回 issues: {field, name, desc}
→ bad_rows 透传到前端「数据明细」备注列
【前端 UI】
- RuleModal:在「规则说明」上方加「规则名称」输入框(红星必填)
- hasValidRules 加 name.trim() 校验
- onSave 序列化带 name
- namePlaceholder 按 rule_type 给不同示例
- scoped .required 红星样式(不污染全局)
- ResultTable:ruleHint / errTip / 备注列 issues 优先展示 name
- FieldConfigDrawer:ruleHint 同步升级「name(desc)」格式
【兼容策略】
- 老规则 name=空串,UI 三处自动回退 desc 显示
- 编辑老规则保存时强制补 name(避免历史脏数据持续累积)
【测试】
- test_rule_types_e2e 6 处 rule payload 补 name(Pydantic 必填后端会拒 422)
- pytest tests/ → 123 passed
- vite build → ✓ built in 9.64s
- 冒烟:init_db() 对线上 DB 跑迁移,老规则全保留默认 ''
Showing
Please register or sign in to comment