giftcon_dev/resources/views/admin/log/MemberJoinLogController.blade.php
2026-03-03 15:13:16 +09:00

189 lines
8.6 KiB
PHP

{{-- resources/views/admin/log/MemberJoinLogController.blade.php --}}
@extends('admin.layouts.app')
@section('title', '회원가입 필터 로그')
@section('page_title', '회원가입 필터 로그')
@section('page_desc', '회원가입 시 필터에 걸린 기록을 조회합니다.')
@section('content_class', 'a-content--full')
@push('head')
<style>
.bar{display:flex;justify-content:space-between;align-items:flex-end;gap:12px;flex-wrap:wrap;}
.filters{display:flex;gap:8px;flex-wrap:wrap;align-items:flex-end;}
.filters .inp{width:170px;}
.filters .inpWide{width:220px;}
.lbtn{padding:8px 12px;font-size:13px;border-radius:12px;line-height:1.1;text-decoration:none;display:inline-flex;align-items:center;justify-content:center;gap:6px;
border:1px solid rgba(255,255,255,.10);background:rgba(255,255,255,.06);color:inherit;cursor:pointer;}
.lbtn:hover{background:rgba(255,255,255,.10);text-decoration:none;}
.lbtn--ghost{background:transparent;}
.lbtn--primary{background:rgba(59,130,246,.88);border-color:rgba(59,130,246,.95);color:#fff;}
.lbtn--primary:hover{background:rgba(59,130,246,.98);}
.mono{padding:4px 8px;border-radius:10px;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.10);
font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:12px;display:inline-block;}
.muted{opacity:.8;font-size:12px;}
.nowrap{white-space:nowrap;}
.badge{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:999px;font-size:12px;
border:1px solid rgba(255,255,255,.10);background:rgba(255,255,255,.06);}
.badge--skt{border-color:rgba(34,197,94,.35);background:rgba(34,197,94,.10);}
.badge--kt{border-color:rgba(59,130,246,.35);background:rgba(59,130,246,.10);}
.badge--lgu{border-color:rgba(236,72,153,.35);background:rgba(236,72,153,.10);}
.badge--mvno{border-color:rgba(245,158,11,.35);background:rgba(245,158,11,.10);}
.badge--muted{opacity:.9;}
.badge--bad{border-color:rgba(244,63,94,.35);background:rgba(244,63,94,.10);}
/* 회원번호 링크 색상 흰색 */
a.memlink{color:#fff;text-decoration:none;}
a.memlink:hover{color:#fff;text-decoration:underline;}
</style>
@endpush
@section('content')
@php
$indexUrl = route('admin.systemlog.member-join-logs', [], false);
$f = $filters ?? [];
$dateFrom = (string)($f['date_from'] ?? '');
$dateTo = (string)($f['date_to'] ?? '');
$gubun = (string)($f['gubun'] ?? '');
$memNo = (string)($f['mem_no'] ?? '');
$phone = (string)($f['phone'] ?? '');
$email = (string)($f['email'] ?? '');
$ip4 = (string)($f['ip4'] ?? '');
$ip4c = (string)($f['ip4_c'] ?? '');
@endphp
<div class="a-card" style="padding:16px; margin-bottom:16px;">
<div class="bar">
<div>
<div style="font-weight:900;font-size:16px;">회원가입 필터 로그</div>
<div class="muted" style="margin-top:4px;">리스트에서 전체 정보 표시 · 검색/페이징 지원</div>
</div>
<form method="GET" action="{{ $indexUrl }}" class="filters">
<div>
<label class="muted">From</label>
<input class="a-input inp" type="date" name="date_from" value="{{ $dateFrom }}">
</div>
<div>
<label class="muted">To</label>
<input class="a-input inp" type="date" name="date_to" value="{{ $dateTo }}">
</div>
<div>
<label class="muted">gubun</label>
<input class="a-input inp" name="gubun" value="{{ $gubun }}" placeholder="ex) 01">
</div>
<div>
<label class="muted">mem_no</label>
<input class="a-input inp" name="mem_no" value="{{ $memNo }}" inputmode="numeric" placeholder="ex) 70464">
</div>
<div>
<label class="muted">phone(정확검색)</label>
<input class="a-input inp" name="phone" value="{{ $phone }}" placeholder="01111111111">
</div>
<div>
<label class="muted">email</label>
<input class="a-input inpWide" name="email" value="{{ $email }}" placeholder="gmail.com / ryu">
</div>
<div>
<label class="muted">ip4</label>
<input class="a-input inp" name="ip4" value="{{ $ip4 }}" placeholder="221.150.">
</div>
<div>
<label class="muted">ip4_c</label>
<input class="a-input inp" name="ip4_c" value="{{ $ip4c }}" placeholder="221.150.109">
</div>
<div style="display:flex;gap:8px;align-items:flex-end;">
<button class="lbtn lbtn--ghost" type="submit">검색</button>
<a class="lbtn lbtn--ghost" href="{{ $indexUrl }}">초기화</a>
</div>
</form>
</div>
</div>
<div class="a-card" style="padding:16px;">
<div class="a-muted" style="margin-bottom:10px;"> <b>{{ $page->total() }}</b></div>
<div style="overflow:auto;">
<table class="a-table table" style="width:100%; min-width:1100px;">
<thead>
<tr>
<th style="width:90px;">SEQ</th>
<th style="width:190px;">일시</th>
<th style="width:160px;">회원</th>
<th style="width:420px;">전화/이메일</th>
<th style="width:260px;">IP</th>
<th style="width:120px;">gubun</th>
</tr>
</thead>
<tbody>
@forelse(($items ?? []) as $r0)
@php
$r = is_array($r0) ? $r0 : (array)$r0;
$seq = (int)($r['seq'] ?? 0);
$memNoInt = (int)($r['mem_no_int'] ?? 0);
$memLink = $r['mem_link'] ?? null;
$emailDisp = (string)($r['email_display'] ?? '');
if ($emailDisp === '-' ) $emailDisp = '';
$ip4v = (string)($r['ip4'] ?? '');
$ip4cv = (string)($r['ip4_c'] ?? '');
@endphp
<tr>
<td class="a-muted">{{ $seq }}</td>
<td class="a-muted nowrap">{{ $r['dt_reg'] ?? '-' }}</td>
<td>
@if($memNoInt > 0 && $memLink)
<a href="{{ $memLink }}" class="mono memlink" target="_blank" rel="noopener">{{ $memNoInt }}</a>
@else
<span class="badge badge--bad">가입차단</span>
@endif
</td>
{{-- 전화/이메일 한줄: "전화번호 바로뒤 이메일" (이메일 없으면 빈값) --}}
<td>
<div style="display:flex;gap:8px;align-items:center;flex-wrap:wrap;">
<span class="badge {{ $r['corp_badge'] ?? 'badge--muted' }}">{{ $r['corp_label'] ?? '-' }}</span>
<span class="mono">{{ $r['phone_display'] ?? '-' }}</span>
@if($emailDisp !== '')
<span class="muted">{{ $emailDisp }}</span>
@endif
</div>
</td>
{{-- IP 한줄: ip4 + ip4_c --}}
<td class="nowrap">
<span class="mono">{{ $ip4v !== '' ? $ip4v : '-' }}</span>
@if($ip4cv !== '')
<span class="mono" style="opacity:.75">{{ $ip4cv }}</span>
@endif
</td>
<td><span class="mono">{{ $r['gubun'] ?? '-' }}</span></td>
</tr>
@empty
<tr><td colspan="6" class="a-muted" style="padding:16px;">데이터가 없습니다.</td></tr>
@endforelse
</tbody>
</table>
</div>
<div style="margin-top:12px;">
{{ $page->onEachSide(1)->links('vendor.pagination.admin') }}
</div>
</div>
@endsection