feat(standards): 细化违规原因 + 异常值字符位高亮 + tooltip 换行 + 合并 bug
合并两轮迭代的修改:
1) 违规原因细化(来自「细化所有目前显示的分析对象的错误信息」)
- 21 个 IND validator + step4/5/6 的 reason 加上:
· 标准来源编号(GB/T 2260 / GB 11643-1999 / 工信部 / GB 32100-2015 等)
· 常见错因 ①②③(末位错填 / 出生日期段 / 地址码舍 0 等)
· 建议核对原始证件 / 用脚本批量重算
- reason 字符串内含 \n 换行符(前后端一起生效)
2) 异常值字符位高亮(用户截图反馈「异常值要指出哪里错了」)
- standards/base.py:ValidationResult 新增 bad_positions 字段
- 11 个 validator populate bad_positions:
· IND-001/002/003/004/005/006 按字段类型填具体错位
· IND-016 银行卡 Luhn 错:暴力枚举找出「单字符修正」位
- web/core/step_impl/step7_standards.py:_build_value_highlighted
· 区间合并(重叠/相邻)+ HTML escape → <mark class='bad-pos'>...
- web/static/index.html:
· .bad-pos CSS(淡红 + 红字 + 下划线 + cursor:help)
· kind='code' 渲染分支 v-html='row.value_highlighted'
3) tooltip 多行修复(用户截图反馈「[a] [b] [c] 三个子检查挤在一行」)
- 上一轮 .el-popper { white-space: pre-line !important } 看着对实际不生效
· Element Plus 2.x show-overflow-tooltip 内部 normalize 文本,外层 CSS 救不回来
- 本轮改用自渲染路线:放弃 show-overflow-tooltip,用 <el-tooltip> + #content 槽
· escapeTooltipHtml():HTML escape + \n → <br>
· cell 内 text-overflow: ellipsis 保持单行布局
· 没 \n 的列无感升级
4) IND-003 / IND-004 合并步骤 TypeError 修复(用户截图反馈「有报错」)
- 报错:TypeError: 'NoneType' object is not iterable
- 根因:_merge_violations_by_tuple 里的死循环
for p in (r.get('value_highlighted') and [])
· 当 value_highlighted 为 None/空串时短路返回 None,
for p in None 抛错
· IND-003-b / IND-004-b 不填 bad_positions 时必触发
- 修复:直接删这段死代码(loop 里只有 pass,真正 fallback 在下面)
5) 其他
- docs/WORKLOG.md:四段工作记录(细化 / 高亮 / tooltip / 合并 bug)
- scripts/reformat_reasons.py:AST-based 批量加 \n 工具,留作下轮兜底
未提交产物(生成报告 + tmp 脚本,不入库):
- data_dictionary/standard_fields_violations_report.md
- scripts/_tmp_build_violations_md.py
踩坑见 WORKLOG:
- .el-tooltip__popper vs .el-popper(Element Plus 2.14.3 选择器)
- and [] 短路求值返回 None(应为 or [] 或干脆删除)
- show-overflow-tooltip 不可控,normalize 文本外层 CSS 救不回来
Showing
scripts/reformat_reasons.py
0 → 100644
Please register or sign in to comment