Files
bj_power/bj_power_mes/public_bak_20260918215750/assets/Bom-B7M8HZ77.js
T
SunYF 37f10d3a13 refactor: 重构产线工位与备料流程,移除冗余字段
1. 移除工单、工件、日排产中的冗余工位组合/接驳台字段
2. 新增工位接驳台编码字段与唯一约束,关联WMS接驳台主数据
3. 重构日排产为工位产量分配模式,替代原接驳台列表
4. 新增备料单工位级字段与分批出库支持
5. 移除定时同步可生产数量,改为WMS实时拉取接口
6. 过滤操作日志,排除登录/退出相关日志
7. 调整仪表盘工序展示逻辑为今日派工路线
8. 新增接驳台维护菜单与基础数据
2026-09-19 07:50:21 +08:00

2 lines
10 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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.
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};