Skip to content

Commit bb11974

Browse files
authored
Merge pull request #34 from agitnaeta/feat/rv5-header-2baris
Feat/rv5 header 2baris
2 parents 2ab346d + c45211a commit bb11974

22 files changed

Lines changed: 2403 additions & 95 deletions

docs/review-version-5/README.md

Lines changed: 77 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ supaya `review-version-4` tetap fokus & selesai dulu.
88

99
## RV5-01 — Header list 2-baris berlaku GLOBAL (semua CRUD admin)
1010

11-
**Status:** [ ] TODO (belum direview menyeluruh)
11+
**Status:** [x] DONE (terverifikasi, lihat `tasks/RV5-01-header-audit.md`)
1212

1313
**Konteks:**
1414
Saat UM-03 (toolbar presisi modul User), solusi final = override
@@ -21,30 +21,82 @@ Karena `list.blade.php` adalah template **bersama semua CRUD**, perubahan ini
2121
otomatis berlaku ke SELURUH halaman daftar admin (User, Leave, Gajian,
2222
Rekrutmen, Kinerja, dll), bukan hanya `/admin/user`.
2323

24-
**Sudah diverifikasi saat UM-03:**
25-
- `/admin/user` → rapi, sesuai design
26-
- `/admin/leave-request` → rapi, konsisten (5 filter + tanpa tombol tambah, wrap oke)
27-
- Regresi 106 PHPUnit PASS (User + Leave + Report + Ranking + Recruitment)
28-
29-
**Yang MASIH perlu direview di RV5 (belum dicek satu-satu):**
30-
- [ ] Audit SEMUA halaman list admin lain (Gajian, Kasbon, Kinerja, Pelatihan,
31-
Dokumen, Organisasi, Pajak & BPJS, Pengaturan, Rekrutmen, Akuntansi,
32-
Audit Log, dll) — pastikan header 2-baris tidak pecah/aneh di layout
33-
dengan jumlah filter berbeda / tanpa filter / tanpa tombol.
34-
- [ ] Halaman yang punya banyak tombol `top` (bukan cuma Tambah+dropdown) —
35-
cek apakah masih rapi di kanan baris 1.
36-
- [ ] Halaman TANPA breadcrumb (kalau ada) — pastikan baris 1 tidak kosong aneh.
37-
- [ ] Dark mode + mobile (<992px) di beberapa halaman berbeda.
38-
- [ ] Pertimbangkan: apakah "Pencarian" label & flat-filter cocok untuk semua
39-
modul, atau ada modul yang lebih baik pakai layout filter card lama.
40-
41-
**File terdampak (sudah ada dari UM-03):**
42-
- `resources/views/vendor/backpack/crud/list.blade.php` (override global)
43-
- `resources/css/admin.css` (blok `.um-page-header`, `.um-header-*`, `.um-search`)
44-
45-
**Rencana test RV5:**
46-
- Browser test lintas-modul: loop beberapa route list admin, assert struktur
47-
header (breadcrumb kiri, tools kanan, tidak overlap, tidak ada elemen ketimpa).
24+
**Hasil audit RV5 (terverifikasi terukur — `tests/browser/rv5-01-header-audit.mjs` +
25+
`rv5-01-mobile-dark.mjs`, bukti di `screenshots/` & `rv5-01-report.json`):**
26+
- [x] Audit SEMUA halaman list admin CRUD → **37/37 PASS** (desktop 1280px). Tak ada
27+
overflow horizontal, tak ada overlap search×tombol, `#datatable_info_stack`
28+
konsisten `inline-grid`.
29+
- [x] Halaman banyak tombol `top` (Gajian/Salary) → rapi.
30+
- [x] Halaman TANPA tombol create (Audit Log) → rapi.
31+
- [x] Dark mode + mobile (<992px) → sampel 6 halaman (user/salary/audit-log/presence/
32+
leave-request/department) PASS, 0 issue.
33+
- [x] Guard permanen: `rv5-01-header-audit.mjs` exit non-zero kalau ada CRUD pecah.
34+
35+
**3 halaman `/admin/*` yang BUKAN CRUD Backpack** (Controller biasa + Blade custom,
36+
tak ikut override `list.blade.php`): `training`, `notification`, `employee-document`.
37+
Diseragamkan ke pola 2-baris via komponen `<x-admin.page-header>` (RV5-01-C) —
38+
lihat `tasks/RV5-01-header-audit.md` + mockup `mockups/rv5-01c-header-noncrud.html`.
39+
Dijaga terpisah oleh `tests/browser/rv5-01c-noncrud-header.mjs`.
40+
41+
**File terdampak:**
42+
- `resources/views/vendor/backpack/crud/list.blade.php` (override global — dari UM-03)
43+
- `resources/views/components/admin/page-header.blade.php` (BARU — komponen non-CRUD)
44+
- `resources/views/admin/{training,notification,document}/index.blade.php` (pakai komponen)
45+
- `resources/css/admin.css` (blok `.um-*` — reused, tak berubah)
46+
47+
---
48+
49+
## RV5-02 — Deprecate varian ukuran `-sm` pada komponen UI (GLOBAL)
50+
51+
**Status:** [ ] TODO
52+
53+
**Keputusan (Capt):**
54+
Sistem **tidak lagi menggunakan varian ukuran _small_ (`-sm`)** pada komponen
55+
kontrol form & tombol. Semua kontrol memakai ukuran **default (medium)** agar
56+
target sentuh (tap target), tinggi baris, dan konsistensi visual seragam di
57+
seluruh aplikasi.
58+
59+
**Class Bootstrap 5 yang harus DIHAPUS / tidak dipakai lagi:**
60+
- Tombol: `.btn-sm` (dan `.btn-group-sm`)
61+
- Input teks: `.form-control-sm`
62+
- Dropdown/select: `.form-select-sm`
63+
- Input group: `.input-group-sm`
64+
- Catatan istilah lama Bootstrap 3/4 kalau masih tersisa: `input-sm`,
65+
`select-sm` → migrasikan ke ukuran default (bukan diganti ke `-sm` v5).
66+
67+
**Definisi selesai (Definition of Done):**
68+
- [ ] Audit seluruh Blade (`resources/views/**`, termasuk override
69+
`resources/views/vendor/backpack/**`) — cari & hapus semua kelas di atas.
70+
- [ ] Audit komponen yang dirender via controller/PHP (mis. `->size('sm')`,
71+
atribut `class` pada field/column Backpack, `addButtonFromView` custom).
72+
- [ ] Audit render dinamis via JS (mis. DataTables buttons, tombol yang
73+
di-inject skrip — bandingkan pola `crudTable_reset_button` di RV4 yang
74+
punya `ml-1 ms-1`).
75+
- [ ] Audit `resources/css/admin.css` & CSS lain — pastikan tak ada rule yang
76+
mengandalkan selector `.btn-sm`/`.form-control-sm`/dst; kalau ada styling
77+
khusus ukuran kecil, konversikan ke ukuran default atau hapus.
78+
- [ ] Verifikasi visual: form Create/Update, filter bar, toolbar, tabel aksi
79+
(Lihat/Ubah/Hapus/Print), modal — tinggi kontrol konsisten (default).
80+
- [ ] Regresi: pastikan tak ada layout pecah akibat kenaikan ukuran (baris
81+
tabel, toolbar wrap, tombol aksi per-baris yang tadinya `btn-sm`).
82+
83+
**Cara audit cepat (referensi, jalankan saat eksekusi RV5):**
84+
- Cari pemakaian: `search_files` pattern
85+
`btn-sm|btn-group-sm|form-control-sm|form-select-sm|input-group-sm|input-sm|select-sm`
86+
di `resources/`, dan `->size\(('|\")sm` / `'sm'` di `app/`.
87+
88+
**Risiko / catatan:**
89+
- Menghapus `.btn-sm` pada **tombol aksi per-baris tabel** (Lihat/Ubah/Hapus/
90+
Print) akan menaikkan tinggi baris — cek agar tabel tidak jadi terlalu tinggi
91+
/ toolbar tidak wrap tak diinginkan. Sesuaikan spacing bila perlu (bukan
92+
dengan mengembalikan `-sm`, tapi via padding/gap).
93+
- Perubahan ini **global** (menyentuh template & CSS bersama), jadi butuh
94+
sweep menyeluruh + verifikasi lintas modul, bukan per-halaman.
95+
96+
**File berpotensi terdampak:**
97+
- `resources/views/**` (semua Blade app + override vendor Backpack)
98+
- `resources/css/admin.css` (dan sumber CSS lain)
99+
- Controller yang menyusun field/column/button Backpack dengan opsi ukuran.
48100

