172 lines
7.8 KiB
PHP
172 lines
7.8 KiB
PHP
@extends('admin.layouts.app')
|
|
|
|
@section('title', '내 정보')
|
|
@section('page_title', '내 정보')
|
|
@section('page_desc', '프로필/연락처/보안 상태')
|
|
|
|
@section('content')
|
|
<section class="a-page">
|
|
|
|
<div class="a-grid a-grid--me">
|
|
<article class="a-card">
|
|
<div class="a-card__head">
|
|
<div>
|
|
<div class="a-card__title">기본 정보</div>
|
|
<div class="a-card__desc a-muted">이메일은 변경 불가</div>
|
|
</div>
|
|
</div>
|
|
|
|
<form method="POST" action="{{ route('admin.me.update') }}" class="a-form" onsubmit="this.querySelector('button[type=submit]').disabled=true;">
|
|
@csrf
|
|
|
|
<div class="a-field">
|
|
<label class="a-label">이메일</label>
|
|
<input class="a-input" value="{{ $me->email }}" disabled>
|
|
</div>
|
|
|
|
<div class="a-field">
|
|
<label class="a-label" for="nickname">닉네임</label>
|
|
<input
|
|
class="a-input"
|
|
id="nickname"
|
|
name="nickname"
|
|
placeholder="예: super admin"
|
|
value="{{ old('nickname', $me->nickname ?? '') }}"
|
|
>
|
|
@error('nickname')<div class="a-error">{{ $message }}</div>@enderror
|
|
</div>
|
|
|
|
<div class="a-field">
|
|
<label class="a-label" for="name">성명(본명)</label>
|
|
<input
|
|
class="a-input"
|
|
id="name"
|
|
name="name"
|
|
value="{{ old('name', $me->name ?? '') }}"
|
|
>
|
|
@error('name')<div class="a-error">{{ $message }}</div>@enderror
|
|
</div>
|
|
|
|
<div class="a-field">
|
|
<label class="a-label" for="phone">휴대폰</label>
|
|
<input class="a-input" id="phone" name="phone" placeholder="01012345678" value="{{ old('phone', $phone_plain ?? '') }}">
|
|
@error('phone')<div class="a-error">{{ $message }}</div>@enderror
|
|
</div>
|
|
|
|
<button class="a-btn a-btn--primary" type="submit" style="margin-top:12px;">
|
|
저장
|
|
</button>
|
|
</form>
|
|
</article>
|
|
|
|
<article class="a-card">
|
|
<div class="a-card__head">
|
|
<div>
|
|
<div class="a-card__title">보안</div>
|
|
<div class="a-card__desc a-muted">비밀번호 변경 및 2FA 상태</div>
|
|
</div>
|
|
</div>
|
|
|
|
@php
|
|
$hasSecret = !empty($me->totp_secret_enc);
|
|
$isVerified = !empty($me->totp_verified_at);
|
|
$isEnabled = (int)($me->totp_enabled ?? 0) === 1;
|
|
@endphp
|
|
|
|
<div class="a-meinfo">
|
|
<div class="a-meinfo__row">
|
|
<div class="a-meinfo__k">2FA 모드</div>
|
|
<div class="a-meinfo__v">
|
|
<span class="a-pill">{{ ($isEnabled=='1') ? 'google TOPT' : 'SMS' }}</span>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="a-meinfo__row">
|
|
<div class="a-meinfo__k">TOTP</div>
|
|
<div class="a-meinfo__v">
|
|
@php
|
|
$hasSecret = !empty($me->totp_secret_enc); // 버튼 기준 (등록 플로우 진입 여부)
|
|
$isVerified = !empty($me->totp_verified_at); // 등록 완료 여부
|
|
$isModeOtp = (int)($me->totp_enabled ?? 0) === 1; // 현재 로그인 인증 방식 표시용(조건 X)
|
|
@endphp
|
|
|
|
{{-- 1) 등록 상태 표시 (등록/미등록/진행중) --}}
|
|
@if($hasSecret && $isVerified)
|
|
<span class="a-pill a-pill--ok">TOTP 등록됨</span>
|
|
<span class="a-muted" style="margin-left:8px; font-size:12px;">
|
|
<BR>({{ $me->totp_verified_at }})
|
|
</span>
|
|
@elseif($hasSecret && !$isVerified)
|
|
<span class="a-pill a-pill--warn">등록 진행중</span>
|
|
<span class="a-muted" style="margin-left:8px; font-size:12px;">
|
|
(인증코드 확인 필요)
|
|
</span>
|
|
@else
|
|
<span class="a-pill a-pill--muted">미등록</span>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
<div class="a-meinfo__row">
|
|
<div class="a-meinfo__k">내 역할</div>
|
|
<div class="a-meinfo__v">
|
|
<div class="a-chips">
|
|
@forelse(($roles ?? []) as $r)
|
|
<span class="a-chip">
|
|
{{ $r['name'] }}
|
|
<span class="a-chip__sub">{{ $r['code'] }}</span>
|
|
</span>
|
|
@empty
|
|
<span class="a-muted">부여된 역할이 없습니다.</span>
|
|
@endforelse
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{{-- <div class="a-meinfo__row">--}}
|
|
{{-- <div class="a-meinfo__k">내 권한</div>--}}
|
|
{{-- <div class="a-meinfo__v">--}}
|
|
{{-- <div class="a-chips">--}}
|
|
{{-- @forelse(($perms ?? []) as $p)--}}
|
|
{{-- <span class="a-chip">{{ $p['code'] }}</span>--}}
|
|
{{-- @empty--}}
|
|
{{-- <span class="a-muted">권한 정보가 없습니다.</span>--}}
|
|
{{-- @endforelse--}}
|
|
{{-- </div>--}}
|
|
{{-- </div>--}}
|
|
{{-- </div>--}}
|
|
|
|
<div class="a-meinfo__row">
|
|
<div class="a-meinfo__k">최근 로그인</div>
|
|
<div class="a-meinfo__v">
|
|
{{ $me->last_login_at ? $me->last_login_at : '-' }}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<a class="a-btn a-btn--highlight" href="{{ route('admin.me.password.form') }}" style="margin-top:12px;">
|
|
비밀번호 변경
|
|
</a>
|
|
|
|
|
|
<div class="a-muted" style="font-size:12px; margin-top:10px;">
|
|
<div style="margin-top:10px;">
|
|
@if(!$hasSecret)
|
|
<a class="a-btn a-btn--primary a-btn--sm" style="width:auto;"
|
|
href="{{ route('admin.security') }}">
|
|
Google OTP 등록
|
|
</a>
|
|
@else
|
|
<a class="a-btn a-btn--ghost a-btn--sm" style="width:auto;"
|
|
href="{{ route('admin.security') }}">
|
|
2FA 인증방법 변경 / Google OTP 관리
|
|
</a>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
|
|
</article>
|
|
</div>
|
|
|
|
</section>
|
|
@endsection
|