diff --git a/app/Views/bag/order_phone_manage.php b/app/Views/bag/order_phone_manage.php index 4f4979f..eff0718 100644 --- a/app/Views/bag/order_phone_manage.php +++ b/app/Views/bag/order_phone_manage.php @@ -114,6 +114,31 @@ + + +
포장 명세 @@ -153,6 +178,8 @@ // 봉투코드 스캔(판매/포장) — CSRF 토큰(쿠키 방식, 매 요청 갱신) // base_url() 절대경로를 현재 문서(동일 출처) 기준 경로로 변환 → 워크스페이스 iframe/다른 호스트 접근에도 안전 const scanApi = new URL('', window.location.href).pathname; + // [개발용 임시] 판매 가능 바코드 후보 API (지정판매소 판매의 dev API 재사용) + const devSaleableApi = new URL('', window.location.href).pathname; const csrfName = ''; let csrfHash = ''; @@ -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();