Dokumentasi Sistem Layout dan Navigasi
Gambaran Umum
Aplikasi menggunakan sistem layout hierarkis dengan beberapa komponen navigasi yang bekerja sama untuk memberikan pengalaman pengguna yang konsisten di seluruh halaman.Arsitektur
Hirarki Komponen
Komponen Navigasi
1. AppSidebar (Navigasi Kiri)
Lokasi:resources/js/components/AppSidebar.vue
Tujuan: Menu navigasi utama yang menampilkan semua bagian dan sub-bagian utama.
Fitur:
- Dapat dilipat/diperluas
- Dukungan menu multi-level
- Highlighting status aktif
- Dukungan ikon
- Visibilitas berdasarkan otorisasi
- Utama: File YAML yang didefinisikan di
config/core/app.php - Default:
resources/views/partials/app/dms/navnext.yml - Tambahan: Menu Directory, Core, Parameter
2. TopBar (Navigasi Atas)
Lokasi:resources/js/components/TopBar.vue
Tujuan: Navigasi kontekstual dan kontrol utilitas.
Komponen:
- Toggle Sidebar: Lipat/perluas sidebar kiri
- NavTopMenubar: Item menu yang sadar konteks
- Pemilih Bahasa: Dukungan multi-bahasa
- Toggle Tema: Pergantian mode terang/gelap
3. NavTopMenubar (Menu Kontekstual)
Lokasi:resources/js/components/NavTopMenubar.vue
Tujuan: Menampilkan item menu yang relevan dengan bagian aktif saat ini.
Logika:
- Menampilkan anak-anak dari grup menu utama yang sedang aktif
- Kembali ke menu utama jika tidak ada top_menu yang disediakan
- Mendukung menu dropdown untuk item yang memiliki anak
Alur Data Menu
1. Pemrosesan Backend (AdminController)
2. Penyampaian Prop Frontend
3. Penggunaan Komponen
Konfigurasi Menu
Struktur Menu YAML
Properti Menu
- title: Nama tampilan (dapat diterjemahkan)
- auth: Persyaratan izin
- icon: Nama ikon Lucide
- url: Path navigasi
- children: Item sub-menu
- isActive: Ditetapkan secara otomatis berdasarkan URL saat ini
Deteksi Status Aktif
Cara Kerja
- Ekstraksi Path Saat Ini: Mendapatkan path request saat ini
- Normalisasi URL: Memastikan format path yang konsisten
- Pencocokan Path: Membandingkan URL item menu dengan path saat ini
- Penandaan Hirarki: Menandai parent sebagai aktif jika anak aktif
Implementasi
Opsi Kustomisasi
1. Konfigurasi Sidebar
Mode Rail: Sidebar yang dilipat hanya menampilkan ikon2. Toggle Navigasi Atas
Aktifkan/nonaktifkan menu kontekstual navigasi atas:3. Sumber Menu
Konfigurasi file YAML mana yang akan dimuat:Perilaku Responsif
Mobile/Tablet
- Sidebar menjadi overlay alih-alih persisten
- Navigasi atas beradaptasi dengan layar yang lebih kecil
- Item menu dapat ditumpuk atau menjadi dropdown
Desktop
- Sidebar dapat ditoggle antara mode rail dan penuh
- Navigasi atas penuh dengan semua item kontekstual terlihat
- Status hover dan transisi yang mulus
Pemecahan Masalah
Masalah Umum
1. Menu atas menampilkan item yang salah- Periksa apakah komponen halaman mengirim prop
top_menuke AppLayout - Verifikasi
generateTopMenu()dipanggil di controller - Pastikan status aktif menu ditetapkan dengan benar
- Periksa normalisasi URL di MenuUtil
- Verifikasi logika pencocokan path
- Pastikan URL menu memiliki format yang konsisten
- Verifikasi nama ikon sesuai dengan komponen Lucide Vue Next
- Periksa registri ikon di komponen NavTopMenubar
- Pastikan ikon dimuat dengan benar di MenuUtil::getIcons()
- Periksa implementasi AuthUtil::checkItem()
- Verifikasi izin pengguna
- Pastikan properti ‘auth’ ditetapkan dengan benar di YAML
Langkah Debug
- Periksa konsol browser untuk error
- Verifikasi struktur data menu di Vue DevTools
- Uji normalisasi URL dengan debug logging
- Validasi sintaks dan struktur YAML
- Periksa alur pemrosesan menu controller
