Rapikan tampilan nilai, ganti NPM->NIM, fitur ganti password, kunci RPS view-only

- Tampilan "Isi Per Komponen Penilaian" diganti dari tombol bertumpuk teks
  jadi tabel (Komponen/Sub-CPMK/Bobot/Status/Aksi) dengan status berupa
  stempel, lebih mudah dipindai.
- Filter pencarian MK (ketik kode/nama) di kotak penugasan dosen /admin.
- Istilah NPM diseragamkan jadi NIM di seluruh aplikasi (label, header,
  template Excel, dokumen portofolio), termasuk migrasi kolom database
  mahasiswa.npm -> nim yang aman (ALTER TABLE RENAME COLUMN, otomatis saat
  startup, tanpa kehilangan data; parser Excel tetap terima file lama
  berheader NPM).
- Fitur ganti password mandiri (/akun): verifikasi password lama, sesi lain
  otomatis keluar setelah berhasil, sesi yang dipakai tetap aktif.
- RPS: dosen RPS+MK kini bisa menyesuaikan redaksi kalimat Sub-CPMK (bagian
  D) untuk MK yang diampu -- kode & kaitan CPMK/CPL tetap dari kurikulum,
  hanya teksnya yang bisa disesuaikan. Penyesuaian otomatis konsisten di
  dropdown mingguan (F), checklist komponen (G), serta unduhan RPS &
  portofolio, tanpa menyentuh data kurikulum induk atau halaman nilai/
  dashboard prodi.
- Form RPS dibungkus <fieldset disabled> untuk dosen tanpa hak edit --
  seluruh field benar-benar terkunci (bukan cuma tombol simpan hilang).
This commit is contained in:
Power BI Dev
2026-07-22 08:37:54 +07:00
parent afb9e72ba2
commit 5f615aa7e8
12 changed files with 199 additions and 87 deletions
+25
View File
@@ -0,0 +1,25 @@
{% extends "base.html" %}
{% block judul %}Ganti Password — RPS &amp; Portofolio UNTAN{% endblock %}
{% block isi %}
<h1>Ganti Password</h1>
<p class="keterangan">Berlaku untuk akun Anda sendiri (<b>{{ user.nama }}</b>).
Setelah berhasil, sesi login lain dari akun ini akan keluar otomatis dan
Anda perlu memakai password baru pada login berikutnya.</p>
{% if pesan %}<div class="info">{{ pesan }}</div>{% endif %}
{% if error %}<div class="peringatan">{{ error }}</div>{% endif %}
<div style="max-width:360px">
<form method="post" action="/akun">
<label for="lama" style="display:block;font-size:14px;margin:12px 0 3px">Password lama</label>
<input type="password" id="lama" name="lama" autocomplete="current-password" required autofocus>
<label for="baru" style="display:block;font-size:14px;margin:12px 0 3px">Password baru <span style="color:var(--grey);font-weight:normal">(minimal 4 karakter)</span></label>
<input type="password" id="baru" name="baru" autocomplete="new-password" minlength="4" required>
<label for="ulang" style="display:block;font-size:14px;margin:12px 0 3px">Ulangi password baru</label>
<input type="password" id="ulang" name="ulang" autocomplete="new-password" minlength="4" required>
<div class="aksi-baris" style="border-top:none;padding-top:10px">
<button class="tombol" type="submit">Simpan Password Baru</button>
</div>
</form>
</div>
{% endblock %}