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>
72 lines
3.8 KiB
PHP
72 lines
3.8 KiB
PHP
<?= view('components/print_header', ['printTitle' => '권한 승인 대기']) ?>
|
|
<section class="border-b border-gray-300 p-2 shrink-0 bg-control-panel">
|
|
<div class="flex flex-wrap items-center justify-between gap-y-2">
|
|
<span class="text-sm font-bold text-gray-700">권한 승인 대기</span>
|
|
<button onclick="window.print()" class="no-print border border-btn-print-border text-gray-600 px-3 py-1 rounded-sm text-sm hover:bg-gray-50 transition">인쇄</button>
|
|
</div>
|
|
</section>
|
|
<div class="border border-gray-300 p-4 mt-2">
|
|
<form method="get" action="<?= base_url('admin/access/approvals') ?>" class="mb-4 flex flex-wrap items-center gap-2 text-sm">
|
|
<label for="status" class="font-bold text-gray-700 shrink-0">상태</label>
|
|
<select id="status" name="status" class="border border-gray-300 rounded px-3 py-1.5 text-sm min-w-[12rem] w-48 max-w-full">
|
|
<option value="pending" <?= ($status ?? 'pending') === 'pending' ? 'selected' : '' ?>>승인 대기</option>
|
|
<option value="approved" <?= ($status ?? '') === 'approved' ? 'selected' : '' ?>>승인 완료</option>
|
|
<option value="rejected" <?= ($status ?? '') === 'rejected' ? 'selected' : '' ?>>반려</option>
|
|
</select>
|
|
<button type="submit" class="bg-btn-search text-white px-3 py-1 rounded-sm text-xs">조회</button>
|
|
</form>
|
|
<table class="w-full data-table">
|
|
<thead>
|
|
<tr>
|
|
<th>요청일</th>
|
|
<th>아이디</th>
|
|
<th>이름</th>
|
|
<th>지자체</th>
|
|
<th>요청 역할</th>
|
|
<th>상태</th>
|
|
<th>처리일</th>
|
|
<th>관리</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php if (empty($list)): ?>
|
|
<tr><td colspan="8" class="text-center text-gray-500 py-4">해당 상태의 요청이 없습니다.</td></tr>
|
|
<?php else: ?>
|
|
<?php foreach ($list as $row): ?>
|
|
<tr>
|
|
<td class="text-center"><?= esc($row->mar_requested_at ?? '-') ?></td>
|
|
<td class="text-center"><?= esc($row->mb_id ?? '-') ?></td>
|
|
<td class="text-center"><?= esc($row->mb_name ?? '-') ?></td>
|
|
<td class="text-center"><?= esc($row->lg_name ?? '-') ?></td>
|
|
<td class="text-center"><?= esc($roles->getLevelName((int) $row->mar_requested_level)) ?></td>
|
|
<td class="text-center">
|
|
<?php if (($row->mar_status ?? '') === 'pending'): ?>승인 대기<?php endif; ?>
|
|
<?php if (($row->mar_status ?? '') === 'approved'): ?>승인 완료<?php endif; ?>
|
|
<?php if (($row->mar_status ?? '') === 'rejected'): ?>반려<?php endif; ?>
|
|
</td>
|
|
<td class="text-center"><?= esc($row->mar_processed_at ?? '-') ?></td>
|
|
<td class="text-center">
|
|
<?php if (($row->mar_status ?? '') === 'pending'): ?>
|
|
<div class="flex items-center justify-center gap-1">
|
|
<form action="<?= base_url('admin/access/approve/' . $row->mar_idx) ?>" method="post" class="inline">
|
|
<?= csrf_field() ?>
|
|
<button type="submit" class="bg-green-600 text-white px-2 py-1 text-xs rounded">승인</button>
|
|
</form>
|
|
<form action="<?= base_url('admin/access/reject/' . $row->mar_idx) ?>" method="post" class="inline flex items-center gap-1">
|
|
<?= csrf_field() ?>
|
|
<input type="text" name="reject_reason" placeholder="반려사유(선택)" class="border border-gray-300 rounded px-2 py-1 text-xs w-28"/>
|
|
<button type="submit" class="bg-red-600 text-white px-2 py-1 text-xs rounded">반려</button>
|
|
</form>
|
|
</div>
|
|
<?php else: ?>
|
|
<span class="text-gray-500">처리완료</span>
|
|
<?php endif; ?>
|
|
</td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
<?php endif; ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<?php if (isset($pager)): ?><div class="mt-3"><?= $pager->links() ?></div><?php endif; ?>
|