Refonte design V1

This commit is contained in:
mrKamoo
2026-10-02 13:06:14 +02:00
parent 429dd9de5e
commit 83e1ce00a9
20 changed files with 1403 additions and 531 deletions
@@ -1,55 +1,85 @@
@extends('layouts.app')
@section('title', 'Back-office — Signatures CABM')
@section('title', 'Tableau de bord — Signatures')
@section('content')
<div class="card">
<h1>{{ $tenant->name }}</h1>
<div class="row" style="margin-bottom:12px">
<p class="muted" style="margin:0">
Dernière synchro annuaire :
{{ $tenant->last_sync_at?->timezone('Europe/Paris')->format('d/m/Y H:i') ?? 'jamais' }}
— {{ $tenant->last_sync_status ?? 'n/a' }}
<br>Automatique toutes les 15 minutes (incrémentale) et chaque nuit (complète).
@php
$isAdmin = auth()->user()->hasRole('admin');
$syncOk = $tenant->last_sync_status === 'ok';
@endphp
<header class="page-head">
<div>
<h1>Tableau de bord</h1>
<p class="lead">{{ $tenant->name }}</p>
</div>
</header>
<div class="card sync">
<span @class(['sync-dot', 'warn' => ! $syncOk]) aria-hidden="true"></span>
<div>
<p><strong>Annuaire synchronisé
{{ $tenant->last_sync_at ? 'le '.$tenant->last_sync_at->timezone('Europe/Paris')->format('d/m/Y à H:i') : ': jamais' }}</strong>
@if ($tenant->last_sync_at && ! $syncOk) <span class="badge warn">{{ $tenant->last_sync_status ?? 'état inconnu' }}</span> @endif
</p>
<span class="spacer"></span>
@if (auth()->user()->hasRole('admin'))
<form method="post" action="{{ route('admin.sync') }}" class="row" id="sync-form">
@csrf
<label class="muted" style="margin:0;font-weight:400">
<input type="checkbox" name="full" value="1"> complète
</label>
<button class="btn" type="submit" id="sync-btn">Synchroniser maintenant</button>
</form>
@endif
</div>
<div class="grid">
<div><div class="stat">{{ $users }}</div><div class="muted">agents synchronisés</div></div>
<div><div class="stat">{{ $groups->count() }}</div><div class="muted">groupes signature_*</div></div>
<div><div class="stat"><a href="{{ route('admin.templates.index') }}">{{ $templates }}</a></div><div class="muted">templates</div></div>
<div><div class="stat">{{ $assignments }}</div><div class="muted">affectations</div></div>
<div><div class="stat"><a href="{{ route('admin.campaigns.index') }}">{{ $campaigns }}</a></div><div class="muted">campagnes en cours</div></div>
<p class="muted">Automatique toutes les 15 minutes (incrémentale) et chaque nuit (complète).</p>
</div>
<span class="spacer"></span>
@if ($isAdmin)
<form method="post" action="{{ route('admin.sync') }}" class="row" data-busy="Synchronisation en cours…">
@csrf
<label class="switch">
<input type="checkbox" name="full" value="1"><span class="switch-track"></span>Synchronisation complète
</label>
<button class="btn" type="submit"><x-icon name="refresh-cw" /><span data-label>Synchroniser maintenant</span></button>
</form>
@endif
</div>
<div class="card">
<h2>Groupes synchronisés</h2>
<table class="list">
<thead><tr><th>Groupe</th><th>Membres (transitifs)</th></tr></thead>
<tbody>
@forelse ($groups as $g)
<tr><td>{{ $g->display_name }}</td><td>{{ $g->members_count }}</td></tr>
@empty
<tr><td colspan="2" class="muted">Aucun groupe : lancez « php artisan signature:sync --full ».</td></tr>
@endforelse
</tbody>
</table>
<div class="tiles">
<a class="tile" href="{{ route('admin.agents.index') }}">
<span class="tile-icon"><x-icon name="contact" :size="20" /></span>
<span><span class="tile-value">{{ $users }}</span><span class="tile-label">agents synchronisés</span></span>
</a>
<a class="tile" href="{{ route('admin.templates.index') }}">
<span class="tile-icon"><x-icon name="file-code" :size="20" /></span>
<span><span class="tile-value">{{ $templates }}</span><span class="tile-label">templates</span></span>
</a>
@if ($isAdmin)
<a class="tile" href="{{ route('admin.assignments.index') }}">
<span class="tile-icon"><x-icon name="users" :size="20" /></span>
<span><span class="tile-value">{{ $assignments }}</span><span class="tile-label">affectations</span></span>
</a>
@else
<div class="tile">
<span class="tile-icon"><x-icon name="users" :size="20" /></span>
<span><span class="tile-value">{{ $assignments }}</span><span class="tile-label">affectations</span></span>
</div>
@endif
<a class="tile" href="{{ route('admin.campaigns.index') }}">
<span class="tile-icon"><x-icon name="megaphone" :size="20" /></span>
<span><span class="tile-value">{{ $campaigns }}</span><span class="tile-label">campagnes en cours</span></span>
</a>
</div>
<div class="card card--flush">
<div class="card-head">
<h2>Groupes AD synchronisés</h2>
<span class="badge plain">{{ $groups->count() }}</span>
</div>
<div class="table-wrap">
<table class="list">
<thead><tr><th>Groupe</th><th class="right">Membres (imbriqués inclus)</th></tr></thead>
<tbody>
@forelse ($groups as $g)
<tr><td>{{ $g->display_name }}</td><td class="right num">{{ $g->members_count }}</td></tr>
@empty
<tr><td colspan="2">
<div class="empty">
<x-icon name="users" :size="32" />
<p><strong>Aucun groupe synchronisé</strong>Cochez « complète » puis lancez une synchronisation pour importer les groupes signature_* de l'annuaire.</p>
</div>
</td></tr>
@endforelse
</tbody>
</table>
</div>
</div>
@endsection
@push('scripts')
<script>
document.getElementById('sync-form')?.addEventListener('submit', () => {
const b = document.getElementById('sync-btn');
b.disabled = true;
b.textContent = 'Synchronisation en cours…';
});
</script>
@endpush