Files
sam-manage/resources/views/emails/payslip.blade.php
김보곤 5ca33cb24b fix: [payroll] PDF 급여명세서 레이아웃 수정
- 사원정보 테이블 colgroup으로 너비 고정 (오버플로우 해결)
- footer를 table 기반으로 변경 (dompdf float 미지원)
- 회사명 문자 인코딩 수정
2026-03-10 09:24:31 +09:00

118 lines
5.4 KiB
PHP

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<style>
@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;700;800&display=swap');
body { font-family: 'Noto Sans KR', 'Malgun Gothic', 'Apple SD Gothic Neo', sans-serif; margin: 0; padding: 20px; background: #fff; }
.container { max-width: 720px; margin: 0 auto; background: #fff; padding: 40px 36px; }
h1 { text-align: center; font-size: 22px; font-weight: 800; letter-spacing: 2px; margin: 0 0 28px; border-bottom: 3px solid #333; padding-bottom: 16px; }
.info-table { width: 100%; border-collapse: collapse; margin-bottom: 20px; table-layout: fixed; }
.info-table td { padding: 6px 8px; font-size: 12px; border: 1px solid #999; overflow: hidden; }
.info-table .label { font-weight: bold; background: #f0f0f0; text-align: center; }
.payslip-table { width: 100%; border-collapse: collapse; margin-bottom: 0; }
.payslip-table th, .payslip-table td { border: 1px solid #999; padding: 7px 12px; font-size: 13px; }
.payslip-table th { background: #e8e8e8; font-weight: 700; text-align: center; letter-spacing: 4px; }
.payslip-table .item-name { text-align: center; }
.payslip-table .item-amount { text-align: right; }
.payslip-table .total-row td { font-weight: 700; background: #f8f8f8; }
.payslip-table .net-row td { font-weight: 800; font-size: 14px; background: #f0f7ff; }
.footer-table { width: 100%; margin-top: 20px; padding-top: 12px; border: none; }
.footer-table td { font-size: 12px; color: #666; border: none; padding: 0; }
</style>
</head>
<body>
<div class="container">
<h1>{{ $payslipData['pay_year'] }}{{ str_pad($payslipData['pay_month'], 2, '0', STR_PAD_LEFT) }}월분 급여명세서</h1>
{{-- 사원 정보 --}}
<table class="info-table">
<colgroup>
<col style="width: 13%;">
<col style="width: 20%;">
<col style="width: 13%;">
<col style="width: 20%;">
<col style="width: 13%;">
<col style="width: 21%;">
</colgroup>
<tr>
<td class="label">사원코드</td>
<td>{{ $payslipData['employee_code'] ?? '-' }}</td>
<td class="label">사원명</td>
<td>{{ $payslipData['employee_name'] ?? '-' }}</td>
<td class="label">입사일</td>
<td>{{ $payslipData['hire_date'] ?? '-' }}</td>
</tr>
<tr>
<td class="label">부서</td>
<td>{{ $payslipData['department'] ?? '-' }}</td>
<td class="label">직급</td>
<td>{{ $payslipData['position'] ?? '-' }}</td>
<td class="label">호봉</td>
<td>{{ $payslipData['grade'] ?? '-' }}</td>
</tr>
</table>
{{-- 지급/공제 내역 --}}
@php
$payments = $payslipData['payments'] ?? [];
$deductionItems = $payslipData['deduction_items'] ?? [];
$maxRows = max(count($payments), count($deductionItems));
@endphp
<table class="payslip-table">
<thead>
<tr>
<th style="width: 25%;"> </th>
<th style="width: 25%;"> </th>
<th style="width: 25%;"> </th>
<th style="width: 25%;"> </th>
</tr>
</thead>
<tbody>
@for($i = 0; $i < $maxRows; $i++)
<tr>
<td class="item-name">{{ $payments[$i]['name'] ?? '' }}</td>
<td class="item-amount">{{ isset($payments[$i]['amount']) ? number_format($payments[$i]['amount']) : '' }}</td>
<td class="item-name">{{ $deductionItems[$i]['name'] ?? '' }}</td>
<td class="item-amount">{{ isset($deductionItems[$i]['amount']) ? number_format($deductionItems[$i]['amount']) : '' }}</td>
</tr>
@endfor
{{-- (최소 높이 확보) --}}
@for($i = $maxRows; $i < 8; $i++)
<tr>
<td class="item-name">&nbsp;</td>
<td class="item-amount"></td>
<td class="item-name"></td>
<td class="item-amount"></td>
</tr>
@endfor
{{-- 공제액계 --}}
<tr class="total-row">
<td class="item-name"></td>
<td class="item-amount"></td>
<td class="item-name" style="font-weight: 700; letter-spacing: 4px;"> </td>
<td class="item-amount">{{ number_format($payslipData['total_deductions'] ?? 0) }}</td>
</tr>
{{-- 지급액계 / 차인지급액 --}}
<tr class="net-row">
<td class="item-name" style="letter-spacing: 4px;"> </td>
<td class="item-amount">{{ number_format($payslipData['gross_salary'] ?? 0) }}</td>
<td class="item-name" style="letter-spacing: 2px;">차인지급액</td>
<td class="item-amount">{{ number_format($payslipData['net_salary'] ?? 0) }}</td>
</tr>
</tbody>
</table>
<table class="footer-table">
<tr>
<td style="text-align: left;">귀하의 노고에 감사드립니다.</td>
<td style="text-align: right;">()코드브릿지엑스(CodebridgeX)</td>
</tr>
</table>
</div>
</body>
</html>