This commit is contained in:
2026-09-09 10:18:07 +08:00
parent d3d1ba88db
commit a18775b261
6 changed files with 2530 additions and 5619 deletions
File diff suppressed because one or more lines are too long
+2 -1
View File
@@ -8571,7 +8571,7 @@ function saveLastMileInboundPlan(){
const now=lmoNow();
order.pallets=pallets;order.isConsolidated=isConsolidated;order.inboundPlan={warehouse,eta,inboundCode,pallets,palletType,isOutsourced,isUrgent,remark,createdAt:order.inboundPlan&&order.inboundPlan.createdAt||now};
let linked=order.inboundNo&&fbaInboundOrderData.find(item=>item.inboundNo===order.inboundNo);
if(!linked){if(!order.inboundNo)order.inboundNo='FBI'+now.slice(0,10).replace(/-/g,'')+String(fbaInboundOrderData.length+1).padStart(3,'0');fbaInboundOrderData.unshift({inboundNo:order.inboundNo,bolNo:order.firstLegNo,type:'海外订单',wh:warehouse,owner:order.owner,totalBoxes:order.boxes,chargeVol:order.volume,palletTotal:order.pallets,palletType,isOutsourced,isUrgent,status:'待审核',warehouseCode:inboundCode,eta,containerNo:order.containerNo,createdDate:now.slice(0,10)});}else{Object.assign(linked,{wh:warehouse,warehouseCode:inboundCode,eta,totalBoxes:order.boxes,chargeVol:order.volume,palletTotal:order.pallets,palletType,isOutsourced,isUrgent});}
if(!linked){if(!order.inboundNo)order.inboundNo='FBI'+now.slice(0,10).replace(/-/g,'')+String(fbaInboundOrderData.length+1).padStart(3,'0');fbaInboundOrderData.unshift({inboundNo:order.inboundNo,bolNo:order.firstLegNo,type:'海外订单',wh:warehouse,owner:order.owner,totalBoxes:order.boxes,chargeVol:order.volume,palletTotal:order.pallets,palletType,isOutsourced,isConsolidated,isUrgent,status:'待审核',warehouseCode:inboundCode,eta,containerNo:order.containerNo,createdDate:now.slice(0,10)});}else{Object.assign(linked,{wh:warehouse,warehouseCode:inboundCode,eta,totalBoxes:order.boxes,chargeVol:order.volume,palletTotal:order.pallets,palletType,isOutsourced,isConsolidated,isUrgent});}
order.logs.push({time:now,node:'入库计划',operator:'张经理',result:'已保存并关联入库单 '+order.inboundNo});hideModal('modal-lmo-inbound-plan');refreshLastMileViews(order);showToast('入库计划已保存,已生成入库单 '+order.inboundNo,'success');
}
function getSelectedLastMileOrders(){return [...selectedLastMileOrderNos].map(no=>lastMileOrderData.find(order=>order.no===no)).filter(Boolean);}
@@ -8665,6 +8665,7 @@ function renderFbaInboundOrder(list){
<td style="padding:9px 10px;text-align:right">${d.palletTotal}</td>
<td style="padding:9px 10px;white-space:nowrap">${lmoEsc(getInboundPalletType(d))}</td>
<td style="padding:9px 10px;text-align:center"><span class="tag ${isInboundOutsourced(d)?'tag-blue':'tag-gray'}">${formatInboundOutsourced(d)}</span></td>
<td style="padding:9px 10px;text-align:center"><span class="tag ${d.isConsolidated?'tag-blue':'tag-gray'}">${d.isConsolidated?'可合托':'不合托'}</span></td>
<td style="padding:9px 10px;text-align:center"><span class="tag ${isInboundUrgent(d)?'tag-red':'tag-gray'}">${formatInboundUrgent(d)}</span></td>
<td style="padding:9px 10px;text-align:center"><span class="tag ${d.status==='已入库'?'tag-green':d.status==='已审核'?'tag-blue':'tag-orange'}">${d.status}</span></td>
<td style="padding:9px 10px;text-align:center"><span class="tag ${d.appointmentStatus==='预约成功'?'tag-green':d.appointmentStatus==='预约中'?'tag-blue':'tag-gray'}">${lmoEsc(d.appointmentStatus||'未预约')}</span></td>
@@ -533,7 +533,8 @@
<th style="padding:9px 10px;text-align:right;white-space:nowrap">计费体积(m³)</th>
<th style="padding:9px 10px;text-align:right;white-space:nowrap">总托盘数</th>
<th style="padding:9px 10px;text-align:left;white-space:nowrap">托盘类型</th>
<th style="padding:9px 10px;text-align:center;white-space:nowrap">是否外配</th>
<th style="padding:9px 10px;text-align:center;white-space:nowrap">分配</th>
<th style="padding:9px 10px;text-align:center;white-space:nowrap">合托</th>
<th style="padding:9px 10px;text-align:center;white-space:nowrap">是否加急</th>
<th style="padding:9px 10px;text-align:center;white-space:nowrap">状态</th>
<th style="padding:9px 10px;text-align:center;white-space:nowrap">FBA预约</th>
@@ -940,7 +941,7 @@ FORM: 采用现有后台的列表加标准详情结构,保持高信息密度
<div class="modal-overlay" id="modal-lmo-manual-nodes" role="dialog" aria-modal="true" aria-labelledby="lmo-manual-nodes-title"><div class="modal" style="max-width:700px"><div class="modal-header"><span id="lmo-manual-nodes-title">人工修改节点</span><button type="button" aria-label="关闭" onclick="hideModal('modal-lmo-manual-nodes')" style="display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:0;border-radius:6px;background:transparent;color:#64748b;font-size:22px;cursor:pointer">&times;</button></div><div class="modal-body"><div class="lmo-manual-node-order"><span>尾程单号</span><strong id="lmo-manual-nodes-order">—</strong></div><div class="lmo-manual-node-wrap"><table class="lmo-manual-node-table"><thead><tr><th style="width:42%">节点</th><th>节点时间</th></tr></thead><tbody id="tbody-lmo-manual-nodes"></tbody></table></div></div><div class="modal-footer"><button type="button" class="btn btn-default" onclick="hideModal('modal-lmo-manual-nodes')">取消</button><button type="button" class="btn btn-primary" onclick="saveLastMileManualNodes()">保存</button></div></div></div>
<!-- 尾程订单 - 入库计划 -->
<div class="modal-overlay" id="modal-lmo-inbound-plan"><div class="modal" style="max-width:720px"><div class="modal-header"><span>入库计划</span><span onclick="hideModal('modal-lmo-inbound-plan')" style="cursor:pointer;font-size:20px">&times;</span></div><div class="modal-body"><div class="lmo-modal-note">保存后生成入库单;清关完成后入库计划不可更改。</div><div class="form-row"><div class="form-group"><label>计划入库仓 *</label><select id="lmo-inbound-warehouse"><option>洛杉矶长滩海外仓</option><option>纽约海外仓</option><option>汉堡海外仓</option></select></div><div class="form-group"><label>预计到仓日期 *</label><input id="lmo-inbound-eta" type="date"/></div></div><div class="form-row"><div class="form-group"><label>入仓码 *</label><input id="lmo-inbound-code" placeholder="请输入入仓码"/></div><div class="form-group"><label>托数 *</label><input id="lmo-inbound-pallets" type="number" min="1" step="1" placeholder="请输入托数"/></div></div><div class="form-row"><div class="form-group"><label for="lmo-inbound-pallet-type">托盘类型</label><select id="lmo-inbound-pallet-type"><option value="标准托盘" selected>标准托盘</option><option value="木托盘">木托盘</option><option value="纸托盘">纸托盘</option></select></div><div class="form-group"><label for="lmo-inbound-outsourced">是否外配</label><label class="lmo-checkbox-option"><input id="lmo-inbound-outsourced" type="checkbox"/> 是</label></div></div><div class="form-row"><div class="form-group"><label for="lmo-inbound-consolidated">是否合托</label><label class="lmo-checkbox-option"><input id="lmo-inbound-consolidated" type="checkbox"/> 是</label></div><div class="form-group"><label for="lmo-inbound-urgent">是否加急</label><label class="lmo-checkbox-option"><input id="lmo-inbound-urgent" type="checkbox"/> 是</label></div></div><div class="form-row single"><div class="form-group"><label>备注</label><textarea id="lmo-inbound-remark" rows="3" placeholder="请输入备注"></textarea></div></div></div><div class="modal-footer"><button class="btn btn-default" onclick="hideModal('modal-lmo-inbound-plan')">取消</button><button class="btn btn-primary" onclick="saveLastMileInboundPlan()">保存并生成入库单</button></div></div></div>
<div class="modal-overlay" id="modal-lmo-inbound-plan"><div class="modal" style="max-width:720px"><div class="modal-header"><span>入库计划</span><span onclick="hideModal('modal-lmo-inbound-plan')" style="cursor:pointer;font-size:20px">&times;</span></div><div class="modal-body"><div class="lmo-modal-note">保存后生成入库单;清关完成后入库计划不可更改。</div><div class="form-row"><div class="form-group"><label>计划入库仓 *</label><select id="lmo-inbound-warehouse"><option>洛杉矶长滩海外仓</option><option>纽约海外仓</option><option>汉堡海外仓</option></select></div><div class="form-group"><label>预计到仓日期 *</label><input id="lmo-inbound-eta" type="date"/></div></div><div class="form-row"><div class="form-group"><label>入仓码 *</label><input id="lmo-inbound-code" placeholder="请输入入仓码"/></div><div class="form-group"><label>托数 *</label><input id="lmo-inbound-pallets" type="number" min="1" step="1" placeholder="请输入托数"/></div></div><div class="form-row"><div class="form-group"><label for="lmo-inbound-pallet-type">托盘类型</label><select id="lmo-inbound-pallet-type"><option value="标准托盘" selected>标准托盘</option><option value="木托盘">木托盘</option><option value="纸托盘">纸托盘</option></select></div><div class="form-group"><label for="lmo-inbound-outsourced">是否分配</label><label class="lmo-checkbox-option"><input id="lmo-inbound-outsourced" type="checkbox"/> 是</label></div></div><div class="form-row"><div class="form-group"><label for="lmo-inbound-consolidated">允许合托</label><label class="lmo-checkbox-option"><input id="lmo-inbound-consolidated" type="checkbox"/> 是</label><small>现场可选择合托或独立收货,不强制合托。</small></div><div class="form-group"><label for="lmo-inbound-urgent">是否加急</label><label class="lmo-checkbox-option"><input id="lmo-inbound-urgent" type="checkbox"/> 是</label></div></div><div class="form-row single"><div class="form-group"><label>备注</label><textarea id="lmo-inbound-remark" rows="3" placeholder="请输入备注"></textarea></div></div></div><div class="modal-footer"><button class="btn btn-default" onclick="hideModal('modal-lmo-inbound-plan')">取消</button><button class="btn btn-primary" onclick="saveLastMileInboundPlan()">保存并生成入库单</button></div></div></div>
<!-- 尾程订单 - 合托 -->
<div class="modal-overlay" id="modal-lmo-consolidate"><div class="modal" style="max-width:680px"><div class="modal-header"><span>合托</span><span onclick="hideModal('modal-lmo-consolidate')" style="cursor:pointer;font-size:20px">&times;</span></div><div class="modal-body"><div class="form-row"><div class="form-group"><label>合托批次 *</label><input id="lmo-consolidate-batch" placeholder="如 CT20260810001"/></div><div class="form-group"><label>合托后托数 *</label><input id="lmo-consolidate-pallets" type="number" min="1"/></div></div><div class="form-row single"><div class="form-group"><label>备注</label><textarea id="lmo-consolidate-remark" rows="3" placeholder="请输入合托说明"></textarea></div></div></div><div class="modal-footer"><button class="btn btn-default" onclick="hideModal('modal-lmo-consolidate')">取消</button><button class="btn btn-primary" onclick="saveLastMileConsolidate()">保存</button></div></div></div>