3
0
mirror of https://github.com/snipe/snipe-it.git synced 2026-08-18 11:15:42 +00:00

Added breadcrumbs

This commit is contained in:
snipe
2026-08-14 13:46:41 +01:00
parent 8378ac89c4
commit 13e52cc0ed
2 changed files with 85 additions and 10 deletions

View File

@ -394,7 +394,7 @@
</li>
@endcan
@can('index', \App\Models\Asset::class)
<li class="treeview{{ ((request()->is('statuslabels/*') || request()->is(['hardware*', 'maintenances*'])) ? ' active' : '') }}">
<li class="treeview{{ ((request()->is('statuslabels/*') || request()->is('hardware*')) ? ' active' : '') }}">
<a href="#">
<x-icon type="assets" class="fa-fw" />
<span>{{ trans('general.assets') }}</span>
@ -523,11 +523,6 @@
{{ trans('general.deleted') }}
</a>
</li>
<li {!! (request()->is('maintenances') ? ' class="active" aria-current="page"' : '') !!}>
<a href="{{ route('maintenances.index') }}">
{{ trans('general.maintenances') }}
</a>
</li>
@endcan
@can('audit', \App\Models\Asset::class)
<li id="bulk-audit-sidenav-option" {!! (request()->is('hardware/bulkaudit') ? ' class="active" aria-current="page"' : '') !!}>
@ -538,6 +533,47 @@
@endcan
</ul>
</li>
@endcan
{{-- Dedicated Maintenances section. Treeview parent
so "list all" and Maintenance Types share one
visual home. The @if guard OR's the two
governing permissions so a user with either
can see the parent. --}}
@if (Gate::allows('view', \App\Models\Asset::class) || Gate::allows('index', \App\Models\MaintenanceType::class))
<li class="treeview{{ (request()->is('maintenances*') || request()->is('maintenance-types*')) ? ' active' : '' }}">
<a href="#">
<x-icon type="maintenances" class="fa-fw"/>
<span>{{ trans('general.maintenances') }}</span>
<x-icon type="angle-left" class="pull-right fa-fw"/>
</a>
<ul class="treeview-menu">
@can('view', \App\Models\Asset::class)
<li{!! (request()->is('maintenances') ? ' class="active" aria-current="page"' : '') !!}>
<a href="{{ route('maintenances.index') }}">
<x-icon type="circle" class="text-grey fa-fw"/>
{{ trans('general.list_all') }}
</a>
</li>
@endcan
@can('index', \App\Models\MaintenanceType::class)
<li{!! (request()->is('maintenance-types*') ? ' class="active" aria-current="page"' : '') !!}>
<a href="{{ route('maintenance-types.index') }}">
<x-icon type="circle" class="text-grey fa-fw"/>
{{ trans('admin/maintenance_types/general.maintenance_types') }}
</a>
</li>
@endcan
</ul>
</li>
@endif
@can('view', \App\Models\Asset::class)
<li{!! (request()->routeIs('calendar.index') ? ' class="active" aria-current="page"' : '') !!}>
<a href="#">
<x-icon type="calendar" class="fa-fw"/>
<span>{{ trans('general.calendar') }}</span>
</a>
</li>
@endcan
@can('view', \App\Models\License::class)

View File

@ -7,6 +7,7 @@ use App\Http\Controllers\Assets\BulkAssetsController;
use App\Http\Controllers\BulkMaintenancesController;
use App\Http\Controllers\MaintenancesController;
use App\Models\Asset;
use App\Models\Maintenance;
use App\Models\Setting;
use Illuminate\Support\Facades\Route;
use Tabuna\Breadcrumbs\Trail;
@ -208,10 +209,48 @@ Route::resource('hardware',
])->parameters(['hardware' => 'asset'])->withTrashed();
// Asset Maintenances
Route::resource('maintenances',
MaintenancesController::class,
['middleware' => ['auth'],
])->parameters(['maintenance' => 'maintenance', 'asset' => 'asset_id']);
//
// Expanded from a Route::resource so per-route breadcrumbs can chain.
// maintenances.show is parented through the maintenance's type so the
// trail reads: Maintenance Types → {type name} → {maintenance name}.
// That matches the sidebar reshuffle that moved MT under Settings and
// positioned it as the drill-down entry point for related maintenances.
Route::group(['middleware' => ['auth']], function () {
Route::get('maintenances', [MaintenancesController::class, 'index'])
->name('maintenances.index')
->breadcrumbs(fn (Trail $trail) => $trail->parent('home', route('home'))
->push(trans('admin/maintenances/general.maintenances'), route('maintenances.index'))
);
Route::get('maintenances/create', [MaintenancesController::class, 'create'])
->name('maintenances.create')
->breadcrumbs(fn (Trail $trail) => $trail->parent('maintenances.index')
->push(trans('admin/maintenances/general.create'))
);
Route::post('maintenances', [MaintenancesController::class, 'store'])
->name('maintenances.store');
Route::get('maintenances/{maintenance}', [MaintenancesController::class, 'show'])
->name('maintenances.show')
->breadcrumbs(fn (Trail $trail, Maintenance $maintenance) => $trail->parent('maintenances.index')
->push($maintenance->name, route('maintenances.show', $maintenance))
);
Route::get('maintenances/{maintenance}/edit', [MaintenancesController::class, 'edit'])
->name('maintenances.edit')
->breadcrumbs(fn (Trail $trail, Maintenance $maintenance) => $trail->parent('maintenances.show', $maintenance)
->push(trans('admin/maintenances/general.edit'))
);
Route::put('maintenances/{maintenance}', [MaintenancesController::class, 'update'])
->name('maintenances.update');
Route::patch('maintenances/{maintenance}', [MaintenancesController::class, 'update']);
Route::delete('maintenances/{maintenance}', [MaintenancesController::class, 'destroy'])
->name('maintenances.destroy');
});
Route::post('maintenances/{maintenance}/complete',
[MaintenancesController::class, 'complete']