Files
docs/悦/PDA拣货/出库/合托.html
T
2026-09-08 14:05:30 +08:00

61 lines
24 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>柏悦物流 PDA · 合托</title>
<link rel="icon" href="data:,">
<style>
:root { --brand:#1769e0; --brand-soft:#eaf2ff; --success:#078775; --danger:#bd3b3b; --warning:#bd6b10; --text:#243b53; --muted:#829ab1; --border:#e4eaf2; --bg:#f3f6fa; }
* { box-sizing:border-box; } body { max-width:480px; min-height:100vh; margin:0 auto; background:var(--bg); color:var(--text); font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"PingFang SC","Noto Sans SC",sans-serif; } button,input,select { font:inherit; }.hidden { display:none!important; }
.toast { position:fixed; top:70px; left:50%; z-index:300; padding:10px 20px; border-radius:8px; transform:translateX(-50%) translateY(-20px); opacity:0; color:#fff; background:#243b53; transition:all .25s; pointer-events:none; }.toast.show { transform:translateX(-50%) translateY(0); opacity:1; }.toast.success { background:var(--success); }.toast.error { background:var(--danger); }
.app-shell { min-height:100vh; padding-bottom:82px; }.page-topbar { position:sticky; top:0; z-index:10; display:flex; align-items:center; justify-content:space-between; height:60px; padding:0 12px; border-bottom:1px solid var(--border); background:#fff; box-shadow:0 2px 8px rgba(20,49,82,.05); }.page-back,.page-user { border:0; cursor:pointer; }.page-back { width:38px; height:38px; border-radius:11px; color:#334e68; background:#f1f5f9; font-size:20px; }.page-title { font-size:17px; font-weight:700; }.page-user { width:36px; height:36px; border-radius:12px; color:#155eef; background:#eaf2ff; font-size:13px; font-weight:700; }
.inbound-content { padding:14px 12px 30px; }.inbound-card { padding:15px; margin-bottom:12px; border:1px solid var(--border); border-radius:15px; background:#fff; box-shadow:0 1px 3px rgba(0,0,0,.08); }.inbound-card-head { display:flex; align-items:flex-start; justify-content:space-between; gap:10px; }.inbound-card-title { color:var(--text); font-size:15px; font-weight:700; }.inbound-card-sub { margin-top:4px; color:var(--muted); font-size:11px; line-height:1.5; }.inbound-status { flex:none; padding:5px 8px; border-radius:8px; color:var(--success); background:#e1f6f1; font-size:10px; font-weight:700; }.inbound-scan { display:flex; gap:8px; margin-top:13px; }.inbound-scan input { flex:1; min-width:0; height:44px; padding:0 12px; border:1px solid #dfe5ee; border-radius:9px; font-size:13px; }.inbound-scan button { width:46px; border:0; border-radius:9px; color:#fff; background:var(--brand); font-size:19px; cursor:pointer; }
.consolidation-message,.consolidation-selection-message { display:none; margin-top:10px; padding:10px 11px; border-radius:8px; font-size:12px; }.consolidation-message.show,.consolidation-selection-message.show { display:block; }.consolidation-message.error { color:var(--danger); background:#fff1f1; }.consolidation-message.success { color:var(--success); background:#e8f7f3; }.consolidation-selection-message.warn { color:var(--warning); background:#fff4e5; }
.consolidation-box-info { padding-bottom:10px; }.consolidation-box { padding:12px 0; border-bottom:1px solid #edf1f5; }.consolidation-box:last-child { border-bottom:0; }.consolidation-box-head { display:flex; align-items:center; justify-content:space-between; gap:8px; }.consolidation-box-mark { color:#1769e0; font-size:13px; }.consolidation-box-meta { margin-top:4px; color:#627d98; font-size:11px; }.inbound-chip { padding:4px 7px; border:0; border-radius:7px; color:#bd6b10; background:#fff4e5; font-size:10px; cursor:pointer; }.consolidation-empty { padding:16px 0; color:var(--muted); font-size:12px; text-align:center; }.consolidation-box-details.two-box-state { padding-right:1px; padding-left:1px; }
.consolidation-sku-heading { margin:16px 0 8px; color:#334e68; font-size:13px; font-weight:700; }.consolidation-sku-table-wrap { overflow-x:auto; border:1px solid var(--border); border-radius:10px; }.consolidation-sku-table { width:100%; border-collapse:collapse; table-layout:fixed; font-size:11px; }.consolidation-sku-table th { padding:10px 6px; color:#627d98; background:#f7f9fc; font-size:10px; text-align:left; white-space:nowrap; }.consolidation-sku-table td { padding:10px 6px; border-top:1px solid #edf1f5; color:#334e68; overflow-wrap:anywhere; }.consolidation-empty-cell { color:var(--muted); text-align:center; }
.consolidation-form-grid { display:grid; grid-template-columns:1fr 92px; gap:10px; margin-top:14px; }.consolidation-field span { display:block; margin-bottom:6px; color:#627d98; font-size:11px; }.consolidation-field select,.consolidation-field input { width:100%; height:42px; padding:0 10px; border:1px solid #dfe5ee; border-radius:9px; outline:0; color:#243b53; background:#fff; font-size:13px; }.consolidation-field select:disabled,.consolidation-field input:disabled { color:#94a3b8; background:#f7f9fc; }.consolidation-footer { position:fixed; right:0; bottom:0; left:0; max-width:480px; margin:auto; padding:12px; border-top:1px solid var(--border); background:#fff; }.inbound-btn { width:100%; min-height:44px; border:0; border-radius:10px; color:#fff; background:var(--brand); font-size:14px; font-weight:700; cursor:pointer; }.inbound-btn:disabled { opacity:.55; cursor:not-allowed; }
.profile-cover { height:132px; padding:16px; color:#fff; background:linear-gradient(140deg,#123b72,#1769e0); }.profile-cover .page-back { color:#fff; background:rgba(255,255,255,.14); }.profile-card { margin:-49px 12px 12px; padding:18px; border-radius:12px; background:#fff; box-shadow:0 10px 28px rgba(20,49,82,.13); text-align:center; }.profile-avatar { display:flex; align-items:center; justify-content:center; width:68px; height:68px; margin:-50px auto 10px; border:4px solid #fff; border-radius:16px; color:#155eef; background:#eaf2ff; font-size:25px; font-weight:800; }.profile-name { font-size:19px; font-weight:700; }.profile-role { margin-top:4px; color:#728196; font-size:12px; }.profile-stats { display:grid; grid-template-columns:repeat(3,1fr); margin-top:16px; padding-top:14px; border-top:1px solid #edf1f5; }.profile-stat strong { display:block; color:#163b68; font-size:17px; }.profile-stat span { color:#8a97a8; font-size:10px; }.profile-list { margin:12px; padding:2px 14px; border:1px solid #e3e8ef; border-radius:10px; background:#fff; }.profile-list-item { display:flex; gap:12px; align-items:center; padding:15px 0; border-bottom:1px solid #edf1f5; color:#334e68; font-size:13px; }.profile-list-item:last-child { border-bottom:0; }.profile-list-icon { display:flex; align-items:center; justify-content:center; width:32px; height:32px; border-radius:8px; background:#eef4ff; }.profile-list-value { margin-left:auto; color:#829ab1; font-size:12px; }.profile-logout { width:calc(100% - 24px); margin:4px 12px 24px; padding:13px; border:1px solid #fecaca; border-radius:9px; color:#dc2626; background:#fff; font-size:14px; font-weight:600; cursor:pointer; }
/* 与原合托页面一致的作业布局与两箱卡片状态。 */
.consolidation-page .app-shell { display:flex; flex-direction:column; min-height:100vh; padding-bottom:72px; }.consolidation-page .inbound-content { flex:1; width:100%; padding-bottom:28px; }.consolidation-page .page-back,.consolidation-page .page-user { width:44px; height:44px; }.consolidation-footer { position:fixed; right:0; bottom:0; left:0; z-index:4; max-width:480px; margin:auto; padding:10px 12px max(12px,env(safe-area-inset-bottom)); border-top:1px solid #e4eaf2; background:#fff; box-shadow:0 -4px 14px rgba(23,32,51,.08); }.consolidation-footer .inbound-btn { min-height:48px; }.consolidation-page .inbound-scan input { font-size:16px; }.consolidation-page .inbound-scan input:focus,.consolidation-field select:focus,.consolidation-field input:focus { outline:2px solid rgba(23,105,224,.2); border-color:#1769e0; }.consolidation-scan-card .inbound-card-head { align-items:flex-start; }.consolidation-scan-card .inbound-status { flex:none; }.consolidation-box-info { padding-bottom:14px; }.consolidation-box { padding:12px 0; border-bottom:1px solid #e5ebf3; }.consolidation-box:first-child { padding-top:2px; }.consolidation-box:last-child { padding-bottom:4px; border-bottom:0; }.consolidation-box-head { gap:10px; }.consolidation-box-mark { color:#243b53; font-size:14px; font-weight:700; }.consolidation-box-meta { color:#627d98; font-size:12px; }.consolidation-box .inbound-chip { min-width:44px; min-height:36px; }.consolidation-sku-heading { margin-top:14px; padding-top:12px; border-top:1px solid #e5ebf3; color:#243b53; font-size:13px; font-weight:700; }.consolidation-sku-table-wrap { margin-top:8px; overflow-x:auto; border:0; }.consolidation-sku-table { table-layout:auto; font-size:12px; }.consolidation-sku-table th,.consolidation-sku-table td { padding:10px 8px; border-bottom:1px solid #edf1f5; text-align:left; white-space:nowrap; }.consolidation-sku-table th { color:#627d98; background:#f8fafc; font-weight:600; }.consolidation-sku-table td { color:#243b53; }.consolidation-sku-table td:nth-child(3),.consolidation-sku-table td:nth-child(4) { text-align:right; }.consolidation-form-card { padding-bottom:14px; }.consolidation-form-grid { grid-template-columns:minmax(0,1fr) 112px; margin-top:12px; }.consolidation-field { display:flex; flex-direction:column; gap:6px; color:#627d98; font-size:12px; font-weight:600; }.consolidation-field select,.consolidation-field input { height:44px; padding:0 11px; border-color:#cfd9e7; border-radius:8px; background:#f8fafc; font-size:14px; }.consolidation-selection-message { color:#b42318; }.consolidation-selection-message.warn { background:transparent; }.consolidation-message.success { color:#087568; background:#e8f8f4; }.consolidation-message.error { color:#b42318; background:#fff1f0; } #consolidationBoxDetails.two-box-state { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; padding:8px; border:1px solid #cfe0f7; border-radius:9px; background:#f6f9ff; } #consolidationBoxDetails.two-box-state .consolidation-box { min-width:0; padding:8px; border:1px solid #d9e5f5; border-radius:8px; background:#fff; } #consolidationBoxDetails.two-box-state .consolidation-box-head { flex-direction:column; align-items:flex-start; gap:6px; } #consolidationBoxDetails.two-box-state .consolidation-box .inbound-chip { align-self:flex-end; min-height:30px; }
</style>
<link rel="stylesheet" href="../domestic-overseas-theme.css">
</head>
<body>
<div class="toast" id="toast"></div>
<div class="inbound-page consolidation-page" id="consolidationPage"><div class="app-shell"><div class="page-topbar"><button class="page-back" type="button" onclick="returnToWorkbench()" aria-label="返回工作台">‹</button><div class="page-title">合托</div><button class="page-user" id="consolidationAvatar" type="button" onclick="openProfile()" aria-label="个人中心">张</button></div><div class="inbound-content"><div class="inbound-card consolidation-scan-card"><div class="inbound-card-head"><div><div class="inbound-card-title">扫描箱唛</div><div class="inbound-card-sub">扫描箱唛加入合托,目的仓需保持一致</div></div><span class="inbound-status" id="consolidationAvailableCount">4 箱</span></div><div class="inbound-scan"><input id="consolidationScanInput" placeholder="扫描或输入箱唛" autocomplete="off"><button type="button" onclick="handleConsolidationScan()" aria-label="扫描箱唛">▦</button></div><div class="consolidation-message" id="consolidationMessage" aria-live="polite"></div></div><div class="inbound-card consolidation-box-info"><div class="inbound-card-head"><div><div class="inbound-card-title">箱子信息</div><div class="inbound-card-sub">已扫描箱唛与箱内 SKU 明细</div></div></div><div id="consolidationBoxDetails"><div class="consolidation-empty">暂无箱子,请先扫描箱唛</div></div><div class="consolidation-sku-heading">SKU 列表</div><div class="consolidation-sku-table-wrap"><table class="consolidation-sku-table" id="consolidationSkuTable"><thead><tr><th>箱唛</th><th>SKU</th><th>每箱数量</th><th>可合托箱数</th></tr></thead><tbody><tr><td colspan="4" class="consolidation-empty-cell">暂无 SKU</td></tr></tbody></table></div></div><div class="inbound-card consolidation-form-card"><div class="inbound-card-head"><div><div class="inbound-card-title">合托信息</div><div class="inbound-card-sub">选择 SKU 并输入本次合托箱数</div></div></div><div class="consolidation-form-grid"><label class="consolidation-field"><span>SKU</span><select id="consolidationSkuSelect" onchange="updateConsolidationSelection()" disabled><option value="">扫描箱唛后选择 SKU</option></select></label><label class="consolidation-field"><span>箱数</span><input id="consolidationCartonCountInput" type="number" min="1" value="1" inputmode="numeric" oninput="updateConsolidationSelection()" disabled></label></div><div class="consolidation-selection-message" id="consolidationSelectionMessage" aria-live="polite"></div></div></div><div class="consolidation-footer"><button class="inbound-btn" id="submitConsolidationButton" type="button" onclick="submitConsolidation()" disabled>合托</button></div></div></div>
<div class="profile-page hidden" id="profilePage"><div class="app-shell"><div class="profile-cover"><button class="page-back" type="button" onclick="closeProfile()">‹</button></div><div class="profile-card"><div class="profile-avatar" id="profileAvatar">张</div><div class="profile-name" id="profileName">张伟</div><div class="profile-role" id="profileRole">W001 · 拣货员</div><div class="profile-stats"><div class="profile-stat"><strong>28</strong><span>今日完成</span></div><div class="profile-stat"><strong>156</strong><span>本月任务</span></div><div class="profile-stat"><strong>99.2%</strong><span>作业准确率</span></div></div></div><div class="profile-list"><div class="profile-list-item"><span class="profile-list-icon">🏢</span><span>当前仓库</span><span class="profile-list-value" id="profileWarehouse">洛杉矶仓</span></div><div class="profile-list-item"><span class="profile-list-icon">🕘</span><span>当前班次</span><span class="profile-list-value">白班 08:00–17:00</span></div><div class="profile-list-item"><span class="profile-list-icon">🔐</span><span>修改密码</span><span class="profile-list-value">›</span></div><div class="profile-list-item"><span class="profile-list-icon">⚙️</span><span>系统设置</span><span class="profile-list-value">›</span></div><div class="profile-list-item"><span class="profile-list-icon">ℹ️</span><span>版本信息</span><span class="profile-list-value">V1.0.0</span></div></div><button class="profile-logout" type="button" onclick="handleLogout()">退出登录</button></div></div>
<script>
const CONSOLIDATION_SOURCE_PALLETS = [
{ id:'TP-YW-001', destination:'义乌仓', items:[{ boxNo:'BX-030-01', order:'SO-260901-030', product:'手机壳套装', sku:'YQ-CASE-01', qty:120 },{ boxNo:'BX-030-02', order:'SO-260901-030', product:'USB-C数据线', sku:'YQ-CABLE-02', qty:80 }] },
{ id:'TP-YW-002', destination:'义乌仓', items:[{ boxNo:'BX-032-01', order:'SO-260901-032', product:'手机支架', sku:'YQ-HOLDER-03', qty:60 }] },
{ id:'TP-YW-003', destination:'义乌仓', items:[{ boxNo:'BX-033-01', order:'SO-260901-033', product:'蓝牙耳机', sku:'YQ-BUDS-08', qty:48 },{ boxNo:'BX-033-02', order:'SO-260901-033', product:'充电底座', sku:'YQ-DOCK-09', qty:36 }] },
{ id:'TP-YW-004', destination:'义乌仓', items:[{ boxNo:'BX-034-01', order:'SO-260901-034', product:'平板保护套', sku:'YQ-PAD-10', qty:50 }] },
{ id:'TP-NB-001', destination:'宁波仓', items:[{ boxNo:'BX-031-01', order:'SO-260901-031', product:'旅行包', sku:'NH-BAG-04', qty:32 }] }
];
let consolidatedPallets = [{ id:'HT-260901-001', destination:'义乌仓', sourcePallets:['TP-YW-001','TP-YW-002'], cartonCount:3, pieceCount:260, items:CONSOLIDATION_SOURCE_PALLETS.slice(0,2).flatMap(pallet=>pallet.items.map(item=>({...item,sourcePallet:pallet.id}))) }];
let currentConsolidation = null; let consolidationSelection = { sku:'', count:1 }; let currentUser = null; let toastTimer = null;
function readCurrentUser() { const params=new URLSearchParams(location.search); if(!params.get('id')) return null; return Object.fromEntries(['id','name','role','warehouse'].map(key=>[key,params.get(key)||''])); }
function buildUserParams(user) { return new URLSearchParams({ id:user.id, name:user.name, role:user.role, warehouse:user.warehouse }); }
function returnToWorkbench() { const params=buildUserParams(currentUser); params.set('resume','1'); location.href=`../pda-picking.html?${params}`; }
function handleLogout() { localStorage.removeItem('pdaCurrentUser'); location.href='../pda-picking.html'; }
function showToast(message,type='') { const toast=document.getElementById('toast'); toast.textContent=message; toast.className=`toast show ${type}`; clearTimeout(toastTimer); toastTimer=setTimeout(()=>toast.className='toast',2200); }
function allBoxes() { return CONSOLIDATION_SOURCE_PALLETS.flatMap(pallet=>pallet.items.map(item=>({...item,sourcePallet:pallet.id,destination:pallet.destination}))); }
function existingOwner(boxNo) { return consolidatedPallets.find(pallet=>pallet.items.some(item=>item.boxNo===boxNo)); }
function availableBoxes() { const selected=new Set(currentConsolidation.items.map(item=>item.boxNo)); return allBoxes().filter(item=>!selected.has(item.boxNo)&&!existingOwner(item.boxNo)); }
function setMessage(text,type) { const message=document.getElementById('consolidationMessage'); message.textContent=text; message.className=`consolidation-message show ${type}`; }
function resetView() { document.getElementById('consolidationScanInput').value=''; document.getElementById('consolidationMessage').className='consolidation-message'; document.getElementById('consolidationSelectionMessage').className='consolidation-selection-message'; }
function openConsolidation() { currentConsolidation={id:'',destination:'',items:[]}; consolidationSelection={sku:'',count:1}; resetView(); renderCurrentConsolidation(); setTimeout(()=>document.getElementById('consolidationScanInput').focus(),0); }
function handleConsolidationScan() { const input=document.getElementById('consolidationScanInput'); const boxNo=input.value.trim().toUpperCase(); if(!boxNo) return setMessage('请扫描或输入箱唛','error'); const source=allBoxes().find(item=>item.boxNo===boxNo); if(!source) return setMessage('未找到该箱唛,请核对箱唛后重试','error'); const owner=existingOwner(boxNo); if(owner) return setMessage(`该箱唛已归属合托托盘 ${owner.id},不能重复合托`,'error'); if(currentConsolidation.items.some(item=>item.boxNo===boxNo)) return setMessage('该箱唛已加入当前合托,请勿重复扫描','error'); if(currentConsolidation.destination&&currentConsolidation.destination!==source.destination) return setMessage(`目的仓不一致:当前为${currentConsolidation.destination},该箱为${source.destination}`,'error'); currentConsolidation.destination=source.destination; currentConsolidation.items.push(source); input.value=''; setMessage(`箱唛 ${source.boxNo} 已加入当前合托`,'success'); renderCurrentConsolidation(); }
function renderCurrentConsolidation() { const items=currentConsolidation.items; const available=availableBoxes(); document.getElementById('consolidationAvailableCount').textContent=`${available.length} 箱`; const details=document.getElementById('consolidationBoxDetails'); details.className=items.length===2?'two-box-state':''; details.innerHTML=items.length?items.map((item,index)=>`<div class="consolidation-box"><div class="consolidation-box-head"><strong class="consolidation-box-mark">${item.boxNo}</strong><button class="inbound-chip warn" type="button" onclick="removeConsolidationItem(${index})">移除</button></div><div class="consolidation-box-meta">${item.product} · ${item.sourcePallet} · ${item.order}</div></div>`).join(''):'<div class="consolidation-empty">暂无箱子,请先扫描箱唛</div>'; const tbody=document.querySelector('#consolidationSkuTable tbody'); tbody.innerHTML=items.length?items.map(item=>`<tr><td>${item.boxNo}</td><td>${item.sku}</td><td>${item.qty}</td><td>${available.length}</td></tr>`).join(''):'<tr><td colspan="4" class="consolidation-empty-cell">暂无 SKU</td></tr>'; const select=document.getElementById('consolidationSkuSelect'); const input=document.getElementById('consolidationCartonCountInput'); const skus=[...new Set(items.map(item=>item.sku))]; if(!skus.includes(consolidationSelection.sku)) consolidationSelection.sku=skus[0]||''; select.innerHTML=skus.length?skus.map(sku=>`<option value="${sku}">${sku}</option>`).join(''):'<option value="">扫描箱唛后选择 SKU</option>'; select.value=consolidationSelection.sku; select.disabled=!skus.length; input.disabled=!skus.length; input.value=String(Math.max(1,Number(consolidationSelection.count)||1)); document.getElementById('submitConsolidationButton').disabled=items.length<2; }
function updateConsolidationSelection() { const select=document.getElementById('consolidationSkuSelect'); const input=document.getElementById('consolidationCartonCountInput'); const message=document.getElementById('consolidationSelectionMessage'); if(!select||!input) return; consolidationSelection.sku=select.value; const requested=Number(input.value); const max=Math.max(1,availableBoxes().length); if(!Number.isInteger(requested)||requested<1) { message.textContent='请输入至少 1 箱'; message.className='consolidation-selection-message show'; return; } consolidationSelection.count=Math.min(requested,max); input.value=String(consolidationSelection.count); message.textContent=requested>max?`最多可输入 ${max} 箱`:''; message.className=requested>max?'consolidation-selection-message show':'consolidation-selection-message'; }
function removeConsolidationItem(index) { if(!currentConsolidation?.items[index]) return; currentConsolidation.items.splice(index,1); if(!currentConsolidation.items.length) currentConsolidation.destination=''; setMessage('已从当前合托移除该箱','success'); renderCurrentConsolidation(); }
function nextConsolidationId(now=new Date()) { const two=value=>String(value).padStart(2,'0'); const prefix=`HT-${String(now.getFullYear()).slice(-2)}${two(now.getMonth()+1)}${two(now.getDate())}-`; const max=consolidatedPallets.reduce((highest,pallet)=>pallet.id.startsWith(prefix)?Math.max(highest,Number.parseInt(pallet.id.slice(prefix.length),10)||0):highest,0); return `${prefix}${String(max+1).padStart(3,'0')}`; }
function submitConsolidation() { const items=currentConsolidation?.items||[]; if(items.length<2) return setMessage('至少扫描两个箱唛后才能合托','error'); const saved={id:currentConsolidation.id||nextConsolidationId(),destination:currentConsolidation.destination,sourcePallets:[...new Set(items.map(item=>item.sourcePallet))],cartonCount:items.length,pieceCount:items.reduce((sum,item)=>sum+item.qty,0),items:items.map(item=>({...item}))}; const existingIndex=consolidatedPallets.findIndex(pallet=>pallet.id===saved.id); if(existingIndex>=0) consolidatedPallets[existingIndex]=saved; else consolidatedPallets.push(saved); currentConsolidation=null; showToast(existingIndex>=0?'合托已更新':'合托已提交','success'); setTimeout(returnToWorkbench,1200); }
function updateUserUI() { const initial=currentUser.name.slice(0,1); document.getElementById('consolidationAvatar').textContent=initial; document.getElementById('profileAvatar').textContent=initial; document.getElementById('profileName').textContent=currentUser.name; document.getElementById('profileRole').textContent=`${currentUser.id} · ${currentUser.role}`; document.getElementById('profileWarehouse').textContent=currentUser.warehouse; }
function openProfile() { document.getElementById('consolidationPage').classList.add('hidden'); document.getElementById('profilePage').classList.remove('hidden'); } function closeProfile() { document.getElementById('profilePage').classList.add('hidden'); document.getElementById('consolidationPage').classList.remove('hidden'); }
document.getElementById('consolidationScanInput').addEventListener('keydown',event=>{if(event.key==='Enter')handleConsolidationScan();}); currentUser=readCurrentUser(); if(!currentUser) location.href='../pda-picking.html'; else { updateUserUI(); openConsolidation(); }
</script>
</body>
</html>