@props(['links' => null]) @php if (is_null($links)) { $routeName = Route::currentRouteName(); $links = []; // 預設首頁 (Dashboard) $links[] = [ 'label' => __('Dashboard'), 'url' => route('admin.dashboard'), 'active' => $routeName === 'admin.dashboard' ]; if ($routeName && $routeName !== 'admin.dashboard') { // 定義大模組映射表 (路由前綴 => 大模組名稱) $moduleMap = [ 'profile' => __('Profile Settings'), 'admin.members' => __('Member Management'), 'admin.membership-tiers' => __('Member Management'), 'admin.deposit-bonus-rules' => __('Member Management'), 'admin.point-rules' => __('Member Management'), 'admin.gift-definitions' => __('Member Management'), 'admin.machines' => __('Machine Management'), 'admin.app' => __('APP Management'), 'admin.warehouses' => __('Warehouse Management'), 'admin.sales' => __('Sales Management'), 'admin.analysis' => __('Analysis Management'), 'admin.audit' => __('Audit Management'), 'admin.data-config' => __('Data Configuration'), 'admin.remote' => __('Remote Management'), 'admin.line' => __('Line Management'), 'admin.reservation' => __('Reservation System'), 'admin.special-permission' => __('Special Permission'), 'admin.permission' => __('Permission Settings'), 'admin.basic-settings' => __('Basic Settings'), ]; // 1. 找出所屬大模組 $foundModule = null; foreach ($moduleMap as $prefix => $label) { if (str_starts_with($routeName, $prefix)) { $foundModule = [ 'label' => $label, 'url' => '#', 'active' => false ]; break; } } if ($foundModule) { $links[] = $foundModule; } // 2. 處理中間層級與具體頁面 $segments = explode('.', $routeName); $lastSegment = end($segments); // 如果路由有四段以上 (如 admin.permission.companies.index),則處理中間一段 if (count($segments) >= 4) { $midSegment = $segments[2]; $midLabel = match($midSegment) { 'companies' => __('Customer Management'), 'members' => __('Member List'), 'machines' => __('Machine Settings'), 'payment-configs' => __('Customer Payment Config'), 'warehouses' => __('Warehouse List'), 'sales' => __('Sales Records'), default => null, }; if ($midLabel) { $links[] = [ 'label' => $midLabel, 'url' => '#', // 如果有需要可以導向 index 路由 'active' => $lastSegment === 'index' ]; } } // 3. 處理最後一個動作/頁面 $pageLabel = match($lastSegment) { 'index' => match($segments[1] ?? '') { 'members' => __('Member List'), 'machines' => __('Machine List'), 'warehouses' => __('Warehouse List (All)'), 'sales' => __('Sales Records'), 'analysis' => __('Analysis Management'), 'audit' => __('Audit Management'), default => null, }, 'edit' => str_starts_with($routeName, 'profile') ? null : __('Edit'), 'create' => __('Create'), 'show' => __('Detail'), 'logs' => __('Machine Logs'), 'permissions' => __('Machine Permissions'), 'utilization' => __('Utilization Rate'), 'expiry' => __('Expiry Management'), 'maintenance' => __('Maintenance Records'), 'ui-elements' => __('UI Elements'), 'helper' => __('Helper'), 'questionnaire' => __('Questionnaire'), 'games' => __('Games'), 'timer' => __('Timer'), 'personal' => __('Warehouse List (Individual)'), 'stock-management' => __('Stock Management'), 'transfers' => __('Transfers'), 'purchases' => __('Purchases'), 'replenishments' => __('Replenishments'), 'replenishment-records' => __('Replenishment Records'), 'machine-stock' => __('Machine Stock'), 'staff-stock' => __('Staff Stock'), 'returns' => __('Returns'), 'pickup-codes' => __('Pickup Codes'), 'orders' => __('Orders'), 'promotions' => __('Promotions'), 'pass-codes' => __('Pass Codes'), 'store-gifts' => __('Store Gifts'), 'change-stock' => __('Change Stock'), 'machine-reports' => __('Machine Reports'), 'product-reports' => __('Product Reports'), 'survey-analysis' => __('Survey Analysis'), 'products' => __('Product Management'), 'advertisements' => __('Advertisement Management'), 'admin-products' => __('Admin Sellable Products'), 'accounts' => __('Account Management'), 'sub-accounts' => __('Sub Accounts'), 'sub-account-roles' => __('Sub Account Roles'), 'points' => __('Point Settings'), 'badges' => __('Badge Settings'), 'restart' => __('Machine Restart'), 'restart-card-reader' => __('Card Reader Restart'), 'checkout' => __('Remote Checkout'), 'lock' => __('Remote Lock'), 'change' => __('Remote Change'), 'dispense' => __('Remote Dispense'), 'official-account' => __('Line Official Account'), 'coupons' => __('Line Coupons'), 'stores' => __('Store Management'), 'time-slots' => __('Time Slots'), 'venues' => __('Venue Management'), 'reservations' => __('Reservations'), 'clear-stock' => __('Clear Stock'), 'apk-versions' => __('APK Versions'), 'discord-notifications' => __('Discord Notifications'), 'app-features' => __('APP Features'), 'roles' => __('Roles'), 'others' => __('Others'), 'ai-prediction' => __('AI Prediction'), 'data-config' => __('Data Configuration Permissions'), 'sales' => __('Sales Permissions'), 'machines' => __('Machine Management Permissions'), 'warehouses' => __('Warehouse Permissions'), 'analysis' => __('Analysis Permissions'), 'audit' => __('Audit Permissions'), 'remote' => __('Remote Permissions'), 'line' => __('Line Permissions'), default => null, }; if ($pageLabel) { $links[] = [ 'label' => $pageLabel, 'active' => true ]; } // 確保最後一個 link 是 active 的 if (!empty($links)) { $links[count($links) - 1]['active'] = true; // 檢查是否有相鄰重複的 Label (例如 Dashboard > Dashboard) if (count($links) > 1 && $links[count($links)-1]['label'] === $links[count($links)-2]['label']) { array_pop($links); $links[count($links)-1]['active'] = true; } } } } @endphp