refactor: 重构产线工位与备料流程,移除冗余字段

1. 移除工单、工件、日排产中的冗余工位组合/接驳台字段
2. 新增工位接驳台编码字段与唯一约束,关联WMS接驳台主数据
3. 重构日排产为工位产量分配模式,替代原接驳台列表
4. 新增备料单工位级字段与分批出库支持
5. 移除定时同步可生产数量,改为WMS实时拉取接口
6. 过滤操作日志,排除登录/退出相关日志
7. 调整仪表盘工序展示逻辑为今日派工路线
8. 新增接驳台维护菜单与基础数据
This commit is contained in:
SunYF
2026-09-19 07:50:21 +08:00
parent 543655d441
commit 37f10d3a13
156 changed files with 4489 additions and 1285 deletions
@@ -0,0 +1 @@
.login-page[data-v-f09d9792]{height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#0f2b4c,#14385f 60%,#1a4a7a)}.login-card[data-v-f09d9792]{width:480px;padding:48px 56px;background:#fff;border-radius:16px;box-shadow:0 12px 48px #00000059}.title[data-v-f09d9792]{margin:0 0 8px;font-size:34px;text-align:center;color:#16324f}.subtitle[data-v-f09d9792]{margin:0 0 32px;text-align:center;font-size:16px;color:#7a8aa0}.field[data-v-f09d9792]{display:flex;align-items:center;gap:16px;margin-bottom:22px}.lab[data-v-f09d9792]{width:64px;font-size:20px;font-weight:700;color:#16324f;text-align:right}.field[data-v-f09d9792] .el-input__inner{height:52px;font-size:20px}.station-el[data-v-f09d9792]{flex:1}.station-el[data-v-f09d9792] .el-input__inner{height:52px;font-size:20px;font-weight:700;color:#16324f}.station-fixed[data-v-f09d9792]{flex:1;font-size:22px;font-weight:700;color:#16324f;line-height:52px;background:#f2f6fb;border-radius:8px;padding:0 16px}.btn-login[data-v-f09d9792]{width:calc(100% - 80px);margin-left:80px;height:54px;font-size:24px;letter-spacing:12px}.hint[data-v-f09d9792]{margin-top:26px;text-align:center;font-size:14px;color:#9aa7b8}
@@ -0,0 +1 @@
import{o as _,c as w,a as e,b as d,w as m,t as y,d as b,r as n,e as v,u as V,f as x,g as N,E as p,s as k}from"./index-CETtbp9K.js";import{_ as C,g as E,l as M}from"./_plugin-vue_export-helper-CbexiMW6.js";const z={class:"login-page"},B={class:"login-card"},K={class:"field"},S={class:"field"},L={class:"field"},T={class:"station-fixed"},U={__name:"Login",setup(A){const f=V(),o=n(""),l=n(""),t=n(0),i=n(!1);_(async()=>{try{const a=await E();(a==null?void 0:a.stationNo)>0&&(t.value=a.stationNo)}catch{}});async function u(){if(!o.value||!l.value){p.warning("请输入账号和密码");return}if(!t.value){p.warning("工位配置未加载,请检查服务端配置文件后重启");return}i.value=!0;try{const a=await M({username:o.value,password:l.value,stationNo:t.value});k(a.accessToken,a.user),p.success("登录成功"),f.push("/main")}catch{}finally{i.value=!1}}return(a,s)=>{const c=v("el-input"),g=v("el-button");return x(),w("div",z,[e("div",B,[s[6]||(s[6]=e("h1",{class:"title"},"工位终端",-1)),s[7]||(s[7]=e("p",{class:"subtitle"},"产线触屏终端(端口 8892",-1)),e("div",K,[s[2]||(s[2]=e("span",{class:"lab"},"账号",-1)),d(c,{modelValue:o.value,"onUpdate:modelValue":s[0]||(s[0]=r=>o.value=r),modelModifiers:{trim:!0},size:"large",placeholder:"请输入账号",clearable:"",onKeyup:m(u,["enter"])},null,8,["modelValue"])]),e("div",S,[s[3]||(s[3]=e("span",{class:"lab"},"密码",-1)),d(c,{modelValue:l.value,"onUpdate:modelValue":s[1]||(s[1]=r=>l.value=r),size:"large",type:"password","show-password":"",placeholder:"请输入密码",onKeyup:m(u,["enter"])},null,8,["modelValue"])]),e("div",L,[s[4]||(s[4]=e("span",{class:"lab"},"工位",-1)),e("span",T,y(t.value?"工位 "+t.value:"工位加载中…"),1)]),d(g,{class:"btn-login",type:"primary",size:"large",loading:i.value,onClick:u},{default:b(()=>[...s[5]||(s[5]=[N(" 登 录 ",-1)])]),_:1},8,["loading"]),s[8]||(s[8]=e("p",{class:"hint"},"账号由 MES 统一管理",-1))])])}}},R=C(U,[["__scopeId","data-v-f09d9792"]]);export{R 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 @@
import{z as s}from"./index-CETtbp9K.js";const p=t=>s.post("/api/auth/login",t),c=()=>s.get("/api/config"),r=t=>s.get("/api/task/current",{params:{stationNo:t}}),l=t=>s.get("/api/bind/panel",{params:t}),g=t=>s.post("/api/bind/record",t),m=t=>s.post("/api/bind/remove",t),u=t=>s.get("/api/workload",{params:t}),d=t=>s.get("/api/tightening/list",{params:t}),v=t=>s.post("/api/tightening/record",t),f=t=>s.post("/api/report/process-done",t),y=t=>s.post("/api/report/temp-store",t),b=()=>s.post("/api/sync/flush"),h=t=>s.post("/api/station/logout",t),k=()=>s.get("/api/sync/stats"),L=t=>"/pdfview?name="+encodeURIComponent(t),q=t=>{if(!t)return"";const e=String(t),o=e.indexOf("/api/v1/files/");return o>=0?e.slice(o+14):e},w=()=>s.get("/api/line/points"),M=t=>s.get("/api/line/moves",{params:t}),C=t=>s.post("/api/line/move",t),P=t=>s.post("/api/line/move/arrive",t),R=t=>s.post("/api/line/move/ack",t),T=t=>s.post("/api/line/occupy",t),_=t=>s.post("/api/line/call-material",t),x=t=>s.post("/api/inspection/submit",t),F=t=>s.post("/api/inspection/upload",t),O=t=>s.post("/api/emergency/call",t),S=t=>s.post("/api/qty-report",t),B=t=>s.post("/api/return-material",t),I=t=>s.get("/api/wip",{params:t}),U=t=>s.get("/api/bom",{params:t}),z=t=>s.get("/api/order/query",{params:t}),D=t=>s.get("/api/trace",{params:t}),W=t=>s.post("/api/workpiece/online",t),j=t=>s.post("/api/workpiece/done",t),A=(t,e)=>{const o=t.__vccOpts||t;for(const[n,i]of e)o[n]=i;return o};export{z as A,U as B,W as C,D,j as E,u as F,b as G,h as H,A as _,M as a,r as b,d as c,k as d,w as e,I as f,c as g,l as h,C as i,P as j,y as k,p as l,q as m,m as n,T as o,L as p,g as q,f as r,v as s,_ as t,R as u,F as v,x as w,O as x,S as y,B as z};
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,15 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>工位终端</title>
<!-- 系统图标:工位终端屏(内联 SVG,避免依赖外部文件) -->
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'><rect width='32' height='32' rx='6' fill='%231668dc'/><rect x='6' y='7' width='20' height='14' rx='2' fill='none' stroke='%23fff' stroke-width='2'/><path d='M12 25h8M16 21v4' stroke='%23fff' stroke-width='2' stroke-linecap='round'/></svg>">
<script type="module" crossorigin src="/assets/index-CETtbp9K.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-Dz4RGjfJ.css">
</head>
<body>
<div id="app"></div>
</body>
</html>