chore: 完成多系统功能迭代与优化
1. 通用优化: - 统一系统标题为"库房客户端"/"MES产线控制",移除北自所前缀 - 调整内置账号密码为统一123456,优化密码校验逻辑 - 新增数据库自动创建逻辑,简化部署流程 - 修复日志时间格式配置,优化日志输出 - 新增纯数字密码安全提示 2. MES系统优化: - 新增日排产管理功能,支持增删改查与自动算料生成备料单 - 重构BOM模块,改为按产品编码维护而非工单维度 - 新增工艺参数模板配置与手动报工页面 - 新增产品类型自动编码功能 - 优化菜单结构,调整工单管理、扫码报工等页面名称与路由 - 新增删除日排产接口与权限保护 - 修复物料清单查询逻辑,适配新BOM结构 - 新增refreshToken支持,优化登录会话管理 3. WMS系统优化: - 新增基础数据维护页面,支持区域与物料档案管理 - 新增工单列表下拉接口,对接MES获取未完成工单优先展示 - 优化入库管理提示文案,替换英文提示为中文 - 修复精密件入库校验逻辑,优化错误提示 - 优化Excel导入功能,新增备注字段支持 - 优化登录页面与菜单文案,统一备料台账名称 - 新增自动打开浏览器功能,优化客户端启动体验 - 修复备料出库页面查询提示文案 - 新增WMS与MES对接配置,完善内部API调用逻辑 4. 其他优化: - 删除冗余的旧版静态资源文件,更新资源引用路径 - 新增帮助文档,完善基础数据模块说明 - 修复多处文案不统一、英文残留问题
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
import{_ as C,i as B,c as s,a as t,w as a,r as o,h as _,u as D,o as l,F as u,k as p,d as n,t as c,p as f,q as N,v as S,x as I,y as T,z as V,A as q,B as h,C as z,D as F,G as Q,H as A,f as E}from"./index-gIYCKXT9.js";import{r as G}from"./request-Dn-Ij3HI.js";import{f as H}from"./format-C9Ok6skr.js";const L={class:"kpi-label"},M={class:"kpi-value"},R={class:"entries"},$={__name:"Dashboard",setup(j){const k=D(),i=_({}),r=_(!1);async function m(){i.value=await G.get("/display/overview"),r.value=!0}B(m);const y=[{key:"totalQty",label:"在库总量"},{key:"lockedQty",label:"锁定量"},{key:"snInStock",label:"SN 在库数"},{key:"semiInStock",label:"半成品在库"},{key:"packageCount",label:"包装箱数"},{key:"batchCount",label:"批次数"},{key:"inToday",label:"今日入库单"},{key:"outToday",label:"今日出库单"}],v=[{path:"/inbound",title:"入库管理",icon:N},{path:"/outbound",title:"备料出库",icon:S},{path:"/inventory",title:"库存查询",icon:I},{path:"/inspection",title:"质量检验",icon:T},{path:"/stocktake",title:"库存盘点",icon:V},{path:"/semi",title:"半成品/成品",icon:q},{path:"/package",title:"包装绑定",icon:h},{path:"/ledger",title:"备料台账",icon:h},{path:"/base-data",title:"基础数据",icon:z},{path:"/display",title:"免登录大屏",icon:F}];return(J,K)=>{const d=o("el-card"),b=o("el-col"),g=o("el-row"),w=o("el-icon"),x=o("el-button");return l(),s("div",null,[t(g,{gutter:12},{default:a(()=>[(l(),s(u,null,p(y,e=>t(b,{key:e.key,xs:12,sm:8,md:6,style:{"margin-bottom":"12px"}},{default:a(()=>[t(d,{shadow:"hover"},{default:a(()=>[n("div",L,c(e.label),1),n("div",M,c(r.value?f(H)(i.value[e.key]):"—"),1)]),_:2},1024)]),_:2},1024)),64))]),_:1}),t(d,{shadow:"never",header:"快捷入口"},{default:a(()=>[n("div",R,[(l(),s(u,null,p(v,e=>t(x,{key:e.path,size:"large",onClick:O=>f(k).push(e.path)},{default:a(()=>[t(w,{style:{"margin-right":"6px"}},{default:a(()=>[(l(),Q(A(e.icon)))]),_:2},1024),E(c(e.title),1)]),_:2},1032,["onClick"])),64))])]),_:1})])}}},X=C($,[["__scopeId","data-v-483d2fd9"]]);export{X as default};
|
||||
@@ -1 +0,0 @@
|
||||
.kpi-label[data-v-3a500a05]{color:#909399;font-size:13px}.kpi-value[data-v-3a500a05]{font-size:26px;font-weight:700;margin-top:4px;color:#303133}.entries[data-v-3a500a05]{display:flex;flex-wrap:wrap;gap:10px}
|
||||
@@ -0,0 +1 @@
|
||||
.kpi-label[data-v-483d2fd9]{color:#909399;font-size:13px}.kpi-value[data-v-483d2fd9]{font-size:26px;font-weight:700;margin-top:4px;color:#303133}.entries[data-v-483d2fd9]{display:flex;flex-wrap:wrap;gap:10px}
|
||||
@@ -1 +0,0 @@
|
||||
import{_ as C,i as B,c as s,a as t,w as a,r as o,h as u,u as D,o as l,F as _,k as p,d as n,t as c,p as k,q as N,v as S,x as I,y as T,z as V,A as q,B as h,C as z,D as F,G as Q,f as A}from"./index-BhhFt5Di.js";import{r as E}from"./request-By4ij0Lz.js";import{f as G}from"./format-C9Ok6skr.js";const L={class:"kpi-label"},M={class:"kpi-value"},R={class:"entries"},$={__name:"Dashboard",setup(j){const m=D(),i=u({}),r=u(!1);async function f(){i.value=await E.get("/display/overview"),r.value=!0}B(f);const y=[{key:"totalQty",label:"在库总量"},{key:"lockedQty",label:"锁定量"},{key:"snInStock",label:"SN 在库数"},{key:"semiInStock",label:"半成品在库"},{key:"packageCount",label:"包装箱数"},{key:"batchCount",label:"批次数"},{key:"inToday",label:"今日入库单"},{key:"outToday",label:"今日出库单"}],v=[{path:"/inbound",title:"入库管理",icon:N},{path:"/outbound",title:"备料出库",icon:S},{path:"/inventory",title:"库存查询",icon:I},{path:"/inspection",title:"质量检验",icon:T},{path:"/stocktake",title:"库存盘点",icon:V},{path:"/semi",title:"半成品/成品",icon:q},{path:"/package",title:"包装绑定",icon:h},{path:"/ledger",title:"物料台账",icon:h},{path:"/display",title:"免登录大屏",icon:z}];return(H,J)=>{const d=o("el-card"),b=o("el-col"),g=o("el-row"),w=o("el-icon"),x=o("el-button");return l(),s("div",null,[t(g,{gutter:12},{default:a(()=>[(l(),s(_,null,p(y,e=>t(b,{key:e.key,xs:12,sm:8,md:6,style:{"margin-bottom":"12px"}},{default:a(()=>[t(d,{shadow:"hover"},{default:a(()=>[n("div",L,c(e.label),1),n("div",M,c(r.value?k(G)(i.value[e.key]):"—"),1)]),_:2},1024)]),_:2},1024)),64))]),_:1}),t(d,{shadow:"never",header:"快捷入口"},{default:a(()=>[n("div",R,[(l(),s(_,null,p(v,e=>t(x,{key:e.path,size:"large",onClick:K=>k(m).push(e.path)},{default:a(()=>[t(w,{style:{"margin-right":"6px"}},{default:a(()=>[(l(),F(Q(e.icon)))]),_:2},1024),A(c(e.title),1)]),_:2},1032,["onClick"])),64))])]),_:1})])}}},W=C($,[["__scopeId","data-v-3a500a05"]]);export{W as default};
|
||||
+1
-1
@@ -1 +1 @@
|
||||
import{r as w}from"./request-By4ij0Lz.js";import{f as o}from"./format-C9Ok6skr.js";import{_ as S,i as z,j as I,c as i,d as t,t as n,F as _,k,l as q,h,m as r,o as c,n as D}from"./index-BhhFt5Di.js";const $={class:"screen"},N={class:"head"},T={class:"side right"},x={class:"date"},M={class:"time"},Q={class:"kpi-grid"},B={class:"kpi-value"},C={class:"kpi-label"},j={class:"zones"},F={class:"zone-list"},L={class:"zone-name"},O={class:"bar-wrap"},V={class:"zone-qty"},E={key:0,class:"empty"},H={__name:"Display",setup(U){const v=h(new Date);let y=null,m=null;const l=h({}),g=r(()=>{const a=Object.values(u.value).map(e=>Number(e.qty)||0);return Math.max(...a,1)}),u=r(()=>{const a=l.value.zoneDetail||{};return Object.entries(a).map(([e,s])=>({zone:e,qty:Number(s)||0})).sort((e,s)=>s.qty-e.qty)}),b=r(()=>[{key:"totalQty",label:"在库总量",value:o(l.value.totalQty)},{key:"lockedQty",label:"锁定量",value:o(l.value.lockedQty)},{key:"snInStock",label:"SN 在库",value:o(l.value.snInStock)},{key:"semiInStock",label:"半成品在库",value:o(l.value.semiInStock)},{key:"packageCount",label:"包装箱数",value:o(l.value.packageCount)},{key:"inToday",label:"今日入库单",value:o(l.value.inToday)},{key:"outToday",label:"今日出库单",value:o(l.value.outToday)}]),f=["周日","周一","周二","周三","周四","周五","周六"],d=r(()=>{const a=v.value,e=s=>String(s).padStart(2,"0");return{date:`${a.getFullYear()}-${e(a.getMonth()+1)}-${e(a.getDate())}`,time:`${e(a.getHours())}:${e(a.getMinutes())}:${e(a.getSeconds())}`,week:`星期${f[a.getDay()].replace("周","")}`}});async function p(){try{l.value=await w.get("/display/overview")}catch{}}return z(()=>{y=setInterval(()=>{v.value=new Date},1e3),p(),m=setInterval(p,5e3)}),I(()=>{clearInterval(y),clearInterval(m)}),(a,e)=>(c(),i("div",$,[t("header",N,[e[0]||(e[0]=t("div",{class:"side left"},"北自所 · 库房监控",-1)),e[1]||(e[1]=t("h1",{class:"title"},"库存动态大屏",-1)),t("div",T,[t("span",x,n(d.value.date),1),t("span",M,n(d.value.time),1),t("span",null,n(d.value.week),1)])]),t("section",Q,[(c(!0),i(_,null,k(b.value,s=>(c(),i("div",{key:s.key,class:"kpi"},[t("div",B,n(s.value),1),t("div",C,n(s.label),1)]))),128))]),t("section",j,[e[2]||(e[2]=t("div",{class:"zone-title"},"区域明细(区域 / 质量状态)",-1)),t("div",F,[(c(!0),i(_,null,k(u.value,s=>(c(),i("div",{key:s.zone,class:"zone-row"},[t("div",L,n(s.zone),1),t("div",O,[t("div",{class:"bar",style:D({width:`${s.qty/g.value*100}%`})},null,4)]),t("div",V,n(s.qty.toLocaleString("zh-CN")),1)]))),128)),u.value.length?q("",!0):(c(),i("div",E,"暂无区域数据…"))])]),e[3]||(e[3]=t("footer",{class:"foot"},"数据来源:WMS 后端 · 每 5 秒自动刷新",-1))]))}},A=S(H,[["__scopeId","data-v-bd4d24ae"]]);export{A as default};
|
||||
import{r as w}from"./request-Dn-Ij3HI.js";import{f as o}from"./format-C9Ok6skr.js";import{_ as S,i as z,j as I,c as i,d as t,t as n,F as _,k,l as q,h,m as r,o as c,n as D}from"./index-gIYCKXT9.js";const $={class:"screen"},N={class:"head"},T={class:"side right"},x={class:"date"},M={class:"time"},Q={class:"kpi-grid"},B={class:"kpi-value"},C={class:"kpi-label"},j={class:"zones"},F={class:"zone-list"},L={class:"zone-name"},O={class:"bar-wrap"},V={class:"zone-qty"},E={key:0,class:"empty"},H={__name:"Display",setup(U){const v=h(new Date);let y=null,m=null;const l=h({}),g=r(()=>{const a=Object.values(u.value).map(e=>Number(e.qty)||0);return Math.max(...a,1)}),u=r(()=>{const a=l.value.zoneDetail||{};return Object.entries(a).map(([e,s])=>({zone:e,qty:Number(s)||0})).sort((e,s)=>s.qty-e.qty)}),b=r(()=>[{key:"totalQty",label:"在库总量",value:o(l.value.totalQty)},{key:"lockedQty",label:"锁定量",value:o(l.value.lockedQty)},{key:"snInStock",label:"SN 在库",value:o(l.value.snInStock)},{key:"semiInStock",label:"半成品在库",value:o(l.value.semiInStock)},{key:"packageCount",label:"包装箱数",value:o(l.value.packageCount)},{key:"inToday",label:"今日入库单",value:o(l.value.inToday)},{key:"outToday",label:"今日出库单",value:o(l.value.outToday)}]),f=["周日","周一","周二","周三","周四","周五","周六"],d=r(()=>{const a=v.value,e=s=>String(s).padStart(2,"0");return{date:`${a.getFullYear()}-${e(a.getMonth()+1)}-${e(a.getDate())}`,time:`${e(a.getHours())}:${e(a.getMinutes())}:${e(a.getSeconds())}`,week:`星期${f[a.getDay()].replace("周","")}`}});async function p(){try{l.value=await w.get("/display/overview")}catch{}}return z(()=>{y=setInterval(()=>{v.value=new Date},1e3),p(),m=setInterval(p,5e3)}),I(()=>{clearInterval(y),clearInterval(m)}),(a,e)=>(c(),i("div",$,[t("header",N,[e[0]||(e[0]=t("div",{class:"side left"},"库房监控",-1)),e[1]||(e[1]=t("h1",{class:"title"},"库存动态大屏",-1)),t("div",T,[t("span",x,n(d.value.date),1),t("span",M,n(d.value.time),1),t("span",null,n(d.value.week),1)])]),t("section",Q,[(c(!0),i(_,null,k(b.value,s=>(c(),i("div",{key:s.key,class:"kpi"},[t("div",B,n(s.value),1),t("div",C,n(s.label),1)]))),128))]),t("section",j,[e[2]||(e[2]=t("div",{class:"zone-title"},"区域明细(区域 / 质量状态)",-1)),t("div",F,[(c(!0),i(_,null,k(u.value,s=>(c(),i("div",{key:s.zone,class:"zone-row"},[t("div",L,n(s.zone),1),t("div",O,[t("div",{class:"bar",style:D({width:`${s.qty/g.value*100}%`})},null,4)]),t("div",V,n(s.qty.toLocaleString("zh-CN")),1)]))),128)),u.value.length?q("",!0):(c(),i("div",E,"暂无区域数据…"))])]),e[3]||(e[3]=t("footer",{class:"foot"},"数据来源:WMS 后端 · 每 5 秒自动刷新",-1))]))}},A=S(H,[["__scopeId","data-v-e0ddabf0"]]);export{A as default};
|
||||
@@ -1 +0,0 @@
|
||||
.screen[data-v-bd4d24ae]{min-height:100vh;background:radial-gradient(ellipse at 50% 0%,rgba(0,170,255,.18),transparent 55%),linear-gradient(180deg,#04102a,#071e42 60%,#04102a);color:#d7ecff;display:flex;flex-direction:column;font-family:Microsoft YaHei,PingFang SC,sans-serif}.head[data-v-bd4d24ae]{display:flex;align-items:center;justify-content:space-between;padding:18px 36px 10px;border-bottom:1px solid rgba(64,158,255,.35)}.title[data-v-bd4d24ae]{margin:0;font-size:clamp(20px,2.6vw,34px);letter-spacing:8px;color:#fff;text-shadow:0 0 14px rgba(64,190,255,.9)}.side[data-v-bd4d24ae]{font-size:13px;color:#7fb8ff}.right[data-v-bd4d24ae]{text-align:right}.date[data-v-bd4d24ae]{margin-right:12px}.time[data-v-bd4d24ae]{font-size:22px;font-weight:700;color:#4fd7ff;margin-right:8px;font-variant-numeric:tabular-nums}.kpi-grid[data-v-bd4d24ae]{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:14px;padding:22px 36px 6px}.kpi[data-v-bd4d24ae]{border:1px solid rgba(64,158,255,.45);background:linear-gradient(180deg,#0d2f60bf,#071a3ad9);border-radius:8px;padding:18px 10px;text-align:center;box-shadow:inset 0 0 24px #2382ff40}.kpi-value[data-v-bd4d24ae]{font-size:clamp(28px,3vw,46px);font-weight:800;color:#61e6ff;text-shadow:0 0 16px rgba(80,220,255,.7);font-variant-numeric:tabular-nums}.kpi-label[data-v-bd4d24ae]{margin-top:6px;font-size:14px;color:#9cc7ff;letter-spacing:2px}.zones[data-v-bd4d24ae]{flex:1;padding:16px 36px 8px;overflow:auto}.zone-title[data-v-bd4d24ae]{font-size:16px;letter-spacing:3px;color:#bfe0ff;border-left:4px solid #409eff;padding-left:10px;margin-bottom:12px}.zone-row[data-v-bd4d24ae]{display:flex;align-items:center;gap:12px;padding:7px 0;border-bottom:1px dashed rgba(64,158,255,.15)}.zone-name[data-v-bd4d24ae]{width:200px;text-align:right;color:#cfe6ff;font-size:14px}.bar-wrap[data-v-bd4d24ae]{flex:1;height:16px;background:#13386e99;border-radius:9px;overflow:hidden}.bar[data-v-bd4d24ae]{height:100%;border-radius:9px;background:linear-gradient(90deg,#1673ff,#37e2ff);box-shadow:0 0 10px #37d2ffa6;transition:width .6s ease}.zone-qty[data-v-bd4d24ae]{width:90px;color:#61e6ff;font-weight:700;font-variant-numeric:tabular-nums}.empty[data-v-bd4d24ae]{color:#5f86b8;padding:30px 0;text-align:center}.foot[data-v-bd4d24ae]{padding:12px 36px 16px;text-align:center;color:#47709f;font-size:12px}
|
||||
@@ -0,0 +1 @@
|
||||
.screen[data-v-e0ddabf0]{min-height:100vh;background:radial-gradient(ellipse at 50% 0%,rgba(0,170,255,.18),transparent 55%),linear-gradient(180deg,#04102a,#071e42 60%,#04102a);color:#d7ecff;display:flex;flex-direction:column;font-family:Microsoft YaHei,PingFang SC,sans-serif}.head[data-v-e0ddabf0]{display:flex;align-items:center;justify-content:space-between;padding:18px 36px 10px;border-bottom:1px solid rgba(64,158,255,.35)}.title[data-v-e0ddabf0]{margin:0;font-size:clamp(20px,2.6vw,34px);letter-spacing:8px;color:#fff;text-shadow:0 0 14px rgba(64,190,255,.9)}.side[data-v-e0ddabf0]{font-size:13px;color:#7fb8ff}.right[data-v-e0ddabf0]{text-align:right}.date[data-v-e0ddabf0]{margin-right:12px}.time[data-v-e0ddabf0]{font-size:22px;font-weight:700;color:#4fd7ff;margin-right:8px;font-variant-numeric:tabular-nums}.kpi-grid[data-v-e0ddabf0]{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:14px;padding:22px 36px 6px}.kpi[data-v-e0ddabf0]{border:1px solid rgba(64,158,255,.45);background:linear-gradient(180deg,#0d2f60bf,#071a3ad9);border-radius:8px;padding:18px 10px;text-align:center;box-shadow:inset 0 0 24px #2382ff40}.kpi-value[data-v-e0ddabf0]{font-size:clamp(28px,3vw,46px);font-weight:800;color:#61e6ff;text-shadow:0 0 16px rgba(80,220,255,.7);font-variant-numeric:tabular-nums}.kpi-label[data-v-e0ddabf0]{margin-top:6px;font-size:14px;color:#9cc7ff;letter-spacing:2px}.zones[data-v-e0ddabf0]{flex:1;padding:16px 36px 8px;overflow:auto}.zone-title[data-v-e0ddabf0]{font-size:16px;letter-spacing:3px;color:#bfe0ff;border-left:4px solid #409eff;padding-left:10px;margin-bottom:12px}.zone-row[data-v-e0ddabf0]{display:flex;align-items:center;gap:12px;padding:7px 0;border-bottom:1px dashed rgba(64,158,255,.15)}.zone-name[data-v-e0ddabf0]{width:200px;text-align:right;color:#cfe6ff;font-size:14px}.bar-wrap[data-v-e0ddabf0]{flex:1;height:16px;background:#13386e99;border-radius:9px;overflow:hidden}.bar[data-v-e0ddabf0]{height:100%;border-radius:9px;background:linear-gradient(90deg,#1673ff,#37e2ff);box-shadow:0 0 10px #37d2ffa6;transition:width .6s ease}.zone-qty[data-v-e0ddabf0]{width:90px;color:#61e6ff;font-weight:700;font-variant-numeric:tabular-nums}.empty[data-v-e0ddabf0]{color:#5f86b8;padding:30px 0;text-align:center}.foot[data-v-e0ddabf0]{padding:12px 36px 16px;text-align:center;color:#47709f;font-size:12px}
|
||||
@@ -1 +0,0 @@
|
||||
.dropzone[data-v-474430a2]{padding:30px 0;color:#606266}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
.dropzone[data-v-527961dc]{padding:30px 0;color:#606266}
|
||||
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +1 @@
|
||||
import{_ as U,h as s,I as $,i as A,N as C,c as E,a as t,w as l,p as R,F,r as n,o as K,f as u,e as M,d as P,t as q,E as p}from"./index-BhhFt5Di.js";import{r as N}from"./request-By4ij0Lz.js";import{c as D,P as j}from"./help-DfzkTHcJ.js";const z={class:"tip"},G={__name:"Inspection",setup(J){const i=s("BATCH"),f=s("合格"),d=s($()),_=s(),v=s(""),g=s(!1);A(()=>C(()=>{var a;return(a=_.value)==null?void 0:a.focus()}));async function V(){const a=v.value.trim();if(!a){p.warning("请扫入或输入目标编号");return}if(!d.value.trim()){p.warning("请填写检验员");return}g.value=!0;try{await N.post("/inspection/create",{targetType:i.value,targetId:a,status:f.value,inspector:d.value.trim()}),p.success(`检验已记录:${i.value} ${a} → ${f.value}`),v.value="",C(()=>{var e;return(e=_.value)==null?void 0:e.focus()})}finally{g.value=!1}}const m=s(""),c=s(!1);function I(){return[...new Set(String(m.value).split(/\s+/).map(a=>a.trim()).filter(Boolean))]}async function S(){const a=I();if(!a.length){p.warning("请录入待检编号(每行一个)");return}if(!d.value.trim()){p.warning("请填写检验员");return}c.value=!0;try{const e=await N.post("/inspection/batch-flip",{targetType:i.value,targetIds:a,status:f.value,inspector:d.value.trim()});p.success(`批量检验完成:共处理 ${(e==null?void 0:e.flipped)??a.length} 条`),m.value=""}finally{c.value=!1}}return(a,e)=>{const w=n("el-radio-button"),x=n("el-radio-group"),r=n("el-form-item"),T=n("el-radio"),y=n("el-input"),B=n("el-divider"),b=n("el-button"),k=n("el-form"),H=n("el-card");return K(),E(F,null,[t(H,{shadow:"never",style:{"max-width":"760px",margin:"0 auto"}},{default:l(()=>[t(k,{"label-width":"110px"},{default:l(()=>[t(r,{label:"目标类型"},{default:l(()=>[t(x,{modelValue:i.value,"onUpdate:modelValue":e[0]||(e[0]=o=>i.value=o)},{default:l(()=>[t(w,{value:"BATCH"},{default:l(()=>[...e[6]||(e[6]=[u("批次 BATCH",-1)])]),_:1}),t(w,{value:"SN"},{default:l(()=>[...e[7]||(e[7]=[u("序列号 SN",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),t(r,{label:"检验结论"},{default:l(()=>[t(x,{modelValue:f.value,"onUpdate:modelValue":e[1]||(e[1]=o=>f.value=o)},{default:l(()=>[t(T,{value:"合格"},{default:l(()=>[...e[8]||(e[8]=[u("合格",-1)])]),_:1}),t(T,{value:"不合格"},{default:l(()=>[...e[9]||(e[9]=[u("不合格",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),t(r,{label:"检验员"},{default:l(()=>[t(y,{modelValue:d.value,"onUpdate:modelValue":e[2]||(e[2]=o=>d.value=o),placeholder:"检验员姓名",clearable:"",style:{width:"260px"}},null,8,["modelValue"])]),_:1}),t(B,{"content-position":"left"},{default:l(()=>[...e[10]||(e[10]=[u("单个录入(扫码)",-1)])]),_:1}),t(r,{label:"扫码输入"},{default:l(()=>[t(y,{ref_key:"scanRef",ref:_,modelValue:v.value,"onUpdate:modelValue":e[3]||(e[3]=o=>v.value=o),autofocus:"",clearable:"",placeholder:"扫入批次号或 SN,回车提交",style:{width:"420px"},onKeyup:M(V,["enter"])},null,8,["modelValue"]),P("span",z,"当前目标:"+q(i.value==="BATCH"?"批次号":"SN 序列号"),1)]),_:1}),t(r,null,{default:l(()=>[t(b,{type:"primary",loading:g.value,onClick:V},{default:l(()=>[...e[11]||(e[11]=[u("提交检验",-1)])]),_:1},8,["loading"])]),_:1}),t(B,{"content-position":"left"},{default:l(()=>[...e[12]||(e[12]=[u("批量翻转",-1)])]),_:1}),t(r,{label:"批量编号"},{default:l(()=>[t(y,{modelValue:m.value,"onUpdate:modelValue":e[4]||(e[4]=o=>m.value=o),type:"textarea",rows:6,placeholder:"每行一个编号,支持扫码枪连续录入"},null,8,["modelValue"])]),_:1}),t(r,null,{default:l(()=>[t(b,{type:"primary",loading:c.value,onClick:S},{default:l(()=>[...e[13]||(e[13]=[u("批量提交",-1)])]),_:1},8,["loading"]),t(b,{onClick:e[5]||(e[5]=o=>m.value="")},{default:l(()=>[...e[14]||(e[14]=[u("清空",-1)])]),_:1})]),_:1})]),_:1})]),_:1}),t(j,{data:R(D)},null,8,["data"])],64)}}},W=U(G,[["__scopeId","data-v-c4d8daa0"]]);export{W as default};
|
||||
import{_ as U,h as s,I as $,i as A,O as C,c as E,a as t,w as l,p as R,F,r as n,o as K,f as u,e as M,d as P,t as q,E as p}from"./index-gIYCKXT9.js";import{r as I}from"./request-Dn-Ij3HI.js";import{c as D,P as O}from"./help-2sGNjKzn.js";const j={class:"tip"},z={__name:"Inspection",setup(G){const i=s("BATCH"),f=s("合格"),d=s($()),_=s(),v=s(""),g=s(!1);A(()=>C(()=>{var a;return(a=_.value)==null?void 0:a.focus()}));async function V(){const a=v.value.trim();if(!a){p.warning("请扫入或输入目标编号");return}if(!d.value.trim()){p.warning("请填写检验员");return}g.value=!0;try{await I.post("/inspection/create",{targetType:i.value,targetId:a,status:f.value,inspector:d.value.trim()}),p.success(`检验已记录:${i.value} ${a} → ${f.value}`),v.value="",C(()=>{var e;return(e=_.value)==null?void 0:e.focus()})}finally{g.value=!1}}const m=s(""),c=s(!1);function N(){return[...new Set(String(m.value).split(/\s+/).map(a=>a.trim()).filter(Boolean))]}async function S(){const a=N();if(!a.length){p.warning("请录入待检编号(每行一个)");return}if(!d.value.trim()){p.warning("请填写检验员");return}c.value=!0;try{const e=await I.post("/inspection/batch-flip",{targetType:i.value,targetIds:a,status:f.value,inspector:d.value.trim()});p.success(`批量检验完成:共处理 ${(e==null?void 0:e.flipped)??a.length} 条`),m.value=""}finally{c.value=!1}}return(a,e)=>{const w=n("el-radio-button"),x=n("el-radio-group"),r=n("el-form-item"),T=n("el-radio"),y=n("el-input"),B=n("el-divider"),b=n("el-button"),k=n("el-form"),H=n("el-card");return K(),E(F,null,[t(H,{shadow:"never",style:{"max-width":"760px",margin:"0 auto"}},{default:l(()=>[t(k,{"label-width":"110px"},{default:l(()=>[t(r,{label:"目标类型"},{default:l(()=>[t(x,{modelValue:i.value,"onUpdate:modelValue":e[0]||(e[0]=o=>i.value=o)},{default:l(()=>[t(w,{value:"BATCH"},{default:l(()=>[...e[6]||(e[6]=[u("批次 BATCH",-1)])]),_:1}),t(w,{value:"SN"},{default:l(()=>[...e[7]||(e[7]=[u("序列号 SN",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),t(r,{label:"检验结论"},{default:l(()=>[t(x,{modelValue:f.value,"onUpdate:modelValue":e[1]||(e[1]=o=>f.value=o)},{default:l(()=>[t(T,{value:"合格"},{default:l(()=>[...e[8]||(e[8]=[u("合格",-1)])]),_:1}),t(T,{value:"不合格"},{default:l(()=>[...e[9]||(e[9]=[u("不合格",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),t(r,{label:"检验员"},{default:l(()=>[t(y,{modelValue:d.value,"onUpdate:modelValue":e[2]||(e[2]=o=>d.value=o),placeholder:"检验员姓名",clearable:"",style:{width:"260px"}},null,8,["modelValue"])]),_:1}),t(B,{"content-position":"left"},{default:l(()=>[...e[10]||(e[10]=[u("单个录入(扫码)",-1)])]),_:1}),t(r,{label:"扫码输入"},{default:l(()=>[t(y,{ref_key:"scanRef",ref:_,modelValue:v.value,"onUpdate:modelValue":e[3]||(e[3]=o=>v.value=o),autofocus:"",clearable:"",placeholder:"扫入批次号或 SN,回车提交",style:{width:"420px"},onKeyup:M(V,["enter"])},null,8,["modelValue"]),P("span",j,"当前目标:"+q(i.value==="BATCH"?"批次号":"SN 序列号"),1)]),_:1}),t(r,null,{default:l(()=>[t(b,{type:"primary",loading:g.value,onClick:V},{default:l(()=>[...e[11]||(e[11]=[u("提交检验",-1)])]),_:1},8,["loading"])]),_:1}),t(B,{"content-position":"left"},{default:l(()=>[...e[12]||(e[12]=[u("批量翻转",-1)])]),_:1}),t(r,{label:"批量编号"},{default:l(()=>[t(y,{modelValue:m.value,"onUpdate:modelValue":e[4]||(e[4]=o=>m.value=o),type:"textarea",rows:6,placeholder:"每行一个编号,支持扫码枪连续录入"},null,8,["modelValue"])]),_:1}),t(r,null,{default:l(()=>[t(b,{type:"primary",loading:c.value,onClick:S},{default:l(()=>[...e[13]||(e[13]=[u("批量提交",-1)])]),_:1},8,["loading"]),t(b,{onClick:e[5]||(e[5]=o=>m.value="")},{default:l(()=>[...e[14]||(e[14]=[u("清空",-1)])]),_:1})]),_:1})]),_:1})]),_:1}),t(O,{data:R(D)},null,8,["data"])],64)}}},W=U(z,[["__scopeId","data-v-c4d8daa0"]]);export{W as default};
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +1 @@
|
||||
import{_ as L,c as S,d as x,a as e,w as a,D as g,p as F,F as H,r as o,h as u,J as M,o as _,H as P,e as T,f as c,K as E,t as p,g as I}from"./index-BhhFt5Di.js";import{r as J}from"./request-By4ij0Lz.js";import{g as O,P as U}from"./help-DfzkTHcJ.js";const j={class:"pager"},A={__name:"Ledger",setup(G){const i=u(""),d=u(!1),v=u(!1),y=u([]),m=u(0),r=I({current:1,size:20});function N(t){return Math.max((t.totalQty||0)-(t.outQty||0),0)}async function b(){if(i.value.trim()){d.value=!0;try{const t=await J.get("/ledger/query",{params:{orderNo:i.value.trim(),page:r.current,pageSize:r.size}});y.value=(t==null?void 0:t.list)||[],m.value=(t==null?void 0:t.total)||0,v.value=!0}finally{d.value=!1}}}function f(){r.current=1,b()}function k(t){return t==="领料完结"?"success":t==="进行中"?"primary":"info"}return(t,s)=>{const z=o("el-input"),h=o("el-form-item"),C=o("el-button"),V=o("el-form"),w=o("el-card"),n=o("el-table-column"),B=o("el-tag"),D=o("el-table"),Q=o("el-pagination"),q=o("el-empty"),K=M("loading");return _(),S(H,null,[x("div",null,[e(w,{shadow:"never",class:"mb12"},{default:a(()=>[e(V,{inline:"",onSubmit:P(f,["prevent"])},{default:a(()=>[e(h,{label:"工单号"},{default:a(()=>[e(z,{modelValue:i.value,"onUpdate:modelValue":s[0]||(s[0]=l=>i.value=l),placeholder:"输入工单号查询物料台账",clearable:"",autofocus:"",style:{width:"280px"},onKeyup:T(f,["enter"])},null,8,["modelValue"])]),_:1}),e(h,null,{default:a(()=>[e(C,{type:"primary",loading:d.value,onClick:f},{default:a(()=>[...s[2]||(s[2]=[c("查询",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1}),v.value?(_(),g(w,{key:0,shadow:"never"},{header:a(()=>[c("工单 "+p(i.value)+" 物料台账(共 "+p(m.value)+" 条)",1)]),default:a(()=>[E((_(),g(D,{data:y.value,border:"","empty-text":"暂无台账数据"},{default:a(()=>[e(n,{prop:"orderNo",label:"工单号","min-width":"140"}),e(n,{prop:"materialCode",label:"物料编码","min-width":"150"}),e(n,{prop:"materialName",label:"物料名称","min-width":"150"},{default:a(({row:l})=>[c(p(l.materialName||"-"),1)]),_:1}),e(n,{prop:"totalQty",label:"需求总量",width:"100",align:"center"}),e(n,{prop:"outQty",label:"已出库",width:"90",align:"center"}),e(n,{label:"缺口",width:"90",align:"center"},{default:a(({row:l})=>[c(p(N(l)),1)]),_:1}),e(n,{label:"状态",width:"110",align:"center"},{default:a(({row:l})=>[e(B,{type:k(l.status),size:"small"},{default:a(()=>[c(p(l.status),1)]),_:2},1032,["type"])]),_:1})]),_:1},8,["data"])),[[K,d.value]]),x("div",j,[e(Q,{background:"",layout:"total, prev, pager, next",total:m.value,"current-page":r.current,"page-size":r.size,onCurrentChange:s[1]||(s[1]=l=>{r.current=l,b()})},null,8,["total","current-page","page-size"])])]),_:1})):(_(),g(q,{key:1,description:"请输入工单号查询"}))]),e(U,{data:F(O)},null,8,["data"])],64)}}},Y=L(A,[["__scopeId","data-v-19f1447f"]]);export{Y as default};
|
||||
import{_ as K,c as S,d as x,a as e,w as a,G as g,p as F,F as M,r as o,h as u,J as P,o as _,K as T,e as E,f as c,L as G,t as p,g as H}from"./index-gIYCKXT9.js";import{r as I}from"./request-Dn-Ij3HI.js";import{g as J,P as O}from"./help-2sGNjKzn.js";const U={class:"pager"},j={__name:"Ledger",setup(A){const i=u(""),d=u(!1),v=u(!1),y=u([]),m=u(0),r=H({current:1,size:20});function N(t){return Math.max((t.totalQty||0)-(t.outQty||0),0)}async function b(){if(i.value.trim()){d.value=!0;try{const t=await I.get("/ledger/query",{params:{orderNo:i.value.trim(),page:r.current,pageSize:r.size}});y.value=(t==null?void 0:t.list)||[],m.value=(t==null?void 0:t.total)||0,v.value=!0}finally{d.value=!1}}}function f(){r.current=1,b()}function k(t){return t==="领料完结"?"success":t==="进行中"?"primary":"info"}return(t,s)=>{const z=o("el-input"),h=o("el-form-item"),C=o("el-button"),V=o("el-form"),w=o("el-card"),n=o("el-table-column"),B=o("el-tag"),L=o("el-table"),Q=o("el-pagination"),q=o("el-empty"),D=P("loading");return _(),S(M,null,[x("div",null,[e(w,{shadow:"never",class:"mb12"},{default:a(()=>[e(V,{inline:"",onSubmit:T(f,["prevent"])},{default:a(()=>[e(h,{label:"工单号"},{default:a(()=>[e(z,{modelValue:i.value,"onUpdate:modelValue":s[0]||(s[0]=l=>i.value=l),placeholder:"输入工单号查询物料台账",clearable:"",autofocus:"",style:{width:"280px"},onKeyup:E(f,["enter"])},null,8,["modelValue"])]),_:1}),e(h,null,{default:a(()=>[e(C,{type:"primary",loading:d.value,onClick:f},{default:a(()=>[...s[2]||(s[2]=[c("查询",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1}),v.value?(_(),g(w,{key:0,shadow:"never"},{header:a(()=>[c("工单 "+p(i.value)+" 备料台账(共 "+p(m.value)+" 条)",1)]),default:a(()=>[G((_(),g(L,{data:y.value,border:"","empty-text":"暂无台账数据"},{default:a(()=>[e(n,{prop:"orderNo",label:"工单号","min-width":"140"}),e(n,{prop:"materialCode",label:"物料编码","min-width":"150"}),e(n,{prop:"materialName",label:"物料名称","min-width":"150"},{default:a(({row:l})=>[c(p(l.materialName||"-"),1)]),_:1}),e(n,{prop:"totalQty",label:"需求总量",width:"100",align:"center"}),e(n,{prop:"outQty",label:"已出库",width:"90",align:"center"}),e(n,{label:"缺口",width:"90",align:"center"},{default:a(({row:l})=>[c(p(N(l)),1)]),_:1}),e(n,{label:"状态",width:"110",align:"center"},{default:a(({row:l})=>[e(B,{type:k(l.status),size:"small"},{default:a(()=>[c(p(l.status),1)]),_:2},1032,["type"])]),_:1})]),_:1},8,["data"])),[[D,d.value]]),x("div",U,[e(Q,{background:"",layout:"total, prev, pager, next",total:m.value,"current-page":r.current,"page-size":r.size,onCurrentChange:s[1]||(s[1]=l=>{r.current=l,b()})},null,8,["total","current-page","page-size"])])]),_:1})):(_(),g(q,{key:1,description:"请输入工单号查询"}))]),e(O,{data:F(J)},null,8,["data"])],64)}}},Y=K(j,[["__scopeId","data-v-0a6b9e76"]]);export{Y as default};
|
||||
@@ -1 +0,0 @@
|
||||
.mb12[data-v-19f1447f]{margin-bottom:12px}.pager[data-v-19f1447f]{display:flex;justify-content:flex-end;margin-top:10px}
|
||||
@@ -0,0 +1 @@
|
||||
.mb12[data-v-0a6b9e76]{margin-bottom:12px}.pager[data-v-0a6b9e76]{display:flex;justify-content:flex-end;margin-top:10px}
|
||||
@@ -1 +0,0 @@
|
||||
import{_ as v,c as V,a as s,w as a,r,u as k,b as h,o as x,d as u,e as q,f as E,s as R,E as B,g as C,h as c}from"./index-BhhFt5Di.js";import{r as N}from"./request-By4ij0Lz.js";const S={class:"login-page"},K={__name:"Login",setup(L){const f=k(),_=h(),d=c(),l=c(!1),o=C({username:"",password:""}),g={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]};async function p(){await d.value.validate(),l.value=!0;try{const t=await N.post("/auth/login",{username:o.username,password:o.password});if(!(t!=null&&t.token))throw new Error("登录响应缺少 token");R(t.token,t.user||{}),B.success("登录成功");const e=_.query.redirect;f.push(e&&typeof e=="string"?e:"/")}finally{l.value=!1}}return(t,e)=>{const m=r("el-input"),i=r("el-form-item"),w=r("el-button"),y=r("el-form"),b=r("el-card");return x(),V("div",S,[s(b,{class:"card"},{default:a(()=>[e[3]||(e[3]=u("div",{class:"head"},[u("h2",null,"北自所库房客户端"),u("p",null,"请使用 WMS 账号登录")],-1)),s(y,{ref_key:"formRef",ref:d,model:o,rules:g,"label-position":"top",onKeyup:q(p,["enter"])},{default:a(()=>[s(i,{label:"用户名",prop:"username"},{default:a(()=>[s(m,{modelValue:o.username,"onUpdate:modelValue":e[0]||(e[0]=n=>o.username=n),placeholder:"用户名",autofocus:""},null,8,["modelValue"])]),_:1}),s(i,{label:"密码",prop:"password"},{default:a(()=>[s(m,{modelValue:o.password,"onUpdate:modelValue":e[1]||(e[1]=n=>o.password=n),type:"password","show-password":"",placeholder:"密码"},null,8,["modelValue"])]),_:1}),s(w,{type:"primary",class:"btn",loading:l.value,onClick:p},{default:a(()=>[...e[2]||(e[2]=[E("登 录",-1)])]),_:1},8,["loading"])]),_:1},8,["model"])]),_:1})])}}},I=v(K,[["__scopeId","data-v-86cfca92"]]);export{I as default};
|
||||
@@ -0,0 +1 @@
|
||||
.login-page[data-v-1dbd5754]{height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#1c3faa,#0a1330)}.card[data-v-1dbd5754]{width:380px}.head[data-v-1dbd5754]{text-align:center;margin-bottom:14px}.head h2[data-v-1dbd5754]{margin:0 0 6px}.head p[data-v-1dbd5754]{margin:0;color:#909399;font-size:13px}.btn[data-v-1dbd5754]{width:100%;margin-top:4px}
|
||||
@@ -1 +0,0 @@
|
||||
.login-page[data-v-86cfca92]{height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#1c3faa,#0a1330)}.card[data-v-86cfca92]{width:380px}.head[data-v-86cfca92]{text-align:center;margin-bottom:14px}.head h2[data-v-86cfca92]{margin:0 0 6px}.head p[data-v-86cfca92]{margin:0;color:#909399;font-size:13px}.btn[data-v-86cfca92]{width:100%;margin-top:4px}
|
||||
@@ -0,0 +1 @@
|
||||
import{_ as v,c as V,a as s,w as r,r as a,u as k,b as h,o as x,d as u,e as q,f as E,s as R,E as B,g as C,h as c}from"./index-gIYCKXT9.js";import{r as N}from"./request-Dn-Ij3HI.js";const S={class:"login-page"},K={__name:"Login",setup(L){const f=k(),_=h(),d=c(),l=c(!1),o=C({username:"",password:""}),g={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]};async function p(){await d.value.validate(),l.value=!0;try{const t=await N.post("/auth/login",{username:o.username,password:o.password});if(!(t!=null&&t.token))throw new Error("登录响应缺少 token");R(t.token,t.user||{}),B.success("登录成功");const e=_.query.redirect;f.push(e&&typeof e=="string"?e:"/")}finally{l.value=!1}}return(t,e)=>{const m=a("el-input"),i=a("el-form-item"),w=a("el-button"),b=a("el-form"),y=a("el-card");return x(),V("div",S,[s(y,{class:"card"},{default:r(()=>[e[3]||(e[3]=u("div",{class:"head"},[u("h2",null,"库房客户端"),u("p",null,"请使用 WMS 账号登录")],-1)),s(b,{ref_key:"formRef",ref:d,model:o,rules:g,"label-position":"top",onKeyup:q(p,["enter"])},{default:r(()=>[s(i,{label:"用户名",prop:"username"},{default:r(()=>[s(m,{modelValue:o.username,"onUpdate:modelValue":e[0]||(e[0]=n=>o.username=n),placeholder:"用户名",autofocus:""},null,8,["modelValue"])]),_:1}),s(i,{label:"密码",prop:"password"},{default:r(()=>[s(m,{modelValue:o.password,"onUpdate:modelValue":e[1]||(e[1]=n=>o.password=n),type:"password","show-password":"",placeholder:"密码"},null,8,["modelValue"])]),_:1}),s(w,{type:"primary",class:"btn",loading:l.value,onClick:p},{default:r(()=>[...e[2]||(e[2]=[E("登 录",-1)])]),_:1},8,["loading"])]),_:1},8,["model"])]),_:1})])}}},I=v(K,[["__scopeId","data-v-1dbd5754"]]);export{I as default};
|
||||
@@ -1 +0,0 @@
|
||||
.mb12[data-v-89082e0f]{margin-bottom:12px}.gap[data-v-89082e0f]{color:#f56c6c;font-weight:700}
|
||||
@@ -0,0 +1 @@
|
||||
.mb12[data-v-3f1b75c7]{margin-bottom:12px}.gap[data-v-3f1b75c7]{color:#f56c6c;font-weight:700}
|
||||
@@ -1,7 +0,0 @@
|
||||
import{_ as E,I as K,c as B,d as D,a as t,w as n,D as C,p as M,F as T,r as i,h as $,J as I,o as m,H as Z,e as j,f as g,K as A,t as y,L as H,E as h,g as P,M as R,m as U}from"./index-BhhFt5Di.js";import{r as z}from"./request-By4ij0Lz.js";import{a as J,P as L}from"./help-DfzkTHcJ.js";const G={key:1,style:{color:"#67c23a"}},W={__name:"Outbound",setup(X){const v=P({orderNo:""}),k=K(),f=$(""),N=$(!1),S=$(!1),_=$([]),O=U(()=>_.value.filter(e=>e.status!=="领料完结"));function x(e){return Math.max((e.totalQty||0)-(e.outQty||0),0)}async function F(e){const l=x(e);if(l<=0)return;const d=await z.get("/stock/query",{params:{type:"batch",materialCode:e.materialCode,page:1,pageSize:200}}),p=((d==null?void 0:d.batch)||[]).filter(a=>a.qualityStatus==="合格"&&a.zoneCode==="Z02").sort((a,r)=>String(a.batchNo).localeCompare(String(r.batchNo))),c=[];let u=l;for(const a of p){if(u<=0)break;const r=(a.quantity||0)-(a.lockedQty||0);if(r<=0)continue;const o=Math.min(r,u);c.push({batchNo:a.batchNo,qty:o,zoneCode:a.zoneCode}),u-=o}if(!c.length){h.warning(`物料 ${e.materialCode} 在合格区(Z02)无可用批次库存`);return}if(u>0){h.error(`可用量不足:缺口 ${l},Z02 仅可凑 ${l-u},还差 ${u}`);return}const w=c.map(a=>`· 批次 ${a.batchNo} 出库 ${a.qty}`).join(`
|
||||
`);await R.confirm(`工单 ${e.orderNo} 物料 ${e.materialCode}
|
||||
缺口 ${l},按 FIFO 分配如下:
|
||||
${w}
|
||||
|
||||
操作人:${k}${f.value?`
|
||||
目标口:${f.value}`:""}`,"确认自动分配出库",{type:"warning",confirmButtonText:"确认出库",cancelButtonText:"取消"});const s=[];let b="";for(const a of c){const r=await z.post("/outbound/create",{orderNo:e.orderNo,materialCode:e.materialCode,batchNo:a.batchNo,qty:a.qty,operator:k,targetDock:f.value.trim()||void 0});r!=null&&r.outboundNo&&s.push(r.outboundNo),b=(r==null?void 0:r.status)||b}const V=b==="领料完结";h.success(`出库完成:出库单号 ${s.join("、")};该物料${V?"已":"未"}领料完结`),await q()}function Q(e){return e==="领料完结"?"success":e==="进行中"?"primary":"info"}async function q(){if(!v.orderNo.trim()){h.warning("请输入工单号");return}N.value=!0;try{const e=await z.get("/ledger/query",{params:{orderNo:v.orderNo.trim(),page:1,pageSize:100}});_.value=(e==null?void 0:e.list)||[],S.value=!0,_.value.length||h.info("该工单暂无台账记录")}finally{N.value=!1}}return(e,l)=>{const d=i("el-input"),p=i("el-form-item"),c=i("el-button"),u=i("el-form"),w=i("el-card"),s=i("el-table-column"),b=i("el-tag"),V=i("el-table"),a=i("el-empty"),r=I("loading");return m(),B(T,null,[D("div",null,[t(w,{shadow:"never",class:"mb12"},{default:n(()=>[t(u,{inline:"","label-width":"90px",onSubmit:l[2]||(l[2]=Z(()=>{},["prevent"]))},{default:n(()=>[t(p,{label:"工单号"},{default:n(()=>[t(d,{modelValue:v.orderNo,"onUpdate:modelValue":l[0]||(l[0]=o=>v.orderNo=o),placeholder:"输入工单号回车查询",clearable:"",autofocus:"",style:{width:"260px"},onKeyup:j(q,["enter"])},null,8,["modelValue"])]),_:1}),t(p,{label:"操作人"},{default:n(()=>[t(d,{"model-value":M(k),disabled:"",style:{width:"160px"}},null,8,["model-value"])]),_:1}),t(p,{label:"目标工位"},{default:n(()=>[t(d,{modelValue:f.value,"onUpdate:modelValue":l[1]||(l[1]=o=>f.value=o),placeholder:"可选,如 DOCK-A",clearable:"",style:{width:"180px"}},null,8,["modelValue"])]),_:1}),t(p,null,{default:n(()=>[t(c,{type:"primary",loading:N.value,onClick:q},{default:n(()=>[...l[3]||(l[3]=[g("查询台账",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1}),S.value?(m(),C(w,{key:0,shadow:"never"},{header:n(()=>[g(" 台账明细(共 "+y(_.value.length)+" 行,待补 "+y(O.value.length)+" 行) ",1)]),default:n(()=>[A((m(),C(V,{data:_.value,border:""},{default:n(()=>[t(s,{prop:"orderNo",label:"工单号","min-width":"140"}),t(s,{prop:"materialCode",label:"物料编码","min-width":"150"}),t(s,{prop:"materialName",label:"物料名称","min-width":"140"},{default:n(({row:o})=>[g(y(o.materialName||"-"),1)]),_:1}),t(s,{prop:"totalQty",label:"需求总量",width:"100",align:"center"}),t(s,{prop:"outQty",label:"已出库",width:"90",align:"center"}),t(s,{label:"缺口",width:"90",align:"center"},{default:n(({row:o})=>[D("span",{class:H({gap:x(o)>0})},y(x(o)),3)]),_:1}),t(s,{label:"状态",width:"110",align:"center"},{default:n(({row:o})=>[t(b,{type:Q(o.status),size:"small"},{default:n(()=>[g(y(o.status),1)]),_:2},1032,["type"])]),_:1}),t(s,{label:"操作",width:"140",align:"center"},{default:n(({row:o})=>[o.status!=="领料完结"?(m(),C(c,{key:0,type:"primary",size:"small",onClick:Y=>F(o)},{default:n(()=>[...l[4]||(l[4]=[g("一键分配出库",-1)])]),_:1},8,["onClick"])):(m(),B("span",G,"已完结"))]),_:1})]),_:1},8,["data"])),[[r,N.value]])]),_:1})):(m(),C(a,{key:1,description:"请先按工单号查询物料台账"}))]),t(L,{data:M(J)},null,8,["data"])],64)}}},oe=E(W,[["__scopeId","data-v-89082e0f"]]);export{oe as default};
|
||||
@@ -0,0 +1,7 @@
|
||||
import{_ as E,I as K,i as T,c as M,d as D,a as t,w as n,G as $,p as O,F as I,h as y,r as i,J as Z,o as m,K as j,e as P,f as b,L as R,t as h,M as U,E as v,g as G,N as H,m as J}from"./index-gIYCKXT9.js";import{r as k}from"./request-Dn-Ij3HI.js";import{a as L,P as W}from"./help-2sGNjKzn.js";const X={key:1,style:{color:"#67c23a"}},Y={__name:"Outbound",setup(ee){const N=G({orderNo:""}),x=K(),f=y(""),w=y(!1),V=y(!1),_=y([]),B=y([]);T(async()=>{try{const e=await k.get("/orders",{params:{page:1,pageSize:200}});B.value=Array.isArray(e)?e:(e==null?void 0:e.list)||[]}catch{B.value=[]}});const F=J(()=>_.value.filter(e=>e.status!=="领料完结"));function q(e){return Math.max((e.totalQty||0)-(e.outQty||0),0)}async function Q(e){const l=q(e);if(l<=0)return;const d=await k.get("/stock/query",{params:{type:"batch",materialCode:e.materialCode,page:1,pageSize:200}}),p=((d==null?void 0:d.batch)||[]).filter(a=>a.qualityStatus==="合格"&&a.zoneCode==="Z02").sort((a,r)=>String(a.batchNo).localeCompare(String(r.batchNo))),c=[];let u=l;for(const a of p){if(u<=0)break;const r=(a.quantity||0)-(a.lockedQty||0);if(r<=0)continue;const o=Math.min(r,u);c.push({batchNo:a.batchNo,qty:o,zoneCode:a.zoneCode}),u-=o}if(!c.length){v.warning(`物料 ${e.materialCode} 在合格区(Z02)无可用批次库存`);return}if(u>0){v.error(`可用量不足:缺口 ${l},Z02 仅可凑 ${l-u},还差 ${u}`);return}const C=c.map(a=>`· 批次 ${a.batchNo} 出库 ${a.qty}`).join(`
|
||||
`);await H.confirm(`工单 ${e.orderNo} 物料 ${e.materialCode}
|
||||
缺口 ${l},按 FIFO 分配如下:
|
||||
${C}
|
||||
|
||||
操作人:${x}${f.value?`
|
||||
目标口:${f.value}`:""}`,"确认自动分配出库",{type:"warning",confirmButtonText:"确认出库",cancelButtonText:"取消"});const s=[];let g="";for(const a of c){const r=await k.post("/outbound/create",{orderNo:e.orderNo,materialCode:e.materialCode,batchNo:a.batchNo,qty:a.qty,operator:x,targetDock:f.value.trim()||void 0});r!=null&&r.outboundNo&&s.push(r.outboundNo),g=(r==null?void 0:r.status)||g}const S=g==="领料完结";v.success(`出库完成:出库单号 ${s.join("、")};该物料${S?"已":"未"}领料完结`),await z()}function A(e){return e==="领料完结"?"success":e==="进行中"?"primary":"info"}async function z(){if(!N.orderNo.trim()){v.warning("请输入工单号");return}w.value=!0;try{const e=await k.get("/ledger/query",{params:{orderNo:N.orderNo.trim(),page:1,pageSize:100}});_.value=(e==null?void 0:e.list)||[],V.value=!0,_.value.length||v.info("该工单暂无台账记录")}finally{w.value=!1}}return(e,l)=>{const d=i("el-input"),p=i("el-form-item"),c=i("el-button"),u=i("el-form"),C=i("el-card"),s=i("el-table-column"),g=i("el-tag"),S=i("el-table"),a=i("el-empty"),r=Z("loading");return m(),M(I,null,[D("div",null,[t(C,{shadow:"never",class:"mb12"},{default:n(()=>[t(u,{inline:"","label-width":"90px",onSubmit:l[2]||(l[2]=j(()=>{},["prevent"]))},{default:n(()=>[t(p,{label:"工单号"},{default:n(()=>[t(d,{modelValue:N.orderNo,"onUpdate:modelValue":l[0]||(l[0]=o=>N.orderNo=o),placeholder:"输入工单号回车查询",clearable:"",autofocus:"",style:{width:"260px"},onKeyup:P(z,["enter"])},null,8,["modelValue"])]),_:1}),t(p,{label:"操作人"},{default:n(()=>[t(d,{"model-value":O(x),disabled:"",style:{width:"160px"}},null,8,["model-value"])]),_:1}),t(p,{label:"目标工位"},{default:n(()=>[t(d,{modelValue:f.value,"onUpdate:modelValue":l[1]||(l[1]=o=>f.value=o),placeholder:"可选,如 DOCK-A",clearable:"",style:{width:"180px"}},null,8,["modelValue"])]),_:1}),t(p,null,{default:n(()=>[t(c,{type:"primary",loading:w.value,onClick:z},{default:n(()=>[...l[3]||(l[3]=[b("查询备料台账",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1}),V.value?(m(),$(C,{key:0,shadow:"never"},{header:n(()=>[b(" 台账明细(共 "+h(_.value.length)+" 行,待补 "+h(F.value.length)+" 行) ",1)]),default:n(()=>[R((m(),$(S,{data:_.value,border:""},{default:n(()=>[t(s,{prop:"orderNo",label:"工单号","min-width":"140"}),t(s,{prop:"materialCode",label:"物料编码","min-width":"150"}),t(s,{prop:"materialName",label:"物料名称","min-width":"140"},{default:n(({row:o})=>[b(h(o.materialName||"-"),1)]),_:1}),t(s,{prop:"totalQty",label:"需求总量",width:"100",align:"center"}),t(s,{prop:"outQty",label:"已出库",width:"90",align:"center"}),t(s,{label:"缺口",width:"90",align:"center"},{default:n(({row:o})=>[D("span",{class:U({gap:q(o)>0})},h(q(o)),3)]),_:1}),t(s,{label:"状态",width:"110",align:"center"},{default:n(({row:o})=>[t(g,{type:A(o.status),size:"small"},{default:n(()=>[b(h(o.status),1)]),_:2},1032,["type"])]),_:1}),t(s,{label:"操作",width:"140",align:"center"},{default:n(({row:o})=>[o.status!=="领料完结"?(m(),$(c,{key:0,type:"primary",size:"small",onClick:te=>Q(o)},{default:n(()=>[...l[4]||(l[4]=[b("一键分配出库",-1)])]),_:1},8,["onClick"])):(m(),M("span",X,"已完结"))]),_:1})]),_:1},8,["data"])),[[r,w.value]])]),_:1})):(m(),$(a,{key:1,description:"请先按工单号查询备料台账"}))]),t(W,{data:O(L)},null,8,["data"])],64)}}},ne=E(Y,[["__scopeId","data-v-3f1b75c7"]]);export{ne as default};
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+6
-2
@@ -1,4 +1,4 @@
|
||||
import{_ as b,o,c as i,a as f,w as v,f as n,d as e,t,l as r,F as m,k as h,D as y,r as p,h as E}from"./index-BhhFt5Di.js";const M={class:"page-help"},x={class:"ph-inner"},C={class:"ph-banner"},O={class:"ph-banner-title"},V={key:0,class:"ph-overview"},Z={key:1,class:"ph-section"},F={class:"ph-fname"},I={class:"ph-fsource"},B={class:"ph-fpurpose"},D={class:"ph-ffill"},T={key:0,class:"ph-sec-title"},H={key:1,class:"ph-sec-overview"},P={class:"ph-fname"},W={class:"ph-fsource"},A={class:"ph-fpurpose"},K={class:"ph-ffill"},z={__name:"PageHelp",props:{data:{type:Object,default:()=>({title:"操作说明",overview:"",fields:[]})}},setup(s){const u=E(!1);function S(){u.value=!0}return(G,a)=>{const N=p("el-button"),w=p("el-tooltip"),_=p("el-empty"),g=p("el-drawer");return o(),i("div",M,[f(w,{content:"本页操作说明",placement:"left"},{default:v(()=>[f(N,{class:"help-fab",circle:"",onClick:S},{default:v(()=>[...a[1]||(a[1]=[n("?",-1)])]),_:1})]),_:1}),f(g,{modelValue:u.value,"onUpdate:modelValue":a[0]||(a[0]=l=>u.value=l),title:s.data.title||"操作说明",size:"520px","append-to-body":"",class:"ph-drawer"},{default:v(()=>[e("div",x,[e("div",C,[e("div",O,t(s.data.title||"操作说明"),1),a[2]||(a[2]=e("div",{class:"ph-banner-sub"},"页面整体说明",-1))]),s.data.overview?(o(),i("div",V,t(s.data.overview),1)):r("",!0),a[3]||(a[3]=e("div",{class:"ph-legend"},[e("span",{class:"lg"},[e("i",{class:"ic lg-source"}),n("来源:这个字段从哪来、谁填")]),e("span",{class:"lg"},[e("i",{class:"ic lg-purpose"}),n("用途:它起什么作用")]),e("span",{class:"lg"},[e("i",{class:"ic lg-fill"}),n("怎么填:具体填什么")])],-1)),s.data.fields&&s.data.fields.length?(o(),i("div",Z,[(o(!0),i(m,null,h(s.data.fields,(l,d)=>(o(),i("div",{class:"ph-field",key:"top"+d},[e("div",F,[n(t(l.name)+" ",1),e("span",I,t(l.source),1)]),e("div",B,t(l.purpose),1),e("div",D,"👉 "+t(l.fill),1)]))),128))])):r("",!0),s.data.sections&&s.data.sections.length?(o(!0),i(m,{key:2},h(s.data.sections,(l,d)=>(o(),i("div",{key:d,class:"ph-section"},[l.title?(o(),i("div",T,t(l.title),1)):r("",!0),l.overview?(o(),i("div",H,t(l.overview),1)):r("",!0),(o(!0),i(m,null,h(l.fields,(c,k)=>(o(),i("div",{class:"ph-field",key:k},[e("div",P,[n(t(c.name)+" ",1),e("span",W,t(c.source),1)]),e("div",A,t(c.purpose),1),e("div",K,"👉 "+t(c.fill),1)]))),128))]))),128)):r("",!0),!s.data.fields&&!(s.data.sections&&s.data.sections.length)?(o(),y(_,{key:3,description:"暂无说明","image-size":70})):r("",!0)])]),_:1},8,["modelValue","title"])])}}},j=b(z,[["__scopeId","data-v-e02e7155"]]),R={title:"入库(来料入账)",overview:`把到货的来料记入 WMS 库存。按物料类型分两种入库方式:
|
||||
import{_ as k,o,c as i,a as f,w as m,f as n,d as e,t,l as r,F as v,k as S,G as y,r as c,h as M}from"./index-gIYCKXT9.js";const E={class:"page-help"},x={class:"ph-inner"},C={class:"ph-banner"},Z={class:"ph-banner-title"},O={key:0,class:"ph-overview"},V={key:1,class:"ph-section"},T={class:"ph-fname"},B={class:"ph-fsource"},F={class:"ph-fpurpose"},I={class:"ph-ffill"},D={key:0,class:"ph-sec-title"},W={key:1,class:"ph-sec-overview"},H={class:"ph-fname"},P={class:"ph-fsource"},A={class:"ph-fpurpose"},G={class:"ph-ffill"},K={__name:"PageHelp",props:{data:{type:Object,default:()=>({title:"操作说明",overview:"",fields:[]})}},setup(s){const u=M(!1);function h(){u.value=!0}return(z,a)=>{const N=c("el-button"),w=c("el-tooltip"),_=c("el-empty"),g=c("el-drawer");return o(),i("div",E,[f(w,{content:"本页操作说明",placement:"left"},{default:m(()=>[f(N,{class:"help-fab",circle:"",onClick:h},{default:m(()=>[...a[1]||(a[1]=[n("?",-1)])]),_:1})]),_:1}),f(g,{modelValue:u.value,"onUpdate:modelValue":a[0]||(a[0]=l=>u.value=l),title:s.data.title||"操作说明",size:"520px","append-to-body":"",class:"ph-drawer"},{default:m(()=>[e("div",x,[e("div",C,[e("div",Z,t(s.data.title||"操作说明"),1),a[2]||(a[2]=e("div",{class:"ph-banner-sub"},"页面整体说明",-1))]),s.data.overview?(o(),i("div",O,t(s.data.overview),1)):r("",!0),a[3]||(a[3]=e("div",{class:"ph-legend"},[e("span",{class:"lg"},[e("i",{class:"ic lg-source"}),n("来源:这个字段从哪来、谁填")]),e("span",{class:"lg"},[e("i",{class:"ic lg-purpose"}),n("用途:它起什么作用")]),e("span",{class:"lg"},[e("i",{class:"ic lg-fill"}),n("怎么填:具体填什么")])],-1)),s.data.fields&&s.data.fields.length?(o(),i("div",V,[(o(!0),i(v,null,S(s.data.fields,(l,d)=>(o(),i("div",{class:"ph-field",key:"top"+d},[e("div",T,[n(t(l.name)+" ",1),e("span",B,t(l.source),1)]),e("div",F,t(l.purpose),1),e("div",I,"👉 "+t(l.fill),1)]))),128))])):r("",!0),s.data.sections&&s.data.sections.length?(o(!0),i(v,{key:2},S(s.data.sections,(l,d)=>(o(),i("div",{key:d,class:"ph-section"},[l.title?(o(),i("div",D,t(l.title),1)):r("",!0),l.overview?(o(),i("div",W,t(l.overview),1)):r("",!0),(o(!0),i(v,null,S(l.fields,(p,b)=>(o(),i("div",{class:"ph-field",key:b},[e("div",H,[n(t(p.name)+" ",1),e("span",P,t(p.source),1)]),e("div",A,t(p.purpose),1),e("div",G,"👉 "+t(p.fill),1)]))),128))]))),128)):r("",!0),!s.data.fields&&!(s.data.sections&&s.data.sections.length)?(o(),y(_,{key:3,description:"暂无说明","image-size":70})):r("",!0)])]),_:1},8,["modelValue","title"])])}}},R=k(K,[["__scopeId","data-v-e02e7155"]]),j={title:"入库(来料入账)",overview:`把到货的来料记入 WMS 库存。按物料类型分两种入库方式:
|
||||
· 结构件(螺丝/机加工件) → 按【批次】入库,一批多件;
|
||||
· 精密件(芯片/器件) → 按【SN 序列号】逐件扫码,可单件追溯。
|
||||
|
||||
@@ -16,4 +16,8 @@ import{_ as b,o,c as i,a as f,w as v,f as n,d as e,t,l as r,F as m,k as h,D as y
|
||||
|
||||
半成品生命周期:工位暂存退库 → 本页入库(记已完成工序) → 需要时本页出库→ MES 下发下一工序 → 工位继续装配。`,sections:[{title:"半成品/成品入库",overview:"把产线退回的半成品或成品收进库房。",fields:[{name:"物料",source:"下拉选择。来自物料档案。",purpose:"入库物料",fill:"选择物料编码"},{name:"已完成工序",source:'自动带出/手工填写。数据来自工位终端的"已完成工序"上报。',purpose:"该件做到第几道工序,重上线时 MES 从这里继续",fill:"如 135,可空"},{name:"工单号",source:"自动带出/手工填写。来自工单。",purpose:"来源工单",fill:"输入工单号"},{name:"区域",source:"手动填写(可空)。",purpose:"存放库区",fill:"如 Z05"},{name:"扫码录入",source:"扫码枪连续扫码。来自工件 SN 条码。",purpose:"半成品 SN 清单",fill:"扫入 SN 回车追加"}]},{title:"半成品出库(重上线)",overview:"把半成品重新送上线,MES 会从记录的下一个工序继续。",fields:[{name:"SN",source:"扫码枪/手输。来自工件 SN 条码。",purpose:"要重上线的半成品 SN",fill:"扫描或输入 SN,回车出库"}]}]},$={title:"工单物料台账",overview:`实时展示每个物料:需求总量、累计已出库、剩余缺口。
|
||||
系统强约束累计出库 ≤ 需求总量,达到即"领料完结"。
|
||||
数据链路:MES 工单+物料清单 → 导入本台账 → 出库时自动扣减累计,形成缺口/完结。`,fields:[{name:"工单号",source:"手动输入。来自 MES 工单。",purpose:"查看哪个工单的领料台账",fill:"输入工单号查询"}]};export{j as P,U as a,q as b,J as c,Q as d,Y as e,X as f,$ as g,R as h};
|
||||
数据链路:MES 工单+物料清单 → 导入本台账 → 出库时自动扣减累计,形成缺口/完结。`,fields:[{name:"工单号",source:"手动输入。来自 MES 工单。",purpose:"查看哪个工单的领料台账",fill:"输入工单号查询"}]},ee={title:"基础数据(区域 / 物料档案)",overview:`维护库房系统的基础字典,供入库/出库/库存等所有业务下拉框选择。
|
||||
· 区域:货品存放的库区(如待检、合格Z02、不合格…);入库时要指明放到哪个区。
|
||||
· 物料档案:定义每一种物料叫什么、什么规格、是【结构件(批次)】还是【精密件(SN)】,决定后续入库方式。
|
||||
|
||||
这两个字典是库房的第一道地基:先建好区域和物料,入库、检验、出库才能正常跑到数据。`,sections:[{title:"Tab1 区域维护",overview:'新增库区字典,供入库/半成品等页面的"区域"下拉使用。',fields:[{name:"区域编码",source:"手工填写,仓库自定义。",purpose:"库区唯一编号,入库/出库定位存放位置",fill:"如 Z02、Z05,建议字母+数字,唯一"},{name:"区域名称",source:"手工填写。",purpose:"库区中文名,便于识别",fill:"如 合格区、待检区、不合格区"},{name:"说明",source:"手工填写(可空)。",purpose:"补充描述",fill:"可空"}]},{title:"Tab2 物料档案",overview:'定义物料字典。此处维护的物料会出现在入库/出库等页面的"物料"下拉中;此处选"结构件/精密件"直接决定入库走批次还是 SN。',fields:[{name:"物料编码",source:"手工填写,仓库自定义(新增后不可改)。",purpose:"物料唯一编号",fill:"如 SCREW-M3;新增后不可改编码"},{name:"名称",source:"手工填写。",purpose:"物料名称",fill:"如 螺丝 M3"},{name:"简称",source:"手工填写(可空)。",purpose:"简写",fill:"可空"},{name:"规格",source:"手工填写(可空)。",purpose:"规格型号",fill:"可空"},{name:"单位",source:"手工填写。",purpose:"计量单位",fill:"如 个/套"},{name:"类型",source:"选择。语义由库房定:结构件按批次管理,精密件按 SN 逐件管理。",purpose:"决定入库方式:结构件走批次、精密件走 SN",fill:"结构件(批次) / 精密件(SN)"},{name:"物料类型",source:"选择(可空)。",purpose:"业务归类",fill:"标准件/电子件/包装件/半成品/成品"}]}]};export{R as P,U as a,q as b,J as c,Q as d,Y as e,X as f,$ as g,j as h,ee as i};
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+17
-17
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
@@ -3,9 +3,9 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>北自所库房客户端</title>
|
||||
<script type="module" crossorigin src="/assets/index-BhhFt5Di.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-qGEetQKd.css">
|
||||
<title>库房客户端</title>
|
||||
<script type="module" crossorigin src="/assets/index-gIYCKXT9.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-CwCKb6AA.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
|
||||
Reference in New Issue
Block a user