1. 移除工单、工件、日排产中的冗余工位组合/接驳台字段 2. 新增工位接驳台编码字段与唯一约束,关联WMS接驳台主数据 3. 重构日排产为工位产量分配模式,替代原接驳台列表 4. 新增备料单工位级字段与分批出库支持 5. 移除定时同步可生产数量,改为WMS实时拉取接口 6. 过滤操作日志,排除登录/退出相关日志 7. 调整仪表盘工序展示逻辑为今日派工路线 8. 新增接驳台维护菜单与基础数据
2 lines
10 KiB
JavaScript
2 lines
10 KiB
JavaScript
import{j as ee,h as w,c as C,a,w as t,k as N,F as k,i as x,r as n,o as d,m as U,n as p,d as F,f as i,p as B,t as z,E as V,v as le,l as ae,x as te}from"./index-CeNpw27z.js";import{c as $}from"./perm-DCTK2KrM.js";import{b as oe,P as de}from"./help-92MqPoF4.js";import{l as ne}from"./stations-DTFB--m9.js";const ue={key:2,style:{color:"#909399"}},fe={__name:"Bom",setup(se){const f=x(""),c=x(""),S=x([]),R=x([]),h=x([]),P=x([]),o=ae({show:!1,productCode:"",materialCode:"",materialName:"",spec:"",unit:"",manageMode:"2",processCode:0,unitQty:1,lossRate:0,relatedStandard:""}),A=te(()=>o.unitQty?`${o.unitQty} × 计划数量 × ${(1+(o.lossRate||0)/100).toFixed(2)}`:"0");async function M(){if(!f.value){S.value=[];return}S.value=await w.get("/bom/names",{params:{productCode:f.value}})||[],!c.value&&S.value.length&&(c.value=S.value[0].bomName)}async function I(){c.value="",await M(),_()}async function _(){if(!f.value)return V.warning("请选择产品编号");P.value=await w.get("/bom",{params:{productCode:f.value,bomName:c.value||"ALL"}})||[]}function W(){Object.assign(o,{show:!0,productCode:f.value||"",materialCode:"",materialName:"",spec:"",unit:"",manageMode:"2",processCode:0,unitQty:1,lossRate:0,relatedStandard:""})}async function H(){if(!o.productCode)return V.warning("请选择产品编号");if(!o.materialCode)return V.warning("请填写图号");const{requiredQty:r,...e}=o;e.processCode||(e.processCode=0),await w.put("/bom",{productCode:o.productCode,bomName:c.value,items:[{...e}]}),V.success("保存成功"),o.show=!1,f.value=o.productCode,await M(),_()}async function O(r){await le.confirm("确认移除该物料?","提示",{type:"warning"}),await w.post("/bom/item/delete",{id:r.id}),V.success("已移除"),await M(),await _()}async function T(r){const{processCode:e}=r,{materialCode:m,materialName:v,spec:u,unit:b,manageMode:E,unitQty:q,lossRate:Q,relatedStandard:s}=r;await w.put("/bom",{productCode:r.productCode||f.value,bomName:r.bomName||c.value,items:[{materialCode:m,materialName:v,spec:u,unit:b,manageMode:E,processCode:e||0,unitQty:q,lossRate:Q,relatedStandard:s}]}),V.success("已更新装配工位"),await _()}async function G(r){const e=new FormData;e.append("file",r.file);try{const m=await w.post("/bom/import",e);V.success(`导入成功,共 ${(m==null?void 0:m.count)||0} 行`),r.onSuccess&&r.onSuccess(),await M(),_()}catch(m){r.onError&&r.onError(m)}}return ee(async()=>{R.value=await w.get("/product-types")||[],h.value=await ne()}),(r,e)=>{const m=n("el-option"),v=n("el-select"),u=n("el-form-item"),b=n("el-button"),E=n("el-upload"),q=n("el-tooltip"),Q=n("el-form"),s=n("el-table-column"),D=n("el-tag"),J=n("el-table"),K=n("el-alert"),g=n("el-input"),L=n("el-radio"),X=n("el-radio-group"),j=n("el-input-number"),Y=n("el-dialog"),Z=n("el-card");return d(),C(k,null,[a(Z,null,{default:t(()=>[a(Q,{inline:""},{default:t(()=>[a(u,{label:"产品编号"},{default:t(()=>[a(v,{modelValue:f.value,"onUpdate:modelValue":e[0]||(e[0]=l=>f.value=l),filterable:"",clearable:"",placeholder:"选择产品编号查看其产品物料清单",style:{width:"240px"},onChange:I},{default:t(()=>[(d(!0),C(k,null,U(R.value,l=>(d(),p(m,{key:l.code,label:`${l.code} ${l.name||""}`,value:l.code},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),a(u,{label:"物料清单名称"},{default:t(()=>[a(v,{modelValue:c.value,"onUpdate:modelValue":e[1]||(e[1]=l=>c.value=l),filterable:"","allow-create":"","default-first-option":"",placeholder:"同一型号多份物料清单按名称区分",style:{width:"220px"},onChange:_},{default:t(()=>[(d(!0),C(k,null,U(S.value,l=>(d(),p(m,{key:l.bomName,label:`${l.bomName}(${l.itemCount}料)`,value:l.bomName},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),e[14]||(e[14]=F("div",{style:{color:"#909399","font-size":"12px","line-height":"1.4",width:"100%"}},"同一型号可并存多份产品物料清单(不同厂家/含半成品),可输入新名称创建;工单建单时按名选用。",-1))]),_:1}),a(u,null,{default:t(()=>[a(b,{type:"primary",onClick:_},{default:t(()=>[...e[15]||(e[15]=[i("查询",-1)])]),_:1}),N($)("produce.bom:edit")?(d(),p(b,{key:0,onClick:W},{default:t(()=>[...e[16]||(e[16]=[i("添加物料",-1)])]),_:1})):B("",!0),N($)("produce.bom:edit")?(d(),p(q,{key:1,placement:"bottom",content:"模板列(首行表头):产品编号 | 物料清单名称 | 图号 | 名称 | 规格 | 单位 | 单台用量 | 损耗率 | 装配工位 | 相关标准 | 备注。按(产品编号+物料清单名称)分组覆盖式导入。"},{default:t(()=>[a(E,{action:"#","show-file-list":!1,"http-request":G,accept:".xlsx,.xls",style:{display:"inline-block","margin-left":"10px"}},{default:t(()=>[a(b,{type:"warning"},{default:t(()=>[...e[17]||(e[17]=[i("导入 Excel",-1)])]),_:1})]),_:1})]),_:1})):B("",!0)]),_:1})]),_:1}),a(J,{data:P.value,border:"",size:"small"},{default:t(()=>[a(s,{prop:"id",label:"ID",width:"60"}),a(s,{prop:"productCode",label:"产品编号","min-width":"120"}),a(s,{prop:"bomName",label:"物料清单名称",width:"110"},{default:t(({row:l})=>[a(D,{size:"small",effect:"plain"},{default:t(()=>[i(z(l.bomName),1)]),_:2},1024)]),_:1}),a(s,{prop:"materialCode",label:"图号","min-width":"120"}),a(s,{prop:"materialName",label:"物料名称","min-width":"120"}),a(s,{prop:"spec",label:"规格"}),a(s,{prop:"unit",label:"单位",width:"70"}),a(s,{prop:"manageMode",label:"管理方式",width:"110"},{default:t(({row:l})=>[i(z(l.manageMode==="1"?"结构件(批次)":"电气件(SN)"),1)]),_:1}),a(s,{prop:"processCode",label:"装配工位",width:"180"},{default:t(({row:l})=>[N($)("produce.bom:edit")?(d(),p(v,{key:0,modelValue:l.processCode,"onUpdate:modelValue":y=>l.processCode=y,size:"small",style:{width:"150px"},onChange:y=>T(l)},{default:t(()=>[a(m,{value:0,label:"未指定(不校验)"}),(d(!0),C(k,null,U(h.value,y=>(d(),p(m,{key:y,value:y,label:`工位${y}`},null,8,["value","label"]))),128))]),_:1},8,["modelValue","onUpdate:modelValue","onChange"])):l.processCode>0?(d(),p(D,{key:1,size:"small",type:"primary"},{default:t(()=>[i("工位"+z(l.processCode),1)]),_:2},1024)):(d(),C("span",ue,"未指定"))]),_:1}),a(s,{prop:"unitQty",label:"单台用量",width:"90"}),a(s,{prop:"lossRate",label:"损耗率%",width:"90"}),a(s,{prop:"relatedStandard",label:"相关标准","min-width":"150","show-overflow-tooltip":""},{default:t(({row:l})=>[i(z(l.relatedStandard||"-"),1)]),_:1}),a(s,{label:"操作",width:"90"},{default:t(({row:l})=>[N($)("produce.bom:edit")?(d(),p(b,{key:0,size:"small",type:"danger",onClick:y=>O(l)},{default:t(()=>[...e[18]||(e[18]=[i("移除",-1)])]),_:1},8,["onClick"])):B("",!0)]),_:1})]),_:1},8,["data"]),a(Y,{modelValue:o.show,"onUpdate:modelValue":e[13]||(e[13]=l=>o.show=l),title:"添加产品物料清单",width:"520px"},{footer:t(()=>[a(b,{onClick:e[12]||(e[12]=l=>o.show=!1)},{default:t(()=>[...e[23]||(e[23]=[i("取消",-1)])]),_:1}),N($)("produce.bom:edit")?(d(),p(b,{key:0,type:"primary",onClick:H},{default:t(()=>[...e[24]||(e[24]=[i("保存",-1)])]),_:1})):B("",!0)]),default:t(()=>[a(K,{type:"info",closable:!1,style:{"margin-bottom":"12px"},title:"图号须与 WMS(库房)「物料档案」的图号完全一致,才能备料/出库。管理方式:电气件按 SN 逐件、结构件按批次。"}),a(Q,{model:o,"label-width":"90px"},{default:t(()=>[a(u,{label:"产品编号",required:""},{default:t(()=>[a(v,{modelValue:o.productCode,"onUpdate:modelValue":e[2]||(e[2]=l=>o.productCode=l),filterable:"",placeholder:"选择产品编号",style:{width:"100%"}},{default:t(()=>[(d(!0),C(k,null,U(R.value,l=>(d(),p(m,{key:l.code,label:`${l.code} ${l.name||""}`,value:l.code},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),a(u,{label:"图号",required:""},{default:t(()=>[a(g,{modelValue:o.materialCode,"onUpdate:modelValue":e[3]||(e[3]=l=>o.materialCode=l),placeholder:"须与 WMS 物料档案图号一致"},null,8,["modelValue"])]),_:1}),a(u,{label:"物料名称"},{default:t(()=>[a(g,{modelValue:o.materialName,"onUpdate:modelValue":e[4]||(e[4]=l=>o.materialName=l)},null,8,["modelValue"])]),_:1}),a(u,{label:"规格"},{default:t(()=>[a(g,{modelValue:o.spec,"onUpdate:modelValue":e[5]||(e[5]=l=>o.spec=l)},null,8,["modelValue"])]),_:1}),a(u,{label:"单位"},{default:t(()=>[a(g,{modelValue:o.unit,"onUpdate:modelValue":e[6]||(e[6]=l=>o.unit=l)},null,8,["modelValue"])]),_:1}),a(u,{label:"管理方式"},{default:t(()=>[a(X,{modelValue:o.manageMode,"onUpdate:modelValue":e[7]||(e[7]=l=>o.manageMode=l)},{default:t(()=>[a(L,{label:"2"},{default:t(()=>[...e[19]||(e[19]=[i("电气件(SN)",-1)])]),_:1}),a(L,{label:"1"},{default:t(()=>[...e[20]||(e[20]=[i("结构件(批次)",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),a(u,{label:"装配工位"},{default:t(()=>[a(v,{modelValue:o.processCode,"onUpdate:modelValue":e[8]||(e[8]=l=>o.processCode=l),clearable:"",placeholder:"未指定=不参与工位绑定校验",style:{width:"100%"}},{default:t(()=>[(d(!0),C(k,null,U(h.value,l=>(d(),p(m,{key:l,label:`工位${l}`,value:l},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),e[21]||(e[21]=F("div",{style:{color:"#909399","font-size":"12px","line-height":"1.4",width:"100%"}},"该料在哪个装配工位被装配。指定后,该工位报工/完工时强制校验绑定齐套:电气件按单台用量逐颗扫SN、结构件至少绑一个批次号。",-1))]),_:1}),a(u,{label:"单台用量"},{default:t(()=>[a(j,{modelValue:o.unitQty,"onUpdate:modelValue":e[9]||(e[9]=l=>o.unitQty=l),min:0},null,8,["modelValue"])]),_:1}),a(u,{label:"损耗率%"},{default:t(()=>[a(j,{modelValue:o.lossRate,"onUpdate:modelValue":e[10]||(e[10]=l=>o.lossRate=l),min:0},null,8,["modelValue"])]),_:1}),a(u,{label:"相关标准"},{default:t(()=>[a(g,{modelValue:o.relatedStandard,"onUpdate:modelValue":e[11]||(e[11]=l=>o.relatedStandard=l),placeholder:"检验细则/相关标准(可空)"},null,8,["modelValue"])]),_:1}),a(u,{label:"需求量"},{default:t(()=>[a(g,{"model-value":A.value,disabled:"",placeholder:"备料时自动计算",style:{width:"100%"}},null,8,["model-value"]),e[22]||(e[22]=F("div",{style:{color:"#909399","font-size":"12px","line-height":"1.4",width:"100%"}},"备料需求量=单台用量 × 计划数量 × (1+损耗率%),由「按日排产生成备料」时自动计算,此处只读。",-1))]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue"])]),_:1}),a(de,{data:N(oe),page:"Bom"},null,8,["data"])],64)}}};export{fe as default};
|