import{_ as E,I as K,i as T,c as M,d as D,a as t,w as n,G as $,p as O,F as I,h as y,r as i,J as Z,o as m,K as j,e as P,f as b,L as R,t as h,M as U,E as v,g as G,N as H,m as J}from"./index-gIYCKXT9.js";import{r as k}from"./request-Dn-Ij3HI.js";import{a as L,P as W}from"./help-2sGNjKzn.js";const X={key:1,style:{color:"#67c23a"}},Y={__name:"Outbound",setup(ee){const N=G({orderNo:""}),x=K(),f=y(""),w=y(!1),V=y(!1),_=y([]),B=y([]);T(async()=>{try{const e=await k.get("/orders",{params:{page:1,pageSize:200}});B.value=Array.isArray(e)?e:(e==null?void 0:e.list)||[]}catch{B.value=[]}});const F=J(()=>_.value.filter(e=>e.status!=="领料完结"));function q(e){return Math.max((e.totalQty||0)-(e.outQty||0),0)}async function Q(e){const l=q(e);if(l<=0)return;const d=await k.get("/stock/query",{params:{type:"batch",materialCode:e.materialCode,page:1,pageSize:200}}),p=((d==null?void 0:d.batch)||[]).filter(a=>a.qualityStatus==="合格"&&a.zoneCode==="Z02").sort((a,r)=>String(a.batchNo).localeCompare(String(r.batchNo))),c=[];let u=l;for(const a of p){if(u<=0)break;const r=(a.quantity||0)-(a.lockedQty||0);if(r<=0)continue;const o=Math.min(r,u);c.push({batchNo:a.batchNo,qty:o,zoneCode:a.zoneCode}),u-=o}if(!c.length){v.warning(`物料 ${e.materialCode} 在合格区(Z02)无可用批次库存`);return}if(u>0){v.error(`可用量不足:缺口 ${l},Z02 仅可凑 ${l-u},还差 ${u}`);return}const C=c.map(a=>`· 批次 ${a.batchNo} 出库 ${a.qty}`).join(` `);await H.confirm(`工单 ${e.orderNo} 物料 ${e.materialCode} 缺口 ${l},按 FIFO 分配如下: ${C} 操作人:${x}${f.value?` 目标口:${f.value}`:""}`,"确认自动分配出库",{type:"warning",confirmButtonText:"确认出库",cancelButtonText:"取消"});const s=[];let g="";for(const a of c){const r=await k.post("/outbound/create",{orderNo:e.orderNo,materialCode:e.materialCode,batchNo:a.batchNo,qty:a.qty,operator:x,targetDock:f.value.trim()||void 0});r!=null&&r.outboundNo&&s.push(r.outboundNo),g=(r==null?void 0:r.status)||g}const S=g==="领料完结";v.success(`出库完成:出库单号 ${s.join("、")};该物料${S?"已":"未"}领料完结`),await z()}function A(e){return e==="领料完结"?"success":e==="进行中"?"primary":"info"}async function z(){if(!N.orderNo.trim()){v.warning("请输入工单号");return}w.value=!0;try{const e=await k.get("/ledger/query",{params:{orderNo:N.orderNo.trim(),page:1,pageSize:100}});_.value=(e==null?void 0:e.list)||[],V.value=!0,_.value.length||v.info("该工单暂无台账记录")}finally{w.value=!1}}return(e,l)=>{const d=i("el-input"),p=i("el-form-item"),c=i("el-button"),u=i("el-form"),C=i("el-card"),s=i("el-table-column"),g=i("el-tag"),S=i("el-table"),a=i("el-empty"),r=Z("loading");return m(),M(I,null,[D("div",null,[t(C,{shadow:"never",class:"mb12"},{default:n(()=>[t(u,{inline:"","label-width":"90px",onSubmit:l[2]||(l[2]=j(()=>{},["prevent"]))},{default:n(()=>[t(p,{label:"工单号"},{default:n(()=>[t(d,{modelValue:N.orderNo,"onUpdate:modelValue":l[0]||(l[0]=o=>N.orderNo=o),placeholder:"输入工单号回车查询",clearable:"",autofocus:"",style:{width:"260px"},onKeyup:P(z,["enter"])},null,8,["modelValue"])]),_:1}),t(p,{label:"操作人"},{default:n(()=>[t(d,{"model-value":O(x),disabled:"",style:{width:"160px"}},null,8,["model-value"])]),_:1}),t(p,{label:"目标工位"},{default:n(()=>[t(d,{modelValue:f.value,"onUpdate:modelValue":l[1]||(l[1]=o=>f.value=o),placeholder:"可选,如 DOCK-A",clearable:"",style:{width:"180px"}},null,8,["modelValue"])]),_:1}),t(p,null,{default:n(()=>[t(c,{type:"primary",loading:w.value,onClick:z},{default:n(()=>[...l[3]||(l[3]=[b("查询备料台账",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1}),V.value?(m(),$(C,{key:0,shadow:"never"},{header:n(()=>[b(" 台账明细(共 "+h(_.value.length)+" 行,待补 "+h(F.value.length)+" 行) ",1)]),default:n(()=>[R((m(),$(S,{data:_.value,border:""},{default:n(()=>[t(s,{prop:"orderNo",label:"工单号","min-width":"140"}),t(s,{prop:"materialCode",label:"物料编码","min-width":"150"}),t(s,{prop:"materialName",label:"物料名称","min-width":"140"},{default:n(({row:o})=>[b(h(o.materialName||"-"),1)]),_:1}),t(s,{prop:"totalQty",label:"需求总量",width:"100",align:"center"}),t(s,{prop:"outQty",label:"已出库",width:"90",align:"center"}),t(s,{label:"缺口",width:"90",align:"center"},{default:n(({row:o})=>[D("span",{class:U({gap:q(o)>0})},h(q(o)),3)]),_:1}),t(s,{label:"状态",width:"110",align:"center"},{default:n(({row:o})=>[t(g,{type:A(o.status),size:"small"},{default:n(()=>[b(h(o.status),1)]),_:2},1032,["type"])]),_:1}),t(s,{label:"操作",width:"140",align:"center"},{default:n(({row:o})=>[o.status!=="领料完结"?(m(),$(c,{key:0,type:"primary",size:"small",onClick:te=>Q(o)},{default:n(()=>[...l[4]||(l[4]=[b("一键分配出库",-1)])]),_:1},8,["onClick"])):(m(),M("span",X,"已完结"))]),_:1})]),_:1},8,["data"])),[[r,w.value]])]),_:1})):(m(),$(a,{key:1,description:"请先按工单号查询备料台账"}))]),t(W,{data:O(L)},null,8,["data"])],64)}}},ne=E(Y,[["__scopeId","data-v-3f1b75c7"]]);export{ne as default};