Refonte design V1
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user