feat: 소수 환자 약품 뱃지 표시
- 1년간 3명 이하 환자만 사용하는 약품에 환자 이름 뱃지 표시 - 조회 기간 내 사용한 환자는 핑크색으로 강조 - 매출액 컬럼명 변경 (약가 → 매출액) - SUM(DRUPRICE)로 매출액 계산
This commit is contained in:
@@ -391,6 +391,28 @@
|
||||
font-family: inherit;
|
||||
}
|
||||
|
||||
.patient-badge {
|
||||
display: inline-block;
|
||||
background: rgba(156, 163, 175, 0.15);
|
||||
color: #9ca3af;
|
||||
font-size: 10px;
|
||||
font-weight: 500;
|
||||
padding: 2px 6px;
|
||||
border-radius: 4px;
|
||||
margin-left: 4px;
|
||||
font-family: inherit;
|
||||
}
|
||||
|
||||
.patient-badge.has-today {
|
||||
background: rgba(236, 72, 153, 0.2);
|
||||
color: #ec4899;
|
||||
}
|
||||
|
||||
.today-patient {
|
||||
color: #ec4899;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
/* 수량 관련 */
|
||||
.qty-cell {
|
||||
text-align: center;
|
||||
@@ -957,7 +979,7 @@
|
||||
}
|
||||
<div class="product-info">
|
||||
<span class="product-name">${escapeHtml(item.product_name)}</span>
|
||||
<span class="product-code">${item.drug_code}${item.supplier ? ` · ${escapeHtml(item.supplier)}` : ''}${item.location ? ` <span class="location-badge">📍${escapeHtml(item.location)}</span>` : ''}</span>
|
||||
<span class="product-code">${item.drug_code}${item.supplier ? ` · ${escapeHtml(item.supplier)}` : ''}${item.location ? ` <span class="location-badge">📍${escapeHtml(item.location)}</span>` : ''}${item.patient_names ? ` <span class="patient-badge ${item.today_patients ? 'has-today' : ''}" title="${item.patient_count}명 사용${item.today_patients ? ' (오늘: ' + item.today_patients + ')' : ''}">👤${formatPatientNames(item.patient_names, item.today_patients)}</span>` : ''}</span>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
@@ -1861,6 +1883,23 @@
|
||||
return str.replace(/[&<>"']/g, m => ({'&':'&','<':'<','>':'>','"':'"',"'":'''}[m]));
|
||||
}
|
||||
|
||||
// 환자 이름 포맷 (오늘 사용 환자 강조)
|
||||
function formatPatientNames(allNames, todayNames) {
|
||||
if (!allNames) return '';
|
||||
if (!todayNames) return escapeHtml(allNames);
|
||||
|
||||
const todaySet = new Set(todayNames.split(', ').map(n => n.trim()));
|
||||
const names = allNames.split(', ');
|
||||
|
||||
return names.map(name => {
|
||||
const trimmed = name.trim();
|
||||
if (todaySet.has(trimmed)) {
|
||||
return `<strong class="today-patient">${escapeHtml(trimmed)}</strong>`;
|
||||
}
|
||||
return escapeHtml(trimmed);
|
||||
}).join(', ');
|
||||
}
|
||||
|
||||
function showToast(message, type = 'info') {
|
||||
const toast = document.getElementById('toast');
|
||||
toast.textContent = message;
|
||||
|
||||
Reference in New Issue
Block a user