2026-02-09 19:47:58 +09:00

272 lines
14 KiB
PHP

@extends('admin.layouts.app')
@section('title', '1:1 문의 상세')
@section('page_title', '1:1 문의 상세')
@section('page_desc', '업무 배정/처리/보류/완료 및 답변 발송')
@push('head')
<style>
.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--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);}
.lbtn--danger{background:rgba(244,63,94,.88);border-color:rgba(244,63,94,.95);color:#fff;}
.lbtn--danger:hover{background:rgba(244,63,94,.98);}
.lbtn--warn{background:rgba(245,158,11,.88);border-color:rgba(245,158,11,.95);color:#fff;}
.lbtn--warn:hover{background:rgba(245,158,11,.98);}
.lbtn--ghost{background:transparent;}
.pill{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);}
.pill--ok{border-color:rgba(34,197,94,.35);background:rgba(34,197,94,.12);}
.pill--warn{border-color:rgba(245,158,11,.35);background:rgba(245,158,11,.12);}
.pill--muted{opacity:.9;}
.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;}
.wrap{max-width:1200px;}
.grid{display:grid;grid-template-columns:1fr;gap:12px;}
@media (min-width: 1100px){ .grid{grid-template-columns: 1fr 1fr;} }
.actionsTop{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;align-items:center;}
.actionsRight{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-left:auto;}
.sectionTitle{font-weight:900;margin-bottom:8px;}
</style>
@endpush
@section('content')
@php
$st = (string)$row->state;
$stLabel = $stateLabels[$st][0] ?? $st;
$stCls = $stateLabels[$st][1] ?? 'pill--muted';
@endphp
<div class="a-card wrap" style="padding:16px; margin-bottom:16px;">
<div class="actionsTop">
<div>
<div class="a-muted" style="font-size:12px;">접수분류 / 처리상태</div>
<div style="display:flex; align-items:center; gap:10px; margin-top:6px; flex-wrap:wrap;">
<span class="pill pill--muted">{{ $row->enquiry_code ?? '-' }}</span>
<span class="pill {{ $stCls }}"> {{ $stLabel }}</span>
<span class="mono">#{{ (int)$row->seq }} / year {{ (int)$year }}</span>
</div>
</div>
<div class="actionsRight">
<a class="lbtn lbtn--ghost" href="{{ route('admin.qna.index', request()->only(['year','enquiry_code','state','q','q_type','date_from','date_to','my_work','page'])) }}"> 목록</a>
@if($actions['can_assign'])
<form method="POST" action="{{ route('admin.qna.assign',['seq'=>$row->seq,'year'=>$year]) }}">
@csrf
<button class="lbtn lbtn--primary" type="submit"> 업무로 배정</button>
</form>
@endif
@if($actions['can_start'])
<form method="POST" action="{{ route('admin.qna.start',['seq'=>$row->seq,'year'=>$year]) }}">
@csrf
<button class="lbtn lbtn--primary" type="submit">해당업무시작</button>
</form>
@endif
@if($actions['can_return'])
<form method="POST" action="{{ route('admin.qna.return',['seq'=>$row->seq,'year'=>$year]) }}" onsubmit="return confirm('업무를 반납할까요?');">
@csrf
<button class="lbtn lbtn--warn" type="submit">업무 반납하기</button>
</form>
@endif
@if($actions['can_complete'])
<form method="POST" action="{{ route('admin.qna.complete',['seq'=>$row->seq,'year'=>$year]) }}" onsubmit="return confirm('업무를 완료 처리할까요? (사용자에게 발송됩니다)');">
@csrf
<button class="lbtn lbtn--primary" type="submit">업무처리완료</button>
</form>
@endif
</div>
</div>
</div>
<div class="wrap grid">
<div class="a-card" style="padding:16px;">
<div class="sectionTitle">제목</div>
<div style="font-weight:900;">{{ $row->enquiry_title }}</div>
<div style="margin-top:14px;">
<div class="sectionTitle">회원정보</div>
@if($member)
<div class="a-muted" style="font-size:13px; line-height:1.7;">
회원번호 : <b>{{ (int)$member->mem_no }}</b><br>
이메일 : <b>{{ $member->email }}</b><br>
성명 : <b>{{ $member->name }}</b><br>
전화번호 : <b>{{ $member->cell_phone }}</b>
</div>
@else
<div class="a-muted">회원 정보를 찾을 없습니다.</div>
@endif
</div>
<div style="margin-top:18px;">
<div class="sectionTitle">내용</div>
<div class="a-input" style="min-height:110px; white-space:pre-wrap;">{{ $row->enquiry_content }}</div>
</div>
<div style="margin-top:18px;">
<div class="sectionTitle">관리자 답변</div>
@if($actions['can_answer'])
<form method="POST" action="{{ route('admin.qna.answer.save',['seq'=>$row->seq,'year'=>$year]) }}">
@csrf
<textarea class="a-input" name="answer_content" rows="10" placeholder="관리자 답변을 입력해 주세요">{{ old('answer_content', $row->answer_content) }}</textarea>
@error('answer_content') <div class="a-error">{{ $message }}</div> @enderror
<div class="a-muted" style="margin-top:10px; font-size:12px;">
SMS답변 (업무완료 SMS요청 회원에게 발송됩니다)
</div>
<textarea class="a-input" name="answer_sms" rows="3" maxlength="500">{{ old('answer_sms', $row->answer_sms ?? '[핀포유] 1:1 문의 답변이 등록되었습니다. 1:1문의내역에서 확인 가능합니다. 감사합니다') }}</textarea>
@error('answer_sms') <div class="a-error">{{ $message }}</div> @enderror
<div style="margin-top:10px; display:flex; gap:8px; justify-content:flex-end;">
<button class="lbtn lbtn--primary" type="submit">저장</button>
</div>
</form>
@else
<div class="a-input" style="min-height:110px; white-space:pre-wrap;">
{{ $row->answer_content ?: '등록된 답변이 없습니다.' }}
</div>
<div class="a-muted" style="margin-top:8px; font-size:12px;">
SMS: {{ $row->answer_sms ?: '-' }}
</div>
@endif
</div>
@if($actions['can_postpone'])
<div style="margin-top:18px;">
<div class="sectionTitle">업무 보류</div>
<form method="POST" action="{{ route('admin.qna.postpone',['seq'=>$row->seq,'year'=>$year]) }}">
@csrf
<div style="display:flex; gap:8px; flex-wrap:wrap;">
<select class="a-input" name="defer_code" style="width:160px;">
<option value="">보류코드(선택)</option>
@foreach($deferCodes as $c)
<option value="{{ $c['code'] }}">{{ $c['code'] }} · {{ $c['title'] }}</option>
@endforeach
</select>
<input class="a-input" name="defer_comment" style="flex:1; min-width:240px;" placeholder="보류 사유를 입력해 주세요">
<button class="lbtn lbtn--danger" type="submit" onclick="return confirm('업무를 보류할까요?');">업무 보류하기</button>
</div>
@error('defer_comment') <div class="a-error">{{ $message }}</div> @enderror
</form>
</div>
@endif
</div>
<div class="a-card" style="padding:16px;">
<div class="sectionTitle">최근 구매기록(10)</div>
@if($orders)
<div style="overflow:auto;">
<table class="a-table">
<thead>
<tr>
<th>주문</th>
<th>상품</th>
<th>금액</th>
<th>결제일시</th>
<th>상태</th>
</tr>
</thead>
<tbody>
@foreach($orders as $o)
<tr>
<td class="a-muted">{{ $o->order_no ?? ($o->seq ?? '-') }}</td>
<td>{{ $o->product_name ?? '-' }}</td>
<td class="a-muted">{{ $o->price ?? '-' }}</td>
<td class="a-muted">{{ $o->regdate ?? '-' }}</td>
<td class="a-muted">{{ $o->stat_pay ?? '-' }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
@else
<div class="a-muted">구매기록을 불러올 없습니다(테이블/컬럼 확인 필요).</div>
@endif
<div style="margin-top:18px;">
<div class="sectionTitle">변경이력</div>
@if($stateLog)
<div style="overflow:auto;">
<table class="a-table">
<thead>
<tr>
<th style="width:140px;">처리자</th>
<th style="width:80px;"></th>
<th style="width:80px;"></th>
<th>내용</th>
<th style="width:160px;">일자</th>
</tr>
</thead>
<tbody>
@foreach($stateLog as $lg)
@php
$aid = (int)($lg['admin_num'] ?? 0);
$a = $admins[$aid] ?? null;
$before = (string)($lg['state_before'] ?? '');
$after = (string)($lg['state_after'] ?? '');
@endphp
<tr>
<td class="a-muted">
{{ $a ? ($a['name'].' ('.$a['email'].')') : ('admin#'.$aid) }}
</td>
<td class="a-muted">{{ $stateLabels[$before][0] ?? $before }}</td>
<td class="a-muted">{{ $stateLabels[$after][0] ?? $after }}</td>
<td>{{ $lg['why'] ?? '' }}</td>
<td class="a-muted">{{ $lg['when'] ?? '' }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
@else
<div class="a-muted">변경이력이 없습니다.</div>
@endif
</div>
<div style="margin-top:18px;">
<div class="sectionTitle">내부 메모</div>
<form method="POST" action="{{ route('admin.qna.memo.add',['seq'=>$row->seq,'year'=>$year]) }}">
@csrf
@php $canMemo = (bool)($actions['canMemo'] ?? false); @endphp
<textarea class="a-input" name="memo" rows="3"
{{ $canMemo ? '' : 'disabled' }}
placeholder="{{ $canMemo ? '내부 메모를 입력하세요' : '업무 배정 후(내 업무일 때) 메모 작성이 가능합니다.' }}"></textarea>
<button class="lbtn lbtn--primary" type="submit" {{ $canMemo ? '' : 'disabled' }}>
메모 저장
</button>
</form>
@if($memoLog)
<div style="margin-top:10px; display:flex; flex-direction:column; gap:8px;">
@foreach($memoLog as $m)
@php
$aid = (int)($m['admin_num'] ?? 0);
$a = $admins[$aid] ?? null;
@endphp
<div class="a-card" style="padding:10px;">
<div class="a-muted" style="font-size:12px;">
{{ $a ? ($a['name'].' ('.$a['email'].')') : ('admin#'.$aid) }}
· {{ $m['when'] ?? '' }}
</div>
<div style="margin-top:4px; white-space:pre-wrap;">{{ $m['memo'] ?? '' }}</div>
</div>
@endforeach
</div>
@endif
</div>
</div>
</div>
@endsection