Stand: SMTP-Test, Admin-Mail-Tab, Notifiable-Fix, Lazy-Quill
- Fix: Notifiable-Trait zum User-Model hinzugefuegt (behebt notify()-500er) - Installer: SMTP-Verbindungstest mit EsmtpTransport + Ueberspringen-Link - Admin: Neuer E-Mail-Tab mit SMTP-Konfiguration + Verbindungstest - Admin: Lazy Quill-Initialisierung (nur sichtbare Locale wird geladen) - Uebersetzungen: 17 neue Mail-Keys in allen 6 Sprachen Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
166
resources/views/admin/list-generator/create.blade.php
Normal file
166
resources/views/admin/list-generator/create.blade.php
Normal file
@@ -0,0 +1,166 @@
|
||||
<x-layouts.admin :title="__('admin.list_generator_title')">
|
||||
<h1 class="text-2xl font-bold mb-6">{{ __('admin.list_generator_title') }}</h1>
|
||||
|
||||
<form method="POST" action="{{ route('admin.list-generator.store') }}"
|
||||
x-data="{
|
||||
source: @js(old('source', 'players')),
|
||||
customColumns: @js(old('custom_columns', [])),
|
||||
addColumn() { this.customColumns.push('') },
|
||||
removeColumn(i) { this.customColumns.splice(i, 1) }
|
||||
}">
|
||||
@csrf
|
||||
|
||||
<div class="bg-white rounded-lg shadow p-6 space-y-5">
|
||||
{{-- Betreff --}}
|
||||
<div>
|
||||
<label for="title" class="block text-sm font-medium text-gray-700 mb-1">{{ __('admin.list_title') }} *</label>
|
||||
<input type="text" name="title" id="title" value="{{ old('title') }}" required
|
||||
class="w-full px-3 py-2 border border-gray-300 rounded-md text-sm @error('title') border-red-500 @enderror"
|
||||
placeholder="{{ __('admin.list_title') }}">
|
||||
@error('title')<p class="mt-1 text-sm text-red-600">{{ $message }}</p>@enderror
|
||||
</div>
|
||||
|
||||
{{-- Untertitel --}}
|
||||
<div>
|
||||
<label for="subtitle" class="block text-sm font-medium text-gray-700 mb-1">{{ __('admin.list_subtitle') }}</label>
|
||||
<input type="text" name="subtitle" id="subtitle" value="{{ old('subtitle') }}"
|
||||
class="w-full px-3 py-2 border border-gray-300 rounded-md text-sm"
|
||||
placeholder="{{ __('admin.list_subtitle') }}">
|
||||
</div>
|
||||
|
||||
{{-- Notizen --}}
|
||||
<div>
|
||||
<label for="notes" class="block text-sm font-medium text-gray-700 mb-1">{{ __('admin.list_notes') }}</label>
|
||||
<textarea name="notes" id="notes" rows="3"
|
||||
class="w-full px-3 py-2 border border-gray-300 rounded-md text-sm"
|
||||
placeholder="{{ __('admin.list_notes') }}">{{ old('notes') }}</textarea>
|
||||
</div>
|
||||
|
||||
{{-- Team-Filter --}}
|
||||
<div>
|
||||
<label for="team_id" class="block text-sm font-medium text-gray-700 mb-1">{{ __('admin.nav_teams') }}</label>
|
||||
<select name="team_id" id="team_id" class="w-full px-3 py-2 border border-gray-300 rounded-md text-sm">
|
||||
<option value="">{{ __('admin.list_all_teams') }}</option>
|
||||
@foreach ($teams as $team)
|
||||
<option value="{{ $team->id }}" {{ old('team_id') == $team->id ? 'selected' : '' }}>{{ $team->name }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
|
||||
{{-- Zeilen-Quelle --}}
|
||||
<div>
|
||||
<label class="block text-sm font-medium text-gray-700 mb-2">{{ __('admin.list_source') }} *</label>
|
||||
<div class="flex flex-wrap gap-4">
|
||||
<label class="inline-flex items-center gap-2 cursor-pointer">
|
||||
<input type="radio" name="source" value="players" x-model="source" class="text-blue-600">
|
||||
<span class="text-sm">{{ __('admin.list_source_players') }}</span>
|
||||
</label>
|
||||
<label class="inline-flex items-center gap-2 cursor-pointer">
|
||||
<input type="radio" name="source" value="parents" x-model="source" class="text-blue-600">
|
||||
<span class="text-sm">{{ __('admin.list_source_parents') }}</span>
|
||||
</label>
|
||||
<label class="inline-flex items-center gap-2 cursor-pointer">
|
||||
<input type="radio" name="source" value="freetext" x-model="source" class="text-blue-600">
|
||||
<span class="text-sm">{{ __('admin.list_source_freetext') }}</span>
|
||||
</label>
|
||||
</div>
|
||||
@error('source')<p class="mt-1 text-sm text-red-600">{{ $message }}</p>@enderror
|
||||
</div>
|
||||
|
||||
{{-- Freitext-Feld --}}
|
||||
<div x-show="source === 'freetext'" x-cloak>
|
||||
<label for="freetext_rows" class="block text-sm font-medium text-gray-700 mb-1">{{ __('admin.list_source_freetext') }}</label>
|
||||
<textarea name="freetext_rows" id="freetext_rows" rows="6"
|
||||
class="w-full px-3 py-2 border border-gray-300 rounded-md text-sm font-mono"
|
||||
placeholder="{{ __('admin.list_freetext_hint') }}">{{ old('freetext_rows') }}</textarea>
|
||||
@error('freetext_rows')<p class="mt-1 text-sm text-red-600">{{ $message }}</p>@enderror
|
||||
</div>
|
||||
|
||||
{{-- Spalten: Spieler --}}
|
||||
<div x-show="source === 'players'" x-cloak>
|
||||
<label class="block text-sm font-medium text-gray-700 mb-2">{{ __('admin.list_columns') }}</label>
|
||||
<div class="flex flex-wrap gap-x-6 gap-y-2">
|
||||
<label class="inline-flex items-center gap-2">
|
||||
<input type="checkbox" checked disabled class="text-blue-600 rounded">
|
||||
<span class="text-sm text-gray-600">{{ __('ui.name') }}</span>
|
||||
</label>
|
||||
<label class="inline-flex items-center gap-2">
|
||||
<input type="checkbox" name="columns[]" value="team" {{ in_array('team', old('columns', [])) ? 'checked' : '' }} class="text-blue-600 rounded">
|
||||
<span class="text-sm">{{ __('admin.nav_teams') }}</span>
|
||||
</label>
|
||||
<label class="inline-flex items-center gap-2">
|
||||
<input type="checkbox" name="columns[]" value="jersey_number" {{ in_array('jersey_number', old('columns', [])) ? 'checked' : '' }} class="text-blue-600 rounded">
|
||||
<span class="text-sm">{{ __('admin.jersey_number') }}</span>
|
||||
</label>
|
||||
<label class="inline-flex items-center gap-2">
|
||||
<input type="checkbox" name="columns[]" value="birth_year" {{ in_array('birth_year', old('columns', [])) ? 'checked' : '' }} class="text-blue-600 rounded">
|
||||
<span class="text-sm">{{ __('admin.birth_year') }}</span>
|
||||
</label>
|
||||
<label class="inline-flex items-center gap-2">
|
||||
<input type="checkbox" name="columns[]" value="parents" {{ in_array('parents', old('columns', [])) ? 'checked' : '' }} class="text-blue-600 rounded">
|
||||
<span class="text-sm">{{ __('admin.parents') }}</span>
|
||||
</label>
|
||||
<label class="inline-flex items-center gap-2">
|
||||
<input type="checkbox" name="columns[]" value="photo_permission" {{ in_array('photo_permission', old('columns', [])) ? 'checked' : '' }} class="text-blue-600 rounded">
|
||||
<span class="text-sm">{{ __('admin.photo_permission') }}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Spalten: Eltern --}}
|
||||
<div x-show="source === 'parents'" x-cloak>
|
||||
<label class="block text-sm font-medium text-gray-700 mb-2">{{ __('admin.list_columns') }}</label>
|
||||
<div class="flex flex-wrap gap-x-6 gap-y-2">
|
||||
<label class="inline-flex items-center gap-2">
|
||||
<input type="checkbox" checked disabled class="text-blue-600 rounded">
|
||||
<span class="text-sm text-gray-600">{{ __('ui.name') }}</span>
|
||||
</label>
|
||||
<label class="inline-flex items-center gap-2">
|
||||
<input type="checkbox" name="columns[]" value="team" {{ in_array('team', old('columns', [])) ? 'checked' : '' }} class="text-blue-600 rounded">
|
||||
<span class="text-sm">{{ __('admin.nav_teams') }}</span>
|
||||
</label>
|
||||
<label class="inline-flex items-center gap-2">
|
||||
<input type="checkbox" name="columns[]" value="email" {{ in_array('email', old('columns', [])) ? 'checked' : '' }} class="text-blue-600 rounded">
|
||||
<span class="text-sm">{{ __('ui.email') }}</span>
|
||||
</label>
|
||||
<label class="inline-flex items-center gap-2">
|
||||
<input type="checkbox" name="columns[]" value="phone" {{ in_array('phone', old('columns', [])) ? 'checked' : '' }} class="text-blue-600 rounded">
|
||||
<span class="text-sm">{{ __('admin.phone') }}</span>
|
||||
</label>
|
||||
<label class="inline-flex items-center gap-2">
|
||||
<input type="checkbox" name="columns[]" value="children" {{ in_array('children', old('columns', [])) ? 'checked' : '' }} class="text-blue-600 rounded">
|
||||
<span class="text-sm">{{ __('admin.children') }}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Zusätzliche Spalten --}}
|
||||
<div x-show="source !== ''" x-cloak>
|
||||
<label class="block text-sm font-medium text-gray-700 mb-2">{{ __('admin.list_custom_columns') }}</label>
|
||||
<div class="space-y-2">
|
||||
<template x-for="(col, index) in customColumns" :key="index">
|
||||
<div class="flex items-center gap-2">
|
||||
<input type="text" :name="'custom_columns[' + index + ']'" x-model="customColumns[index]"
|
||||
class="flex-1 px-3 py-2 border border-gray-300 rounded-md text-sm"
|
||||
:placeholder="'{{ __('admin.list_column_name') }}'">
|
||||
<button type="button" @click="removeColumn(index)" class="text-red-500 hover:text-red-700 p-1">
|
||||
<svg class="w-5 h-5" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/></svg>
|
||||
</button>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
<button type="button" @click="addColumn()" class="mt-2 text-sm text-blue-600 hover:text-blue-800 inline-flex items-center gap-1">
|
||||
<svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 4v16m8-8H4"/></svg>
|
||||
{{ __('admin.list_add_column') }}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{{-- Submit --}}
|
||||
<div class="pt-2">
|
||||
<button type="submit" class="bg-blue-600 text-white px-6 py-2 rounded-md hover:bg-blue-700 text-sm font-medium">
|
||||
{{ __('admin.list_generate') }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</x-layouts.admin>
|
||||
176
resources/views/admin/list-generator/document.blade.php
Normal file
176
resources/views/admin/list-generator/document.blade.php
Normal file
@@ -0,0 +1,176 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>{{ $title }}</title>
|
||||
<style>
|
||||
@page {
|
||||
size: {{ $orientation ?? 'portrait' }};
|
||||
margin: 10mm;
|
||||
}
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
body {
|
||||
font-family: 'DejaVu Sans', Helvetica, Arial, sans-serif;
|
||||
font-size: {{ $fontSize ?? 10 }}pt;
|
||||
color: #374151;
|
||||
background: #f3f4f6;
|
||||
}
|
||||
|
||||
/* Card container */
|
||||
.card {
|
||||
background: #ffffff;
|
||||
border-radius: 8px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Dark header */
|
||||
.card-header {
|
||||
background: #1f2937;
|
||||
padding: 14px 20px;
|
||||
}
|
||||
.card-header h1 {
|
||||
font-size: {{ max(($fontSize ?? 10) + 4, 13) }}pt;
|
||||
font-weight: 700;
|
||||
color: #ffffff;
|
||||
margin: 0;
|
||||
}
|
||||
.card-header .subtitle {
|
||||
font-size: {{ max(($fontSize ?? 10), 9) }}pt;
|
||||
color: #d1d5db;
|
||||
margin-top: 2px;
|
||||
}
|
||||
|
||||
/* Notes bar */
|
||||
.notes-bar {
|
||||
padding: 8px 20px;
|
||||
background: #f9fafb;
|
||||
border-bottom: 1px solid #e5e7eb;
|
||||
font-size: {{ max(($fontSize ?? 10) - 1, 8) }}pt;
|
||||
color: #4b5563;
|
||||
}
|
||||
|
||||
/* Table */
|
||||
table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
th {
|
||||
background: #f3f4f6;
|
||||
border-bottom: 1px solid #e5e7eb;
|
||||
padding: 7px 12px;
|
||||
text-align: left;
|
||||
font-size: {{ max(($fontSize ?? 10) - 2, 7) }}pt;
|
||||
font-weight: 600;
|
||||
color: #6b7280;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.5px;
|
||||
}
|
||||
td {
|
||||
padding: 6px 12px;
|
||||
border-bottom: 1px solid #f3f4f6;
|
||||
font-size: {{ $fontSize ?? 10 }}pt;
|
||||
color: #374151;
|
||||
}
|
||||
tr:nth-child(even) td {
|
||||
background: #fafbfc;
|
||||
}
|
||||
.row-num {
|
||||
color: #9ca3af;
|
||||
font-size: {{ max(($fontSize ?? 10) - 2, 7) }}pt;
|
||||
width: 28px;
|
||||
font-family: monospace;
|
||||
}
|
||||
.empty-cell {
|
||||
color: #d1d5db;
|
||||
}
|
||||
.link {
|
||||
color: #2563eb;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/* Footer bar */
|
||||
.card-footer {
|
||||
padding: 8px 20px;
|
||||
background: #f9fafb;
|
||||
border-top: 1px solid #e5e7eb;
|
||||
font-size: {{ max(($fontSize ?? 10) - 3, 7) }}pt;
|
||||
color: #9ca3af;
|
||||
}
|
||||
.card-footer table { border: none; }
|
||||
.card-footer td {
|
||||
border: none;
|
||||
padding: 0;
|
||||
background: none;
|
||||
font-size: {{ max(($fontSize ?? 10) - 3, 7) }}pt;
|
||||
color: #9ca3af;
|
||||
}
|
||||
.card-footer .right {
|
||||
text-align: right;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="card">
|
||||
{{-- Dark header --}}
|
||||
<div class="card-header">
|
||||
<h1>{{ $title }}</h1>
|
||||
@if ($subtitle)
|
||||
<div class="subtitle">{{ $subtitle }}</div>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
{{-- Notes --}}
|
||||
@if ($notes)
|
||||
<div class="notes-bar">{{ $notes }}</div>
|
||||
@endif
|
||||
|
||||
{{-- Data table --}}
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="row-num">#</th>
|
||||
@foreach ($columns as $key => $header)
|
||||
<th>{{ $header }}</th>
|
||||
@endforeach
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@forelse ($rows as $i => $row)
|
||||
<tr>
|
||||
<td class="row-num">{{ $i + 1 }}</td>
|
||||
@foreach ($columns as $key => $header)
|
||||
<td>
|
||||
@if (($key === 'email') && !empty($row[$key]))
|
||||
<a class="link" href="mailto:{{ $row[$key] }}">{{ $row[$key] }}</a>
|
||||
@elseif (($key === 'phone') && !empty($row[$key]) && $row[$key] !== '–')
|
||||
<a class="link" href="tel:{{ $row[$key] }}">{{ $row[$key] }}</a>
|
||||
@elseif (($row[$key] ?? '') === '')
|
||||
<span class="empty-cell">—</span>
|
||||
@else
|
||||
{{ $row[$key] }}
|
||||
@endif
|
||||
</td>
|
||||
@endforeach
|
||||
</tr>
|
||||
@empty
|
||||
<tr>
|
||||
<td colspan="{{ count($columns) + 1 }}" style="text-align: center; color: #9ca3af; padding: 20px;">
|
||||
{{ __('admin.no_entries') }}
|
||||
</td>
|
||||
</tr>
|
||||
@endforelse
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{{-- Footer bar --}}
|
||||
<div class="card-footer">
|
||||
<table>
|
||||
<tr>
|
||||
<td>{{ count($rows) }} {{ __('admin.list_entries_count') }}</td>
|
||||
<td class="right">{{ __('admin.list_generated_at') }}: {{ $generatedAt->translatedFormat('d.m.Y, H:i') }} Uhr</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
90
resources/views/admin/list-generator/result.blade.php
Normal file
90
resources/views/admin/list-generator/result.blade.php
Normal file
@@ -0,0 +1,90 @@
|
||||
<x-layouts.admin :title="__('admin.list_result_title')">
|
||||
{{-- Success Banner --}}
|
||||
<div class="no-print mb-5 bg-green-50 border border-green-200 rounded-lg p-4 flex items-start gap-3">
|
||||
<svg class="w-5 h-5 text-green-500 mt-0.5 flex-shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"/></svg>
|
||||
<div>
|
||||
<p class="text-sm font-medium text-green-800">{{ __('admin.list_result_title') }}</p>
|
||||
<p class="text-xs text-green-600 mt-0.5">{{ __('admin.list_saved_info', ['name' => $file->original_name]) }}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Action Buttons --}}
|
||||
<div class="no-print mb-5 flex flex-wrap items-center gap-3">
|
||||
<a href="{{ route('files.download', $file) }}" class="bg-blue-600 text-white px-4 py-2 rounded-md hover:bg-blue-700 text-sm font-medium inline-flex items-center gap-2">
|
||||
<svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"/></svg>
|
||||
{{ __('admin.list_download_pdf') }}
|
||||
</a>
|
||||
<a href="{{ route('admin.list-generator.create') }}" class="bg-white border border-gray-300 text-gray-700 px-4 py-2 rounded-md hover:bg-gray-50 text-sm font-medium inline-flex items-center gap-2">
|
||||
<svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 4v16m8-8H4"/></svg>
|
||||
{{ __('admin.list_new') }}
|
||||
</a>
|
||||
<a href="{{ route('admin.files.index', ['category' => 'allgemein']) }}" class="text-sm text-gray-500 hover:text-gray-700 inline-flex items-center gap-1">
|
||||
<svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z"/></svg>
|
||||
{{ __('admin.list_to_library') }}
|
||||
</a>
|
||||
</div>
|
||||
|
||||
{{-- Preview Card --}}
|
||||
<div class="bg-white rounded-lg shadow overflow-hidden">
|
||||
{{-- Card Header --}}
|
||||
<div class="bg-gray-800 px-6 py-4">
|
||||
<h1 class="text-xl font-bold text-white">{{ $title }}</h1>
|
||||
@if ($subtitle)
|
||||
<p class="text-gray-300 text-sm mt-0.5">{{ $subtitle }}</p>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
{{-- Notes --}}
|
||||
@if ($notes)
|
||||
<div class="px-6 py-3 bg-gray-50 border-b border-gray-200">
|
||||
<p class="text-sm text-gray-600">{{ $notes }}</p>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
{{-- Table --}}
|
||||
<div class="overflow-x-auto">
|
||||
<table class="w-full text-sm">
|
||||
<thead>
|
||||
<tr class="bg-gray-100 border-b border-gray-200">
|
||||
<th class="px-4 py-2.5 text-left text-xs font-semibold text-gray-500 uppercase tracking-wider w-10">#</th>
|
||||
@foreach ($columns as $key => $header)
|
||||
<th class="px-4 py-2.5 text-left text-xs font-semibold text-gray-500 uppercase tracking-wider">{{ $header }}</th>
|
||||
@endforeach
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="divide-y divide-gray-100">
|
||||
@forelse ($rows as $i => $row)
|
||||
<tr class="hover:bg-blue-50/50 transition-colors">
|
||||
<td class="px-4 py-2 text-gray-400 text-xs font-mono">{{ $i + 1 }}</td>
|
||||
@foreach ($columns as $key => $header)
|
||||
<td class="px-4 py-2 {{ ($row[$key] ?? '') === '' ? 'text-gray-300' : 'text-gray-700' }}">
|
||||
@if (($key === 'email') && !empty($row[$key]))
|
||||
<a href="mailto:{{ $row[$key] }}" class="text-blue-600 hover:underline">{{ $row[$key] }}</a>
|
||||
@elseif (($key === 'phone') && !empty($row[$key]) && $row[$key] !== '–')
|
||||
<a href="tel:{{ $row[$key] }}" class="text-blue-600 hover:underline">{{ $row[$key] }}</a>
|
||||
@elseif (($row[$key] ?? '') === '')
|
||||
<span class="text-gray-300">—</span>
|
||||
@else
|
||||
{{ $row[$key] }}
|
||||
@endif
|
||||
</td>
|
||||
@endforeach
|
||||
</tr>
|
||||
@empty
|
||||
<tr>
|
||||
<td colspan="{{ count($columns) + 1 }}" class="px-4 py-8 text-center text-gray-400">
|
||||
{{ __('admin.no_entries') }}
|
||||
</td>
|
||||
</tr>
|
||||
@endforelse
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
{{-- Card Footer --}}
|
||||
<div class="px-6 py-3 bg-gray-50 border-t border-gray-200 flex items-center justify-between">
|
||||
<span class="text-xs text-gray-400">{{ count($rows) }} {{ __('admin.list_entries_count') }}</span>
|
||||
<span class="text-xs text-gray-400">{{ __('admin.list_generated_at') }}: {{ now()->translatedFormat(__('ui.date_format')) }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</x-layouts.admin>
|
||||
Reference in New Issue
Block a user