Files
lofyerandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 71db82393a Initial commit
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-07-13 15:38:41 +08:00

177 lines
7.5 KiB
HTML

{# 第一部分:总体表现 #}
<div class="section" id="part2">
<h1>{{ t.part('part1') }}</h1>
<h2>{{ t.p1_h1_overall_status }}</h2>
<!-- 得分卡片 -->
<div class="score-cards">
<div class="score-card">
<div class="label">{{ t.total_score }}</div>
<div class="value">{{ "%.1f"|format(overall.score) }}</div>
<div class="diff {{ 'positive' if overall.score > overall.district_avg else 'negative' }}">
{{ "%+.1f"|format(overall.score - overall.district_avg) }} {{ t.vs_district_avg }} ({{ "%.1f"|format(overall.district_avg) }})
</div>
</div>
<div class="score-card">
<div class="label">{{ t.rank_in_district }}</div>
<div class="value">{{ overall.rank_in_district }}/{{ overall.total_schools }}</div>
</div>
{% if overall.rank_in_city is defined and overall.total_schools_in_city %}
<div class="score-card">
<div class="label">{{ t.rank_in_city }}</div>
<div class="value">{{ overall.rank_in_city }}/{{ overall.total_schools_in_city }}</div>
{% set city_pct = (overall.rank_in_city / overall.total_schools_in_city * 100) | round(1) %}
<div class="diff {{ 'positive' if city_pct <= 50 else 'negative' }}">
{{ t.rank_in_top_pct.format(pct=city_pct) }}
</div>
</div>
{% endif %}
<div class="score-card">
<div class="label">{{ t.same_type_avg }}</div>
<div class="value" style="font-size:24px">{{ "%.1f"|format(overall.same_type_avg) }}</div>
<div class="diff {{ 'positive' if overall.score > overall.same_type_avg else 'negative' }}">
{{ "%+.1f"|format(overall.score - overall.same_type_avg) }} {{ t.vs_same_type }}
</div>
</div>
<div class="score-card">
<div class="label">{{ t.cluster_type }}</div>
<div class="value" style="font-size:16px">
{% set cluster_raw = (overall.cluster or '') %}
{% set is_good = ('较好' in cluster_raw) or ('High' in cluster_raw) or ('high' in cluster_raw) %}
<span class="type-badge {{ 'good' if is_good else 'weak' }}">
{{ t.cluster_label(cluster_raw) }}
</span>
</div>
</div>
</div>
<!-- A. 学校画像卡 + 优势-短板象限图 -->
<div class="chart-row">
<div class="chart-box">
<div id="profile-card-chart" class="chart" style="height:420px"></div>
<div class="chart-title">{{ t.fig2_0a }}</div>
</div>
<div class="chart-box">
<div id="quadrant-chart" class="chart" style="height:420px"></div>
<div class="chart-title">{{ t.fig2_0b }}</div>
</div>
</div>
<div class="chart-caption">
{{ llm_sections.get('part2_caption_profile', '') | safe }}
</div>
<!-- 得分对比横向条形图 + 七维度雷达图 -->
<div class="chart-row">
<div class="chart-box">
<div id="score-compare-chart" class="chart"></div>
<div class="chart-title">{{ t.fig2_1 }}</div>
</div>
<div class="chart-box">
<div id="radar-chart" class="chart"></div>
<div class="chart-title">{{ t.fig2_2 }}</div>
</div>
</div>
<div class="chart-caption">
{{ llm_sections.get('part2_caption_scores', '') | safe }}
</div>
<!-- 聚类类型分布 + 两类学校折线对比 -->
<div class="chart-row">
<div class="chart-box">
<div id="cluster-type-dist-chart" class="chart"></div>
<div class="chart-title">{{ t.fig2_3 }}</div>
</div>
<div class="chart-box">
<div id="cluster-line-chart" class="chart"></div>
<div class="chart-title">{{ t.fig2_4 }}</div>
</div>
</div>
<div class="chart-caption">
{{ llm_sections.get('part2_caption_cluster', '') | safe }}
</div>
<!-- 聚类类型对比雷达图 + 区内学校排名条形图 -->
<div class="chart-row">
<div class="chart-box">
<div id="cluster-radar-chart" class="chart"></div>
<div class="chart-title">{{ t.fig2_5 }}</div>
</div>
<div class="chart-box">
<div id="school-ranking-chart" class="chart"></div>
<div class="chart-title">{{ t.fig2_6 }}</div>
</div>
</div>
<div class="chart-caption">
{{ llm_sections.get('part2_caption_ranking', '') | safe }}
</div>
<!-- 维度间相关性热力图 -->
<div class="chart-box">
<div id="correlation-chart" class="chart" style="height:450px"></div>
<div class="chart-title">{{ t.fig2_7 }}</div>
</div>
<div class="chart-caption">
{{ llm_sections.get('part2_caption_correlation', '') | safe }}
</div>
<!-- LLM综合分析 -->
<div class="llm-analysis">
{{ llm_sections.get('part2_overview', '<p>' + t.loading + '</p>') | safe }}
</div>
{# ===== 紧急预警框(仅在存在预警子维度时显示) ===== #}
{% if llm_sections.get('part2_alert') %}
<div class="alert-box" style="background: linear-gradient(135deg, #fef2f2, #fee2e2); border: 2px solid #ef4444; border-radius: 12px; padding: 20px 24px; margin: 24px 0;">
<h3 style="color: #dc2626; margin: 0 0 12px 0; font-size: 18px;">{{ t.alert_title }}</h3>
<div class="llm-analysis" style="color: #7f1d1d;">
{{ llm_sections.get('part2_alert') | safe }}
</div>
</div>
{% endif %}
{# ===== 学校定位与实际表现差距分析(所有学校均显示) ===== #}
{% if llm_sections.get('part2_positioning_gap') %}
<div class="positioning-gap-box" style="background: linear-gradient(135deg, #fffbeb, #fef3c7); border: 2px solid #f59e0b; border-radius: 12px; padding: 20px 24px; margin: 24px 0;">
<h3 style="color: #b45309; margin: 0 0 12px 0; font-size: 18px;">{{ t.positioning_gap_title }}</h3>
<div class="llm-analysis" style="color: #78350f;">
{{ llm_sections.get('part2_positioning_gap') | safe }}
</div>
</div>
{% endif %}
<h2>{{ t.p1_h1_dim_status }}</h2>
<!-- 维度得分对比表 -->
<table class="data-table">
<thead>
<tr>
<th>{{ t.dimension }}</th>
<th>{{ school_display }}</th>
<th>{{ t.district_avg }}</th>
<th>{{ t.same_type_avg }}</th>
<th>{{ t.diff_vs_district }}</th>
<th>{{ t.rank_in_district }}</th>
{% if overall.total_schools_in_city %}<th>{{ t.rank_in_city }}</th>{% endif %}
</tr>
</thead>
<tbody>
{% for dim_name, dim_data in dimensions.items() %}
<tr>
<td><strong>{{ t.dim(dim_name) }}</strong></td>
<td>{{ "%.2f"|format(dim_data.score) }}</td>
<td>{{ "%.2f"|format(dim_data.district_avg) }}</td>
<td>{{ "%.2f"|format(dim_data.same_type_avg) }}</td>
<td style="color: {{ 'green' if dim_data.diff_district > 0 else 'red' }}">
{{ "%+.2f"|format(dim_data.diff_district) }}
</td>
<td>{{ dim_data.rank_in_district }}/{{ overall.total_schools }}</td>
{% if overall.total_schools_in_city %}
<td>{{ dim_data.rank_in_city if dim_data.rank_in_city is defined else '-' }}/{{ overall.total_schools_in_city }}</td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
</div>