fix: improve govdoc reports and versioned document list

This commit is contained in:
wren
2026-05-18 16:08:40 +08:00
parent 5dc15f172b
commit ff6665e936
4 changed files with 856 additions and 123 deletions
@@ -390,9 +390,31 @@ tbody tr:hover {
"""
def _summary_score(summary: object) -> int:
for attr in ("score", "totalScore", "total_score"):
value = getattr(summary, attr, None)
if value is None and isinstance(summary, dict):
value = summary.get(attr)
if value is None:
continue
try:
return int(float(value))
except (TypeError, ValueError):
continue
return 0
def _severity_label(severity: str) -> str:
return {
"error": "错误",
"warning": "警告",
"info": "提示",
}.get(severity, severity)
def render_html(result: AuditResult) -> str:
summary = result.summary
score = int(summary.score or 0)
score = _summary_score(summary)
score_pct = max(0, min(score, 100))
severity_counts = _severity_counts(result)
category_count = len([key for key, value in (summary.by_category or {}).items() if key and value])
@@ -407,6 +429,8 @@ def render_html(result: AuditResult) -> str:
context = escape((finding.location.context or "").strip())
message = escape(finding.message)
suggestion = escape(finding.suggestion) if finding.suggestion else "按规则要求修正对应内容。"
severity = escape(finding.severity)
severity_label = escape(_severity_label(finding.severity))
rows.append(
f"""
@@ -416,7 +440,7 @@ def render_html(result: AuditResult) -> str:
<div class="rule-id">{escape(finding.rule_id)}</div>
<div class="rule-name">{escape(finding.rule_name)}</div>
</td>
<td><span class="severity-tag {escape(finding.severity)}">{escape(finding.severity)}</span></td>
<td><span class="severity-tag {severity}">{severity_label}</span></td>
<td class="category-cell">{escape(finding.category)}</td>
<td class="mono location-cell">{location_label}</td>
<td class="message-cell">
@@ -441,33 +465,32 @@ def render_html(result: AuditResult) -> str:
<section class="card">
<div class="card-head">
<div class="card-title">报告摘要</div>
<div class="card-subtitle">不改报告语义,仅收敛样式、配色与信息层级</div>
</div>
<div class="summary-grid">
<div class="score-box">
<div class="score-label">综合得分</div>
<div class="score-value">{score}</div>
<div class="score-track"><div class="score-fill" style="width:{score_pct}%"></div></div>
<div class="score-note">这份正式 HTML 报告沿用平台工作台的版式语言,突出摘要、明细和建议三层信息。</div>
<div class="score-note">综合反映本次公文审核结果,可结合下方问题明细逐项核对修正。</div>
</div>
<div class="summary-main">
<div class="eyebrow">正式报告样式方向</div>
<div class="eyebrow">审核结果</div>
<h1 class="report-title">公文格式审核报告</h1>
<div class="report-meta">{filename} · 共 {summary.total_findings} 项问题 · 用作正式 HTML 报告输出</div>
<div class="report-meta">{filename} · 共 {summary.total_findings} 项问题</div>
<div class="metrics">
<div class="metric">
<div class="metric-label">错误项</div>
<div class="metric-value"><strong>{severity_counts["error"]}</strong><span>error</span></div>
<div class="metric-value"><strong>{severity_counts["error"]}</strong><span>错误</span></div>
</div>
<div class="metric">
<div class="metric-label">警告项</div>
<div class="metric-value"><strong>{severity_counts["warning"]}</strong><span>warning</span></div>
<div class="metric-value"><strong>{severity_counts["warning"]}</strong><span>警告</span></div>
</div>
<div class="metric">
<div class="metric-label">提示项</div>
<div class="metric-value"><strong>{severity_counts["info"]}</strong><span>info</span></div>
<div class="metric-value"><strong>{severity_counts["info"]}</strong><span>提示</span></div>
</div>
<div class="metric">
<div class="metric-label">问题类别</div>
@@ -488,23 +511,23 @@ def render_html(result: AuditResult) -> str:
<aside class="card">
<div class="card-head">
<div class="card-title">侧边摘要</div>
<div class="card-subtitle">工作台侧栏语义</div>
<div class="card-subtitle">关键信息</div>
</div>
<div class="sidebar-body">
<article class="summary-row">
<div class="summary-row-label">命中最多规则</div>
<div class="summary-row-value">{escape(top_rule_id)}</div>
<div class="summary-row-desc">当前命中最多的规则共 {top_rule_count},适合在正式版中作为摘要提示保留。</div>
<div class="summary-row-desc">当前命中最多的规则共 {top_rule_count} 项。</div>
</article>
<article class="summary-row">
<div class="summary-row-label">集中行号</div>
<div class="summary-row-value">{escape(line_range)}</div>
<div class="summary-row-desc">问题主要集中在这一段行号范围,便于阅读者快速判断问题分布区域。</div>
<div class="summary-row-desc">问题主要集中在以上行号范围。</div>
</article>
<article class="summary-row">
<div class="summary-row-label">实体状态</div>
<div class="summary-row-value">{escape(entity_summary)}</div>
<div class="summary-row-desc">按现有识别结果汇总实体抽取状态,用于辅助理解顶部结构类问题。</div>
<div class="summary-row-desc">按当前识别结果汇总核心实体状态。</div>
</article>
</div>
</aside>
@@ -513,7 +536,6 @@ def render_html(result: AuditResult) -> str:
<div class="table-toolbar">
<div class="toolbar-left">
<div class="toolbar-title">问题明细</div>
<div class="toolbar-desc">保留当前报告语义,只收敛版式、层级和配色。</div>
</div>
<div class="toolbar-filters">
<span class="filter active">全部</span>
File diff suppressed because it is too large Load Diff
Submodule legal-platform-frontend updated: d541eb74ae...c41ddc844c
+1
View File
@@ -20,6 +20,7 @@ dependencies = [
"tomli>=2.2.0",
"python-multipart>=0.0.18",
"pyjwt>=2.10.0",
"openai>=1.30.0",
"pillow>=11.0.0",
"pyyaml>=6.0",
"minio>=7.2.8",