feat: 직접조제 및 원산지별 재고 관리 기능 강화

API 개선:
- /api/herbs, /api/inventory/summary에 효능 태그 추가
- 조제 시 원산지 선택 처리 로직 추가
- 원산지별 FIFO 또는 자동 선택 (저렴한 것부터)

UI 개선:
- 재고 목록에 효능 태그 표시 (녹색 배지)
- 처방 선택에 "직접조제" 옵션 추가
- 조제 시 원산지 선택 드롭다운 추가
- JavaScript 주석 블록 오류 수정

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-02-15 09:55:22 +00:00
parent 54af26e384
commit c834b5625f
3 changed files with 684 additions and 53 deletions

View File

@@ -257,8 +257,8 @@
<th>입고일</th>
<th>공급업체</th>
<th>품목 수</th>
<th>총 수량</th>
<th>총 금액</th>
<th>총 수량</th>
<th>파일명</th>
<th>작업</th>
</tr>
@@ -272,19 +272,31 @@
<!-- Excel 업로드 -->
<div class="card">
<div class="card-header">
<div class="card-header d-flex justify-content-between align-items-center">
<h5 class="mb-0">새 입고 등록 (Excel 업로드)</h5>
<button class="btn btn-sm btn-outline-primary" data-bs-toggle="modal" data-bs-target="#supplierModal">
<i class="bi bi-plus"></i> 도매상 등록
</button>
</div>
<div class="card-body">
<form id="purchaseUploadForm" enctype="multipart/form-data">
<div class="mb-3">
<label for="purchaseFile" class="form-label">입고 Excel 파일 선택</label>
<input type="file" class="form-control" id="purchaseFile" accept=".xlsx,.xls" required>
<div class="form-text">
지원 형식: 한의사랑, 한의정보 (자동 감지)
<div class="row">
<div class="col-md-6">
<label for="uploadSupplier" class="form-label">도매상 선택 *</label>
<select class="form-control" id="uploadSupplier" required>
<option value="">도매상을 선택하세요</option>
</select>
</div>
<div class="col-md-6">
<label for="purchaseFile" class="form-label">Excel 파일 선택 *</label>
<input type="file" class="form-control" id="purchaseFile" accept=".xlsx,.xls" required>
</div>
</div>
<button type="submit" class="btn btn-primary">
<div class="form-text mt-2">
<i class="bi bi-info-circle"></i> Excel 형식: 한의사랑, 한의정보 (자동 감지)<br>
<i class="bi bi-info-circle"></i> Excel 내 업체명은 제조사(제약사)로 저장됩니다
</div>
<button type="submit" class="btn btn-primary mt-3">
<i class="bi bi-upload"></i> 업로드 및 처리
</button>
</form>
@@ -370,6 +382,7 @@
<th>약재명</th>
<th>1첩당 용량(g)</th>
<th>총 용량(g)</th>
<th>원산지 선택</th>
<th>재고</th>
<th>작업</th>
</tr>
@@ -599,6 +612,46 @@
</div>
</div>
<!-- Supplier Modal -->
<div class="modal fade" id="supplierModal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">도매상 등록</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<form id="supplierForm">
<div class="mb-3">
<label class="form-label">도매상명 *</label>
<input type="text" class="form-control" id="supplierName" required>
</div>
<div class="mb-3">
<label class="form-label">사업자번호</label>
<input type="text" class="form-control" id="supplierBusinessNo" placeholder="000-00-00000">
</div>
<div class="mb-3">
<label class="form-label">담당자</label>
<input type="text" class="form-control" id="supplierContactPerson">
</div>
<div class="mb-3">
<label class="form-label">전화번호</label>
<input type="tel" class="form-control" id="supplierPhone">
</div>
<div class="mb-3">
<label class="form-label">주소</label>
<input type="text" class="form-control" id="supplierAddress">
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">취소</button>
<button type="button" class="btn btn-primary" id="saveSupplierBtn">저장</button>
</div>
</div>
</div>
</div>
<!-- Scripts -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>