Tambah filter kelas di halaman Input Nilai
- /nilai/<kode>: dropdown "Tampilkan kelas" menyaring tabel Nilai per Komponen & Nilai per Mahasiswa sekaligus (tanpa reload); baris ringkasan (rata-rata/% lulus MK) ikut disembunyikan saat filter aktif karena angkanya dihitung dari seluruh MK, bukan per kelas - /nilai/<kode>/komponen/<i>: filter serupa + kolom Kelas ditambahkan di tabel Nilai Mahasiswa (halaman paling sering dipakai dosen isi nilai per sesi/tugas) - Muncul otomatis hanya bila MK punya >1 kelas Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -96,6 +96,20 @@
|
||||
</label>
|
||||
{% endif %}
|
||||
<h2 class="bagian">NILAI MAHASISWA</h2>
|
||||
{% set ada_kelas = grid|selectattr('kelas')|list|length > 0 %}
|
||||
{% if ada_kelas %}
|
||||
{% set semua_kelas = grid|map(attribute='kelas')|select|unique|sort|list %}
|
||||
<div class="filter-baris">
|
||||
<label for="filter-kelas">Tampilkan kelas:</label>
|
||||
<select id="filter-kelas" style="width:auto">
|
||||
<option value="">Semua</option>
|
||||
{% for k in semua_kelas %}
|
||||
<option value="{{ k }}">Kelas {{ k }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<span id="filter-kelas-info" class="keterangan" style="margin:0"></span>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="gulir" style="max-height:480px;overflow-y:auto">
|
||||
<table class="grid">
|
||||
<thead>
|
||||
@@ -103,17 +117,19 @@
|
||||
<th style="width:44px" class="tengah">No.</th>
|
||||
<th style="width:112px">NIM</th>
|
||||
<th style="min-width:150px">Nama</th>
|
||||
{% if ada_kelas %}<th style="width:60px" class="tengah">Kelas</th>{% endif %}
|
||||
<th class="tengah" style="width:140px">Nilai (0–100)</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for m in grid %}
|
||||
<tr>
|
||||
<tr data-kelas="{{ m.kelas or '' }}">
|
||||
<td class="tengah">{{ loop.index }}
|
||||
<input type="hidden" name="nim_{{ loop.index0 }}" value="{{ m.nim }}">
|
||||
<input type="hidden" name="nama_{{ loop.index0 }}" value="{{ m.nama }}"></td>
|
||||
<td>{{ m.nim }}</td>
|
||||
<td>{{ m.nama }}</td>
|
||||
{% if ada_kelas %}<td class="tengah">{{ m.kelas or '—' }}</td>{% endif %}
|
||||
<td class="isian"><input type="number" name="nilai_{{ loop.index0 }}"
|
||||
min="0" max="100" step="any"
|
||||
value="{{ '%g'|format(m.nilai_awal) if m.nilai_awal is not none else '' }}"></td>
|
||||
@@ -129,6 +145,29 @@
|
||||
</div>
|
||||
</form>
|
||||
|
||||
{% if ada_kelas %}
|
||||
<script>
|
||||
(function () {
|
||||
var pilih = document.getElementById('filter-kelas');
|
||||
var info = document.getElementById('filter-kelas-info');
|
||||
var baris = document.querySelectorAll('table.grid tbody tr[data-kelas]');
|
||||
|
||||
function perbarui() {
|
||||
var v = pilih.value, n = 0;
|
||||
baris.forEach(function (tr) {
|
||||
var tampil = v === '' || tr.dataset.kelas === v;
|
||||
tr.style.display = tampil ? '' : 'none';
|
||||
if (tampil) n++;
|
||||
});
|
||||
info.textContent = v === '' ? '' : n + ' dari ' + baris.length + ' mahasiswa ditampilkan';
|
||||
}
|
||||
|
||||
pilih.addEventListener('change', perbarui);
|
||||
perbarui();
|
||||
})();
|
||||
</script>
|
||||
{% endif %}
|
||||
|
||||
{% if komponen.tugas %}
|
||||
<script>
|
||||
const BENTUK_TEMPLATE = {
|
||||
|
||||
Reference in New Issue
Block a user