표 디자인 - 모든 표를 가벼운 스타일로 통일(.data-table 경량화: 작은 회색 헤더·연한 구분선·hover) - 표/패널 바깥 테두리 둥글게(rounded-lg) 일괄 적용, 표 래퍼에 패딩 카드(p-4) 통일 - 표 헤더·데이터 정렬을 전 화면 좌측 기준으로 통일 - .data-table th/td text-align:left (전역), 흩어진 center/right 정렬 정리 - 재디자인 Tailwind 표(포장단위·단가·기본코드·담당자·업체·판매대행소·무료대상자·지정판매소)도 셀 좌측화 - 기본정보관리 등 나머지 소메뉴 표를 기본 코드 관리 스타일(가벼운 표·상태 pill)로 재디자인 워크스페이스/공통 - "이 화면 설명" → 새 탭 대신 우측 드로어 팝업(현재 화면과 동시에 보기, Esc·드래그 폭조절) - 상단바 글씨 크기 조절(A−/A+), 작업 내용에 zoom 적용 - 탭 최대치 도달 시 자동 삭제 대신 안내 토스트, "모두 닫기"(업무 현황 탭은 보존) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
157 lines
8.7 KiB
PHP
157 lines
8.7 KiB
PHP
<?php
|
|
/** @var list<object> $codeKinds */
|
|
/** @var array<int,int> $countMap */
|
|
/** @var bool $canManageKinds */
|
|
/** @var bool $canManageDetails */
|
|
/** @var object|null $selectedKind */
|
|
/** @var list<object> $detailList */
|
|
/** @var array<int,bool> $rowCanEdit */
|
|
$canManageKinds = ! empty($canManageKinds);
|
|
$canManageDetails = ! empty($canManageDetails);
|
|
$showKindActions = $canManageKinds;
|
|
$selectedKindId = (int) ($selectedKind->ck_idx ?? 0);
|
|
$colCount = 6 + ($showKindActions ? 1 : 0);
|
|
$detailColCount = 7 + ($canManageDetails ? 1 : 0);
|
|
|
|
/** 상태 배지 (업무현황 스타일의 가벼운 pill) */
|
|
$stateBadge = static function (int $state): string {
|
|
return $state === 1
|
|
? '<span class="inline-block px-2 py-0.5 rounded-full text-[11px] font-medium bg-emerald-50 text-emerald-700">사용</span>'
|
|
: '<span class="inline-block px-2 py-0.5 rounded-full text-[11px] font-medium bg-gray-100 text-gray-500">미사용</span>';
|
|
};
|
|
?>
|
|
<div class="grid grid-cols-1 xl:grid-cols-2 gap-4">
|
|
<!-- 기본코드 종류 -->
|
|
<section class="rounded-xl bg-white border border-gray-200 p-4 shadow-sm">
|
|
<div class="flex flex-wrap items-center justify-between gap-2 mb-3">
|
|
<h2 class="text-sm font-bold text-gray-900"><i class="fa-solid fa-layer-group text-blue-600 mr-1"></i>기본코드 종류</h2>
|
|
<?php if ($canManageKinds): ?>
|
|
<a href="<?= base_url('admin/code-kinds/create') ?>" class="inline-flex items-center rounded-lg bg-[#243a5e] px-3 py-1.5 text-white text-xs font-semibold shadow-sm hover:opacity-90">기본코드 등록</a>
|
|
<?php else: ?>
|
|
<span class="text-gray-400 text-[11px]">코드 종류 등록·수정은 super admin·본부 관리자만 가능합니다.</span>
|
|
<?php endif; ?>
|
|
</div>
|
|
<div class="overflow-auto">
|
|
<table class="w-full text-[13px]">
|
|
<thead>
|
|
<tr class="text-left text-[11px] font-semibold text-gray-500 border-b border-gray-200">
|
|
<th class="py-2.5 px-2 w-12 text-left">번호</th>
|
|
<th class="py-2.5 px-2 w-20">코드</th>
|
|
<th class="py-2.5 px-2">코드명</th>
|
|
<th class="py-2.5 px-2 w-20 text-left">세부코드</th>
|
|
<th class="py-2.5 px-2 w-16 text-left">상태</th>
|
|
<th class="py-2.5 px-2 w-32">등록일</th>
|
|
<?php if ($showKindActions): ?>
|
|
<th class="py-2.5 px-2 w-28 text-left">작업</th>
|
|
<?php endif; ?>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php if (! empty($codeKinds)): ?>
|
|
<?php $i = 0; foreach ($codeKinds as $row): $i++; ?>
|
|
<?php
|
|
$isSelected = (int) $row->ck_idx === $selectedKindId;
|
|
$detailUrl = base_url('bag/code-kinds?ck_idx=' . (int) $row->ck_idx);
|
|
?>
|
|
<tr class="border-b border-gray-200 last:border-0 cursor-pointer hover:bg-blue-50/60 <?= $isSelected ? 'bg-blue-50' : '' ?>"
|
|
onclick="window.location.href='<?= esc($detailUrl, 'attr') ?>'">
|
|
<td class="py-2.5 px-2 text-left text-gray-500"><?= (string) $i ?></td>
|
|
<td class="py-2.5 px-2 text-left font-mono text-gray-700"><?= esc($row->ck_code) ?></td>
|
|
<td class="py-2.5 px-2 font-medium text-gray-900"><?= esc($row->ck_name) ?></td>
|
|
<td class="py-2.5 px-2 text-left text-gray-600"><?= (int) ($countMap[$row->ck_idx] ?? 0) ?>개</td>
|
|
<td class="py-2.5 px-2 text-left"><?= $stateBadge((int) ($row->ck_state ?? 0)) ?></td>
|
|
<td class="py-2.5 px-2 text-gray-500 text-[12px]"><?= esc($row->ck_regdate ?? '') ?></td>
|
|
<?php if ($showKindActions): ?>
|
|
<td class="py-2.5 px-2 text-left text-xs" onclick="event.stopPropagation()">
|
|
<a href="<?= base_url('admin/code-kinds/edit/' . (int) $row->ck_idx) ?>" class="text-blue-600 hover:underline mr-1">수정</a>
|
|
<form action="<?= base_url('admin/code-kinds/delete/' . (int) $row->ck_idx) ?>" method="POST" class="inline" onsubmit="return confirm('이 코드 종류를 삭제하시겠습니까?');">
|
|
<?= csrf_field() ?>
|
|
<button type="submit" class="text-red-600 hover:underline">삭제</button>
|
|
</form>
|
|
</td>
|
|
<?php endif; ?>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
<?php else: ?>
|
|
<tr><td colspan="<?= (string) $colCount ?>" class="text-center text-gray-400 py-6">등록된 코드 종류가 없습니다.</td></tr>
|
|
<?php endif; ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- 세부코드 -->
|
|
<section class="rounded-xl bg-white border border-gray-200 p-4 shadow-sm">
|
|
<div class="flex flex-wrap items-center justify-between gap-2 mb-3">
|
|
<h2 class="text-sm font-bold text-gray-900">
|
|
<i class="fa-solid fa-list-ul text-emerald-600 mr-1"></i>세부코드
|
|
<?php if ($selectedKind !== null): ?>
|
|
<span class="font-medium text-gray-400">— <?= esc($selectedKind->ck_name) ?> (<?= esc($selectedKind->ck_code) ?>)</span>
|
|
<?php endif; ?>
|
|
</h2>
|
|
<?php if ($canManageDetails && $selectedKind !== null): ?>
|
|
<a href="<?= base_url('admin/code-details/' . (int) $selectedKind->ck_idx . '/create') ?>" class="inline-flex items-center rounded-lg bg-[#243a5e] px-3 py-1.5 text-white text-xs font-semibold shadow-sm hover:opacity-90">세부코드 등록</a>
|
|
<?php endif; ?>
|
|
</div>
|
|
|
|
<?php if ($selectedKind === null): ?>
|
|
<div class="py-10 text-center text-sm text-gray-400">왼쪽에서 코드 종류를 선택해 주세요.</div>
|
|
<?php else: ?>
|
|
<div class="overflow-auto">
|
|
<table class="w-full text-[13px]">
|
|
<thead>
|
|
<tr class="text-left text-[11px] font-semibold text-gray-500 border-b border-gray-200">
|
|
<th class="py-2.5 px-2 w-12 text-left">번호</th>
|
|
<th class="py-2.5 px-2 w-20">코드</th>
|
|
<th class="py-2.5 px-2">코드명</th>
|
|
<th class="py-2.5 px-2 w-16 text-left">범위</th>
|
|
<th class="py-2.5 px-2 w-14 text-left">정렬</th>
|
|
<th class="py-2.5 px-2 w-16 text-left">상태</th>
|
|
<th class="py-2.5 px-2 w-32">등록일</th>
|
|
<?php if ($canManageDetails): ?>
|
|
<th class="py-2.5 px-2 w-24 text-left">작업</th>
|
|
<?php endif; ?>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php if (! empty($detailList)): ?>
|
|
<?php $dNo = 0; foreach ($detailList as $row): $dNo++; ?>
|
|
<?php
|
|
$isPlatform = (($row->cd_source ?? 'platform') === 'platform' && (int) ($row->cd_lg_idx ?? 0) === 0);
|
|
$scopeLabel = $isPlatform ? '공통' : '지자체';
|
|
?>
|
|
<tr class="border-b border-gray-200 last:border-0 hover:bg-gray-50">
|
|
<td class="py-2.5 px-2 text-left text-gray-500"><?= (string) $dNo ?></td>
|
|
<td class="py-2.5 px-2 text-left font-mono text-gray-700"><?= esc($row->cd_code) ?></td>
|
|
<td class="py-2.5 px-2 font-medium text-gray-900"><?= esc($row->cd_name) ?></td>
|
|
<td class="py-2.5 px-2 text-left">
|
|
<span class="inline-block px-2 py-0.5 rounded-full text-[11px] font-medium <?= $isPlatform ? 'bg-blue-50 text-blue-700' : 'bg-amber-50 text-amber-700' ?>"><?= esc($scopeLabel) ?></span>
|
|
</td>
|
|
<td class="py-2.5 px-2 text-left text-gray-600"><?= (int) ($row->cd_sort ?? 0) ?></td>
|
|
<td class="py-2.5 px-2 text-left"><?= $stateBadge((int) ($row->cd_state ?? 0)) ?></td>
|
|
<td class="py-2.5 px-2 text-gray-500 text-[12px]"><?= esc($row->cd_regdate ?? '') ?></td>
|
|
<?php if ($canManageDetails): ?>
|
|
<td class="py-2.5 px-2 text-left text-xs">
|
|
<?php if (! empty($rowCanEdit[$row->cd_idx])): ?>
|
|
<a href="<?= base_url('admin/code-details/edit/' . (int) $row->cd_idx) ?>" class="text-blue-600 hover:underline">수정</a>
|
|
<form action="<?= base_url('admin/code-details/delete/' . (int) $row->cd_idx) ?>" method="POST" class="ml-1 inline" onsubmit="return confirm('이 세부코드를 삭제하시겠습니까?');">
|
|
<?= csrf_field() ?>
|
|
<button type="submit" class="text-red-600 hover:underline">삭제</button>
|
|
</form>
|
|
<?php else: ?>
|
|
<span class="text-gray-400">—</span>
|
|
<?php endif; ?>
|
|
</td>
|
|
<?php endif; ?>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
<?php else: ?>
|
|
<tr><td colspan="<?= (string) $detailColCount ?>" class="text-center text-gray-400 py-6">등록된 세부코드가 없습니다.</td></tr>
|
|
<?php endif; ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<?php endif; ?>
|
|
</section>
|
|
</div>
|