fix: 날짜 표시 UTC → KST 변환 (admin 페이지들)

This commit is contained in:
thug0bin
2026-03-07 11:38:37 +09:00
parent c1fae04344
commit d842c776c9
9 changed files with 642 additions and 11 deletions

View File

@@ -37,6 +37,17 @@
min-height: 100vh;
}
/* ══════════════════ 주문량 로딩 ══════════════════ */
.order-loading {
display: inline-block;
color: var(--accent-cyan);
animation: pulse 1s infinite;
}
@keyframes pulse {
0%, 100% { opacity: 0.4; }
50% { opacity: 1; }
}
/* ══════════════════ 헤더 ══════════════════ */
.header {
background: linear-gradient(135deg, #0891b2 0%, #06b6d4 50%, #22d3ee 100%);
@@ -825,17 +836,18 @@
<thead>
<tr>
<th class="check-col"><input type="checkbox" class="custom-check" id="checkAll" onchange="toggleCheckAll()"></th>
<th style="width:32%">약품</th>
<th style="width:28%">약품</th>
<th class="center">현재고</th>
<th class="center">처방횟수</th>
<th class="center">투약량</th>
<th class="center" style="color:var(--accent-cyan);">주문량</th>
<th class="right">매출액</th>
<th class="center" style="width:90px">주문수량</th>
</tr>
</thead>
<tbody id="usageTableBody">
<tr>
<td colspan="7">
<td colspan="8">
<div class="loading-state">
<div class="loading-spinner"></div>
<div>데이터 로딩 중...</div>
@@ -882,6 +894,7 @@
<script>
let usageData = [];
let cart = [];
let orderDataByKd = {}; // 수인약품 주문량 (KD코드별)
// 초기화
document.addEventListener('DOMContentLoaded', function() {
@@ -891,8 +904,42 @@
document.getElementById('endDate').value = todayStr;
loadUsageData();
loadOrderData(); // 수인약품 주문량 로드
});
// ──────────────── 수인약품 주문량 조회 ────────────────
async function loadOrderData() {
const startDate = document.getElementById('startDate').value;
const endDate = document.getElementById('endDate').value;
orderDataLoading = true;
try {
const res = await fetch(`/api/sooin/orders/summary-by-kd?start_date=${startDate}&end_date=${endDate}`);
const data = await res.json();
if (data.success) {
orderDataByKd = data.by_kd_code || {};
console.log('📦 수인약품 주문량:', Object.keys(orderDataByKd).length, '품목,', data.order_count, '건 주문');
}
} catch(err) {
console.warn('주문량 조회 실패:', err);
orderDataByKd = {};
} finally {
orderDataLoading = false;
renderTable(); // 로딩 완료 후 테이블 갱신
}
}
// KD코드로 주문량 조회
let orderDataLoading = true; // 로딩 상태
function getOrderedQty(kdCode) {
if (orderDataLoading) return '<span class="order-loading">···</span>';
const order = orderDataByKd[kdCode];
if (!order) return '-';
return order.units.toLocaleString();
}
// ──────────────── 데이터 로드 ────────────────
function loadUsageData() {
const startDate = document.getElementById('startDate').value;
@@ -901,7 +948,7 @@
const sort = document.getElementById('sortSelect').value;
document.getElementById('usageTableBody').innerHTML = `
<tr><td colspan="7">
<tr><td colspan="8">
<div class="loading-state">
<div class="loading-spinner"></div>
<div>데이터 로딩 중...</div>
@@ -928,7 +975,7 @@
renderTable();
} else {
document.getElementById('usageTableBody').innerHTML = `
<tr><td colspan="7">
<tr><td colspan="8">
<div class="empty-state">
<div class="empty-icon">⚠️</div>
<div>오류: ${data.error}</div>
@@ -938,7 +985,7 @@
})
.catch(err => {
document.getElementById('usageTableBody').innerHTML = `
<tr><td colspan="7">
<tr><td colspan="8">
<div class="empty-state">
<div class="empty-icon">❌</div>
<div>데이터 로드 실패</div>
@@ -953,7 +1000,7 @@
if (usageData.length === 0) {
tbody.innerHTML = `
<tr><td colspan="7">
<tr><td colspan="8">
<div class="empty-state">
<div class="empty-icon">💊</div>
<div>해당 기간 처방 내역이 없습니다</div>
@@ -988,6 +1035,7 @@
</td>
<td class="qty-cell" style="color:var(--text-secondary);">${item.prescription_count}건</td>
<td class="qty-cell ${qtyClass}">${item.total_dose}</td>
<td class="qty-cell" style="color:var(--accent-cyan);">${getOrderedQty(item.drug_code)}</td>
<td style="text-align:right;font-family:'JetBrains Mono',monospace;font-size:12px;">
${formatPrice(item.total_amount)}
</td>