From daa7d40f4e670bf6ffbdb7b98619e3c828392014 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Thu, 5 Mar 2026 11:23:32 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20[approval]=20=EA=B2=B0=EC=9E=AC?= =?UTF-8?q?=EC=84=9C=EB=AA=85=EB=9E=80=20=ED=85=8C=EC=9D=B4=EB=B8=94=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20(=EC=A0=84=ED=86=B5=20=EA=B2=B0=EC=9E=AC?= =?UTF-8?q?=20=EC=96=91=EC=8B=9D)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 문서 상세 우측 상단에 결재서명란 테이블 배치 - 작성자 + 결재자 컬럼, 직급/이름/서명/날짜 표시 - 승인/반려/보류/전결 상태별 도장 아이콘 - 기존 원형 타임라인 결재 진행 제거, 결재 의견만 유지 --- .../partials/_approval-stamp-table.blade.php | 83 +++++++++ resources/views/approvals/show.blade.php | 162 +++++++++--------- 2 files changed, 163 insertions(+), 82 deletions(-) create mode 100644 resources/views/approvals/partials/_approval-stamp-table.blade.php diff --git a/resources/views/approvals/partials/_approval-stamp-table.blade.php b/resources/views/approvals/partials/_approval-stamp-table.blade.php new file mode 100644 index 00000000..746247dc --- /dev/null +++ b/resources/views/approvals/partials/_approval-stamp-table.blade.php @@ -0,0 +1,83 @@ +{{-- + 결재서명란 (전통 테이블 형식) + Props: + $approval (Approval model) - 결재 문서 +--}} +@php + $drafter = $approval->drafter; + $approverSteps = $approval->steps->whereIn('step_type', ['approval', 'agreement'])->sortBy('step_order')->values(); +@endphp + + + + {{-- 1행: 직급/역할 --}} + + + + @foreach($approverSteps as $step) + + @endforeach + + {{-- 2행: 서명/도장 영역 --}} + + + @foreach($approverSteps as $step) + + @endforeach + + {{-- 3행: 이름 + 처리일시 --}} + + + @foreach($approverSteps as $step) + + @endforeach + + +
+ 결재 + + 작성자 + + {{ $step->approver_position ?: ($step->step_type === 'agreement' ? '합의' : '결재') }} +
+ @if(in_array($approval->status, ['pending', 'approved', 'rejected', 'cancelled', 'on_hold'])) + {{ $drafter?->name ?? '-' }} + @endif + + @if($step->status === 'approved') + @if(($step->approval_type ?? 'normal') === 'pre_decided') +
+ 전결 +
+ @else +
+ 승인 +
+ @endif + @elseif($step->status === 'rejected') +
+ 반려 +
+ @elseif($step->status === 'on_hold') +
+ 보류 +
+ @elseif($step->status === 'skipped') + - + @endif +
+ @if(in_array($approval->status, ['pending', 'approved', 'rejected', 'cancelled', 'on_hold'])) +
+ {{ $approval->drafted_at?->format('m/d') ?? '' }} +
+ @endif +
+
+ {{ $step->approver_name ?? ($step->approver?->name ?? '') }} +
+ @if($step->acted_at) +
+ {{ $step->acted_at->format('m/d') }} +
+ @endif +
diff --git a/resources/views/approvals/show.blade.php b/resources/views/approvals/show.blade.php index 2f709d1f..1cbaf3d1 100644 --- a/resources/views/approvals/show.blade.php +++ b/resources/views/approvals/show.blade.php @@ -23,44 +23,51 @@ class="bg-gray-600 hover:bg-gray-700 text-white px-4 py-2 rounded-lg transition {{-- 문서 정보 --}}
-
-
- 상태 -
- @include('approvals.partials._status-badge', ['status' => $approval->status]) - @if($approval->is_urgent) - 긴급 - @endif -
-
-
- 양식 -
{{ $approval->form?->name ?? '-' }}
-
-
- 기안자 -
{{ $approval->drafter?->name ?? '-' }}
-
-
- 기안일 -
{{ $approval->drafted_at?->format('Y-m-d H:i') ?? '-' }}
-
- @if($approval->completed_at) -
- 완료일 -
{{ $approval->completed_at->format('Y-m-d H:i') }}
-
- @endif - @if($approval->parent_doc_id) -
- 원본 문서 -
- - {{ $approval->parentDocument?->document_number ?? '원본 보기' }} - +
+
+
+ 상태 +
+ @include('approvals.partials._status-badge', ['status' => $approval->status]) + @if($approval->is_urgent) + 긴급 + @endif
- @endif +
+ 양식 +
{{ $approval->form?->name ?? '-' }}
+
+
+ 기안자 +
{{ $approval->drafter?->name ?? '-' }}
+
+
+ 기안일 +
{{ $approval->drafted_at?->format('Y-m-d H:i') ?? '-' }}
+
+ @if($approval->completed_at) +
+ 완료일 +
{{ $approval->completed_at->format('Y-m-d H:i') }}
+
+ @endif + @if($approval->parent_doc_id) + + @endif +
+ + {{-- 결재서명란 --}} +
+ @include('approvals.partials._approval-stamp-table', ['approval' => $approval]) +
{{-- 회수 사유 표시 --}} @@ -85,56 +92,47 @@ class="bg-gray-600 hover:bg-gray-700 text-white px-4 py-2 rounded-lg transition
- {{-- 결재 진행 단계 --}} + {{-- 결재 의견 --}} + @php + $stepsWithComments = $approval->steps->filter(fn($s) => $s->comment); + @endphp + @if($stepsWithComments->isNotEmpty())
-

결재 진행

- @include('approvals.partials._step-progress', [ - 'steps' => $approval->steps->toArray(), - 'currentStep' => $approval->current_step, - ]) - - {{-- 결재 의견 목록 --}} - @php - $stepsWithComments = $approval->steps->filter(fn($s) => $s->comment); - @endphp - @if($stepsWithComments->isNotEmpty()) -
-

결재 의견

-
- @foreach($stepsWithComments as $step) -
-
- @if($step->status === 'approved') - @if(($step->approval_type ?? 'normal') === 'pre_decided') - - @else - - @endif - @elseif($step->status === 'on_hold') - - @else - - @endif -
-
-
- {{ $step->approver_name ?? ($step->approver?->name ?? '') }} - @if(($step->approval_type ?? 'normal') === 'pre_decided') - (전결) - @endif - @if($step->status === 'on_hold') - (보류) - @endif - {{ $step->acted_at?->format('Y-m-d H:i') }} -
-

{{ $step->comment }}

-
+

결재 의견

+
+ @foreach($stepsWithComments as $step) +
+
+ @if($step->status === 'approved') + @if(($step->approval_type ?? 'normal') === 'pre_decided') + + @else + + @endif + @elseif($step->status === 'on_hold') + + @else + + @endif +
+
+
+ {{ $step->approver_name ?? ($step->approver?->name ?? '') }} + @if(($step->approval_type ?? 'normal') === 'pre_decided') + (전결) + @endif + @if($step->status === 'on_hold') + (보류) + @endif + {{ $step->acted_at?->format('Y-m-d H:i') }}
- @endforeach +

{{ $step->comment }}

+
-
- @endif + @endforeach +
+ @endif {{-- 결재 처리 (승인/반려/보류/전결) --}} @if($approval->isActionable() && $approval->isCurrentApprover(auth()->id()))