• Data Governance Dev's avatar
    feat(standards): 细化违规原因 + 异常值字符位高亮 + tooltip 换行 + 合并 bug · 1bb3ca98
    Data Governance Dev authored
    合并两轮迭代的修改:
    
    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 救不回来
    1bb3ca98
step7_standards.py 83.9 KB