// 仓库管理 —— 发货单 window.ShipmentOrders = (() => { let currentUser = null; let itemIndex = 0; const isSuperadmin = () => currentUser && currentUser.role === 'superadmin'; const isAdmin = () => currentUser && currentUser.role === 'admin'; const statusLabel = s => ({ pending: '待确认', approved: '已确认', rejected: '已驳回' }[s] || s); const statusColor = s => ({ pending: '#f59e0b', approved: '#10b981', rejected: '#ef4444' }[s] || '#94a3b8'); const render = async () => { try { const res = await fetch('/api/auth/me', { credentials: 'include' }); currentUser = res.ok ? await res.json() : null; } catch (e) { currentUser = null; } return `
`; }; const init = async () => { stopPolling(); if (!currentUser) { try { const res = await fetch('/api/auth/me', { credentials: 'include' }); currentUser = res.ok ? await res.json() : null; } catch (e) { currentUser = null; } } const el = document.getElementById('shipment-content'); if (!el) return; if (isSuperadmin()) { await renderSuperadminView(el); startPolling(); } else if (isAdmin()) { await renderAdminView(el); startPolling(); } else el.innerHTML = '
无权限
'; }; let _modelList = []; const loadModels = async () => { const res = await fetch('/api/warehouse/shipment-models', { credentials: 'include' }); const data = res.ok ? await res.json() : { list: [] }; _modelList = data.list || []; }; const refreshModelDatalist = () => { const dl = document.getElementById('sh-model-datalist'); if (!dl) return; dl.innerHTML = _modelList.map(m => `