fix: 날짜 표시 UTC → KST 변환 (admin 페이지들)
This commit is contained in:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user