9be6bd03e3
Dashboard pemetaan statis kini dilayani aplikasi di /dashboard (app/static/dashboard.html). Fitur lengkap Tahap 1-4 + dasbor monitoring, menu global, filter semester, input nilai langsung, penggabungan nilai team teaching, tabel bisa urut. Dockerfile berubah dari nginx statis ke uvicorn/FastAPI: healthcheck, proxy-headers, volume /data (SQLite). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
43 lines
1.5 KiB
HTML
43 lines
1.5 KiB
HTML
{% extends "base.html" %}
|
|
{% block judul %}Riwayat Ketercapaian Lintas Semester — Informatika UNTAN{% endblock %}
|
|
{% block isi %}
|
|
<h1>Riwayat Ketercapaian CPL Lintas Semester</h1>
|
|
<p class="keterangan">Skor CPL tingkat prodi per tahun ajaran — bahan evaluasi tren untuk rapat kurikulum dan akreditasi. Sel kosong = belum ada nilai yang masuk pada periode itu.</p>
|
|
|
|
<div class="gulir">
|
|
<table class="grid">
|
|
<thead>
|
|
<tr>
|
|
<th style="width:90px">CPL</th>
|
|
{% for t in daftar_tahun %}
|
|
<th class="tengah">{{ t }}{% if t == tahun %}<br><span style="font-size:10px">(aktif)</span>{% endif %}</th>
|
|
{% endfor %}
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{% for cp in kode_cpl %}
|
|
<tr>
|
|
<td class="tengah"><b>{{ cp }}</b></td>
|
|
{% for t in daftar_tahun %}
|
|
{% set v = per_tahun[t].cpl.get(cp) %}
|
|
<td class="tengah">
|
|
{% if v and v.skor is not none %}
|
|
<b>{{ '%.1f'|format(v.skor) }}</b>
|
|
{% if v.skor < per_tahun[t].ambang %}<span style="color:var(--red)"> ▼</span>{% endif %}
|
|
<br><span style="font-size:11px;color:var(--grey)">{{ v.n_mk_setor }}/{{ v.n_mk_pemikul }} bukti</span>
|
|
{% else %}—{% endif %}
|
|
</td>
|
|
{% endfor %}
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<div class="kpi-baris" style="margin-top:14px">
|
|
{% for t in daftar_tahun %}
|
|
<div><b>{{ per_tahun[t].n_mk_setor }}</b> <span>MK setor nilai · {{ t }}</span></div>
|
|
{% endfor %}
|
|
</div>
|
|
{% endblock %}
|