build: update frontend build asset hashes

this commit updates all the static asset file hashes in index.html templates, and adds/removes the corresponding chunk files, which is typical after a frontend project rebuild to deploy updated static resources.
This commit is contained in:
SunYF
2026-08-29 08:11:44 +08:00
parent 940c2ea0c5
commit e82b744bbd
38 changed files with 253 additions and 195 deletions
@@ -1 +1 @@
import{j as S,h as b,c as U,a as e,w as o,k as j,F as M,i as k,r as n,o as v,m as z,n as F,f as r,t as P,E as x,p as $,l as A}from"./index-BORa7dH4.js";import{a as D,P as H}from"./help-CJCtd61z.js";const J={__name:"Bom",setup(L){const i=k(""),N=k([]),w=k([]),t=A({show:!1,materialCode:"",materialName:"",spec:"",unit:"",manageMode:"2",unitQty:1,lossRate:0,requiredQty:1});async function f(){if(!i.value)return x.warning("请选择/输入工单号");w.value=await b.get("/bom",{params:{workOrderNo:i.value}})||[]}function O(){Object.assign(t,{show:!0,materialCode:"",materialName:"",spec:"",unit:"",manageMode:"2",unitQty:1,lossRate:0,requiredQty:1})}async function q(){await b.put("/bom",{workOrderNo:i.value,items:[t]}),x.success("保存成功"),t.show=!1,f()}async function B(C){await $.confirm("确认移除该物料?","提示",{type:"warning"});const l=w.value.filter(p=>p.id!==C.id).map(({materialCode:p,materialName:V,spec:d,unit:m,manageMode:_,unitQty:u,lossRate:y,requiredQty:s})=>({materialCode:p,materialName:V,spec:d,unit:m,manageMode:_,unitQty:u,lossRate:y,requiredQty:s}));await b.put("/bom",{workOrderNo:i.value,items:l}),await f()}return S(async()=>{N.value=await b.get("/work-orders")||[]}),(C,l)=>{const p=n("el-option"),V=n("el-select"),d=n("el-form-item"),m=n("el-button"),_=n("el-form"),u=n("el-table-column"),y=n("el-table"),s=n("el-input"),Q=n("el-radio"),R=n("el-radio-group"),g=n("el-input-number"),E=n("el-dialog"),c=n("el-card");return v(),U(M,null,[e(c,null,{default:o(()=>[e(_,{inline:""},{default:o(()=>[e(d,{label:"工单号"},{default:o(()=>[e(V,{modelValue:i.value,"onUpdate:modelValue":l[0]||(l[0]=a=>i.value=a),filterable:"","allow-create":"","default-first-option":"",style:{width:"220px"},onChange:f},{default:o(()=>[(v(!0),U(M,null,z(N.value,a=>(v(),F(p,{key:a.workOrderNo,label:a.workOrderNo,value:a.workOrderNo},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(d,null,{default:o(()=>[e(m,{type:"primary",onClick:f},{default:o(()=>[...l[11]||(l[11]=[r("查询",-1)])]),_:1}),e(m,{onClick:O},{default:o(()=>[...l[12]||(l[12]=[r("添加物料",-1)])]),_:1})]),_:1})]),_:1}),e(y,{data:w.value,border:"",size:"small"},{default:o(()=>[e(u,{prop:"materialCode",label:"物料编码","min-width":"120"}),e(u,{prop:"materialName",label:"物料名称","min-width":"120"}),e(u,{prop:"spec",label:"规格"}),e(u,{prop:"unit",label:"单位",width:"70"}),e(u,{prop:"manageMode",label:"管理方式",width:"100"},{default:o(({row:a})=>[r(P(a.manageMode==="1"?"精密件(SN)":"结构件(批次)"),1)]),_:1}),e(u,{prop:"unitQty",label:"单台用量",width:"90"}),e(u,{prop:"lossRate",label:"损耗率%",width:"90"}),e(u,{prop:"requiredQty",label:"需求量",width:"90"}),e(u,{label:"操作",width:"90"},{default:o(({row:a})=>[e(m,{size:"small",type:"danger",onClick:T=>B(a)},{default:o(()=>[...l[13]||(l[13]=[r("移除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"]),e(E,{modelValue:t.show,"onUpdate:modelValue":l[10]||(l[10]=a=>t.show=a),title:"添加物料清单",width:"520px"},{footer:o(()=>[e(m,{onClick:l[9]||(l[9]=a=>t.show=!1)},{default:o(()=>[...l[16]||(l[16]=[r("取消",-1)])]),_:1}),e(m,{type:"primary",onClick:q},{default:o(()=>[...l[17]||(l[17]=[r("保存",-1)])]),_:1})]),default:o(()=>[e(_,{model:t,"label-width":"90px"},{default:o(()=>[e(d,{label:"物料编码"},{default:o(()=>[e(s,{modelValue:t.materialCode,"onUpdate:modelValue":l[1]||(l[1]=a=>t.materialCode=a)},null,8,["modelValue"])]),_:1}),e(d,{label:"物料名称"},{default:o(()=>[e(s,{modelValue:t.materialName,"onUpdate:modelValue":l[2]||(l[2]=a=>t.materialName=a)},null,8,["modelValue"])]),_:1}),e(d,{label:"规格"},{default:o(()=>[e(s,{modelValue:t.spec,"onUpdate:modelValue":l[3]||(l[3]=a=>t.spec=a)},null,8,["modelValue"])]),_:1}),e(d,{label:"单位"},{default:o(()=>[e(s,{modelValue:t.unit,"onUpdate:modelValue":l[4]||(l[4]=a=>t.unit=a)},null,8,["modelValue"])]),_:1}),e(d,{label:"管理方式"},{default:o(()=>[e(R,{modelValue:t.manageMode,"onUpdate:modelValue":l[5]||(l[5]=a=>t.manageMode=a)},{default:o(()=>[e(Q,{label:"1"},{default:o(()=>[...l[14]||(l[14]=[r("精密件(SN)",-1)])]),_:1}),e(Q,{label:"2"},{default:o(()=>[...l[15]||(l[15]=[r("结构件(批次)",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),e(d,{label:"单台用量"},{default:o(()=>[e(g,{modelValue:t.unitQty,"onUpdate:modelValue":l[6]||(l[6]=a=>t.unitQty=a),min:0},null,8,["modelValue"])]),_:1}),e(d,{label:"损耗率%"},{default:o(()=>[e(g,{modelValue:t.lossRate,"onUpdate:modelValue":l[7]||(l[7]=a=>t.lossRate=a),min:0},null,8,["modelValue"])]),_:1}),e(d,{label:"需求量"},{default:o(()=>[e(g,{modelValue:t.requiredQty,"onUpdate:modelValue":l[8]||(l[8]=a=>t.requiredQty=a),min:0},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue"])]),_:1}),e(H,{data:j(D)},null,8,["data"])],64)}}};export{J as default};
import{j as S,h as b,c as U,a as e,w as o,k as j,F as M,i as k,r as n,o as v,m as z,n as F,f as r,t as P,E as x,p as $,l as A}from"./index-0akZQTPV.js";import{a as D,P as H}from"./help-DqtsZH2B.js";const J={__name:"Bom",setup(L){const i=k(""),N=k([]),w=k([]),t=A({show:!1,materialCode:"",materialName:"",spec:"",unit:"",manageMode:"2",unitQty:1,lossRate:0,requiredQty:1});async function f(){if(!i.value)return x.warning("请选择/输入工单号");w.value=await b.get("/bom",{params:{workOrderNo:i.value}})||[]}function O(){Object.assign(t,{show:!0,materialCode:"",materialName:"",spec:"",unit:"",manageMode:"2",unitQty:1,lossRate:0,requiredQty:1})}async function q(){await b.put("/bom",{workOrderNo:i.value,items:[t]}),x.success("保存成功"),t.show=!1,f()}async function B(C){await $.confirm("确认移除该物料?","提示",{type:"warning"});const l=w.value.filter(p=>p.id!==C.id).map(({materialCode:p,materialName:V,spec:d,unit:m,manageMode:_,unitQty:u,lossRate:y,requiredQty:s})=>({materialCode:p,materialName:V,spec:d,unit:m,manageMode:_,unitQty:u,lossRate:y,requiredQty:s}));await b.put("/bom",{workOrderNo:i.value,items:l}),await f()}return S(async()=>{N.value=await b.get("/work-orders")||[]}),(C,l)=>{const p=n("el-option"),V=n("el-select"),d=n("el-form-item"),m=n("el-button"),_=n("el-form"),u=n("el-table-column"),y=n("el-table"),s=n("el-input"),Q=n("el-radio"),R=n("el-radio-group"),g=n("el-input-number"),E=n("el-dialog"),c=n("el-card");return v(),U(M,null,[e(c,null,{default:o(()=>[e(_,{inline:""},{default:o(()=>[e(d,{label:"工单号"},{default:o(()=>[e(V,{modelValue:i.value,"onUpdate:modelValue":l[0]||(l[0]=a=>i.value=a),filterable:"","allow-create":"","default-first-option":"",style:{width:"220px"},onChange:f},{default:o(()=>[(v(!0),U(M,null,z(N.value,a=>(v(),F(p,{key:a.workOrderNo,label:a.workOrderNo,value:a.workOrderNo},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(d,null,{default:o(()=>[e(m,{type:"primary",onClick:f},{default:o(()=>[...l[11]||(l[11]=[r("查询",-1)])]),_:1}),e(m,{onClick:O},{default:o(()=>[...l[12]||(l[12]=[r("添加物料",-1)])]),_:1})]),_:1})]),_:1}),e(y,{data:w.value,border:"",size:"small"},{default:o(()=>[e(u,{prop:"materialCode",label:"物料编码","min-width":"120"}),e(u,{prop:"materialName",label:"物料名称","min-width":"120"}),e(u,{prop:"spec",label:"规格"}),e(u,{prop:"unit",label:"单位",width:"70"}),e(u,{prop:"manageMode",label:"管理方式",width:"100"},{default:o(({row:a})=>[r(P(a.manageMode==="1"?"精密件(SN)":"结构件(批次)"),1)]),_:1}),e(u,{prop:"unitQty",label:"单台用量",width:"90"}),e(u,{prop:"lossRate",label:"损耗率%",width:"90"}),e(u,{prop:"requiredQty",label:"需求量",width:"90"}),e(u,{label:"操作",width:"90"},{default:o(({row:a})=>[e(m,{size:"small",type:"danger",onClick:T=>B(a)},{default:o(()=>[...l[13]||(l[13]=[r("移除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"]),e(E,{modelValue:t.show,"onUpdate:modelValue":l[10]||(l[10]=a=>t.show=a),title:"添加物料清单",width:"520px"},{footer:o(()=>[e(m,{onClick:l[9]||(l[9]=a=>t.show=!1)},{default:o(()=>[...l[16]||(l[16]=[r("取消",-1)])]),_:1}),e(m,{type:"primary",onClick:q},{default:o(()=>[...l[17]||(l[17]=[r("保存",-1)])]),_:1})]),default:o(()=>[e(_,{model:t,"label-width":"90px"},{default:o(()=>[e(d,{label:"物料编码"},{default:o(()=>[e(s,{modelValue:t.materialCode,"onUpdate:modelValue":l[1]||(l[1]=a=>t.materialCode=a)},null,8,["modelValue"])]),_:1}),e(d,{label:"物料名称"},{default:o(()=>[e(s,{modelValue:t.materialName,"onUpdate:modelValue":l[2]||(l[2]=a=>t.materialName=a)},null,8,["modelValue"])]),_:1}),e(d,{label:"规格"},{default:o(()=>[e(s,{modelValue:t.spec,"onUpdate:modelValue":l[3]||(l[3]=a=>t.spec=a)},null,8,["modelValue"])]),_:1}),e(d,{label:"单位"},{default:o(()=>[e(s,{modelValue:t.unit,"onUpdate:modelValue":l[4]||(l[4]=a=>t.unit=a)},null,8,["modelValue"])]),_:1}),e(d,{label:"管理方式"},{default:o(()=>[e(R,{modelValue:t.manageMode,"onUpdate:modelValue":l[5]||(l[5]=a=>t.manageMode=a)},{default:o(()=>[e(Q,{label:"1"},{default:o(()=>[...l[14]||(l[14]=[r("精密件(SN)",-1)])]),_:1}),e(Q,{label:"2"},{default:o(()=>[...l[15]||(l[15]=[r("结构件(批次)",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),e(d,{label:"单台用量"},{default:o(()=>[e(g,{modelValue:t.unitQty,"onUpdate:modelValue":l[6]||(l[6]=a=>t.unitQty=a),min:0},null,8,["modelValue"])]),_:1}),e(d,{label:"损耗率%"},{default:o(()=>[e(g,{modelValue:t.lossRate,"onUpdate:modelValue":l[7]||(l[7]=a=>t.lossRate=a),min:0},null,8,["modelValue"])]),_:1}),e(d,{label:"需求量"},{default:o(()=>[e(g,{modelValue:t.requiredQty,"onUpdate:modelValue":l[8]||(l[8]=a=>t.requiredQty=a),min:0},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue"])]),_:1}),e(H,{data:j(D)},null,8,["data"])],64)}}};export{J as default};
@@ -1 +1 @@
import{n as V,w as l,r as a,u as b,o as y,a as s,e as x,f as i,d as v,l as C,E as n,h as k,v as h,i as B}from"./index-BORa7dH4.js";const E={__name:"ChangePassword",setup(N){const p=b(),d=B(!1),e=C({oldPassword:"",newPassword:"",confirmPassword:""});async function m(){if(!e.oldPassword||!e.newPassword)return n.warning("请填写旧密码和新密码");if(e.newPassword!==e.confirmPassword)return n.warning("两次输入的新密码不一致");if(e.newPassword.length<6)return n.warning("新密码长度至少 6 位");d.value=!0;try{await k.post("/user/change-password",{oldPassword:e.oldPassword,newPassword:e.newPassword}),n.success("密码修改成功,请重新登录"),h(),p.replace("/login")}catch{}finally{d.value=!1}}function f(){e.oldPassword="",e.newPassword="",e.confirmPassword=""}return(P,o)=>{const c=a("el-alert"),w=a("el-input"),t=a("el-form-item"),u=a("el-button"),_=a("el-form"),g=a("el-card");return y(),V(g,{style:{"max-width":"480px","margin-top":"20px"}},{header:l(()=>[...o[4]||(o[4]=[v("b",null,"修改我的密码",-1)])]),default:l(()=>[s(c,{type:"warning",closable:!1,style:{"margin-bottom":"16px"},title:"密码修改成功后需重新登录"}),s(_,{model:e,"label-width":"100px",onSubmit:o[3]||(o[3]=x(()=>{},["prevent"]))},{default:l(()=>[s(t,{label:"旧密码"},{default:l(()=>[s(w,{modelValue:e.oldPassword,"onUpdate:modelValue":o[0]||(o[0]=r=>e.oldPassword=r),type:"password","show-password":"",placeholder:"请输入当前密码"},null,8,["modelValue"])]),_:1}),s(t,{label:"新密码"},{default:l(()=>[s(w,{modelValue:e.newPassword,"onUpdate:modelValue":o[1]||(o[1]=r=>e.newPassword=r),type:"password","show-password":"",placeholder:"至少 6 位"},null,8,["modelValue"])]),_:1}),s(t,{label:"确认新密码"},{default:l(()=>[s(w,{modelValue:e.confirmPassword,"onUpdate:modelValue":o[2]||(o[2]=r=>e.confirmPassword=r),type:"password","show-password":"",placeholder:"请再次输入新密码"},null,8,["modelValue"])]),_:1}),s(t,null,{default:l(()=>[s(u,{type:"primary",loading:d.value,onClick:m},{default:l(()=>[...o[5]||(o[5]=[i("保存",-1)])]),_:1},8,["loading"]),s(u,{onClick:f},{default:l(()=>[...o[6]||(o[6]=[i("重置",-1)])]),_:1})]),_:1})]),_:1},8,["model"])]),_:1})}}};export{E as default};
import{n as V,w as l,r as a,u as b,o as y,a as s,e as x,f as i,d as v,l as C,E as n,h as k,v as h,i as B}from"./index-0akZQTPV.js";const E={__name:"ChangePassword",setup(N){const p=b(),d=B(!1),e=C({oldPassword:"",newPassword:"",confirmPassword:""});async function m(){if(!e.oldPassword||!e.newPassword)return n.warning("请填写旧密码和新密码");if(e.newPassword!==e.confirmPassword)return n.warning("两次输入的新密码不一致");if(e.newPassword.length<6)return n.warning("新密码长度至少 6 位");d.value=!0;try{await k.post("/user/change-password",{oldPassword:e.oldPassword,newPassword:e.newPassword}),n.success("密码修改成功,请重新登录"),h(),p.replace("/login")}catch{}finally{d.value=!1}}function f(){e.oldPassword="",e.newPassword="",e.confirmPassword=""}return(P,o)=>{const c=a("el-alert"),w=a("el-input"),t=a("el-form-item"),u=a("el-button"),_=a("el-form"),g=a("el-card");return y(),V(g,{style:{"max-width":"480px","margin-top":"20px"}},{header:l(()=>[...o[4]||(o[4]=[v("b",null,"修改我的密码",-1)])]),default:l(()=>[s(c,{type:"warning",closable:!1,style:{"margin-bottom":"16px"},title:"密码修改成功后需重新登录"}),s(_,{model:e,"label-width":"100px",onSubmit:o[3]||(o[3]=x(()=>{},["prevent"]))},{default:l(()=>[s(t,{label:"旧密码"},{default:l(()=>[s(w,{modelValue:e.oldPassword,"onUpdate:modelValue":o[0]||(o[0]=r=>e.oldPassword=r),type:"password","show-password":"",placeholder:"请输入当前密码"},null,8,["modelValue"])]),_:1}),s(t,{label:"新密码"},{default:l(()=>[s(w,{modelValue:e.newPassword,"onUpdate:modelValue":o[1]||(o[1]=r=>e.newPassword=r),type:"password","show-password":"",placeholder:"至少 6 位"},null,8,["modelValue"])]),_:1}),s(t,{label:"确认新密码"},{default:l(()=>[s(w,{modelValue:e.confirmPassword,"onUpdate:modelValue":o[2]||(o[2]=r=>e.confirmPassword=r),type:"password","show-password":"",placeholder:"请再次输入新密码"},null,8,["modelValue"])]),_:1}),s(t,null,{default:l(()=>[s(u,{type:"primary",loading:d.value,onClick:m},{default:l(()=>[...o[5]||(o[5]=[i("保存",-1)])]),_:1},8,["loading"]),s(u,{onClick:f},{default:l(()=>[...o[6]||(o[6]=[i("重置",-1)])]),_:1})]),_:1})]),_:1},8,["model"])]),_:1})}}};export{E as default};
@@ -1 +1 @@
import{j as x,c as h,a as e,w as o,k,F as N,h as T,r as a,i as d,l as z,o as C,g as _,f as K}from"./index-BORa7dH4.js";import{i as U,P as E}from"./help-CJCtd61z.js";const B={__name:"EventLog",setup(I){const n=z({orderNo:"",operator:"",eventType:""}),c=d([]),b=d(0),i=d(1),g=d(20);async function u(){const r=await T.get("/event-logs",{params:{...n,page:i.value,pageSize:g.value}});c.value=(r==null?void 0:r.list)||[],b.value=(r==null?void 0:r.total)||0}return x(u),(r,t)=>{const m=a("el-input"),s=a("el-form-item"),f=a("el-button"),y=a("el-form"),l=a("el-table-column"),v=a("el-table"),w=a("el-pagination"),V=a("el-card");return C(),h(N,null,[e(V,null,{default:o(()=>[e(y,{inline:""},{default:o(()=>[e(s,{label:"工单号"},{default:o(()=>[e(m,{modelValue:n.orderNo,"onUpdate:modelValue":t[0]||(t[0]=p=>n.orderNo=p),clearable:"",style:{width:"180px"},onKeyup:_(u,["enter"])},null,8,["modelValue"])]),_:1}),e(s,{label:"操作人"},{default:o(()=>[e(m,{modelValue:n.operator,"onUpdate:modelValue":t[1]||(t[1]=p=>n.operator=p),clearable:"",style:{width:"120px"},onKeyup:_(u,["enter"])},null,8,["modelValue"])]),_:1}),e(s,{label:"类型"},{default:o(()=>[e(m,{modelValue:n.eventType,"onUpdate:modelValue":t[2]||(t[2]=p=>n.eventType=p),clearable:"",style:{width:"180px"},onKeyup:_(u,["enter"])},null,8,["modelValue"])]),_:1}),e(s,null,{default:o(()=>[e(f,{type:"primary",onClick:u},{default:o(()=>[...t[4]||(t[4]=[K("查询",-1)])]),_:1})]),_:1})]),_:1}),e(v,{data:c.value,border:"",size:"small"},{default:o(()=>[e(l,{prop:"id",label:"ID",width:"60"}),e(l,{prop:"eventType",label:"事件类型","min-width":"150"}),e(l,{prop:"workOrderNo",label:"工单号","min-width":"130"}),e(l,{prop:"description",label:"描述","min-width":"160"}),e(l,{prop:"entityType",label:"实体",width:"130"}),e(l,{prop:"entityId",label:"实体ID",width:"120"}),e(l,{prop:"operator",label:"操作人",width:"90"}),e(l,{prop:"createdAt",label:"时间","min-width":"170"})]),_:1},8,["data"]),e(w,{"current-page":i.value,"onUpdate:currentPage":t[3]||(t[3]=p=>i.value=p),"page-size":g.value,total:b.value,layout:"total, prev, pager, next",background:"",style:{"margin-top":"10px"},onCurrentChange:u},null,8,["current-page","page-size","total"])]),_:1}),e(E,{data:k(U)},null,8,["data"])],64)}}};export{B as default};
import{j as x,c as h,a as e,w as o,k,F as N,h as T,r as a,i as d,l as z,o as C,g as _,f as K}from"./index-0akZQTPV.js";import{i as U,P as E}from"./help-DqtsZH2B.js";const B={__name:"EventLog",setup(I){const n=z({orderNo:"",operator:"",eventType:""}),c=d([]),b=d(0),i=d(1),g=d(20);async function u(){const r=await T.get("/event-logs",{params:{...n,page:i.value,pageSize:g.value}});c.value=(r==null?void 0:r.list)||[],b.value=(r==null?void 0:r.total)||0}return x(u),(r,t)=>{const m=a("el-input"),s=a("el-form-item"),f=a("el-button"),y=a("el-form"),l=a("el-table-column"),v=a("el-table"),w=a("el-pagination"),V=a("el-card");return C(),h(N,null,[e(V,null,{default:o(()=>[e(y,{inline:""},{default:o(()=>[e(s,{label:"工单号"},{default:o(()=>[e(m,{modelValue:n.orderNo,"onUpdate:modelValue":t[0]||(t[0]=p=>n.orderNo=p),clearable:"",style:{width:"180px"},onKeyup:_(u,["enter"])},null,8,["modelValue"])]),_:1}),e(s,{label:"操作人"},{default:o(()=>[e(m,{modelValue:n.operator,"onUpdate:modelValue":t[1]||(t[1]=p=>n.operator=p),clearable:"",style:{width:"120px"},onKeyup:_(u,["enter"])},null,8,["modelValue"])]),_:1}),e(s,{label:"类型"},{default:o(()=>[e(m,{modelValue:n.eventType,"onUpdate:modelValue":t[2]||(t[2]=p=>n.eventType=p),clearable:"",style:{width:"180px"},onKeyup:_(u,["enter"])},null,8,["modelValue"])]),_:1}),e(s,null,{default:o(()=>[e(f,{type:"primary",onClick:u},{default:o(()=>[...t[4]||(t[4]=[K("查询",-1)])]),_:1})]),_:1})]),_:1}),e(v,{data:c.value,border:"",size:"small"},{default:o(()=>[e(l,{prop:"id",label:"ID",width:"60"}),e(l,{prop:"eventType",label:"事件类型","min-width":"150"}),e(l,{prop:"workOrderNo",label:"工单号","min-width":"130"}),e(l,{prop:"description",label:"描述","min-width":"160"}),e(l,{prop:"entityType",label:"实体",width:"130"}),e(l,{prop:"entityId",label:"实体ID",width:"120"}),e(l,{prop:"operator",label:"操作人",width:"90"}),e(l,{prop:"createdAt",label:"时间","min-width":"170"})]),_:1},8,["data"]),e(w,{"current-page":i.value,"onUpdate:currentPage":t[3]||(t[3]=p=>i.value=p),"page-size":g.value,total:b.value,layout:"total, prev, pager, next",background:"",style:{"margin-top":"10px"},onCurrentChange:u},null,8,["current-page","page-size","total"])]),_:1}),e(E,{data:k(U)},null,8,["data"])],64)}}};export{B as default};
@@ -1 +1 @@
import{_ as V,c as x,a as o,w as t,r as s,u as k,b as S,o as b,d as E,e as N,f as d,g as z,E as B,h as _,s as C,i as p}from"./index-BORa7dH4.js";const L={class:"login-wrap"},M={__name:"Login",setup(q){const f=k(),g=S(),a=p("admin"),l=p(""),n=p(!1);async function r(){if(!a.value||!l.value)return B.warning("请输入账号和密码");n.value=!0;try{const u=await _.post("/login",{username:a.value,password:l.value});C(u.accessToken,{username:a.value});const e=await _.get("/userinfo");localStorage.setItem("user",JSON.stringify(e)),f.replace(g.query.redirect||"/work-order")}catch{}finally{n.value=!1}}return(u,e)=>{const m=s("el-input"),c=s("el-form-item"),v=s("el-button"),w=s("el-form"),y=s("el-card");return b(),x("div",L,[o(y,{class:"login-card"},{default:t(()=>[e[5]||(e[5]=E("h2",{class:"title"},"MES 产线控制",-1)),o(w,{onSubmit:N(r,["prevent"])},{default:t(()=>[o(c,null,{default:t(()=>[o(m,{modelValue:a.value,"onUpdate:modelValue":e[0]||(e[0]=i=>a.value=i),placeholder:"用户名",size:"large"},{prefix:t(()=>[...e[2]||(e[2]=[d("👤",-1)])]),_:1},8,["modelValue"])]),_:1}),o(c,null,{default:t(()=>[o(m,{modelValue:l.value,"onUpdate:modelValue":e[1]||(e[1]=i=>l.value=i),type:"password",placeholder:"密码",size:"large","show-password":"",onKeyup:z(r,["enter"])},{prefix:t(()=>[...e[3]||(e[3]=[d("🔒",-1)])]),_:1},8,["modelValue"])]),_:1}),o(v,{type:"primary",size:"large",style:{width:"100%"},loading:n.value,onClick:r},{default:t(()=>[...e[4]||(e[4]=[d("登 录",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})])}}},K=V(M,[["__scopeId","data-v-ee01258d"]]);export{K as default};
import{_ as V,c as x,a as o,w as t,r as s,u as k,b as S,o as b,d as E,e as N,f as d,g as z,E as B,h as _,s as C,i as p}from"./index-0akZQTPV.js";const L={class:"login-wrap"},M={__name:"Login",setup(q){const f=k(),g=S(),a=p("admin"),l=p(""),n=p(!1);async function r(){if(!a.value||!l.value)return B.warning("请输入账号和密码");n.value=!0;try{const u=await _.post("/login",{username:a.value,password:l.value});C(u.accessToken,{username:a.value});const e=await _.get("/userinfo");localStorage.setItem("user",JSON.stringify(e)),f.replace(g.query.redirect||"/work-order")}catch{}finally{n.value=!1}}return(u,e)=>{const m=s("el-input"),c=s("el-form-item"),v=s("el-button"),w=s("el-form"),y=s("el-card");return b(),x("div",L,[o(y,{class:"login-card"},{default:t(()=>[e[5]||(e[5]=E("h2",{class:"title"},"MES 产线控制",-1)),o(w,{onSubmit:N(r,["prevent"])},{default:t(()=>[o(c,null,{default:t(()=>[o(m,{modelValue:a.value,"onUpdate:modelValue":e[0]||(e[0]=i=>a.value=i),placeholder:"用户名",size:"large"},{prefix:t(()=>[...e[2]||(e[2]=[d("👤",-1)])]),_:1},8,["modelValue"])]),_:1}),o(c,null,{default:t(()=>[o(m,{modelValue:l.value,"onUpdate:modelValue":e[1]||(e[1]=i=>l.value=i),type:"password",placeholder:"密码",size:"large","show-password":"",onKeyup:z(r,["enter"])},{prefix:t(()=>[...e[3]||(e[3]=[d("🔒",-1)])]),_:1},8,["modelValue"])]),_:1}),o(v,{type:"primary",size:"large",style:{width:"100%"},loading:n.value,onClick:r},{default:t(()=>[...e[4]||(e[4]=[d("登 录",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})])}}},K=V(M,[["__scopeId","data-v-ee01258d"]]);export{K as default};
@@ -1 +1 @@
import{j as N,c as h,a as e,w as o,k as M,F as k,l as q,h as c,r as n,i as x,o as C,g as f,f as d,t as v,E as b}from"./index-BORa7dH4.js";import{b as S,P as Y}from"./help-CJCtd61z.js";const B={__name:"MaterialRequest",setup(E){const t=q({planDate:"",orderNo:"",status:""}),i=x([]);async function s(){i.value=await c.get("/material-requests",{params:t})||[]}async function w(){if(!t.planDate)return b.warning("请先选择排产日期");const p=await c.post("/material-requests/generate",{planDate:t.planDate});b.success(`已生成 ${(p==null?void 0:p.count)||0} 条备料`),s()}return N(()=>{t.planDate=new Date().toISOString().slice(0,10),s()}),(p,a)=>{const y=n("el-date-picker"),u=n("el-form-item"),m=n("el-input"),_=n("el-button"),g=n("el-form"),l=n("el-table-column"),D=n("el-table"),V=n("el-card");return C(),h(k,null,[e(V,null,{default:o(()=>[e(g,{inline:""},{default:o(()=>[e(u,{label:"日期"},{default:o(()=>[e(y,{modelValue:t.planDate,"onUpdate:modelValue":a[0]||(a[0]=r=>t.planDate=r),type:"date","value-format":"YYYY-MM-DD",onChange:s},null,8,["modelValue"])]),_:1}),e(u,{label:"工单号"},{default:o(()=>[e(m,{modelValue:t.orderNo,"onUpdate:modelValue":a[1]||(a[1]=r=>t.orderNo=r),clearable:"",style:{width:"160px"},onKeyup:f(s,["enter"])},null,8,["modelValue"])]),_:1}),e(u,{label:"状态"},{default:o(()=>[e(m,{modelValue:t.status,"onUpdate:modelValue":a[2]||(a[2]=r=>t.status=r),style:{width:"120px"},onKeyup:f(s,["enter"])},null,8,["modelValue"])]),_:1}),e(u,null,{default:o(()=>[e(_,{type:"primary",onClick:s},{default:o(()=>[...a[3]||(a[3]=[d("查询",-1)])]),_:1}),e(_,{type:"success",onClick:w},{default:o(()=>[...a[4]||(a[4]=[d("按日排产生成备料",-1)])]),_:1})]),_:1})]),_:1}),e(D,{data:i.value,border:"",size:"small"},{default:o(()=>[e(l,{prop:"requestNo",label:"备料单号","min-width":"180"}),e(l,{prop:"orderNo",label:"工单号","min-width":"130"}),e(l,{prop:"planDate",label:"排产日期",width:"110"}),e(l,{prop:"materialCode",label:"物料编码","min-width":"110"}),e(l,{prop:"materialName",label:"物料名称","min-width":"110"}),e(l,{prop:"unit",label:"单位",width:"70"}),e(l,{prop:"manageMode",label:"管理方式",width:"110"},{default:o(({row:r})=>[d(v(r.manageMode==="1"?"SN":"批次"),1)]),_:1}),e(l,{prop:"reqQty",label:"需求数量",width:"90"}),e(l,{prop:"status",label:"状态",width:"90"}),e(l,{prop:"operator",label:"操作人",width:"90"})]),_:1},8,["data"])]),_:1}),e(Y,{data:M(S)},null,8,["data"])],64)}}};export{B as default};
import{j as N,c as h,a as e,w as o,k as M,F as k,l as q,h as c,r as n,i as x,o as C,g as f,f as d,t as v,E as b}from"./index-0akZQTPV.js";import{b as S,P as Y}from"./help-DqtsZH2B.js";const B={__name:"MaterialRequest",setup(E){const t=q({planDate:"",orderNo:"",status:""}),i=x([]);async function s(){i.value=await c.get("/material-requests",{params:t})||[]}async function w(){if(!t.planDate)return b.warning("请先选择排产日期");const p=await c.post("/material-requests/generate",{planDate:t.planDate});b.success(`已生成 ${(p==null?void 0:p.count)||0} 条备料`),s()}return N(()=>{t.planDate=new Date().toISOString().slice(0,10),s()}),(p,a)=>{const y=n("el-date-picker"),u=n("el-form-item"),m=n("el-input"),_=n("el-button"),g=n("el-form"),l=n("el-table-column"),D=n("el-table"),V=n("el-card");return C(),h(k,null,[e(V,null,{default:o(()=>[e(g,{inline:""},{default:o(()=>[e(u,{label:"日期"},{default:o(()=>[e(y,{modelValue:t.planDate,"onUpdate:modelValue":a[0]||(a[0]=r=>t.planDate=r),type:"date","value-format":"YYYY-MM-DD",onChange:s},null,8,["modelValue"])]),_:1}),e(u,{label:"工单号"},{default:o(()=>[e(m,{modelValue:t.orderNo,"onUpdate:modelValue":a[1]||(a[1]=r=>t.orderNo=r),clearable:"",style:{width:"160px"},onKeyup:f(s,["enter"])},null,8,["modelValue"])]),_:1}),e(u,{label:"状态"},{default:o(()=>[e(m,{modelValue:t.status,"onUpdate:modelValue":a[2]||(a[2]=r=>t.status=r),style:{width:"120px"},onKeyup:f(s,["enter"])},null,8,["modelValue"])]),_:1}),e(u,null,{default:o(()=>[e(_,{type:"primary",onClick:s},{default:o(()=>[...a[3]||(a[3]=[d("查询",-1)])]),_:1}),e(_,{type:"success",onClick:w},{default:o(()=>[...a[4]||(a[4]=[d("按日排产生成备料",-1)])]),_:1})]),_:1})]),_:1}),e(D,{data:i.value,border:"",size:"small"},{default:o(()=>[e(l,{prop:"requestNo",label:"备料单号","min-width":"180"}),e(l,{prop:"orderNo",label:"工单号","min-width":"130"}),e(l,{prop:"planDate",label:"排产日期",width:"110"}),e(l,{prop:"materialCode",label:"物料编码","min-width":"110"}),e(l,{prop:"materialName",label:"物料名称","min-width":"110"}),e(l,{prop:"unit",label:"单位",width:"70"}),e(l,{prop:"manageMode",label:"管理方式",width:"110"},{default:o(({row:r})=>[d(v(r.manageMode==="1"?"SN":"批次"),1)]),_:1}),e(l,{prop:"reqQty",label:"需求数量",width:"90"}),e(l,{prop:"status",label:"状态",width:"90"}),e(l,{prop:"operator",label:"操作人",width:"90"})]),_:1},8,["data"])]),_:1}),e(Y,{data:M(S)},null,8,["data"])],64)}}};export{B as default};
@@ -1 +1 @@
import{j as k,c as v,a as e,w as o,k as U,F as S,h as f,r as d,i as h,l as c,o as P,f as u,t as E,E as w}from"./index-BORa7dH4.js";import{c as T,P as q}from"./help-CJCtd61z.js";const M={__name:"PlcSend",setup(B){const a=c({orderNo:"",sn:"",stationNo:1,processCombination:""}),r=c({orderNo:"",status:""}),m=h([]);async function V(){if(!a.orderNo||!a.processCombination)return w.warning("请填写工单号和工序组合");try{await f.post("/plc/send-process",{...a}),w.success("工序码下发成功(未收到完成信号不会下发下一条)"),i()}catch{}}async function i(){m.value=await f.get("/plc/send-logs",{params:r})||[]}return k(i),(N,l)=>{const p=d("el-input"),s=d("el-form-item"),y=d("el-input-number"),_=d("el-button"),b=d("el-form"),x=d("el-divider"),n=d("el-table-column"),C=d("el-table"),g=d("el-card");return P(),v(S,null,[e(g,null,{default:o(()=>[e(b,{inline:""},{default:o(()=>[e(s,{label:"工单号"},{default:o(()=>[e(p,{modelValue:a.orderNo,"onUpdate:modelValue":l[0]||(l[0]=t=>a.orderNo=t),style:{width:"170px"}},null,8,["modelValue"])]),_:1}),e(s,{label:"工件SN"},{default:o(()=>[e(p,{modelValue:a.sn,"onUpdate:modelValue":l[1]||(l[1]=t=>a.sn=t),style:{width:"170px"}},null,8,["modelValue"])]),_:1}),e(s,{label:"工位"},{default:o(()=>[e(y,{modelValue:a.stationNo,"onUpdate:modelValue":l[2]||(l[2]=t=>a.stationNo=t),min:1,max:12},null,8,["modelValue"])]),_:1}),e(s,{label:"工序组合"},{default:o(()=>[e(p,{modelValue:a.processCombination,"onUpdate:modelValue":l[3]||(l[3]=t=>a.processCombination=t),placeholder:"如 135",style:{width:"110px"}},null,8,["modelValue"])]),_:1}),e(s,null,{default:o(()=>[e(_,{type:"primary",onClick:V},{default:o(()=>[...l[6]||(l[6]=[u("下发工序码",-1)])]),_:1})]),_:1})]),_:1}),e(x,{"content-position":"left"},{default:o(()=>[...l[7]||(l[7]=[u("下发日志",-1)])]),_:1}),e(b,{inline:""},{default:o(()=>[e(s,{label:"工单号"},{default:o(()=>[e(p,{modelValue:r.orderNo,"onUpdate:modelValue":l[4]||(l[4]=t=>r.orderNo=t),clearable:"",style:{width:"160px"}},null,8,["modelValue"])]),_:1}),e(s,{label:"状态"},{default:o(()=>[e(p,{modelValue:r.status,"onUpdate:modelValue":l[5]||(l[5]=t=>r.status=t),style:{width:"120px"}},null,8,["modelValue"])]),_:1}),e(s,null,{default:o(()=>[e(_,{onClick:i},{default:o(()=>[...l[8]||(l[8]=[u("刷新",-1)])]),_:1})]),_:1})]),_:1}),e(C,{data:m.value,border:"",size:"small"},{default:o(()=>[e(n,{prop:"id",label:"ID",width:"60"}),e(n,{prop:"orderNo",label:"工单号","min-width":"130"}),e(n,{prop:"sn",label:"SN","min-width":"130"}),e(n,{prop:"stationNo",label:"工位",width:"70"}),e(n,{prop:"processCombination",label:"工序组合",width:"100"}),e(n,{prop:"processCodes",label:"工序码",width:"120"}),e(n,{prop:"status",label:"状态",width:"90"}),e(n,{prop:"ack",label:"完成",width:"70"},{default:o(({row:t})=>[u(E(t.ack?"是":"否"),1)]),_:1}),e(n,{prop:"sendTime",label:"下发时间",width:"170"}),e(n,{prop:"doneTime",label:"完成时间",width:"170"}),e(n,{prop:"operator",label:"操作人",width:"90"})]),_:1},8,["data"])]),_:1}),e(q,{data:U(T)},null,8,["data"])],64)}}};export{M as default};
import{j as k,c as v,a as e,w as o,k as U,F as S,h as f,r as d,i as h,l as c,o as P,f as u,t as E,E as w}from"./index-0akZQTPV.js";import{c as T,P as q}from"./help-DqtsZH2B.js";const M={__name:"PlcSend",setup(B){const a=c({orderNo:"",sn:"",stationNo:1,processCombination:""}),r=c({orderNo:"",status:""}),m=h([]);async function V(){if(!a.orderNo||!a.processCombination)return w.warning("请填写工单号和工序组合");try{await f.post("/plc/send-process",{...a}),w.success("工序码下发成功(未收到完成信号不会下发下一条)"),i()}catch{}}async function i(){m.value=await f.get("/plc/send-logs",{params:r})||[]}return k(i),(N,l)=>{const p=d("el-input"),s=d("el-form-item"),y=d("el-input-number"),_=d("el-button"),b=d("el-form"),x=d("el-divider"),n=d("el-table-column"),C=d("el-table"),g=d("el-card");return P(),v(S,null,[e(g,null,{default:o(()=>[e(b,{inline:""},{default:o(()=>[e(s,{label:"工单号"},{default:o(()=>[e(p,{modelValue:a.orderNo,"onUpdate:modelValue":l[0]||(l[0]=t=>a.orderNo=t),style:{width:"170px"}},null,8,["modelValue"])]),_:1}),e(s,{label:"工件SN"},{default:o(()=>[e(p,{modelValue:a.sn,"onUpdate:modelValue":l[1]||(l[1]=t=>a.sn=t),style:{width:"170px"}},null,8,["modelValue"])]),_:1}),e(s,{label:"工位"},{default:o(()=>[e(y,{modelValue:a.stationNo,"onUpdate:modelValue":l[2]||(l[2]=t=>a.stationNo=t),min:1,max:12},null,8,["modelValue"])]),_:1}),e(s,{label:"工序组合"},{default:o(()=>[e(p,{modelValue:a.processCombination,"onUpdate:modelValue":l[3]||(l[3]=t=>a.processCombination=t),placeholder:"如 135",style:{width:"110px"}},null,8,["modelValue"])]),_:1}),e(s,null,{default:o(()=>[e(_,{type:"primary",onClick:V},{default:o(()=>[...l[6]||(l[6]=[u("下发工序码",-1)])]),_:1})]),_:1})]),_:1}),e(x,{"content-position":"left"},{default:o(()=>[...l[7]||(l[7]=[u("下发日志",-1)])]),_:1}),e(b,{inline:""},{default:o(()=>[e(s,{label:"工单号"},{default:o(()=>[e(p,{modelValue:r.orderNo,"onUpdate:modelValue":l[4]||(l[4]=t=>r.orderNo=t),clearable:"",style:{width:"160px"}},null,8,["modelValue"])]),_:1}),e(s,{label:"状态"},{default:o(()=>[e(p,{modelValue:r.status,"onUpdate:modelValue":l[5]||(l[5]=t=>r.status=t),style:{width:"120px"}},null,8,["modelValue"])]),_:1}),e(s,null,{default:o(()=>[e(_,{onClick:i},{default:o(()=>[...l[8]||(l[8]=[u("刷新",-1)])]),_:1})]),_:1})]),_:1}),e(C,{data:m.value,border:"",size:"small"},{default:o(()=>[e(n,{prop:"id",label:"ID",width:"60"}),e(n,{prop:"orderNo",label:"工单号","min-width":"130"}),e(n,{prop:"sn",label:"SN","min-width":"130"}),e(n,{prop:"stationNo",label:"工位",width:"70"}),e(n,{prop:"processCombination",label:"工序组合",width:"100"}),e(n,{prop:"processCodes",label:"工序码",width:"120"}),e(n,{prop:"status",label:"状态",width:"90"}),e(n,{prop:"ack",label:"完成",width:"70"},{default:o(({row:t})=>[u(E(t.ack?"是":"否"),1)]),_:1}),e(n,{prop:"sendTime",label:"下发时间",width:"170"}),e(n,{prop:"doneTime",label:"完成时间",width:"170"}),e(n,{prop:"operator",label:"操作人",width:"90"})]),_:1},8,["data"])]),_:1}),e(q,{data:U(T)},null,8,["data"])],64)}}};export{M as default};
@@ -1 +1 @@
import{j as U,c as E,a as e,w as o,k as P,F as $,h as m,r as n,i as j,o as z,f as i,t as B,p as M,l as T,E as D}from"./index-BORa7dH4.js";import{g as F,P as N}from"./help-CJCtd61z.js";const I={__name:"ProductType",setup(O){const c=j([]),t=T({show:!1,id:0,name:"",code:"",category:"",remark:"",isActive:!0});async function f(){c.value=await m.get("/product-types")||[]}function w(){Object.assign(t,{show:!0,id:0,name:"",code:"",category:"",remark:"",isActive:!0})}function y(p){Object.assign(t,{show:!0,...p})}async function b(){t.id?await m.put("/product-types",{...t}):await m.post("/product-types",{...t}),D.success("保存成功"),t.show=!1,f()}async function g(p){await M.confirm("确认删除?","提示",{type:"warning"}),await m.delete(`/product-types/${p.id}`),f()}return U(f),(p,l)=>{const u=n("el-button"),s=n("el-form-item"),_=n("el-form"),d=n("el-table-column"),V=n("el-tag"),k=n("el-table"),r=n("el-input"),v=n("el-switch"),C=n("el-dialog"),x=n("el-card");return z(),E($,null,[e(x,null,{default:o(()=>[e(_,{inline:""},{default:o(()=>[e(s,null,{default:o(()=>[e(u,{type:"primary",onClick:w},{default:o(()=>[...l[7]||(l[7]=[i("新增产品类型",-1)])]),_:1})]),_:1})]),_:1}),e(k,{data:c.value,border:"",size:"small"},{default:o(()=>[e(d,{prop:"id",label:"ID",width:"60"}),e(d,{prop:"name",label:"名称","min-width":"120"}),e(d,{prop:"code",label:"编码","min-width":"120"}),e(d,{prop:"category",label:"类别",width:"110"}),e(d,{prop:"isActive",label:"启用",width:"80"},{default:o(({row:a})=>[e(V,{type:a.isActive?"success":"info"},{default:o(()=>[i(B(a.isActive?"是":"否"),1)]),_:2},1032,["type"])]),_:1}),e(d,{prop:"remark",label:"备注","min-width":"160"}),e(d,{label:"操作",width:"140"},{default:o(({row:a})=>[e(u,{size:"small",onClick:A=>y(a)},{default:o(()=>[...l[8]||(l[8]=[i("编辑",-1)])]),_:1},8,["onClick"]),e(u,{size:"small",type:"danger",onClick:A=>g(a)},{default:o(()=>[...l[9]||(l[9]=[i("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"]),e(C,{modelValue:t.show,"onUpdate:modelValue":l[6]||(l[6]=a=>t.show=a),title:t.id?"编辑产品类型":"新增产品类型",width:"460px"},{footer:o(()=>[e(u,{onClick:l[5]||(l[5]=a=>t.show=!1)},{default:o(()=>[...l[10]||(l[10]=[i("取消",-1)])]),_:1}),e(u,{type:"primary",onClick:b},{default:o(()=>[...l[11]||(l[11]=[i("保存",-1)])]),_:1})]),default:o(()=>[e(_,{model:t,"label-width":"80px"},{default:o(()=>[e(s,{label:"名称"},{default:o(()=>[e(r,{modelValue:t.name,"onUpdate:modelValue":l[0]||(l[0]=a=>t.name=a)},null,8,["modelValue"])]),_:1}),e(s,{label:"编码"},{default:o(()=>[e(r,{modelValue:t.code,"onUpdate:modelValue":l[1]||(l[1]=a=>t.code=a)},null,8,["modelValue"])]),_:1}),e(s,{label:"类别"},{default:o(()=>[e(r,{modelValue:t.category,"onUpdate:modelValue":l[2]||(l[2]=a=>t.category=a)},null,8,["modelValue"])]),_:1}),e(s,{label:"启用"},{default:o(()=>[e(v,{modelValue:t.isActive,"onUpdate:modelValue":l[3]||(l[3]=a=>t.isActive=a)},null,8,["modelValue"])]),_:1}),e(s,{label:"备注"},{default:o(()=>[e(r,{modelValue:t.remark,"onUpdate:modelValue":l[4]||(l[4]=a=>t.remark=a),type:"textarea"},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])]),_:1}),e(N,{data:P(F)},null,8,["data"])],64)}}};export{I as default};
import{j as U,c as E,a as e,w as o,k as P,F as $,h as m,r as n,i as j,o as z,f as i,t as B,p as M,l as T,E as D}from"./index-0akZQTPV.js";import{g as F,P as N}from"./help-DqtsZH2B.js";const I={__name:"ProductType",setup(O){const c=j([]),t=T({show:!1,id:0,name:"",code:"",category:"",remark:"",isActive:!0});async function f(){c.value=await m.get("/product-types")||[]}function w(){Object.assign(t,{show:!0,id:0,name:"",code:"",category:"",remark:"",isActive:!0})}function y(p){Object.assign(t,{show:!0,...p})}async function b(){t.id?await m.put("/product-types",{...t}):await m.post("/product-types",{...t}),D.success("保存成功"),t.show=!1,f()}async function g(p){await M.confirm("确认删除?","提示",{type:"warning"}),await m.delete(`/product-types/${p.id}`),f()}return U(f),(p,l)=>{const u=n("el-button"),s=n("el-form-item"),_=n("el-form"),d=n("el-table-column"),V=n("el-tag"),k=n("el-table"),r=n("el-input"),v=n("el-switch"),C=n("el-dialog"),x=n("el-card");return z(),E($,null,[e(x,null,{default:o(()=>[e(_,{inline:""},{default:o(()=>[e(s,null,{default:o(()=>[e(u,{type:"primary",onClick:w},{default:o(()=>[...l[7]||(l[7]=[i("新增产品类型",-1)])]),_:1})]),_:1})]),_:1}),e(k,{data:c.value,border:"",size:"small"},{default:o(()=>[e(d,{prop:"id",label:"ID",width:"60"}),e(d,{prop:"name",label:"名称","min-width":"120"}),e(d,{prop:"code",label:"编码","min-width":"120"}),e(d,{prop:"category",label:"类别",width:"110"}),e(d,{prop:"isActive",label:"启用",width:"80"},{default:o(({row:a})=>[e(V,{type:a.isActive?"success":"info"},{default:o(()=>[i(B(a.isActive?"是":"否"),1)]),_:2},1032,["type"])]),_:1}),e(d,{prop:"remark",label:"备注","min-width":"160"}),e(d,{label:"操作",width:"140"},{default:o(({row:a})=>[e(u,{size:"small",onClick:A=>y(a)},{default:o(()=>[...l[8]||(l[8]=[i("编辑",-1)])]),_:1},8,["onClick"]),e(u,{size:"small",type:"danger",onClick:A=>g(a)},{default:o(()=>[...l[9]||(l[9]=[i("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"]),e(C,{modelValue:t.show,"onUpdate:modelValue":l[6]||(l[6]=a=>t.show=a),title:t.id?"编辑产品类型":"新增产品类型",width:"460px"},{footer:o(()=>[e(u,{onClick:l[5]||(l[5]=a=>t.show=!1)},{default:o(()=>[...l[10]||(l[10]=[i("取消",-1)])]),_:1}),e(u,{type:"primary",onClick:b},{default:o(()=>[...l[11]||(l[11]=[i("保存",-1)])]),_:1})]),default:o(()=>[e(_,{model:t,"label-width":"80px"},{default:o(()=>[e(s,{label:"名称"},{default:o(()=>[e(r,{modelValue:t.name,"onUpdate:modelValue":l[0]||(l[0]=a=>t.name=a)},null,8,["modelValue"])]),_:1}),e(s,{label:"编码"},{default:o(()=>[e(r,{modelValue:t.code,"onUpdate:modelValue":l[1]||(l[1]=a=>t.code=a)},null,8,["modelValue"])]),_:1}),e(s,{label:"类别"},{default:o(()=>[e(r,{modelValue:t.category,"onUpdate:modelValue":l[2]||(l[2]=a=>t.category=a)},null,8,["modelValue"])]),_:1}),e(s,{label:"启用"},{default:o(()=>[e(v,{modelValue:t.isActive,"onUpdate:modelValue":l[3]||(l[3]=a=>t.isActive=a)},null,8,["modelValue"])]),_:1}),e(s,{label:"备注"},{default:o(()=>[e(r,{modelValue:t.remark,"onUpdate:modelValue":l[4]||(l[4]=a=>t.remark=a),type:"textarea"},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])]),_:1}),e(N,{data:P(F)},null,8,["data"])],64)}}};export{I as default};
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{j as x,c as O,a as e,w as o,k as P,F as U,h as c,r as a,i as g,l as V,o as k,f as m,E as N}from"./index-BORa7dH4.js";import{e as R,P as T}from"./help-CJCtd61z.js";const D={__name:"Scan",setup(M){const t=V({sn:"",orderNo:"",station:"",type:"PROCESS",processCode:0}),u=V({sn:"",orderNo:""}),_=g([]);async function w(){if(!t.sn)return N.warning("请输入SN");await c.post("/scan/report",t),N.success("报工成功"),Object.assign(t,{sn:"",station:"",processCode:0}),i()}async function i(){_.value=await c.get("/scan/records",{params:u})||[]}return x(i),(j,l)=>{const r=a("el-input"),d=a("el-form-item"),p=a("el-option"),y=a("el-select"),E=a("el-input-number"),f=a("el-button"),b=a("el-form"),S=a("el-divider"),s=a("el-table-column"),C=a("el-table"),v=a("el-card");return k(),O(U,null,[e(v,null,{default:o(()=>[e(b,{inline:""},{default:o(()=>[e(d,{label:"SN"},{default:o(()=>[e(r,{modelValue:t.sn,"onUpdate:modelValue":l[0]||(l[0]=n=>t.sn=n),style:{width:"170px"}},null,8,["modelValue"])]),_:1}),e(d,{label:"工单号"},{default:o(()=>[e(r,{modelValue:t.orderNo,"onUpdate:modelValue":l[1]||(l[1]=n=>t.orderNo=n),style:{width:"170px"}},null,8,["modelValue"])]),_:1}),e(d,{label:"工位"},{default:o(()=>[e(r,{modelValue:t.station,"onUpdate:modelValue":l[2]||(l[2]=n=>t.station=n),style:{width:"90px"}},null,8,["modelValue"])]),_:1}),e(d,{label:"类型"},{default:o(()=>[e(y,{modelValue:t.type,"onUpdate:modelValue":l[3]||(l[3]=n=>t.type=n),placeholder:"请选择类型",style:{width:"130px"}},{default:o(()=>[e(p,{label:"进线ONLINE",value:"ONLINE"}),e(p,{label:"工序PROCESS",value:"PROCESS"}),e(p,{label:"完工DONE",value:"DONE"}),e(p,{label:"暂存TEMP_STORE",value:"TEMP_STORE"})]),_:1},8,["modelValue"])]),_:1}),e(d,{label:"工序号"},{default:o(()=>[e(E,{modelValue:t.processCode,"onUpdate:modelValue":l[4]||(l[4]=n=>t.processCode=n),min:0},null,8,["modelValue"])]),_:1}),e(d,null,{default:o(()=>[e(f,{type:"primary",onClick:w},{default:o(()=>[...l[7]||(l[7]=[m("扫码报工",-1)])]),_:1})]),_:1})]),_:1}),e(S,{"content-position":"left"},{default:o(()=>[...l[8]||(l[8]=[m("报工记录",-1)])]),_:1}),e(b,{inline:""},{default:o(()=>[e(d,{label:"SN"},{default:o(()=>[e(r,{modelValue:u.sn,"onUpdate:modelValue":l[5]||(l[5]=n=>u.sn=n),clearable:"",style:{width:"160px"}},null,8,["modelValue"])]),_:1}),e(d,{label:"工单号"},{default:o(()=>[e(r,{modelValue:u.orderNo,"onUpdate:modelValue":l[6]||(l[6]=n=>u.orderNo=n),clearable:"",style:{width:"160px"}},null,8,["modelValue"])]),_:1}),e(d,null,{default:o(()=>[e(f,{onClick:i},{default:o(()=>[...l[9]||(l[9]=[m("刷新",-1)])]),_:1})]),_:1})]),_:1}),e(C,{data:_.value,border:"",size:"small"},{default:o(()=>[e(s,{prop:"sn",label:"SN","min-width":"130"}),e(s,{prop:"orderNo",label:"工单号","min-width":"130"}),e(s,{prop:"station",label:"工位",width:"80"}),e(s,{prop:"type",label:"类型",width:"110"}),e(s,{prop:"processCode",label:"工序号",width:"80"}),e(s,{prop:"operator",label:"操作人",width:"90"}),e(s,{prop:"time",label:"时间","min-width":"170"})]),_:1},8,["data"])]),_:1}),e(T,{data:P(R)},null,8,["data"])],64)}}};export{D as default};
import{j as x,c as O,a as e,w as o,k as P,F as U,h as c,r as a,i as g,l as V,o as k,f as m,E as N}from"./index-0akZQTPV.js";import{e as R,P as T}from"./help-DqtsZH2B.js";const D={__name:"Scan",setup(M){const t=V({sn:"",orderNo:"",station:"",type:"PROCESS",processCode:0}),u=V({sn:"",orderNo:""}),_=g([]);async function w(){if(!t.sn)return N.warning("请输入SN");await c.post("/scan/report",t),N.success("报工成功"),Object.assign(t,{sn:"",station:"",processCode:0}),i()}async function i(){_.value=await c.get("/scan/records",{params:u})||[]}return x(i),(j,l)=>{const r=a("el-input"),d=a("el-form-item"),p=a("el-option"),y=a("el-select"),E=a("el-input-number"),f=a("el-button"),b=a("el-form"),S=a("el-divider"),s=a("el-table-column"),C=a("el-table"),v=a("el-card");return k(),O(U,null,[e(v,null,{default:o(()=>[e(b,{inline:""},{default:o(()=>[e(d,{label:"SN"},{default:o(()=>[e(r,{modelValue:t.sn,"onUpdate:modelValue":l[0]||(l[0]=n=>t.sn=n),style:{width:"170px"}},null,8,["modelValue"])]),_:1}),e(d,{label:"工单号"},{default:o(()=>[e(r,{modelValue:t.orderNo,"onUpdate:modelValue":l[1]||(l[1]=n=>t.orderNo=n),style:{width:"170px"}},null,8,["modelValue"])]),_:1}),e(d,{label:"工位"},{default:o(()=>[e(r,{modelValue:t.station,"onUpdate:modelValue":l[2]||(l[2]=n=>t.station=n),style:{width:"90px"}},null,8,["modelValue"])]),_:1}),e(d,{label:"类型"},{default:o(()=>[e(y,{modelValue:t.type,"onUpdate:modelValue":l[3]||(l[3]=n=>t.type=n),placeholder:"请选择类型",style:{width:"130px"}},{default:o(()=>[e(p,{label:"进线ONLINE",value:"ONLINE"}),e(p,{label:"工序PROCESS",value:"PROCESS"}),e(p,{label:"完工DONE",value:"DONE"}),e(p,{label:"暂存TEMP_STORE",value:"TEMP_STORE"})]),_:1},8,["modelValue"])]),_:1}),e(d,{label:"工序号"},{default:o(()=>[e(E,{modelValue:t.processCode,"onUpdate:modelValue":l[4]||(l[4]=n=>t.processCode=n),min:0},null,8,["modelValue"])]),_:1}),e(d,null,{default:o(()=>[e(f,{type:"primary",onClick:w},{default:o(()=>[...l[7]||(l[7]=[m("扫码报工",-1)])]),_:1})]),_:1})]),_:1}),e(S,{"content-position":"left"},{default:o(()=>[...l[8]||(l[8]=[m("报工记录",-1)])]),_:1}),e(b,{inline:""},{default:o(()=>[e(d,{label:"SN"},{default:o(()=>[e(r,{modelValue:u.sn,"onUpdate:modelValue":l[5]||(l[5]=n=>u.sn=n),clearable:"",style:{width:"160px"}},null,8,["modelValue"])]),_:1}),e(d,{label:"工单号"},{default:o(()=>[e(r,{modelValue:u.orderNo,"onUpdate:modelValue":l[6]||(l[6]=n=>u.orderNo=n),clearable:"",style:{width:"160px"}},null,8,["modelValue"])]),_:1}),e(d,null,{default:o(()=>[e(f,{onClick:i},{default:o(()=>[...l[9]||(l[9]=[m("刷新",-1)])]),_:1})]),_:1})]),_:1}),e(C,{data:_.value,border:"",size:"small"},{default:o(()=>[e(s,{prop:"sn",label:"SN","min-width":"130"}),e(s,{prop:"orderNo",label:"工单号","min-width":"130"}),e(s,{prop:"station",label:"工位",width:"80"}),e(s,{prop:"type",label:"类型",width:"110"}),e(s,{prop:"processCode",label:"工序号",width:"80"}),e(s,{prop:"operator",label:"操作人",width:"90"}),e(s,{prop:"time",label:"时间","min-width":"170"})]),_:1},8,["data"])]),_:1}),e(T,{data:P(R)},null,8,["data"])],64)}}};export{D as default};
@@ -1 +1 @@
import{j as q,c as U,a as e,w as t,k as S,F as v,h as w,r as n,i as C,l as V,o as E,f as m,t as T,E as c}from"./index-BORa7dH4.js";import{d as j,P as B}from"./help-CJCtd61z.js";const D={__name:"Torque",setup(F){const s=V({sn:"",workOrderNo:""}),a=V({sn:"",workOrderNo:"",stationNo:"",strain:20,angle:90,operator:""}),i=C([]);async function p(){i.value=await w.get("/torque/records",{params:s})||[]}async function N(){if(!a.sn)return c.warning("请输入SN");await w.post("/torque/report",a),c.success("拧紧数据已上报"),Object.assign(a,{sn:"",workOrderNo:"",strain:20,angle:90}),p()}return q(p),(M,l)=>{const d=n("el-input"),r=n("el-form-item"),_=n("el-button"),f=n("el-form"),b=n("el-input-number"),y=n("el-collapse-item"),g=n("el-collapse"),u=n("el-table-column"),k=n("el-tag"),x=n("el-table"),O=n("el-card");return E(),U(v,null,[e(O,null,{default:t(()=>[e(f,{inline:""},{default:t(()=>[e(r,{label:"SN"},{default:t(()=>[e(d,{modelValue:s.sn,"onUpdate:modelValue":l[0]||(l[0]=o=>s.sn=o),clearable:"",style:{width:"170px"}},null,8,["modelValue"])]),_:1}),e(r,{label:"工单号"},{default:t(()=>[e(d,{modelValue:s.workOrderNo,"onUpdate:modelValue":l[1]||(l[1]=o=>s.workOrderNo=o),clearable:"",style:{width:"170px"}},null,8,["modelValue"])]),_:1}),e(r,null,{default:t(()=>[e(_,{type:"primary",onClick:p},{default:t(()=>[...l[8]||(l[8]=[m("查询",-1)])]),_:1})]),_:1})]),_:1}),e(g,{style:{"margin-bottom":"12px"}},{default:t(()=>[e(y,{title:"扫码录入拧紧数据",name:"1"},{default:t(()=>[e(f,{inline:""},{default:t(()=>[e(r,{label:"SN"},{default:t(()=>[e(d,{modelValue:a.sn,"onUpdate:modelValue":l[2]||(l[2]=o=>a.sn=o),style:{width:"150px"}},null,8,["modelValue"])]),_:1}),e(r,{label:"工单号"},{default:t(()=>[e(d,{modelValue:a.workOrderNo,"onUpdate:modelValue":l[3]||(l[3]=o=>a.workOrderNo=o),style:{width:"150px"}},null,8,["modelValue"])]),_:1}),e(r,{label:"工位"},{default:t(()=>[e(d,{modelValue:a.stationNo,"onUpdate:modelValue":l[4]||(l[4]=o=>a.stationNo=o),style:{width:"80px"}},null,8,["modelValue"])]),_:1}),e(r,{label:"扭矩"},{default:t(()=>[e(b,{modelValue:a.strain,"onUpdate:modelValue":l[5]||(l[5]=o=>a.strain=o),min:0},null,8,["modelValue"])]),_:1}),e(r,{label:"角度"},{default:t(()=>[e(b,{modelValue:a.angle,"onUpdate:modelValue":l[6]||(l[6]=o=>a.angle=o),min:0},null,8,["modelValue"])]),_:1}),e(r,{label:"操作人"},{default:t(()=>[e(d,{modelValue:a.operator,"onUpdate:modelValue":l[7]||(l[7]=o=>a.operator=o),style:{width:"100px"}},null,8,["modelValue"])]),_:1}),e(r,null,{default:t(()=>[e(_,{type:"primary",onClick:N},{default:t(()=>[...l[9]||(l[9]=[m("上报",-1)])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1}),e(x,{data:i.value,border:"",size:"small"},{default:t(()=>[e(u,{prop:"sn",label:"SN","min-width":"130"}),e(u,{prop:"workOrderNo",label:"工单号","min-width":"130"}),e(u,{prop:"stationNo",label:"工位",width:"70"}),e(u,{prop:"torque",label:"扭矩(N·m)",width:"100"}),e(u,{prop:"angle",label:"角度(°)",width:"90"}),e(u,{prop:"result",label:"结果",width:"80"},{default:t(({row:o})=>[e(k,{type:o.result==="OK"?"success":"danger"},{default:t(()=>[m(T(o.result),1)]),_:2},1032,["type"])]),_:1}),e(u,{prop:"operator",label:"操作人",width:"90"}),e(u,{prop:"time",label:"时间","min-width":"170"})]),_:1},8,["data"])]),_:1}),e(B,{data:S(j)},null,8,["data"])],64)}}};export{D as default};
import{j as q,c as U,a as e,w as t,k as S,F as v,h as w,r as n,i as C,l as V,o as E,f as m,t as T,E as c}from"./index-0akZQTPV.js";import{d as j,P as B}from"./help-DqtsZH2B.js";const D={__name:"Torque",setup(F){const s=V({sn:"",workOrderNo:""}),a=V({sn:"",workOrderNo:"",stationNo:"",strain:20,angle:90,operator:""}),i=C([]);async function p(){i.value=await w.get("/torque/records",{params:s})||[]}async function N(){if(!a.sn)return c.warning("请输入SN");await w.post("/torque/report",a),c.success("拧紧数据已上报"),Object.assign(a,{sn:"",workOrderNo:"",strain:20,angle:90}),p()}return q(p),(M,l)=>{const d=n("el-input"),r=n("el-form-item"),_=n("el-button"),f=n("el-form"),b=n("el-input-number"),y=n("el-collapse-item"),g=n("el-collapse"),u=n("el-table-column"),k=n("el-tag"),x=n("el-table"),O=n("el-card");return E(),U(v,null,[e(O,null,{default:t(()=>[e(f,{inline:""},{default:t(()=>[e(r,{label:"SN"},{default:t(()=>[e(d,{modelValue:s.sn,"onUpdate:modelValue":l[0]||(l[0]=o=>s.sn=o),clearable:"",style:{width:"170px"}},null,8,["modelValue"])]),_:1}),e(r,{label:"工单号"},{default:t(()=>[e(d,{modelValue:s.workOrderNo,"onUpdate:modelValue":l[1]||(l[1]=o=>s.workOrderNo=o),clearable:"",style:{width:"170px"}},null,8,["modelValue"])]),_:1}),e(r,null,{default:t(()=>[e(_,{type:"primary",onClick:p},{default:t(()=>[...l[8]||(l[8]=[m("查询",-1)])]),_:1})]),_:1})]),_:1}),e(g,{style:{"margin-bottom":"12px"}},{default:t(()=>[e(y,{title:"扫码录入拧紧数据",name:"1"},{default:t(()=>[e(f,{inline:""},{default:t(()=>[e(r,{label:"SN"},{default:t(()=>[e(d,{modelValue:a.sn,"onUpdate:modelValue":l[2]||(l[2]=o=>a.sn=o),style:{width:"150px"}},null,8,["modelValue"])]),_:1}),e(r,{label:"工单号"},{default:t(()=>[e(d,{modelValue:a.workOrderNo,"onUpdate:modelValue":l[3]||(l[3]=o=>a.workOrderNo=o),style:{width:"150px"}},null,8,["modelValue"])]),_:1}),e(r,{label:"工位"},{default:t(()=>[e(d,{modelValue:a.stationNo,"onUpdate:modelValue":l[4]||(l[4]=o=>a.stationNo=o),style:{width:"80px"}},null,8,["modelValue"])]),_:1}),e(r,{label:"扭矩"},{default:t(()=>[e(b,{modelValue:a.strain,"onUpdate:modelValue":l[5]||(l[5]=o=>a.strain=o),min:0},null,8,["modelValue"])]),_:1}),e(r,{label:"角度"},{default:t(()=>[e(b,{modelValue:a.angle,"onUpdate:modelValue":l[6]||(l[6]=o=>a.angle=o),min:0},null,8,["modelValue"])]),_:1}),e(r,{label:"操作人"},{default:t(()=>[e(d,{modelValue:a.operator,"onUpdate:modelValue":l[7]||(l[7]=o=>a.operator=o),style:{width:"100px"}},null,8,["modelValue"])]),_:1}),e(r,null,{default:t(()=>[e(_,{type:"primary",onClick:N},{default:t(()=>[...l[9]||(l[9]=[m("上报",-1)])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1}),e(x,{data:i.value,border:"",size:"small"},{default:t(()=>[e(u,{prop:"sn",label:"SN","min-width":"130"}),e(u,{prop:"workOrderNo",label:"工单号","min-width":"130"}),e(u,{prop:"stationNo",label:"工位",width:"70"}),e(u,{prop:"torque",label:"扭矩(N·m)",width:"100"}),e(u,{prop:"angle",label:"角度(°)",width:"90"}),e(u,{prop:"result",label:"结果",width:"80"},{default:t(({row:o})=>[e(k,{type:o.result==="OK"?"success":"danger"},{default:t(()=>[m(T(o.result),1)]),_:2},1032,["type"])]),_:1}),e(u,{prop:"operator",label:"操作人",width:"90"}),e(u,{prop:"time",label:"时间","min-width":"170"})]),_:1},8,["data"])]),_:1}),e(B,{data:S(j)},null,8,["data"])],64)}}};export{D as default};
@@ -1 +1 @@
import{c as f,a as t,w as l,k as z,F as v,r as a,o as c,g as D,f as s,n as k,q as x,t as n,m as F,d as T,h as G,i as w}from"./index-BORa7dH4.js";import{f as I,P as E}from"./help-CJCtd61z.js";const U={__name:"Trace",setup(H){const p=w(""),o=w(null),_=w("");async function h(){if(p.value){_.value="",o.value=null;try{o.value=await G.get("/trace",{params:{sn:p.value}})}catch(i){_.value=i.message||"查询失败"}}}function d(i){return i?String(i).replace("T"," ").slice(0,19):"-"}return(i,m)=>{const V=a("el-input"),y=a("el-form-item"),K=a("el-button"),S=a("el-form"),C=a("el-alert"),u=a("el-descriptions-item"),q=a("el-descriptions"),A=a("el-timeline-item"),B=a("el-timeline"),b=a("el-tab-pane"),r=a("el-table-column"),O=a("el-tag"),N=a("el-table"),P=a("el-tabs"),j=a("el-card");return c(),f(v,null,[t(j,null,{default:l(()=>[t(S,{inline:""},{default:l(()=>[t(y,{label:"工件SN"},{default:l(()=>[t(V,{modelValue:p.value,"onUpdate:modelValue":m[0]||(m[0]=e=>p.value=e),style:{width:"220px"},placeholder:"输入SN查询追溯",onKeyup:D(h,["enter"])},null,8,["modelValue"])]),_:1}),t(y,null,{default:l(()=>[t(K,{type:"primary",onClick:h},{default:l(()=>[...m[1]||(m[1]=[s("追溯查询",-1)])]),_:1})]),_:1})]),_:1}),_.value?(c(),k(C,{key:0,title:_.value,type:"error","show-icon":"",closable:"",style:{"margin-bottom":"10px"}},null,8,["title"])):x("",!0),o.value?(c(),f(v,{key:1},[t(q,{column:4,border:"",style:{"margin-bottom":"12px"}},{default:l(()=>[t(u,{label:"SN"},{default:l(()=>{var e;return[s(n((e=o.value.workpiece)==null?void 0:e.sn),1)]}),_:1}),t(u,{label:"工单号"},{default:l(()=>{var e;return[s(n((e=o.value.workpiece)==null?void 0:e.orderNo),1)]}),_:1}),t(u,{label:"状态"},{default:l(()=>{var e;return[s(n((e=o.value.workpiece)==null?void 0:e.status),1)]}),_:1}),t(u,{label:"当前工序"},{default:l(()=>{var e;return[s(n((e=o.value.workpiece)==null?void 0:e.currentProcess),1)]}),_:1}),t(u,{label:"进线时间"},{default:l(()=>{var e;return[s(n(d((e=o.value.workpiece)==null?void 0:e.onlineAt)),1)]}),_:1}),t(u,{label:"完工时间"},{default:l(()=>{var e;return[s(n(d((e=o.value.workpiece)==null?void 0:e.doneAt)),1)]}),_:1})]),_:1}),t(P,null,{default:l(()=>[t(b,{label:"工序时间线"},{default:l(()=>[t(B,null,{default:l(()=>[(c(!0),f(v,null,F(o.value.processTimeline||[],e=>(c(),k(A,{key:e.id,timestamp:e.operator?e.operator+" · "+d(e.endedAt):d(e.endedAt),type:e.result==="NG"?"danger":"success"},{default:l(()=>[s(n(e.processName)+"(工序 "+n(e.processCode)+",工位 "+n(e.stationNo)+")— "+n(e.result),1)]),_:2},1032,["timestamp","type"]))),128))]),_:1})]),_:1}),t(b,{label:"步骤考核数据"},{default:l(()=>[t(N,{data:o.value.stepData||[],border:"",size:"small"},{default:l(()=>[t(r,{prop:"stepName",label:"步骤","min-width":"110"}),t(r,{prop:"criterionName",label:"考核项","min-width":"110"}),t(r,{prop:"value",label:"数值",width:"100"}),t(r,{prop:"isOK",label:"合格",width:"80"},{default:l(({row:e})=>[t(O,{type:e.isOK?"success":"danger"},{default:l(()=>[s(n(e.isOK?"OK":"NG"),1)]),_:2},1032,["type"])]),_:1}),t(r,{prop:"operator",label:"操作人",width:"90"})]),_:1},8,["data"])]),_:1}),t(b,{label:"拧紧数据"},{default:l(()=>[t(N,{data:o.value.torqueRecords||[],border:"",size:"small"},{default:l(()=>[t(r,{prop:"stationNo",label:"工位",width:"80"}),t(r,{prop:"torque",label:"扭矩",width:"100"}),t(r,{prop:"angle",label:"角度",width:"90"}),t(r,{prop:"result",label:"结果",width:"80"}),t(r,{prop:"operator",label:"操作人",width:"90"}),t(r,{prop:"time",label:"时间","min-width":"160"})]),_:1},8,["data"])]),_:1}),t(b,{label:"成品关联"},{default:l(()=>{var e,g;return[T("p",null,"批次号:"+n((((e=o.value.associationTrace)==null?void 0:e.batchItems)||[]).join(", ")||"无"),1),T("p",null,"精密件SN"+n((((g=o.value.associationTrace)==null?void 0:g.serialItems)||[]).join(", ")||"无"),1)]}),_:1})]),_:1})],64)):x("",!0)]),_:1}),t(E,{data:z(I)},null,8,["data"])],64)}}};export{U as default};
import{c as f,a as t,w as l,k as z,F as v,r as a,o as c,g as D,f as s,n as k,q as x,t as n,m as F,d as T,h as G,i as w}from"./index-0akZQTPV.js";import{f as I,P as E}from"./help-DqtsZH2B.js";const U={__name:"Trace",setup(H){const p=w(""),o=w(null),_=w("");async function h(){if(p.value){_.value="",o.value=null;try{o.value=await G.get("/trace",{params:{sn:p.value}})}catch(i){_.value=i.message||"查询失败"}}}function d(i){return i?String(i).replace("T"," ").slice(0,19):"-"}return(i,m)=>{const V=a("el-input"),y=a("el-form-item"),K=a("el-button"),S=a("el-form"),C=a("el-alert"),u=a("el-descriptions-item"),q=a("el-descriptions"),A=a("el-timeline-item"),B=a("el-timeline"),b=a("el-tab-pane"),r=a("el-table-column"),O=a("el-tag"),N=a("el-table"),P=a("el-tabs"),j=a("el-card");return c(),f(v,null,[t(j,null,{default:l(()=>[t(S,{inline:""},{default:l(()=>[t(y,{label:"工件SN"},{default:l(()=>[t(V,{modelValue:p.value,"onUpdate:modelValue":m[0]||(m[0]=e=>p.value=e),style:{width:"220px"},placeholder:"输入SN查询追溯",onKeyup:D(h,["enter"])},null,8,["modelValue"])]),_:1}),t(y,null,{default:l(()=>[t(K,{type:"primary",onClick:h},{default:l(()=>[...m[1]||(m[1]=[s("追溯查询",-1)])]),_:1})]),_:1})]),_:1}),_.value?(c(),k(C,{key:0,title:_.value,type:"error","show-icon":"",closable:"",style:{"margin-bottom":"10px"}},null,8,["title"])):x("",!0),o.value?(c(),f(v,{key:1},[t(q,{column:4,border:"",style:{"margin-bottom":"12px"}},{default:l(()=>[t(u,{label:"SN"},{default:l(()=>{var e;return[s(n((e=o.value.workpiece)==null?void 0:e.sn),1)]}),_:1}),t(u,{label:"工单号"},{default:l(()=>{var e;return[s(n((e=o.value.workpiece)==null?void 0:e.orderNo),1)]}),_:1}),t(u,{label:"状态"},{default:l(()=>{var e;return[s(n((e=o.value.workpiece)==null?void 0:e.status),1)]}),_:1}),t(u,{label:"当前工序"},{default:l(()=>{var e;return[s(n((e=o.value.workpiece)==null?void 0:e.currentProcess),1)]}),_:1}),t(u,{label:"进线时间"},{default:l(()=>{var e;return[s(n(d((e=o.value.workpiece)==null?void 0:e.onlineAt)),1)]}),_:1}),t(u,{label:"完工时间"},{default:l(()=>{var e;return[s(n(d((e=o.value.workpiece)==null?void 0:e.doneAt)),1)]}),_:1})]),_:1}),t(P,null,{default:l(()=>[t(b,{label:"工序时间线"},{default:l(()=>[t(B,null,{default:l(()=>[(c(!0),f(v,null,F(o.value.processTimeline||[],e=>(c(),k(A,{key:e.id,timestamp:e.operator?e.operator+" · "+d(e.endedAt):d(e.endedAt),type:e.result==="NG"?"danger":"success"},{default:l(()=>[s(n(e.processName)+"(工序 "+n(e.processCode)+",工位 "+n(e.stationNo)+")— "+n(e.result),1)]),_:2},1032,["timestamp","type"]))),128))]),_:1})]),_:1}),t(b,{label:"步骤考核数据"},{default:l(()=>[t(N,{data:o.value.stepData||[],border:"",size:"small"},{default:l(()=>[t(r,{prop:"stepName",label:"步骤","min-width":"110"}),t(r,{prop:"criterionName",label:"考核项","min-width":"110"}),t(r,{prop:"value",label:"数值",width:"100"}),t(r,{prop:"isOK",label:"合格",width:"80"},{default:l(({row:e})=>[t(O,{type:e.isOK?"success":"danger"},{default:l(()=>[s(n(e.isOK?"OK":"NG"),1)]),_:2},1032,["type"])]),_:1}),t(r,{prop:"operator",label:"操作人",width:"90"})]),_:1},8,["data"])]),_:1}),t(b,{label:"拧紧数据"},{default:l(()=>[t(N,{data:o.value.torqueRecords||[],border:"",size:"small"},{default:l(()=>[t(r,{prop:"stationNo",label:"工位",width:"80"}),t(r,{prop:"torque",label:"扭矩",width:"100"}),t(r,{prop:"angle",label:"角度",width:"90"}),t(r,{prop:"result",label:"结果",width:"80"}),t(r,{prop:"operator",label:"操作人",width:"90"}),t(r,{prop:"time",label:"时间","min-width":"160"})]),_:1},8,["data"])]),_:1}),t(b,{label:"成品关联"},{default:l(()=>{var e,g;return[T("p",null,"批次号:"+n((((e=o.value.associationTrace)==null?void 0:e.batchItems)||[]).join(", ")||"无"),1),T("p",null,"精密件SN"+n((((g=o.value.associationTrace)==null?void 0:g.serialItems)||[]).join(", ")||"无"),1)]}),_:1})]),_:1})],64)):x("",!0)]),_:1}),t(E,{data:z(I)},null,8,["data"])],64)}}};export{U as default};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,23 @@
import{_ as g,o,c as i,a as f,w as m,f as a,d as e,t as r,q as n,F as v,m as h,n as M,r as u,i as P}from"./index-0akZQTPV.js";const C={class:"page-help"},O={class:"ph-inner"},y={class:"ph-banner"},R={class:"ph-banner-title"},T={key:0,class:"ph-overview"},V={key:1,class:"ph-section"},L={class:"ph-fname"},b={class:"ph-fsource"},B={class:"ph-fpurpose"},W={class:"ph-ffill"},A={key:0,class:"ph-sec-title"},x={key:1,class:"ph-sec-overview"},U={class:"ph-fname"},D={class:"ph-fsource"},I={class:"ph-fpurpose"},G={class:"ph-ffill"},j={__name:"PageHelp",props:{data:{type:Object,default:()=>({title:"操作说明",overview:"",fields:[]})}},setup(s){const c=P(!1);function _(){c.value=!0}return(q,t)=>{const w=u("el-button"),E=u("el-tooltip"),N=u("el-empty"),S=u("el-drawer");return o(),i("div",C,[f(E,{content:"本页操作说明",placement:"left"},{default:m(()=>[f(w,{class:"help-fab",circle:"",onClick:_},{default:m(()=>[...t[1]||(t[1]=[a("?",-1)])]),_:1})]),_:1}),f(S,{modelValue:c.value,"onUpdate:modelValue":t[0]||(t[0]=l=>c.value=l),title:s.data.title||"操作说明",size:"520px","append-to-body":"",class:"ph-drawer"},{default:m(()=>[e("div",O,[e("div",y,[e("div",R,r(s.data.title||"操作说明"),1),t[2]||(t[2]=e("div",{class:"ph-banner-sub"},"页面整体说明",-1))]),s.data.overview?(o(),i("div",T,r(s.data.overview),1)):n("",!0),t[3]||(t[3]=e("div",{class:"ph-legend"},[e("span",{class:"lg"},[e("i",{class:"ic lg-source"}),a("来源:这个字段从哪来、谁填")]),e("span",{class:"lg"},[e("i",{class:"ic lg-purpose"}),a("用途:它起什么作用")]),e("span",{class:"lg"},[e("i",{class:"ic lg-fill"}),a("怎么填:具体填什么")])],-1)),s.data.fields&&s.data.fields.length?(o(),i("div",V,[(o(!0),i(v,null,h(s.data.fields,(l,d)=>(o(),i("div",{class:"ph-field",key:"top"+d},[e("div",L,[a(r(l.name)+" ",1),e("span",b,r(l.source),1)]),e("div",B,r(l.purpose),1),e("div",W,"👉 "+r(l.fill),1)]))),128))])):n("",!0),s.data.sections&&s.data.sections.length?(o(!0),i(v,{key:2},h(s.data.sections,(l,d)=>(o(),i("div",{key:d,class:"ph-section"},[l.title?(o(),i("div",A,r(l.title),1)):n("",!0),l.overview?(o(),i("div",x,r(l.overview),1)):n("",!0),(o(!0),i(v,null,h(l.fields,(p,k)=>(o(),i("div",{class:"ph-field",key:k},[e("div",U,[a(r(p.name)+" ",1),e("span",D,r(p.source),1)]),e("div",I,r(p.purpose),1),e("div",G,"👉 "+r(p.fill),1)]))),128))]))),128)):n("",!0),!s.data.fields&&!(s.data.sections&&s.data.sections.length)?(o(),M(N,{key:3,description:"暂无说明","image-size":70})):n("",!0)])]),_:1},8,["modelValue","title"])])}}},F=g(j,[["__scopeId","data-v-75d9d55f"]]),H={title:"产品类型(档案维护)",overview:`产品类型是"生产什么产品"的分类档案,是整条产线的源头基础数据。
生产主数据链条:产品类型 → 建工单(选产品类型) → 配物料清单(BOM) → 日排产 → 备料 → PLC/AGV 配送 → 工位装配。
必须先在这里维护好产品类型,后面所有环节(工单/BOM/备料/拧紧/追溯)才有可选对象。`,fields:[{name:"名称",source:"手工填写。用户自定义,无上游来源。",purpose:"产品类型的中文名,用于识别与下拉展示",fill:"如:智能电表、断路器、配电柜"},{name:"编码",source:"手工填写。你自定义的编码,保存入库后成为该记录的唯一标识。",purpose:"产品唯一编码,工单/物料清单等下游按此关联",fill:"如 METER-01;全局唯一,建了不要随意改,否则下游关联会断"},{name:"类别",source:"手工填写。可选,无上游来源。",purpose:"产品所属大类,便于分类统计",fill:"如:计量表 / 开关柜;可空"},{name:"启用",source:"开关选择。默认开启。",purpose:"启用后才允许在新建工单/备料的下拉里被选到",fill:"默认开启;暂时停产的可关闭(不删除,保留档案)"},{name:"备注",source:"手工填写。可选。",purpose:"补充说明",fill:"可不填"}]},K={title:"工单管理(新建 / 编辑工单)",overview:`工单 = 一个"合同/生产批次"的唯一载体,是生产执行和仓库出库挂靠的核心对象。
全流程:先有产品类型 → 建工单(选产品类型、定数量、定工序组合) → 进"物料清单"给该工单配料 → 行内"日排产"排哪天产多少 → 仓库按排产备料出库 → 产线装配/拧紧/报工 → 完工。
工单号会贯穿 备料单、拧紧查询、扫码报工、工件追溯、操作日志 全链路。`,fields:[{name:"工单号",source:"系统自动生成(WO+时间戳),可手工改。新建时自动带出。",purpose:"唯一标识一个工单,备料/出库/报工/追溯都挂在此号下",fill:"打开新建对话框时已自动生成,一般不用改;如改动须保证唯一"},{name:"产品类型",source:'下拉选择。数据来自"产品类型"页面已启用的记录。',purpose:"说明这批生产的是什么产品,并决定物料清单内容",fill:'先到"产品类型"页面建好记录,再到这边下拉选择;没有可选项=还没建产品类型'},{name:"产品编码",source:"手工填写。通常与所选产品类型的编码一致。",purpose:"产品唯一编码,用于展示与追溯",fill:"如 METER-01,与产品类型编码对齐"},{name:"产品名称",source:"手工填写。通常与产品类型名称一致。",purpose:"产品中文名,用于展示",fill:"如 智能电表"},{name:"数量",source:"手工填写整数。",purpose:"本工单生产总数量(合同台数),决定需求量与排产上限",fill:"整数 ≥1,如 100"},{name:"工序组合",source:"手工填写数字序列。",purpose:"本工单要在产线执行的工序集合,PLC 按此组合下发到各工位",fill:"组合写入PLC135=只做第1/3/5序;全工序=123456789101112"},{name:"状态",source:"手动选择(新建时)。后续由系统流程自动推进。",purpose:"工单生命周期:创建→发布→生产→完成",fill:'新建时选"已创建",后续按流程推进无需手改'}],sections:[{title:'行内"日排产"弹窗',overview:'对当前这行工单,排"哪天生产多少台"。排产结果会通知仓库按此备料/配送。',fields:[{name:"日期",source:"手动选择日期。",purpose:"计划生产日期,仓库按它哪天备料",fill:"选一个日期,可对同一工单排未来多天"},{name:"计划数量",source:"手动填写整数。",purpose:"当天计划产量,作为仓库备料/AGV配送的前瞻依据",fill:"≤ 工单总数量;如今天产 20 台"}]}]},Q={title:"物料清单(BOM",overview:`物料清单 = 生产 1 台该工单产品需要哪些物料、各用多少。
仓库按它计算备料/出库需求量,并强约束累计出库 ≤ 需求总量。
数据链路:先建工单 → 到本页选工单 → 为它逐条添加物料(编码要与 WMS 物料档案一致) → 之后仓库才能按此为工单领料。`,fields:[{name:"工单号",source:"下拉/输入选择。来自已建的工单。",purpose:"要为哪个工单配置物料清单",fill:"选择工单号后加载该工单已有清单"},{name:"物料编码",source:"手工填写。必须与 WMS(库房) 物料档案的编码一致。",purpose:"该物料在库房的全库唯一编码,两条系统靠它关联",fill:"如 螺丝=SCREW-M3、主控芯片=IC-001;编码对不上 WMS 将无法备料"},{name:"物料名称",source:"手工填写。",purpose:"物料中文名,便于识别",fill:"如 十字螺丝、主控芯片"},{name:"规格",source:"手工填写。",purpose:"物料规格型号",fill:"如 M3×8 / SMT-48脚"},{name:"单位",source:"手工填写。",purpose:"计量单位,用于算量",fill:"个 / 件 / 套 / kg"},{name:"管理方式",source:"单选。按物料类型决定,与 WMS 一致。",purpose:"精密件=逐件按SN管理;结构件=按批次管理",fill:'电子件选"精密件 SN";螺丝等标准件选"结构件 批次"'},{name:"单台用量",source:"手工填写。",purpose:"生产 1 台产品用的该物料数量",fill:"如每台 8 颗螺丝 → 填 8"},{name:"损耗率%",source:"手工填写。",purpose:"考虑报废/损耗的加放比例",fill:"如 2% 填 20=不计算损耗"},{name:"需求量",source:"自动计算 = 数量×单台用量×(1+损耗率),可覆盖。",purpose:"该物料总需求,出库不能超它",fill:"一般自动算,不必改"}]},J={title:"备料单(查询)",overview:`备料单按"日排产"自动算出某天需要的全部物料,仓库据此备料、由 AGV 配送到各工位(DOCK)。
本页是只读查询,不修改数据。
数据链路:日排产(工单内) → 本页按日期取那天所有工单的物料汇总 → 仓库出库 → AGV 配送。`,fields:[{name:"日期",source:"手动选择。筛选条件。",purpose:"查看哪一天的备料需求",fill:"选择某排产日期"},{name:"工单号",source:"手动输入。筛选条件。",purpose:"只查看指定工单的备料",fill:"可空,空=看全部工单"},{name:"状态",source:"下拉。数据来自备料执行状态。",purpose:"按备料进度筛选",fill:"可空"}]},X={title:"PLC 工序下发",overview:`把工序组合写入西门子 S7-1214 PLC 寄存器,产线传送带据此只执行对应工序。
系统遵循"未收到完成信号不下发下一条",确保产线不串序。
数据链路:工单(含工序组合) → 下发到 S7-1214 → PLC 驱动工位/传送带 → 收到完成信号再下发下一条。`,fields:[{name:"工单号",source:"手动输入/选择。来自工单。",purpose:"当前生产的工单,追溯依据",fill:"选择或输入工单号"},{name:"工件SN",source:"扫码枪扫描。来自工件条码。",purpose:"当前流经的工件唯一序列号",fill:"扫码枪扫入;可空(按工单整体下发)"},{name:"工位",source:"手动填写。",purpose:"下发到哪个工位(1~12)",fill:"输入 1~12 的整数"},{name:"工序组合",source:"手动填写。通常与工单的工序组合一致。",purpose:"该工位要执行的工序,PLC 组合执行",fill:"如 135(做第1/3/5序);全序=123456789101112"}]},Y={title:"拧紧数据(查询/录入)",overview:`接收丹尼科尔拧紧工具的采集结果(扭矩/角度/时间/结果/操作人),用于质量追溯。
数据在工位终端点"工序完成上报"后由拧紧枪数据同步到 MES。本页可查询,也可手工补录。`,fields:[{name:"SN",source:"扫码枪/手工。来自工件条码。",purpose:"被拧紧的工件唯一序列号",fill:"扫码枪扫描"},{name:"工单号",source:"自动带出/选择。来自工单。",purpose:"该工件所属工单",fill:"选择工单号"},{name:"工位",source:"手动填写。",purpose:"拧紧发生在哪道工位",fill:"如 3"},{name:"扭矩",source:"拧紧枪自动采集(丹尼科尔工具)。",purpose:"实际拧紧扭矩(N·m),判定是否达标",fill:"工具自动带出;补录时手填"},{name:"角度",source:"拧紧枪自动采集。",purpose:"实际旋转角度(°),判定滑牙/屈服",fill:"工具自动带出;补录时手填"},{name:"操作人",source:"登录账号自动带出。",purpose:"执行拧紧的人,用于追溯",fill:"默认当前登录用户,可改"}]},Z={title:"扫码报工",overview:`扫码枪扫到工件,按类型记录工件在产线的流转事件。这是工单进度与工件追溯的核心数据来源。
类型含义:进线(进入产线) → 工序(完成某道工序) → 完工(整件完成) → 暂存退回(退回库房)。`,fields:[{name:"SN",source:"扫码枪扫描。来自工件条码。",purpose:"工件的唯一序列号",fill:"扫码枪扫入"},{name:"工单号",source:"自动带出/选择。来自工单。",purpose:"工件所属工单",fill:"输入或选择"},{name:"工位",source:"手动填写/扫码枪绑定。",purpose:"当前扫码的工位编号",fill:"如 5"},{name:"类型",source:"下拉选择。业务定义的事件类型。",purpose:"本次扫码的业务含义",fill:"进线 ONLINE / 工序 PROCESS / 完工 DONE / 暂存 TEMP_STORE"},{name:"工序号",source:"手动填写。",purpose:'类型为"工序"时填第几道工序',fill:"如 3"}]},$={title:"工件追溯",overview:`输入工件 SN,查它的完整履历:进线/完工时间、各工序时间线、步骤考核数据(扭矩/角度)、拧紧记录、以及它用了哪些批次/精密件。
数据来源:全部由前端各环节自动写入(扫码报工、拧紧采集、PLC下发、工序完成),本页只读查询。`,fields:[{name:"工件SN",source:"扫码枪/手输。来自工件条码。",purpose:"要追溯的工件唯一序列号",fill:"扫 SN 或手动输入后点查询"}]},ee={title:"角色权限管理(用户/角色/权限)",overview:`管控谁能登录、能看哪些菜单。建议只给操作员分配其工序所需菜单权限。
登录 token 有效期短(1800秒),超时自动失效需重新登录。`,sections:[{title:"用户(新建/编辑)",fields:[{name:"用户名",source:"手工填写。",purpose:"登录账号,唯一",fill:"如 operator1"},{name:"密码",source:"手工填写,保存时加密存储。",purpose:"登录密码",fill:"≥6位;编辑时留空=不修改"},{name:"姓名",source:"手工填写。",purpose:"真实姓名,操作日志追溯用",fill:"如 张三"},{name:"角色",source:'下拉选择。来自"角色"页已建的角色。',purpose:"决定该用户的菜单权限",fill:"选择已建角色"},{name:"状态",source:"选择。",purpose:"禁用后无法登录",fill:"启用 / 禁用"}]},{title:"角色(新建/编辑)",fields:[{name:"名称",source:"手工填写。",purpose:"角色中文名",fill:"如 装配工、质检员"},{name:"编码",source:"手工填写。",purpose:"角色唯一编码(SUPER_ADMIN 为内置超级管理员,勿改)",fill:"如 OPERATOR"},{name:"备注",source:"手工填写。",purpose:"说明",fill:"可空"},{name:"权限",source:'多选。来自"权限"页的权限码。',purpose:"勾选该角色可见的菜单/功能",fill:"勾选所需权限码(如 produce.workorder)"}]},{title:"权限(新增/编辑)",overview:"通常由系统预置,一般无需手动新增。",fields:[{name:"编码",source:"系统预置/手工。",purpose:"权限唯一码",fill:"如 produce.workorder"},{name:"名称",source:"手工填写。",purpose:"权限名",fill:"如 工单管理"},{name:"类型",source:"手工填写。",purpose:"MENU=菜单权限 / API=接口权限",fill:"如 MENU"},{name:"路径",source:"手工填写。",purpose:"MENU 对应的前端路由路径",fill:"如 /work-order"},{name:"排序",source:"手工填写。",purpose:"菜单显示顺序",fill:"数字,越小越靠前"}]}]},se={title:"操作日志",overview:`记录所有关键业务操作(建工单、物料清单维护、备料、PLC下发、拧紧、扫码报工等),按工单号、操作人、实体可追溯。
数据由系统在各操作发生时自动写入,本页只读查询。`,fields:[{name:"工单号",source:"筛选条件。数据来自日志中的 workOrderNo 字段。",purpose:"按工单号过滤该工单的所有操作",fill:"输入工单号,可空=全部"},{name:"操作人",source:"筛选条件。数据来自日志中的 operator 字段。",purpose:"按操作人过滤",fill:"输入姓名/账号,可空=全部"},{name:"类型",source:"筛选条件。数据来自日志中的事件类型字段。",purpose:"按事件类型过滤",fill:"如 EVENT_WORK_ORDER / EVENT_TORQUE,可空"}]};export{F as P,Q as a,J as b,X as c,Y as d,Z as e,$ as f,H as g,K as h,se as i,ee as j};
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -4,7 +4,7 @@
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
<title>MES 产线控制</title>
<script type="module" crossorigin src="./assets/index-BORa7dH4.js"></script>
<script type="module" crossorigin src="./assets/index-0akZQTPV.js"></script>
<link rel="stylesheet" crossorigin href="./assets/index-DJOuY6v2.css">
</head>
<body>