49101
---
50102

149 KB
Loading
132 KB
Loading
127 KB
Loading
Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
1+
<!DOCTYPE html>
2+
<html lang="id" data-bs-theme="light">
3+
<head>
4+
<meta charset="utf-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1">
6+
<title>RV5-01-C — Mockup Header 2-baris untuk Halaman Non-CRUD</title>
7+
<link href="https://cdn.jsdelivr.net/npm/@tabler/core@1.0.0-beta20/dist/css/tabler.min.css" rel="stylesheet">
8+
<style>
9+
/* Token disederhanakan dari resources/css/admin.css RitmeHR */
10+
:root{
11+
--bg-surface:#ffffff; --bg-sunken:#f1f5f9; --border-strong:#cbd5e1;
12+
--brand:#2563eb; --brand-navy:#1e3a8a; --ok:#22c55e;
13+
--sp-2:.5rem;
14+
}
15+
body{ background:#f8fafc; }
16+
.demo-frame{ max-width:1180px; margin:24px auto; }
17+
.demo-tabs{ margin-bottom:16px; }
18+
.demo-tabs .btn{ font-weight:600; }
19+
.demo-note{ background:#eff6ff; border:1px solid #bfdbfe; border-radius:8px; padding:10px 14px; font-size:.85rem; color:#1e3a8a; margin-bottom:18px;}
20+
21+
/* ===== Pola header 2-baris (mirror .um-page-header) ===== */
22+
.um-page-header{ position:relative; z-index:30; padding:0 4px; }
23+
.um-header-top{ position:relative; z-index:20; }
24+
.um-header-bottom{ position:relative; z-index:10; }
25+
.um-page-header .breadcrumb{ margin:0; }
26+
.um-header-actions{ position:relative; z-index:1050; }
27+
.um-header-actions .btn{ white-space:nowrap; }
28+
.um-header-title h1{ font-size:1.75rem; line-height:1.15; margin:0; text-transform:capitalize;}
29+
.um-header-title{ flex:0 1 auto; min-width:0; max-width:32rem; }
30+
.um-header-title .subhead{ color:#64748b; margin:0; line-height:1.35;}
31+
.um-header-tools{ position:relative; z-index:1; row-gap:var(--sp-2); }
32+
.um-header-tools form{ margin:0 !important; }
33+
/* filter flat (tanpa card abu) untuk dokumen */
34+
.um-header-tools form.flat{ background:transparent; border:0; padding:0; }
35+
.um-header-tools .form-select, .um-header-tools input[type=search]{
36+
background-color:var(--bg-surface); border:1px solid var(--border-strong);
37+
}
38+
.content-card{ margin-top:8px; }
39+
</style>
40+
</head>
41+
<body>
42+
<div class="demo-frame">
43+
<div class="demo-note">
44+
<strong>RV5-01-C — Mockup:</strong> menyeragamkan header 3 halaman non-CRUD (Pelatihan, Notifikasi, Dokumen Karyawan)
45+
ke <strong>pola header 2-baris</strong> yang sama dengan seluruh halaman CRUD.
46+
Baris 1 = breadcrumb (kiri) + tombol aksi (kanan). Baris 2 = judul + subjudul (kiri) + tools/tab/filter (kanan).
47+
Klik tab di bawah untuk lihat tiap halaman.
48+
</div>
49+
50+
<div class="demo-tabs btn-group">
51+
<button class="btn btn-primary" data-demo="training" onclick="showDemo('training')">Pelatihan</button>
52+
<button class="btn btn-outline-primary" data-demo="notif" onclick="showDemo('notif')">Notifikasi</button>
53+
<button class="btn btn-outline-primary" data-demo="doc" onclick="showDemo('doc')">Dokumen Karyawan</button>
54+
</div>
55+
56+
<!-- ============ TRAINING ============ -->
57+
<div class="demo-page" id="demo-training">
58+
<div class="um-page-header">
59+
<div class="um-header-top d-flex align-items-center flex-wrap mb-3">
60+
<nav aria-label="breadcrumb" class="d-none d-lg-block">
61+
<ol class="breadcrumb bg-transparent p-0 m-0">
62+
<li class="breadcrumb-item"><a href="#">Admin</a></li>
63+
<li class="breadcrumb-item active" aria-current="page">Pelatihan</li>
64+
</ol>
65+
</nav>
66+
<div class="um-header-actions ms-auto d-flex align-items-center gap-2">
67+
<a href="#" class="btn btn-success"><i class="ti ti-plus"></i>&nbsp;Buat Pelatihan</a>
68+
</div>
69+
</div>
70+
<div class="um-header-bottom d-flex align-items-end flex-wrap gap-3 mb-2">
71+
<div class="um-header-title">
72+
<h1>Pelatihan</h1>
73+
<p class="subhead">Kelola materi & latihan untuk karyawan</p>
74+
</div>
75+
<div class="um-header-tools ms-auto d-flex align-items-end flex-wrap gap-2">
76+
<div class="btn-group">
77+
<a href="#" class="btn btn-primary">Aktif</a>
78+
<a href="#" class="btn btn-outline-secondary">Diarsipkan</a>
79+
</div>
80+
</div>
81+
</div>
82+
</div>
83+
<div class="card content-card"><div class="table-responsive">
84+
<table class="table table-hover align-middle mb-0">
85+
<thead class="table-light"><tr>
86+
<th>Judul</th><th>Pelatih</th><th>KKM</th><th>Materi</th><th>Soal</th><th>Peserta</th><th>Status</th><th></th>
87+
</tr></thead>
88+
<tbody>
89+
<tr><td class="fw-semibold">Induksi K3</td><td>Budi Santoso</td><td>70</td><td>4</td><td>10</td><td>25</td><td><span class="badge bg-success">Terbit</span></td><td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Kelola</a></td></tr>
90+
<tr><td class="fw-semibold">Etika Kerja</td><td>Rina Kartika</td><td>75</td><td>3</td><td>8</td><td>0</td><td><span class="badge bg-secondary">Draf</span></td><td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Kelola</a></td></tr>
91+
</tbody>
92+
</table>
93+
</div></div>
94+
</div>
95+
96+
<!-- ============ NOTIFICATION ============ -->
97+
<div class="demo-page d-none" id="demo-notif">
98+
<div class="um-page-header">
99+
<div class="um-header-top d-flex align-items-center flex-wrap mb-3">
100+
<nav aria-label="breadcrumb" class="d-none d-lg-block">
101+
<ol class="breadcrumb bg-transparent p-0 m-0">
102+
<li class="breadcrumb-item"><a href="#">Admin</a></li>
103+
<li class="breadcrumb-item active" aria-current="page">Notifikasi</li>
104+
</ol>
105+
</nav>
106+
<div class="um-header-actions ms-auto d-flex align-items-center gap-2">
107+
<a href="#" class="btn btn-outline-primary"><i class="ti ti-checks"></i>&nbsp;Tandai Semua Dibaca</a>
108+
</div>
109+
</div>
110+
<div class="um-header-bottom d-flex align-items-end flex-wrap gap-3 mb-2">
111+
<div class="um-header-title">
112+
<h1>Notifikasi</h1>
113+
<p class="subhead">3 belum dibaca</p>
114+
</div>
115+
<div class="um-header-tools ms-auto d-flex align-items-end flex-wrap gap-2">
116+
<div class="btn-group">
117+
<a href="#" class="btn btn-secondary">Semua</a>
118+
<a href="#" class="btn btn-outline-secondary">Belum Dibaca</a>
119+
</div>
120+
</div>
121+
</div>
122+
</div>
123+
<div class="card content-card"><div class="card-body p-0">
124+
<a href="#" class="d-block p-3 border-bottom text-body text-decoration-none bg-light">
125+
<div class="d-flex"><div class="me-3"><i class="ti ti-bell la-2x text-muted"></i></div>
126+
<div class="flex-grow-1"><div><strong>Pengajuan cuti disetujui</strong> <span class="badge bg-primary">Baru</span></div>
127+
<div class="text-muted">Cuti Ahmad Fauzi 2 hari telah disetujui.</div><small class="text-muted">2 jam lalu</small></div></div>
128+
</a>
129+
<a href="#" class="d-block p-3 border-bottom text-body text-decoration-none">
130+
<div class="d-flex"><div class="me-3"><i class="ti ti-file-text la-2x text-muted"></i></div>
131+
<div class="flex-grow-1"><div><strong>Dokumen akan kedaluwarsa</strong></div>
132+
<div class="text-muted">KTP Dewi Lestari kedaluwarsa dalam 20 hari.</div><small class="text-muted">1 hari lalu</small></div></div>
133+
</a>
134+
</div></div>
135+
</div>
136+
137+
<!-- ============ EMPLOYEE-DOCUMENT ============ -->
138+
<div class="demo-page d-none" id="demo-doc">
139+
<div class="um-page-header">
140+
<div class="um-header-top d-flex align-items-center flex-wrap mb-3">
141+
<nav aria-label="breadcrumb" class="d-none d-lg-block">
142+
<ol class="breadcrumb bg-transparent p-0 m-0">
143+
<li class="breadcrumb-item"><a href="#">Admin</a></li>
144+
<li class="breadcrumb-item active" aria-current="page">Dokumen Karyawan</li>
145+
</ol>
146+
</nav>
147+
<div class="um-header-actions ms-auto d-flex align-items-center gap-2">
148+
<a href="#" class="btn btn-outline-secondary"><i class="ti ti-clipboard-check"></i>&nbsp;Kelengkapan</a>
149+
<a href="#" class="btn btn-primary"><i class="ti ti-upload"></i>&nbsp;Unggah Dokumen</a>
150+
</div>
151+
</div>
152+
<div class="um-header-bottom d-flex align-items-end flex-wrap gap-3 mb-2">
153+
<div class="um-header-title">
154+
<h1>Dokumen Karyawan</h1>
155+
<p class="subhead">Arsip berkas & masa berlaku dokumen</p>
156+
</div>
157+
<div class="um-header-tools ms-auto d-flex align-items-end flex-wrap gap-2">
158+
<form class="flat d-flex align-items-end flex-wrap gap-2">
159+
<div>
160+
<label class="form-label mb-0 small text-muted">Karyawan</label>
161+
<select class="form-select"><option>Semua</option><option>Ahmad Fauzi</option></select>
162+
</div>
163+
<div>
164+
<label class="form-label mb-0 small text-muted">Jenis</label>
165+
<select class="form-select"><option>Semua</option><option>KTP</option></select>
166+
</div>
167+
<div class="d-flex flex-column gap-1">
168+
<label class="form-check m-0"><input type="checkbox" class="form-check-input"> <span class="small">Akan kedaluwarsa (30 hari)</span></label>
169+
<label class="form-check m-0"><input type="checkbox" class="form-check-input"> <span class="small">Sudah kedaluwarsa</span></label>
170+
</div>
171+
<div><button class="btn btn-primary">Filter</button></div>
172+
</form>
173+
</div>
174+
</div>
175+
</div>
176+
<div class="card content-card"><div class="card-body p-0"><div class="table-responsive">
177+
<table class="table table-striped mb-0">
178+
<thead><tr><th>Karyawan</th><th>Jenis</th><th>Nomor</th><th>Berkas</th><th>Terbit</th><th>Kedaluwarsa</th><th>Diunggah oleh</th><th></th></tr></thead>
179+
<tbody>
180+
<tr><td>Ahmad Fauzi</td><td>KTP</td><td class="small">3174…</td><td class="small">ktp.pdf <span class="text-muted">(240 KB)</span></td><td>01/01/2020</td><td></td><td class="small">Rina</td><td class="text-end text-nowrap"><a href="#" class="btn btn-sm btn-link"><i class="ti ti-download"></i></a><a href="#" class="btn btn-sm btn-link text-danger"><i class="ti ti-trash"></i></a></td></tr>
181+
</tbody>
182+
</table>
183+
</div></div></div>
184+
</div>
185+
186+
</div>
187+
188+
<script src="https://cdn.jsdelivr.net/npm/@tabler/core@1.0.0-beta20/dist/js/tabler.min.js"></script>
189+
<script>
190+
function showDemo(id){
191+
document.querySelectorAll('.demo-page').forEach(p=>p.classList.add('d-none'));
192+
document.getElementById('demo-'+id).classList.remove('d-none');
193+
document.querySelectorAll('.demo-tabs .btn').forEach(b=>{
194+
const on = b.dataset.demo===id;
195+
b.classList.toggle('btn-primary', on);
196+
b.classList.toggle('btn-outline-primary', !on);
197+
});
198+
}
199+
</script>
200+
</body>
201+
</html>
323 KB
Loading
239 KB
Loading
94 KB
Loading
143 KB
Loading
157 KB
Loading

0 commit comments

Comments
 (0)