From 5fd69830ca48b1cc8fcfbc87ce5832d14b624ca9 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 13:06:30 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20[approval]=20=EA=B8=B0=EC=95=88?= =?UTF-8?q?=ED=95=A8/=EC=99=84=EB=A3=8C=ED=95=A8/=EB=8C=80=EA=B8=B0?= =?UTF-8?q?=ED=95=A8=EC=97=90=20=EC=9E=AC=EC=83=81=EC=8B=A0=20=EA=B5=AC?= =?UTF-8?q?=EB=B6=84=20=EC=97=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - resubmit_count 필드로 재상신 횟수 추적 - 반려 후 재상신 시 카운트 증가 - 보라색 뱃지로 재상신/재상신(N차) 표시 --- app/Models/Approvals/Approval.php | 3 +++ app/Services/ApprovalService.php | 6 ++++-- resources/views/approvals/completed.blade.php | 9 +++++++++ resources/views/approvals/drafts.blade.php | 9 +++++++++ resources/views/approvals/pending.blade.php | 9 +++++++++ 5 files changed, 34 insertions(+), 2 deletions(-) diff --git a/app/Models/Approvals/Approval.php b/app/Models/Approvals/Approval.php index a563e743..00d59515 100644 --- a/app/Models/Approvals/Approval.php +++ b/app/Models/Approvals/Approval.php @@ -22,6 +22,7 @@ class Approval extends Model 'completed_at' => 'datetime', 'drafter_read_at' => 'datetime', 'current_step' => 'integer', + 'resubmit_count' => 'integer', 'is_urgent' => 'boolean', ]; @@ -41,6 +42,7 @@ class Approval extends Model 'completed_at', 'drafter_read_at', 'current_step', + 'resubmit_count', 'attachments', 'recall_reason', 'parent_doc_id', @@ -52,6 +54,7 @@ class Approval extends Model protected $attributes = [ 'status' => 'draft', 'current_step' => 0, + 'resubmit_count' => 0, 'is_urgent' => false, ]; diff --git a/app/Services/ApprovalService.php b/app/Services/ApprovalService.php index 0da70582..44a97eda 100644 --- a/app/Services/ApprovalService.php +++ b/app/Services/ApprovalService.php @@ -243,8 +243,9 @@ public function submit(int $id): Approval throw new \InvalidArgumentException('결재선을 설정해주세요.'); } - // 반려 후 재상신이면 모든 step 초기화 - if ($approval->status === Approval::STATUS_REJECTED) { + // 반려 후 재상신이면 모든 step 초기화 + 재상신 카운트 증가 + $isResubmit = $approval->status === Approval::STATUS_REJECTED; + if ($isResubmit) { $approval->steps()->update([ 'status' => ApprovalStep::STATUS_PENDING, 'comment' => null, @@ -256,6 +257,7 @@ public function submit(int $id): Approval 'status' => Approval::STATUS_PENDING, 'drafted_at' => now(), 'current_step' => 1, + 'resubmit_count' => $isResubmit ? $approval->resubmit_count + 1 : $approval->resubmit_count, 'updated_by' => auth()->id(), ]); diff --git a/resources/views/approvals/completed.blade.php b/resources/views/approvals/completed.blade.php index 04530f73..92881697 100644 --- a/resources/views/approvals/completed.blade.php +++ b/resources/views/approvals/completed.blade.php @@ -82,6 +82,13 @@ function renderTable(items, pagination) { return map[status] || status; }; + const resubmitBadge = (item) => { + const count = item.resubmit_count || 0; + if (count === 0) return '-'; + const label = count === 1 ? '재상신' : `재상신(${count}차)`; + return `${label}`; + }; + const confirmBadge = (item) => { const isMyDraft = item.drafter_id === currentUserId; if (!isMyDraft) return '-'; @@ -99,6 +106,7 @@ function renderTable(items, pagination) { 제목 기안자 상태 + 구분 확인 완료일 @@ -115,6 +123,7 @@ function renderTable(items, pagination) { ${isUnread ? '' + (item.title || '-') + '' : (item.title || '-')} ${item.drafter?.name || '-'} ${statusBadge(item.status)} + ${resubmitBadge(item)} ${confirmBadge(item)} ${completedAt} `; diff --git a/resources/views/approvals/drafts.blade.php b/resources/views/approvals/drafts.blade.php index 4ef9dcf5..fb22c513 100644 --- a/resources/views/approvals/drafts.blade.php +++ b/resources/views/approvals/drafts.blade.php @@ -439,6 +439,13 @@ function renderTable(items, pagination) { return map[status] || status; }; + const resubmitBadge = (item) => { + const count = item.resubmit_count || 0; + if (count === 0) return '-'; + const label = count === 1 ? '재상신' : `재상신(${count}차)`; + return `${label}`; + }; + let html = `
@@ -447,6 +454,7 @@ function renderTable(items, pagination) { + @@ -465,6 +473,7 @@ function renderTable(items, pagination) { + `; diff --git a/resources/views/approvals/pending.blade.php b/resources/views/approvals/pending.blade.php index 8d10f5f5..b18bfc07 100644 --- a/resources/views/approvals/pending.blade.php +++ b/resources/views/approvals/pending.blade.php @@ -71,12 +71,20 @@ function renderTable(items, pagination) { + `; + const resubmitBadge = (item) => { + const count = item.resubmit_count || 0; + if (count === 0) return '-'; + const label = count === 1 ? '재상신' : `재상신(${count}차)`; + return `${label}`; + }; + items.forEach(item => { const draftedAt = item.drafted_at ? new Date(item.drafted_at).toLocaleDateString('ko-KR') : '-'; const urgent = item.is_urgent ? '긴급' : ''; @@ -86,6 +94,7 @@ function renderTable(items, pagination) { + `;
제목 양식 상태구분 긴급 작성일
${item.title || '-'} ${item.form?.name || '-'} ${statusBadge(item.status)}${resubmitBadge(item)} ${urgent} ${createdAt}
제목 기안자 양식구분 긴급 기안일
${item.title || '-'} ${item.drafter?.name || '-'} ${item.form?.name || '-'}${resubmitBadge(item)} ${urgent} ${draftedAt}