포장 명세
@@ -153,6 +178,8 @@
// 봉투코드 스캔(판매/포장) — CSRF 토큰(쿠키 방식, 매 요청 갱신)
// base_url() 절대경로를 현재 문서(동일 출처) 기준 경로로 변환 → 워크스페이스 iframe/다른 호스트 접근에도 안전
const scanApi = new URL('= base_url('bag/order/phone/manage/scan') ?>', window.location.href).pathname;
+ // [개발용 임시] 판매 가능 바코드 후보 API (지정판매소 판매의 dev API 재사용)
+ const devSaleableApi = new URL('= base_url('bag/sale/designated/dev-saleable-barcodes') ?>', window.location.href).pathname;
const csrfName = '= csrf_token() ?>';
let csrfHash = '= csrf_hash() ?>';
@@ -319,10 +346,56 @@
const msg = document.getElementById('scan-msg');
if (msg) msg.textContent = '';
}
+ // [개발용 임시] 선택 주문 판매소 기준 후보 바코드 표
+ loadDevSaleable(order.so_ds_idx, order.so_idx);
syncListHeight(); // 상세 카드 높이 확정 후 접수 리스트 높이를 맞춘다
}
+ // [개발용 임시] 스캔 가능 바코드 후보 로딩(선택 주문 판매소·주문 기준)
+ const devPanelEl = document.getElementById('dev-saleable-panel');
+ const devTbodyEl = document.getElementById('dev-saleable-tbody');
+ async function loadDevSaleable(dsIdx, soIdx) {
+ if (!devPanelEl || !devTbodyEl) return;
+ const idx = Number(dsIdx || 0);
+ if (!idx) { devPanelEl.classList.add('hidden'); return; }
+ devPanelEl.classList.remove('hidden');
+ devTbodyEl.innerHTML = '
| 불러오는 중… |
';
+ try {
+ let url = devSaleableApi + '?ds_idx=' + encodeURIComponent(String(idx));
+ if (Number(soIdx || 0) > 0) url += '&so_idx=' + encodeURIComponent(String(soIdx));
+ const res = await fetch(url, { credentials: 'same-origin' });
+ const data = await res.json();
+ if (!data.ok) { devTbodyEl.innerHTML = '| ' + esc(data.message || '조회 실패') + ' |
'; return; }
+ const rows = Array.isArray(data.rows) ? data.rows : [];
+ if (!rows.length) { devTbodyEl.innerHTML = '| 표시할 바코드가 없습니다. |
'; return; }
+ devTbodyEl.innerHTML = rows.map((r) => {
+ const code = String(r.code || '');
+ const codeCell = (code && code !== '-')
+ ? ''
+ : '' + esc(code) + '';
+ return ''
+ + '| ' + esc(r.source || '') + ' | '
+ + '' + codeCell + ' | '
+ + '' + esc((r.bag_code || '') + ' ' + (r.bag_name || '')) + ' | '
+ + '' + esc(r.unit || '') + ' | '
+ + '' + nf(r.qty || 0) + ' | '
+ + '' + esc(r.state || '') + ' | '
+ + '' + esc(r.extra || '') + ' | '
+ + '
';
+ }).join('');
+ } catch (e) {
+ devTbodyEl.innerHTML = '| 네트워크 오류 |
';
+ }
+ }
+ // 후보 바코드 클릭 → 스캔칸에 입력(개발 편의)
+ devTbodyEl?.addEventListener('click', (e) => {
+ const btn = e.target.closest('.dev-pick');
+ if (!btn) return;
+ const inp = document.getElementById('scan-input');
+ if (inp && !inp.disabled) { inp.value = btn.getAttribute('data-code') || ''; inp.focus(); }
+ });
+
// 봉투코드 스캔 → 즉시 판매·포장 처리 후 화면 갱신
const scanInputEl = document.getElementById('scan-input');
const scanMsgEl = document.getElementById('scan-msg');
@@ -386,6 +459,8 @@
}
// 접수 리스트의 '포장' 표시(O/X) 갱신
renderList();
+ // [개발용 임시] 후보 목록 갱신(방금 판매된 팩 제외)
+ loadDevSaleable(order.so_ds_idx, order.so_idx);
}
scanInputEl.value = '';
scanInputEl.focus();