feat: UI에 display_name 및 variant 정보 표시
- 입고 상세 모달에 display_name과 variant 뱃지 표시 - 재고 상세 모달에 품명 컬럼 추가 - 조제 시 원산지 선택에 display_name 표시 - 형태, 가공, 등급 정보를 색상별 뱃지로 구분 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
4d230a2ca8
commit
490553881f
@ -1231,6 +1231,7 @@ $(document).ready(function() {
|
|||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>로트ID</th>
|
<th>로트ID</th>
|
||||||
|
<th>품명</th>
|
||||||
<th>수량</th>
|
<th>수량</th>
|
||||||
<th>단가</th>
|
<th>단가</th>
|
||||||
<th>입고일</th>
|
<th>입고일</th>
|
||||||
@ -1240,9 +1241,19 @@ $(document).ready(function() {
|
|||||||
<tbody>`;
|
<tbody>`;
|
||||||
|
|
||||||
origin.lots.forEach(lot => {
|
origin.lots.forEach(lot => {
|
||||||
|
// variant 속성들을 뱃지로 표시
|
||||||
|
let variantBadges = '';
|
||||||
|
if (lot.form) variantBadges += `<span class="badge bg-info ms-1">${lot.form}</span>`;
|
||||||
|
if (lot.processing) variantBadges += `<span class="badge bg-warning ms-1">${lot.processing}</span>`;
|
||||||
|
if (lot.grade) variantBadges += `<span class="badge bg-success ms-1">${lot.grade}</span>`;
|
||||||
|
|
||||||
originsHtml += `
|
originsHtml += `
|
||||||
<tr>
|
<tr>
|
||||||
<td>#${lot.lot_id}</td>
|
<td>#${lot.lot_id}</td>
|
||||||
|
<td>
|
||||||
|
${lot.display_name ? `<small class="text-primary">${lot.display_name}</small>` : '-'}
|
||||||
|
${variantBadges}
|
||||||
|
</td>
|
||||||
<td>${lot.quantity_onhand.toFixed(1)}g</td>
|
<td>${lot.quantity_onhand.toFixed(1)}g</td>
|
||||||
<td>${formatCurrency(lot.unit_price_per_g)}</td>
|
<td>${formatCurrency(lot.unit_price_per_g)}</td>
|
||||||
<td>${lot.received_date}</td>
|
<td>${lot.received_date}</td>
|
||||||
@ -1389,9 +1400,22 @@ $(document).ready(function() {
|
|||||||
let linesHtml = '';
|
let linesHtml = '';
|
||||||
|
|
||||||
data.lines.forEach(line => {
|
data.lines.forEach(line => {
|
||||||
|
// display_name이 있으면 표시, 없으면 herb_name
|
||||||
|
const displayName = line.display_name || line.herb_name;
|
||||||
|
|
||||||
|
// variant 속성들을 뱃지로 표시
|
||||||
|
let variantBadges = '';
|
||||||
|
if (line.form) variantBadges += `<span class="badge bg-info ms-1">${line.form}</span>`;
|
||||||
|
if (line.processing) variantBadges += `<span class="badge bg-warning ms-1">${line.processing}</span>`;
|
||||||
|
if (line.grade) variantBadges += `<span class="badge bg-success ms-1">${line.grade}</span>`;
|
||||||
|
|
||||||
linesHtml += `
|
linesHtml += `
|
||||||
<tr>
|
<tr>
|
||||||
<td>${line.herb_name}</td>
|
<td>
|
||||||
|
<div>${line.herb_name}</div>
|
||||||
|
${line.display_name ? `<small class="text-primary">${line.display_name}</small>` : ''}
|
||||||
|
${variantBadges}
|
||||||
|
</td>
|
||||||
<td>${line.insurance_code || '-'}</td>
|
<td>${line.insurance_code || '-'}</td>
|
||||||
<td>${line.origin_country || '-'}</td>
|
<td>${line.origin_country || '-'}</td>
|
||||||
<td>${line.quantity_g}g</td>
|
<td>${line.quantity_g}g</td>
|
||||||
@ -1705,11 +1729,28 @@ $(document).ready(function() {
|
|||||||
origins.forEach(origin => {
|
origins.forEach(origin => {
|
||||||
const stockStatus = origin.total_quantity >= requiredQty ? '' : ' (재고 부족)';
|
const stockStatus = origin.total_quantity >= requiredQty ? '' : ' (재고 부족)';
|
||||||
const priceInfo = `${formatCurrency(origin.min_price)}/g`;
|
const priceInfo = `${formatCurrency(origin.min_price)}/g`;
|
||||||
|
|
||||||
|
// 해당 원산지의 display_name 목록 생성
|
||||||
|
let displayNames = [];
|
||||||
|
if (origin.lots && origin.lots.length > 0) {
|
||||||
|
origin.lots.forEach(lot => {
|
||||||
|
if (lot.display_name) {
|
||||||
|
displayNames.push(lot.display_name);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 고유한 display_name만 표시 (중복 제거)
|
||||||
|
const uniqueDisplayNames = [...new Set(displayNames)];
|
||||||
|
const displayNameText = uniqueDisplayNames.length > 0
|
||||||
|
? ` [${uniqueDisplayNames.join(', ')}]`
|
||||||
|
: '';
|
||||||
|
|
||||||
const option = `<option value="${origin.origin_country}"
|
const option = `<option value="${origin.origin_country}"
|
||||||
data-price="${origin.min_price}"
|
data-price="${origin.min_price}"
|
||||||
data-available="${origin.total_quantity}"
|
data-available="${origin.total_quantity}"
|
||||||
${origin.total_quantity < requiredQty ? 'disabled' : ''}>
|
${origin.total_quantity < requiredQty ? 'disabled' : ''}>
|
||||||
${origin.origin_country} - ${priceInfo} (재고: ${origin.total_quantity.toFixed(1)}g)${stockStatus}
|
${origin.origin_country}${displayNameText} - ${priceInfo} (재고: ${origin.total_quantity.toFixed(1)}g)${stockStatus}
|
||||||
</option>`;
|
</option>`;
|
||||||
selectElement.append(option);
|
selectElement.append(option);
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user