CT-01/02/03 공통 컴포넌트 구현 — 페이지네이션/엑셀/인쇄

CT-01: 페이지네이션
- 커스텀 Tailwind 페이저 뷰 (components/pager.php)
- 18개 admin 컨트롤러 findAll() → paginate(20) 전환
- Bag 컨트롤러 7개 리스트도 paginate 적용
- 19개 admin index 뷰에 페이저 링크 추가

CT-02: 엑셀 저장
- export_helper.php (UTF-8 BOM CSV)
- 발주/판매/지정판매소/재고 4개 엑셀 내보내기 라우트+메서드
- 해당 뷰에 "엑셀저장" 버튼 추가

CT-03: 인쇄
- print_header.php (지자체명/제목/결재란 컴포넌트)
- admin/bag 레이아웃에 @media print CSS 추가
- 23개 뷰에 인쇄 버튼 + print_header 추가

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
javamon1174
2026-03-26 16:40:49 +09:00
parent 35561b414b
commit 704141a1f0
49 changed files with 552 additions and 75 deletions

View File

@@ -0,0 +1,38 @@
<?php
/**
* Custom Tailwind CSS Pagination View for CodeIgniter 4
*
* @var \CodeIgniter\Pager\PagerRenderer $pager
*/
$pager->setSurroundCount(2);
?>
<?php if ($pager->hasPreviousPage() || $pager->hasNextPage()): ?>
<nav aria-label="Page navigation" class="flex items-center justify-center gap-1 mt-3 mb-2 no-print">
<?php if ($pager->hasPreviousPage()): ?>
<a href="<?= $pager->getFirst() ?>" class="px-2 py-1 text-xs border border-gray-300 rounded hover:bg-gray-100 text-gray-600" title="처음">&laquo;</a>
<a href="<?= $pager->getPreviousPage() ?>" class="px-2 py-1 text-xs border border-gray-300 rounded hover:bg-gray-100 text-gray-600" title="이전">&lsaquo;</a>
<?php else: ?>
<span class="px-2 py-1 text-xs border border-gray-200 rounded text-gray-300">&laquo;</span>
<span class="px-2 py-1 text-xs border border-gray-200 rounded text-gray-300">&lsaquo;</span>
<?php endif; ?>
<?php foreach ($pager->links() as $link): ?>
<?php if ($link['active']): ?>
<span class="px-3 py-1 text-xs border border-blue-600 rounded bg-blue-600 text-white font-bold"><?= $link['title'] ?></span>
<?php else: ?>
<a href="<?= $link['uri'] ?>" class="px-3 py-1 text-xs border border-gray-300 rounded hover:bg-gray-100 text-gray-700"><?= $link['title'] ?></a>
<?php endif; ?>
<?php endforeach; ?>
<?php if ($pager->hasNextPage()): ?>
<a href="<?= $pager->getNextPage() ?>" class="px-2 py-1 text-xs border border-gray-300 rounded hover:bg-gray-100 text-gray-600" title="다음">&rsaquo;</a>
<a href="<?= $pager->getLast() ?>" class="px-2 py-1 text-xs border border-gray-300 rounded hover:bg-gray-100 text-gray-600" title="마지막">&raquo;</a>
<?php else: ?>
<span class="px-2 py-1 text-xs border border-gray-200 rounded text-gray-300">&rsaquo;</span>
<span class="px-2 py-1 text-xs border border-gray-200 rounded text-gray-300">&raquo;</span>
<?php endif; ?>
</nav>
<?php endif; ?>

View File

@@ -0,0 +1,55 @@
<?php
/**
* 인쇄용 문서 헤더 컴포넌트
*
* 사용 변수:
* $printTitle - 문서 제목 (필수)
* $printLgName - 지자체명 (선택, 미지정 시 세션에서 조회)
* $printDate - 날짜 (선택, 기본 오늘)
*/
if (! isset($printLgName)) {
helper('admin');
$lgIdx = admin_effective_lg_idx();
$printLgName = '';
if ($lgIdx) {
$lgRow = model(\App\Models\LocalGovernmentModel::class)->find($lgIdx);
$printLgName = $lgRow ? $lgRow->lg_name : '';
}
}
$printDate = $printDate ?? date('Y-m-d');
$printTitle = $printTitle ?? '';
?>
<div class="print-header" style="display:none;">
<table style="width:100%; border-collapse:collapse; margin-bottom:10px;">
<tr>
<td style="width:60%; vertical-align:bottom;">
<div style="font-size:12px; color:#666; margin-bottom:4px;"><?= esc($printLgName) ?></div>
<div style="font-size:20px; font-weight:bold; letter-spacing:2px;"><?= esc($printTitle) ?></div>
<div style="font-size:11px; color:#888; margin-top:4px;">출력일: <?= esc($printDate) ?></div>
</td>
<td style="width:40%; vertical-align:top;">
<table style="border-collapse:collapse; float:right; font-size:11px;">
<tr>
<th style="border:1px solid #333; padding:4px 12px; background:#f0f0f0; text-align:center;">담당</th>
<th style="border:1px solid #333; padding:4px 12px; background:#f0f0f0; text-align:center;">팀장</th>
<th style="border:1px solid #333; padding:4px 12px; background:#f0f0f0; text-align:center;">과장</th>
</tr>
<tr>
<td style="border:1px solid #333; padding:8px 12px; height:40px; min-width:60px;">&nbsp;</td>
<td style="border:1px solid #333; padding:8px 12px; height:40px; min-width:60px;">&nbsp;</td>
<td style="border:1px solid #333; padding:8px 12px; height:40px; min-width:60px;">&nbsp;</td>
</tr>
</table>
</td>
</tr>
</table>
<hr style="border:1px solid #333; margin-bottom:10px;"/>
</div>
<style>
@media print {
.print-header { display: block !important; }
}
</style>