Files
sam-manage/resources/views/fcm/partials/history-table.blade.php
hskwon c073b82633 feat: FCM 관리자 페이지 추가
- FCM 토큰 관리 페이지 (목록, 활성화/비활성화, 삭제)
- 테스트 발송 페이지 (대상 필터, 미리보기, 발송)
- 발송 이력 페이지 (필터링, 결과 확인)
- FcmSender 서비스 (HTTP v1, 배치 처리)
- fcm_send_logs 테이블 마이그레이션
- google/auth 패키지 추가
2025-12-19 09:57:00 +09:00

77 lines
4.3 KiB
PHP

<div id="history-table-container">
<table class="min-w-full divide-y divide-gray-200">
<thead class="bg-gray-50">
<tr>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">ID</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">발송자</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">대상</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">제목</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">결과</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">상태</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">발송일시</th>
</tr>
</thead>
<tbody class="bg-white divide-y divide-gray-200">
@forelse($logs as $log)
<tr>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">{{ $log->id }}</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900">{{ $log->sender?->name ?? '-' }}</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
{{ $log->tenant?->company_name ?? '전체' }}
@if($log->platform)
<span class="ml-1 text-xs text-gray-400">({{ $log->platform }})</span>
@endif
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm font-medium text-gray-900 truncate max-w-[200px]" title="{{ $log->title }}">{{ $log->title }}</div>
<div class="text-sm text-gray-500 truncate max-w-[200px]" title="{{ $log->body }}">{{ $log->body }}</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm">
<span class="text-green-600">{{ $log->success_count }}/{{ $log->total_count }}</span>
<span class="text-gray-400">({{ $log->success_rate }}%)</span>
</div>
@if($log->invalid_token_count > 0)
<div class="text-xs text-red-500">무효: {{ $log->invalid_token_count }}</div>
@endif
</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 py-1 text-xs rounded-full
@if($log->status === 'pending') bg-gray-100 text-gray-800
@elseif($log->status === 'sending') bg-blue-100 text-blue-800
@elseif($log->status === 'completed') bg-green-100 text-green-800
@else bg-red-100 text-red-800
@endif">
@switch($log->status)
@case('pending') 대기 @break
@case('sending') 발송 @break
@case('completed') 완료 @break
@case('failed') 실패 @break
@default {{ $log->status }}
@endswitch
</span>
@if($log->error_message)
<div class="text-xs text-red-500 mt-1">{{ $log->error_message }}</div>
@endif
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
{{ $log->created_at?->format('Y-m-d H:i') ?? '-' }}
</td>
</tr>
@empty
<tr>
<td colspan="7" class="px-6 py-12 text-center text-gray-500">
발송 이력이 없습니다.
</td>
</tr>
@endforelse
</tbody>
</table>
@if($logs->hasPages())
<div class="px-6 py-4 border-t border-gray-200">
{{ $logs->withQueryString()->links() }}
</div>
@endif
</div>