Files
bj_power/bj_power_mes/public_bak_20260918215750/assets/ProcessFlow-C18EURr2.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
15 KiB
JavaScript

import{f as Ce,P as we}from"./help-92MqPoF4.js";import{_ as he,j as Te,c as C,a as l,w as n,k as Ue,F as Q,h as w,r as p,i as h,o as c,f as u,n as f,p as g,t as k,d as U,m as xe,v as z,E as V,l as K,x as W}from"./index-CeNpw27z.js";const Ae={key:1},Ee={key:1},Fe={key:1,class:"pdf-name"},Ie={style:{width:"100%"}},Ne={style:{"text-align":"right","margin-top":"8px"}},$e={__name:"ProcessFlow",setup(qe){const T=h("list"),A=h([]),E=h(null),F=h(1),P=h(10),S=h(0);function y(a){try{const e=JSON.parse(localStorage.getItem("user")||"null");if(!e)return!1;const o=e.permissionCodes||[];return e.roleCode==="SUPER_ADMIN"||o.includes("*")||o.includes(a)}catch{return!1}}function X(a){return a==="ACTIVE"?"启用":"停用"}function I(a){return{_key:Date.now()+Math.random(),seq:a,name:"",collectType:"MANUAL",isTorque:!1,needCheck:!1,remark:"",attachment:[],criteria:[]}}async function b(){const a={page:F.value,pageSize:P.value},e=await w.get("/process-flows",{params:a});A.value=e&&e.list?e.list:e||[],S.value=e&&e.total?e.total:A.value.length}function Y(a){return a?String(a).replace("T"," ").slice(0,19):"-"}function D(a){a&&window.open("/api/v1/files/"+a,"_blank")}function Z(){E.value&&E.value.click()}async function ee(a){const e=a.target.files&&a.target.files[0];if(a.target.value="",!!e){if(e.type!=="application/pdf"&&!/\.pdf$/i.test(e.name))return V.warning("仅支持上传 PDF 文件");s.uploading=!0;try{const o=new FormData;o.append("file",e);const r=await w.post("/process-flows/upload",o,{headers:{"Content-Type":"multipart/form-data"}});s.pdfFile=r&&r.filename||"",V.success("PDF 上传成功")}catch{}finally{s.uploading=!1}}}const s=K({id:0,name:"",stations:[],pdfFile:"",status:"ACTIVE",remark:"",uploading:!1,steps:[I(1)]});function M(a){a?(s.id=a.id,s.name=a.name||"",s.stations=a.stations&&a.stations.length?[...a.stations]:[],s.pdfFile=a.pdfFile||"",s.status=a.status||"ACTIVE",s.remark=a.remark||"",s.steps=(a.steps||[]).map((e,o)=>({_key:Date.now()+Math.random(),seq:e.seq||o+1,name:e.name||"",collectType:e.collectType||"MANUAL",isTorque:!!e.isTorque,needCheck:!!e.needCheck,remark:e.remark||"",attachment:(e.attachment||[]).map(r=>({...r})),criteria:(e.criteria||[]).map(r=>({...r}))}))):Object.assign(s,{id:0,name:"",stations:[],pdfFile:"",status:"ACTIVE",remark:"",steps:[]}),s.steps.length||s.steps.push(I(1)),T.value="config"}function le(){const a=s.steps.reduce((e,o)=>Math.max(e,o.seq||0),0);s.steps.push(I(a+1))}function te(a){const e=s.steps.indexOf(a);e>=0&&s.steps.splice(e,1)}async function ae(a,e){const o=new FormData;o.append("file",a.file);try{const r=await w.post("/process-flows/upload",o,{headers:{"Content-Type":"multipart/form-data"}});e.attachment||(e.attachment=[]),e.attachment.push({name:a.file.name,url:r&&r.url||""}),a.onSuccess&&a.onSuccess(),V.success("图纸已上传")}catch(r){a.onError&&a.onError(r)}}function ne(a,e){a.attachment&&a.attachment.splice(e,1)}function oe(a){a&&a.url&&window.open(a.url,"_blank")}const m=K({show:!1,stepName:"",criteria:[],_step:null}),se=W(()=>m.criteria.some(a=>a.logic&&a.logic!=="RANGE")),L=W(()=>m.criteria.some(a=>a.logic==="RANGE"));function ie(a){m._step=a,m.stepName=a.name||"(未命名步骤)",m.criteria=(a.criteria||[]).map(e=>({...e})),m.show=!0}function de(){m.criteria.push({name:"",unit:"",logic:"GE",target:null,min:null,max:null})}function ue(a){const e=m.criteria.indexOf(a);e>=0&&m.criteria.splice(e,1)}function pe(){m._step&&(m._step.criteria=m.criteria.filter(a=>a.name).map(a=>({...a}))),m.show=!1}async function re(){if(!s.name)return V.warning("请填写流程名");const a={id:s.id||void 0,name:s.name,stations:s.stations,pdfFile:s.pdfFile,status:s.status,remark:s.remark,steps:s.steps.map(({_key:e,...o})=>({seq:o.seq,name:o.name,collectType:o.collectType,isTorque:o.isTorque,needCheck:o.needCheck,remark:o.remark,attachment:o.attachment||[],criteria:o.criteria}))};await w.post("/process-flows",a),V.success("保存成功"),T.value="list",b()}async function me(a){await z.confirm("确认删除该工艺流程?删除将同时解除其绑定的工位。","提示",{type:"warning"}),await w.delete(`/process-flows/${a.id}`),V.success("删除成功"),b()}async function ce(a){const e=a.status==="ACTIVE"?"INACTIVE":"ACTIVE",o=e==="INACTIVE"?"停用":"启用";e==="INACTIVE"?await z.confirm(`确认停用「${a.name}」?停用后绑定该流程的工位将不再加载其作业步骤(绑定关系保留,启用后自动恢复)。`,"提示",{type:"warning"}):await z.confirm(`确认启用「${a.name}」?启用后其绑定工位(${(a.stations||[]).map(r=>"工位"+r).join("、")||"-"})将恢复使用该流程。`,"提示",{type:"warning"}),await w.post("/process-flows/status",{id:a.id,status:e}),V.success(`已${o}`),b()}return Te(()=>{b()}),(a,e)=>{const o=p("el-button"),r=p("el-form-item"),G=p("el-form"),d=p("el-table-column"),fe=p("el-tag"),O=p("el-tooltip"),N=p("el-table"),_e=p("el-pagination"),j=p("el-tab-pane"),B=p("el-alert"),v=p("el-input"),$=p("el-col"),R=p("el-row"),_=p("el-option"),q=p("el-select"),x=p("el-input-number"),H=p("el-switch"),ge=p("el-upload"),ye=p("el-link"),ke=p("el-tabs"),Ve=p("el-dialog"),be=p("el-card");return c(),C(Q,null,[l(be,null,{default:n(()=>[l(ke,{modelValue:T.value,"onUpdate:modelValue":e[7]||(e[7]=t=>T.value=t)},{default:n(()=>[l(j,{label:"流程列表",name:"list"},{default:n(()=>[l(G,{inline:""},{default:n(()=>[l(r,null,{default:n(()=>[l(o,{type:"primary",onClick:b},{default:n(()=>[...e[10]||(e[10]=[u("查询",-1)])]),_:1})]),_:1}),l(r,null,{default:n(()=>[y("produce.processflow:add")?(c(),f(o,{key:0,type:"success",onClick:e[0]||(e[0]=t=>M())},{default:n(()=>[...e[11]||(e[11]=[u("新增流程",-1)])]),_:1})):g("",!0)]),_:1})]),_:1}),l(N,{data:A.value,border:"",size:"small"},{default:n(()=>[l(d,{prop:"id",label:"ID",width:"60"}),l(d,{prop:"name",label:"流程名","min-width":"130","show-overflow-tooltip":""}),l(d,{label:"PDF",width:"90",align:"center"},{default:n(({row:t})=>[t.pdfFile?(c(),f(o,{key:0,link:"",type:"primary",onClick:i=>D(t.pdfFile)},{default:n(()=>[...e[12]||(e[12]=[u("预览",-1)])]),_:1},8,["onClick"])):(c(),C("span",Ae,"-"))]),_:1}),l(d,{label:"状态",width:"90",align:"center"},{default:n(({row:t})=>[l(fe,{type:t.status==="ACTIVE"?"success":"info"},{default:n(()=>[u(k(X(t.status)),1)]),_:2},1032,["type"])]),_:1}),l(d,{label:"步骤","min-width":"120"},{default:n(({row:t})=>[t.steps&&t.steps.length?(c(),f(O,{key:0,content:t.steps.map(i=>`${i.seq}.${i.name}`).join(" ")},{default:n(()=>[U("span",null,k(t.steps.length)+" 步",1)]),_:2},1032,["content"])):(c(),C("span",Ee,"0 步"))]),_:1}),l(d,{prop:"remark",label:"备注","min-width":"120","show-overflow-tooltip":""}),l(d,{label:"创建时间",width:"150"},{default:n(({row:t})=>[u(k(Y(t.createdAt)),1)]),_:1}),l(d,{label:"操作",width:"220",align:"center",fixed:"right"},{default:n(({row:t})=>[y("produce.processflow:add")||y("produce.processflow:edit")?(c(),f(o,{key:0,size:"small",onClick:i=>M(t)},{default:n(()=>[...e[13]||(e[13]=[u("编辑",-1)])]),_:1},8,["onClick"])):g("",!0),y("produce.processflow:edit")?(c(),f(o,{key:1,size:"small",type:t.status==="ACTIVE"?"danger":"success",onClick:i=>ce(t)},{default:n(()=>[u(k(t.status==="ACTIVE"?"停用":"启用"),1)]),_:2},1032,["type","onClick"])):g("",!0),y("produce.processflow:delete")?(c(),f(o,{key:2,size:"small",type:"danger",onClick:i=>me(t)},{default:n(()=>[...e[14]||(e[14]=[u("删除",-1)])]),_:1},8,["onClick"])):g("",!0)]),_:1})]),_:1},8,["data"]),l(_e,{style:{"margin-top":"12px","justify-content":"flex-end"},background:"",layout:"total, prev, pager, next",total:S.value,"page-size":P.value,"current-page":F.value,"onUpdate:currentPage":e[1]||(e[1]=t=>F.value=t),onCurrentChange:b},null,8,["total","page-size","current-page"])]),_:1}),l(j,{label:"流程配置",name:"config"},{default:n(()=>[!s.id&&!s.name?(c(),f(B,{key:0,type:"info",closable:!1,"show-icon":"",title:"从「流程列表」点「新增流程」或某行的「编辑」进入此处;填写后保存即生效。"})):g("",!0),l(G,{model:s,"label-width":"90px",style:{"margin-top":"12px"}},{default:n(()=>[l(R,{gutter:12},{default:n(()=>[l($,{span:12},{default:n(()=>[l(r,{label:"流程名",required:""},{default:n(()=>[l(v,{modelValue:s.name,"onUpdate:modelValue":e[2]||(e[2]=t=>s.name=t),placeholder:"如 3号工位装配流程"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1}),l(R,{gutter:12},{default:n(()=>[l($,{span:12},{default:n(()=>[l(r,{label:"状态"},{default:n(()=>[l(q,{modelValue:s.status,"onUpdate:modelValue":e[3]||(e[3]=t=>s.status=t),placeholder:"请选择状态",style:{width:"100%"}},{default:n(()=>[l(_,{label:"启用",value:"ACTIVE"}),l(_,{label:"停用",value:"INACTIVE"})]),_:1},8,["modelValue"])]),_:1})]),_:1}),l($,{span:12},{default:n(()=>[l(r,{label:"作业指导PDF"},{default:n(()=>[y("produce.processflow:upload")?(c(),f(o,{key:0,type:"primary",plain:"",loading:s.uploading,onClick:Z},{default:n(()=>[...e[15]||(e[15]=[u(" 上传 PDF ",-1)])]),_:1},8,["loading"])):g("",!0),s.pdfFile?(c(),C("span",Fe,[u(k(s.pdfFile)+" ",1),l(o,{link:"",type:"primary",onClick:e[4]||(e[4]=t=>D(s.pdfFile))},{default:n(()=>[...e[16]||(e[16]=[u("预览",-1)])]),_:1})])):g("",!0),U("input",{ref_key:"pdfInput",ref:E,type:"file",accept:"application/pdf",style:{display:"none"},onChange:ee},null,544)]),_:1})]),_:1})]),_:1}),l(r,{label:"备注"},{default:n(()=>[l(v,{modelValue:s.remark,"onUpdate:modelValue":e[5]||(e[5]=t=>s.remark=t),placeholder:"备注(可空)"},null,8,["modelValue"])]),_:1}),l(r,{label:"工序步骤"},{default:n(()=>[U("div",Ie,[l(N,{data:s.steps,border:"",size:"small"},{default:n(()=>[l(d,{label:"步骤",width:"80",align:"center"},{default:n(({row:t})=>[l(x,{modelValue:t.seq,"onUpdate:modelValue":i=>t.seq=i,min:1,size:"small","controls-position":"right",style:{width:"70px"}},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),l(d,{label:"步骤名称","min-width":"140"},{default:n(({row:t})=>[l(v,{modelValue:t.name,"onUpdate:modelValue":i=>t.name=i,placeholder:"如 拧紧扭矩"},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),l(d,{label:"采集方式",width:"140"},{default:n(({row:t})=>[l(q,{modelValue:t.collectType,"onUpdate:modelValue":i=>t.collectType=i,placeholder:"请选择"},{default:n(()=>[l(_,{value:"AUTO",label:"拧紧枪自动"}),l(_,{value:"MANUAL",label:"手填"}),l(_,{value:"NONE",label:"仅记录"})]),_:1},8,["modelValue","onUpdate:modelValue"])]),_:1}),l(d,{label:"是否拧紧",width:"90",align:"center"},{default:n(({row:t})=>[l(H,{modelValue:t.isTorque,"onUpdate:modelValue":i=>t.isTorque=i},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),l(d,{label:"检测确认",width:"90",align:"center"},{default:n(({row:t})=>[l(H,{modelValue:t.needCheck,"onUpdate:modelValue":i=>t.needCheck=i},null,8,["modelValue","onUpdate:modelValue"]),l(O,{content:"开启后,报工前须完成该步骤的检测确认",placement:"top"},{default:n(()=>[...e[17]||(e[17]=[U("span",{style:{"margin-left":"4px",color:"#909399","font-size":"12px"}},"?",-1)])]),_:1})]),_:1}),l(d,{label:"备注","min-width":"120"},{default:n(({row:t})=>[l(v,{modelValue:t.remark,"onUpdate:modelValue":i=>t.remark=i,placeholder:"备注(可空)"},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),l(d,{label:"图纸/附件",width:"190"},{default:n(({row:t})=>[l(ge,{action:"#","show-file-list":!1,multiple:"","http-request":i=>ae(i,t)},{default:n(()=>[l(o,{link:"",type:"primary",size:"small"},{default:n(()=>[...e[18]||(e[18]=[u("上传图纸",-1)])]),_:1})]),_:1},8,["http-request"]),(c(!0),C(Q,null,xe(t.attachment||[],(i,J)=>(c(),C("div",{key:J,style:{"font-size":"12px","line-height":"1.7"}},[l(ye,{type:"primary",onClick:ve=>oe(i)},{default:n(()=>[u(k(i.name),1)]),_:2},1032,["onClick"]),l(o,{link:"",type:"danger",size:"small",onClick:ve=>ne(t,J)},{default:n(()=>[...e[19]||(e[19]=[u("删",-1)])]),_:1},8,["onClick"])]))),128))]),_:1}),l(d,{label:"考核标准",width:"110",align:"center"},{default:n(({row:t})=>[l(o,{link:"",type:"primary",size:"small",onClick:i=>ie(t)},{default:n(()=>[u(k((t.criteria||[]).length)+" 条 ",1)]),_:2},1032,["onClick"])]),_:1}),l(d,{label:"操作",width:"70",align:"center"},{default:n(({row:t})=>[l(o,{link:"",type:"danger",size:"small",onClick:i=>te(t)},{default:n(()=>[...e[20]||(e[20]=[u("删",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"]),l(o,{size:"small",style:{"margin-top":"10px"},onClick:le},{default:n(()=>[...e[21]||(e[21]=[u("新增步骤",-1)])]),_:1})])]),_:1})]),_:1},8,["model"]),U("div",Ne,[l(o,{onClick:e[6]||(e[6]=t=>T.value="list")},{default:n(()=>[...e[22]||(e[22]=[u("取消",-1)])]),_:1}),y("produce.processflow:add")||y("produce.processflow:edit")?(c(),f(o,{key:0,type:"primary",onClick:re},{default:n(()=>[...e[23]||(e[23]=[u("保存",-1)])]),_:1})):g("",!0)])]),_:1})]),_:1},8,["modelValue"]),l(Ve,{modelValue:m.show,"onUpdate:modelValue":e[9]||(e[9]=t=>m.show=t),title:`考核标准 - ${m.stepName||""}`,width:"720px",top:"10vh","append-to-body":""},{footer:n(()=>[l(o,{onClick:e[8]||(e[8]=t=>m.show=!1)},{default:n(()=>[...e[26]||(e[26]=[u("取消",-1)])]),_:1}),l(o,{type:"primary",onClick:pe},{default:n(()=>[...e[27]||(e[27]=[u("确定",-1)])]),_:1})]),default:n(()=>[l(B,{type:"info",closable:!1,style:{"margin-bottom":"12px"},title:"为「步骤」设置合格判定标准:报工时按此标准自动判定合格/不合格;未设标准则该步骤仅记录、不判定。"}),l(N,{data:m.criteria,border:"",size:"small"},{default:n(()=>[l(d,{label:"指标名","min-width":"120"},{default:n(({row:t})=>[l(v,{modelValue:t.name,"onUpdate:modelValue":i=>t.name=i,placeholder:"如 扭矩"},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),l(d,{label:"单位",width:"80"},{default:n(({row:t})=>[l(v,{modelValue:t.unit,"onUpdate:modelValue":i=>t.unit=i,placeholder:"N·m"},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),l(d,{label:"逻辑",width:"120"},{default:n(({row:t})=>[l(q,{modelValue:t.logic,"onUpdate:modelValue":i=>t.logic=i,placeholder:"请选择"},{default:n(()=>[l(_,{value:"GE",label:"≥ 大于等于"}),l(_,{value:"LE",label:"≤ 小于等于"}),l(_,{value:"GT",label:"> 大于"}),l(_,{value:"LT",label:"< 小于"}),l(_,{value:"RANGE",label:"区间"}),l(_,{value:"EQUAL",label:"= 等于"})]),_:1},8,["modelValue","onUpdate:modelValue"])]),_:1}),se.value?(c(),f(d,{key:0,label:"目标值",width:"110"},{default:n(({row:t})=>[l(x,{modelValue:t.target,"onUpdate:modelValue":i=>t.target=i,step:1,"controls-position":"right",style:{width:"100%"}},null,8,["modelValue","onUpdate:modelValue"])]),_:1})):g("",!0),L.value?(c(),f(d,{key:1,label:"下限",width:"110"},{default:n(({row:t})=>[l(x,{modelValue:t.min,"onUpdate:modelValue":i=>t.min=i,step:1,"controls-position":"right",style:{width:"100%"}},null,8,["modelValue","onUpdate:modelValue"])]),_:1})):g("",!0),L.value?(c(),f(d,{key:2,label:"上限",width:"110"},{default:n(({row:t})=>[l(x,{modelValue:t.max,"onUpdate:modelValue":i=>t.max=i,step:1,"controls-position":"right",style:{width:"100%"}},null,8,["modelValue","onUpdate:modelValue"])]),_:1})):g("",!0),l(d,{label:"操作",width:"70",align:"center"},{default:n(({row:t})=>[l(o,{link:"",type:"danger",size:"small",onClick:i=>ue(t)},{default:n(()=>[...e[24]||(e[24]=[u("删",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"]),l(o,{size:"small",style:{"margin-top":"10px"},onClick:de},{default:n(()=>[...e[25]||(e[25]=[u("新增标准行",-1)])]),_:1})]),_:1},8,["modelValue","title"])]),_:1}),l(we,{data:Ue(Ce),page:"ProcessFlow"},null,8,["data"])],64)}}},Se=he($e,[["__scopeId","data-v-2ade7561"]]);export{Se as default};