Files
jongryangje/app/Views/bag/daily_inventory.php
taekyoungc a3f92cd322 feat: TOTP 2차 인증, 관리자 메뉴/대시보드 및 의존성 반영
- robthree/twofactorauth, Auth 설정·TotpService·2FA 뷰·라우트
- member TOTP 컬럼 DDL(login_tables, member_add_totp.sql)
- 관리자 메뉴·레이아웃·필터·대시보드 등 연관 변경
- env 샘플에 auth.requireTotp 주석

Made-with: Cursor
2026-03-26 15:30:32 +09:00

638 lines
24 KiB
PHP

<?php
helper('admin');
$siteNavTree = get_site_nav_tree();
?>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="utf-8"/>
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
<title>쓰레기봉투 물류시스템</title>
<!-- Tailwind CSS v3 with Plugins -->
<script src="https://cdn.tailwindcss.com?plugins=forms,container-queries"></script>
<!-- Font: Noto Sans KR -->
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700&amp;display=swap" rel="stylesheet"/>
<!-- Tailwind Configuration for Custom Colors and Fonts -->
<script>
tailwind.config = {
theme: {
extend: {
fontFamily: {
sans: ['"Malgun Gothic"', '"Noto Sans KR"', 'sans-serif'],
},
colors: {
'system-header': '#ffffff',
'title-bar': '#2c3e50',
'control-panel': '#f8f9fa',
'btn-search': '#1c4e80',
'btn-excel-border': '#28a745',
'btn-excel-text': '#28a745',
'btn-print-border': '#ced4da',
'btn-print-text': '#000000',
'btn-exit': '#d9534f',
},
fontSize: {
'xxs': '0.65rem',
}
}
}
}
</script>
<!-- Custom CSS for Table Specifics and Scrollbars -->
<style data-purpose="table-layout">
/* High density table styles */
.data-table {
width: 100%;
border-collapse: collapse;
font-family: 'Malgun Gothic', 'Noto Sans KR', sans-serif;
}
.data-table th, .data-table td {
border: 1px solid #ccc;
padding: 4px 8px;
white-space: nowrap;
font-size: 13px;
}
.data-table th {
background-color: #e9ecef;
text-align: center;
vertical-align: middle;
font-weight: bold;
color: #333;
}
/* Zebra striping */
.data-table tbody tr:nth-child(even) td:not([rowspan]) {
background-color: #f9f9f9;
}
.data-table tbody tr:nth-child(even) {
background-color: #f9f9f9;
}
.data-table tbody tr:hover td {
background-color: #e6f7ff !important;
}
/* Column specific alignments handled by classes in HTML, but defaults: */
.text-left { text-align: left !important; }
.text-right { text-align: right !important; }
.text-center { text-align: center !important; }
/* Layout utilities */
body {
overflow: hidden;
}
.main-content-area {
height: calc(100vh - 170px);
overflow: auto;
}
</style>
</head>
<body class="bg-gray-100 text-gray-800 flex flex-col h-screen select-none">
<!-- BEGIN: Top Navigation -->
<header class="bg-white border-b border-gray-300 h-12 flex items-center justify-between px-4 shrink-0 z-20">
<div class="flex items-center gap-4">
<!-- Logo: 파란색 사각형에 흰색 사각형 두 개 겹친 형태 (데스크톱 앱 아이콘 스타일) -->
<div class="flex items-center gap-2">
<div class="w-6 h-6 flex items-center justify-center shrink-0">
<svg class="h-5 w-5" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
<rect width="16" height="16" fill="#2563eb"/>
<rect x="2" y="2" width="7" height="7" fill="white"/>
<rect x="5" y="5" width="9" height="9" fill="white"/>
</svg>
</div>
<a href="<?= base_url() ?>" class="text-base font-semibold text-gray-800 tracking-tight hover:text-blue-600">쓰레기봉투 물류시스템</a>
</div>
</div>
<!-- Nav Links -->
<nav class="hidden md:flex gap-5 text-sm font-medium text-gray-600">
<?php if (! empty($siteNavTree)): ?>
<?php
$uriObj = service('request')->getUri();
$currentPath = trim((string) $uriObj->getPath(), '/');
if (str_starts_with($currentPath, 'index.php/')) {
$currentPath = substr($currentPath, strlen('index.php/'));
}
?>
<?php foreach ($siteNavTree as $navItem): ?>
<?php $isActive = ($currentPath === trim((string) $navItem->mm_link, '/')); ?>
<div class="relative group">
<a class="<?= $isActive ? 'text-blue-700 font-bold border-b-2 border-blue-700 pb-3 -mb-3' : 'hover:text-blue-600' ?>"
href="<?= base_url($navItem->mm_link) ?>">
<?= esc($navItem->mm_name) ?>
</a>
<?php if (! empty($navItem->children)): ?>
<div class="absolute left-0 top-full hidden group-hover:block bg-white border border-gray-200 rounded shadow-lg min-w-[10rem] z-30">
<?php foreach ($navItem->children as $child): ?>
<a href="<?= base_url($child->mm_link) ?>"
class="block px-3 py-1.5 text-sm text-gray-700 hover:bg-blue-50 whitespace-nowrap">
<?= esc($child->mm_name) ?>
</a>
<?php endforeach; ?>
</div>
<?php endif; ?>
</div>
<?php endforeach; ?>
<?php else: ?>
<!-- DB 메뉴 미구현 시 기존 더미 메뉴 사용 -->
<a class="hover:text-blue-600" href="#">기본정보관리</a>
<a class="hover:text-blue-600" href="#">발주 입고 관리</a>
<a class="hover:text-blue-600" href="#">불출 관리</a>
<a class="text-blue-700 font-bold border-b-2 border-blue-700 pb-3 -mb-3" href="#">재고 관리</a>
<a class="hover:text-blue-600" href="#">판매 관리</a>
<a class="hover:text-blue-600" href="#">판매 현황</a>
<a class="hover:text-blue-600" href="#">봉투 수불 관리</a>
<a class="hover:text-blue-600" href="#">통계 분석 관리</a>
<a class="hover:text-blue-600" href="#">창</a>
<a class="hover:text-blue-600" href="#">도움말</a>
<?php endif; ?>
</nav>
<?php
$mbLevel = (int) session()->get('mb_level');
$isAdmin = (\Config\Roles::isSuperAdminEquivalent($mbLevel) || $mbLevel === \Config\Roles::LEVEL_LOCAL_ADMIN);
?>
<!-- 관리자 이동 버튼(관리자만) · 종료 -->
<div class="flex items-center gap-2">
<?php if ($isAdmin): ?>
<a href="<?= base_url('admin') ?>" class="bg-btn-search text-white px-3 py-1.5 rounded-sm flex items-center gap-1 text-sm shadow hover:opacity-90 transition border border-transparent" title="관리자">관리자</a>
<?php endif; ?>
<a href="<?= base_url('logout') ?>" class="text-gray-500 hover:text-red-600 transition-colors inline-block p-1 rounded hover:bg-red-50" title="로그아웃">
<svg class="h-5 w-5" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M6 18L18 6M6 6l12 12" stroke-linecap="round" stroke-linejoin="round"></path>
</svg>
</a>
</div>
</header>
<!-- END: Top Navigation -->
<?php if (session()->getFlashdata('success')): ?>
<div class="mx-4 mt-2 p-3 rounded-lg bg-green-50 text-green-700 text-sm" role="alert">
<?= esc(session()->getFlashdata('success')) ?>
</div>
<?php endif; ?>
<!-- BEGIN: Title Bar -->
<div class="bg-title-bar text-white px-4 py-2 text-sm font-medium flex items-center shrink-0 w-full">
<span class="opacity-80 mr-2">[w_gm804r]</span>
<span>일일 봉투 수불 현황</span>
</div>
<!-- END: Title Bar -->
<!-- BEGIN: Control Panel -->
<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">
<!-- Filter Inputs -->
<div class="flex items-center gap-4 text-sm whitespace-nowrap overflow-x-auto pb-1 md:pb-0">
<div class="flex items-center gap-2">
<label class="font-bold text-gray-700">조회기간:</label>
<div class="flex items-center bg-white border border-gray-300 rounded px-2 py-1">
<input class="w-24 text-center border-none p-0 focus:ring-0 text-sm" type="text" value="2024.01.01"/>
<span class="mx-1">~</span>
<input class="w-24 text-center border-none p-0 focus:ring-0 text-sm" type="text" value="2025.12.12"/>
<svg class="w-4 h-4 text-gray-400 ml-1" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"></path></svg>
</div>
</div>
<div class="flex items-center gap-2">
<label class="font-bold text-gray-700">봉투구분:</label>
<select class="border border-gray-300 rounded py-1 pl-2 pr-8 text-sm focus:ring-blue-500 focus:border-blue-500">
<option>전체</option>
</select>
</div>
<div class="flex items-center gap-2">
<label class="font-bold text-gray-700">봉투형식:</label>
<select class="border border-gray-300 rounded py-1 pl-2 pr-8 text-sm focus:ring-blue-500 focus:border-blue-500">
<option>전체 봉투</option>
</select>
</div>
<div class="flex items-center gap-2">
<label class="font-bold text-gray-700">대행소:</label>
<select class="border border-gray-300 rounded py-1 pl-2 pr-8 text-sm focus:ring-blue-500 focus:border-blue-500">
<option>북구</option>
</select>
</div>
</div>
<!-- Action Buttons -->
<div class="flex items-center gap-1.5 ml-auto">
<button class="bg-btn-search text-white px-4 py-1.5 rounded-sm flex items-center gap-1 text-sm shadow hover:opacity-90 transition border border-transparent">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"></path></svg>
조회
</button>
<button class="bg-white text-btn-excel-text border border-btn-excel-border px-3 py-1.5 rounded-sm flex items-center gap-1 text-sm shadow hover:bg-green-50 transition">
<svg class="w-4 h-4" fill="currentColor" viewBox="0 0 24 24"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8l-6-6zm-1 2l5 5h-5V4zM6 20V4h5v7h7v9H6z"></path></svg>
엑셀저장
</button>
<button class="bg-white text-black border border-btn-print-border px-3 py-1.5 rounded-sm flex items-center gap-1 text-sm shadow hover:bg-gray-50 transition">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path d="M17 17h2a2 2 0 002-2v-4a2 2 0 00-2-2H5a2 2 0 00-2 2v4a2 2 0 002 2h2m2 4h6a2 2 0 002-2v-4a2 2 0 00-2-2H9a2 2 0 00-2 2v4a2 2 0 002 2zm8-12V5a2 2 0 00-2-2H9a2 2 0 00-2 2v4h10z" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"></path></svg>
인쇄
</button>
<a href="<?= base_url('logout') ?>" class="bg-btn-exit text-white px-3 py-1.5 rounded-sm flex items-center gap-1 text-sm shadow hover:bg-red-700 transition border border-transparent">
<svg class="w-4 h-4" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path d="M6 18L18 6M6 6l12 12" stroke-linecap="round" stroke-linejoin="round"></path></svg>
종료
</a>
</div>
</div>
</section>
<!-- END: Control Panel -->
<!-- BEGIN: Main Content Area (Table) -->
<main class="main-content-area flex-grow bg-white p-2">
<div class="border border-gray-300 h-full overflow-auto">
<table class="w-full data-table border-collapse">
<!-- BEGIN: Table Head -->
<thead><tr>
<th class="w-[100px] bg-gray-100 border border-gray-300" rowspan="2">일자</th>
<th class="min-w-[200px] bg-gray-100 border border-gray-300" rowspan="2">품 목</th>
<th class="w-[80px] bg-gray-100 border border-gray-300" rowspan="2">전일재고</th>
<th class="bg-gray-100 border border-gray-300" colspan="3">입고</th>
<th class="bg-gray-100 border border-gray-300" colspan="5">출고</th>
<th class="w-[80px] bg-gray-100 border border-gray-300" rowspan="2">잔량</th>
</tr>
<tr>
<!-- Under 입고 -->
<th class="w-[80px] bg-gray-100 border border-gray-300">입고</th>
<th class="w-[80px] bg-gray-100 border border-gray-300">반품</th>
<th class="w-[80px] bg-gray-100 border border-gray-300">입고계</th>
<!-- Under 출고 -->
<th class="w-[80px] bg-gray-100 border border-gray-300">판매</th>
<th class="w-[120px] bg-gray-100 border border-gray-300">일반불출/무료불출</th>
<th class="w-[80px] bg-gray-100 border border-gray-300">반품</th>
<th class="w-[80px] bg-gray-100 border border-gray-300">기타</th>
<th class="w-[80px] bg-gray-100 border border-gray-300">출고계</th>
</tr></thead>
<!-- END: Table Head -->
<!-- BEGIN: Table Body -->
<tbody class="text-right"><!-- Row 1 -->
<tr>
<td class="align-top text-center bg-white" rowspan="22">2024.01.01</td>
<td class="text-left pl-2">일반용 5L</td>
<td class="text-right pr-2">187,240</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2 bg-gray-50">0</td>
<td class="text-right pr-2">0</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2">0</td>
<td class="text-right pr-2 bg-gray-50">0</td>
<td class="text-right pr-2">187,240</td>
</tr>
<!-- Row 2 -->
<tr>
<td class="text-left pl-2">일반용 5L</td>
<td class="text-right pr-2">0</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2 bg-gray-50">0</td>
<td class="text-right pr-2">0</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2">0</td>
<td class="text-right pr-2 bg-gray-50">0</td>
<td class="text-right pr-2">0</td>
</tr>
<!-- Row 3 -->
<tr>
<td class="text-left pl-2">일반용 10L</td>
<td class="text-right pr-2">159,428</td>
<td class="text-right pr-2">252,000</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2 bg-gray-50">252,800</td>
<td class="text-right pr-2">8,580</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2">8,580</td>
<td class="text-right pr-2 bg-gray-50">8,990</td>
<td class="text-right pr-2">402,848</td>
</tr>
<!-- Row 4 -->
<tr>
<td class="text-left pl-2">일반용 20L</td>
<td class="text-right pr-2">212,082</td>
<td class="text-right pr-2">201,000</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2 bg-gray-50">201,600</td>
<td class="text-right pr-2">11,320</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2">11,320</td>
<td class="text-right pr-2 bg-gray-50">11,320</td>
<td class="text-right pr-2">402,365</td>
</tr>
<!-- Row 5 -->
<tr>
<td class="text-left pl-2">일반용 50L</td>
<td class="text-right pr-2">7,605</td>
<td class="text-right pr-2">13,000</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2 bg-gray-50">13,000</td>
<td class="text-right pr-2">540</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2">540</td>
<td class="text-right pr-2 bg-gray-50">540</td>
<td class="text-right pr-2">20,065</td>
</tr>
<!-- Row 6 -->
<tr>
<td class="text-left pl-2">일반용 75L</td>
<td class="text-right pr-2">31,459</td>
<td class="text-right pr-2">22,600</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2 bg-gray-50">22,600</td>
<td class="text-right pr-2">2,990</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2">2,090</td>
<td class="text-right pr-2 bg-gray-50">3,640</td>
<td class="text-right pr-2">86,240</td>
</tr>
<!-- Row 7 -->
<tr>
<td class="text-left pl-2">일반용 100L</td>
<td class="text-right pr-2">11</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2 bg-gray-50">0</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2">0</td>
<td class="text-right pr-2 bg-gray-50">0</td>
<td class="text-right pr-2">11</td>
</tr>
<!-- Row 8 -->
<tr>
<td class="text-left pl-2">일반용 70L</td>
<td class="text-right pr-2">77,400</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2 bg-gray-50">0</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2">1,000</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2">1,000</td>
<td class="text-right pr-2 bg-gray-50">1,000</td>
<td class="text-right pr-2">76,400</td>
</tr>
<!-- Row 9 -->
<tr>
<td class="text-left pl-2">공동주택용 20L</td>
<td class="text-right pr-2">0</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2 bg-gray-50">0</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2">0</td>
<td class="text-right pr-2 bg-gray-50">0</td>
<td class="text-right pr-2"></td>
</tr>
<!-- Row 10 -->
<tr>
<td class="text-left pl-2">공동주택용 50L</td>
<td class="text-right pr-2">0</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2 bg-gray-50">0</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2">0</td>
<td class="text-right pr-2 bg-gray-50">0</td>
<td class="text-right pr-2"></td>
</tr>
<!-- Row 11 -->
<tr>
<td class="text-left pl-2">공동주택용 120L</td>
<td class="text-right pr-2">11</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2 bg-gray-50">0</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2">0</td>
<td class="text-right pr-2 bg-gray-50">0</td>
<td class="text-right pr-2"></td>
</tr>
<!-- Row 12 -->
<tr>
<td class="text-left pl-2">재사용 봉투</td>
<td class="text-right pr-2">58,540</td>
<td class="text-right pr-2">27,000</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2 bg-gray-50">27,000</td>
<td class="text-right pr-2">560</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2">560</td>
<td class="text-right pr-2 bg-gray-50">560</td>
<td class="text-right pr-2">84,990</td>
</tr>
<!-- Row 13 -->
<tr>
<td class="text-left pl-2">음식물 2L</td>
<td class="text-right pr-2">0</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2 bg-gray-50">0</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2">0</td>
<td class="text-right pr-2 bg-gray-50">0</td>
<td class="text-right pr-2"></td>
</tr>
<!-- Row 14 -->
<tr>
<td class="text-left pl-2">음식물 스티커 1L</td>
<td class="text-right pr-2">376,758</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2 bg-gray-50">0</td>
<td class="text-right pr-2">100</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2">100</td>
<td class="text-right pr-2 bg-gray-50">180</td>
<td class="text-right pr-2">376,658</td>
</tr>
<!-- Row 15 -->
<tr>
<td class="text-left pl-2">음식물 스티커 2L</td>
<td class="text-right pr-2">231,542</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2 bg-gray-50">0</td>
<td class="text-right pr-2">100</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2">100</td>
<td class="text-right pr-2 bg-gray-50">100</td>
<td class="text-right pr-2">231,422</td>
</tr>
<!-- Row 16 -->
<tr>
<td class="text-left pl-2">음식물 스티커 3L</td>
<td class="text-right pr-2">529,938</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2 bg-gray-50">0</td>
<td class="text-right pr-2">1,200</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2">1,200</td>
<td class="text-right pr-2 bg-gray-50">1,200</td>
<td class="text-right pr-2">529,738</td>
</tr>
<!-- Row 17 -->
<tr>
<td class="text-left pl-2">음식물 스티커 70L</td>
<td class="text-right pr-2">751,036</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2 bg-gray-50">0</td>
<td class="text-right pr-2">1,400</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2">1,400</td>
<td class="text-right pr-2 bg-gray-50">1,400</td>
<td class="text-right pr-2">750,030</td>
</tr>
<!-- Row 18 -->
<tr>
<td class="text-left pl-2">음식물 스티커 60L</td>
<td class="text-right pr-2">0</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2 bg-gray-50">0</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2">0</td>
<td class="text-right pr-2 bg-gray-50">0</td>
<td class="text-right pr-2">6</td>
</tr>
<!-- Row 19 -->
<tr>
<td class="text-left pl-2">음식물 스티커 120L</td>
<td class="text-right pr-2">209,743</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2 bg-gray-50">0</td>
<td class="text-right pr-2">80</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2">80</td>
<td class="text-right pr-2 bg-gray-50">80</td>
<td class="text-right pr-2">209,663</td>
</tr>
<!-- Row 20 -->
<tr>
<td class="text-left pl-2">폐기물 스티커 1,000원</td>
<td class="text-right pr-2">161,676</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2 bg-gray-50">0</td>
<td class="text-right pr-2">300</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2">300</td>
<td class="text-right pr-2 bg-gray-50">300</td>
<td class="text-right pr-2">161,376</td>
</tr>
<!-- Row 21 -->
<tr>
<td class="text-left pl-2">폐기물 스티커 3,000원</td>
<td class="text-right pr-2">98,018</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2 bg-gray-50">0</td>
<td class="text-right pr-2">120</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2">120</td>
<td class="text-right pr-2 bg-gray-50">120</td>
<td class="text-right pr-2">97,999</td>
</tr>
<!-- Row 22 -->
<tr>
<td class="text-left pl-2">폐기물 스티커 5,000원</td>
<td class="text-right pr-2">61,631</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2 bg-gray-50">0</td>
<td class="text-right pr-2">40</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2">40</td>
<td class="text-right pr-2 bg-gray-50">40</td>
<td class="text-right pr-2">61,591</td>
</tr>
<!-- Next Date Group Placeholder for later expansion or testing -->
<tr>
<td class="align-top text-center bg-white border-t-2 border-gray-400" rowspan="4">2024.01.03</td>
<td class="text-left pl-2 border-t-2 border-gray-400">폐기물 스티커 10,000원</td>
<td class="text-right pr-2 border-t-2 border-gray-400">44,860</td>
<td class="text-right pr-2 border-t-2 border-gray-400"></td>
<td class="text-right pr-2 border-t-2 border-gray-400"></td>
<td class="text-right pr-2 bg-gray-50 border-t-2 border-gray-400">0</td>
<td class="text-right pr-2 border-t-2 border-gray-400"></td>
<td class="text-right pr-2 border-t-2 border-gray-400"></td>
<td class="text-right pr-2 border-t-2 border-gray-400"></td>
<td class="text-right pr-2 border-t-2 border-gray-400">0</td>
<td class="text-right pr-2 bg-gray-50 border-t-2 border-gray-400">0</td>
<td class="text-right pr-2 border-t-2 border-gray-400">44,860</td>
</tr>
<tr>
<td class="text-left pl-2">일반용 5L</td>
<td class="text-right pr-2">187,240</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2 bg-gray-50">0</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2">0</td>
<td class="text-right pr-2 bg-gray-50">0</td>
<td class="text-right pr-2">187,240</td>
</tr>
<tr>
<td class="text-left pl-2">일반용 10L</td>
<td class="text-right pr-2">402,848</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2 bg-gray-50">0</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2">0</td>
<td class="text-right pr-2 bg-gray-50">0</td>
<td class="text-right pr-2">402,848</td>
</tr>
<tr>
<td class="text-left pl-2">일반용 10L</td>
<td class="text-right pr-2">402,365</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2 bg-gray-50">0</td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2"></td>
<td class="text-right pr-2">0</td>
<td class="text-right pr-2 bg-gray-50">0</td>
<td class="text-right pr-2">402,365</td>
</tr></tbody>
<!-- END: Table Body -->
</table>
</div>
</main>
<!-- END: Main Content Area -->
<!-- BEGIN: Footer -->
<footer class="bg-gray-200 border-t border-gray-300 px-4 py-1 text-xs text-gray-600 flex items-center justify-between shrink-0">
<div>Ready.....</div>
<div class="flex gap-4">
<span>북구</span>
<span>Ver..</span>
<span>2025.12.12 (금) 3:00:32PM</span>
</div>
</footer>
<!-- END: Footer -->
</body>
</html>