Tambah ringkasan nilai per komponen, rincian tugas ala RTM, auto-save RPS

- Halaman Nilai: tabel "Nilai per Komponen" (rata-rata skor mentah tiap
  sesi, bisa diedit langsung) berdampingan dengan grid Sub-CPMK yang tetap
  presisi; kolom persentase ternilai di Hasil Ketercapaian.
- Komponen Tugas: sesi bisa menyasar subset Sub-CPMK (RPS tetap batasannya),
  lengkap dengan field ala RTM (bentuk tugas, deskripsi, metode, luaran,
  indikator/bobot, jadwal) dan tombol isi-otomatis per bentuk tugas.
- RPS: auto-save berkala sebagai draft, tombol ke atas, validasi total
  bobot komponen 100% saat ditandai selesai, komponen berbobot kosong
  disembunyikan dari halaman Nilai.
- Admin: tampilkan kelas yang tersedia dari data mahasiswa saat mengatur
  penugasan dosen per kelas.
- Perbaikan step="any" pada input nilai (mencegah validasi HTML5 menolak
  nilai desimal hasil roll-up).
- Tambah METODOLOGI_ASESMEN_KOMPONEN.md: dokumentasi metodologi Sub-CPMK
  vs komponen, termasuk skenario tugas menyasar sebagian Sub-CPMK.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Power BI Dev
2026-07-23 23:28:46 +07:00
parent bdaacf1c8f
commit d5edbe2134
7 changed files with 668 additions and 67 deletions
+5
View File
@@ -48,6 +48,11 @@
{% if mk.kode in p.mk %}checked{% endif %}> {{ mk.kode }} — {{ mk.nama }}</label>
<input type="text" name="kelas_{{ mk.kode }}" placeholder="kelas (kosong = semua)"
value="{{ p.kelas_map.get(mk.kode, '') }}" style="width:150px;margin:0 0 4px 22px;font-size:12px">
{% if mhs.get(mk.kode) and mhs[mk.kode].kelas %}
<span style="color:var(--grey);font-size:11px">kelas tersedia (dari data mahasiswa): {{ mhs[mk.kode].kelas|join(', ') }}</span>
{% else %}
<span style="color:var(--grey);font-size:11px;font-style:italic">belum ada data mahasiswa/kelas untuk MK ini — impor dulu di bagian C</span>
{% endif %}
</div>
{% endfor %}
<p class="cari-kosong" style="display:none;color:var(--grey);font-size:13px;margin:4px 0">Tidak ada MK yang cocok.</p>