refactor: 统一术语BOM为物料清单并补充工位扩展能力

主要变更:
1.  后端:重构工位管理逻辑,新增工位自定义扩展能力,将工位号上限调整为999并支持14+虚拟工位
2.  前后端:全量替换"BOM"术语为"物料清单",包括提示语、注释和文档
3.  WMS模块:新增AGV任务取消接口与前端页面,对接海康RCS取消任务逻辑
4.  权限与种子数据:新增工位新增权限并更新权限配置
5.  修复错误校验逻辑,优化AGV客户端签名与请求处理
This commit is contained in:
SunYF
2026-09-17 19:41:00 +08:00
parent e31b85e87a
commit bf3a408839
20 changed files with 276 additions and 52 deletions
@@ -93,11 +93,11 @@ export const qtyReport = (data) => request.post('/api/qty-report', data)
// 工位退料:{orderNo, stationNo, sn, materialCode, materialName, spec, qty, unit, reason}
export const returnMaterial = (data) => request.post('/api/return-material', data)
// ---------- 在制品 / 0-13 上下线建档完工 / BOM 领料 / 追溯(代理 MES 内部 API ----------
// ---------- 在制品 / 0-13 上下线建档完工 / 物料清单领料 / 追溯(代理 MES 内部 API ----------
// 在制品列表:{stationNo}<=0/空=全部, 0=上线位, 13=下线位, 其余物理工位)→ {list}
export const getWip = (params) => request.get('/api/wip', { params })
// BOM 物料清单(上线建档「领料确认」应领料):{productCode, bomName}
// 物料清单(上线建档「领料确认」应领料):{productCode, bomName}
export const getBom = (params) => request.get('/api/bom', { params })
// 工单查询(选工单带出产品编码/名称):{orderNo}
+4 -4
View File
@@ -84,7 +84,7 @@ export const helpPdf = {
export const helpOnline = {
title: '上线建档 使用说明',
overview:
'上线建档运行在产线进线口(工位号 0)。成品在此登记发号、按物料清单核对领料,建档上线后流转到第 1 道装配工位。\n\n标准流程:①选工单(带出产品与物料清单)→ ②按 BOM 核对应领料 → ③扫描/生成工件 SN → ④点「确认建档上线」。\n\n数据链路:工单/物料清单(MES) → 建档上线(MES 生成在制工件,工位号 0) → 流转到装配工位。',
'上线建档运行在产线进线口(工位号 0)。成品在此登记发号、按物料清单核对领料,建档上线后流转到第 1 道装配工位。\n\n标准流程:①选工单(带出产品与物料清单)→ ②按物料清单核对应领料 → ③扫描/生成工件 SN → ④点「确认建档上线」。\n\n数据链路:工单/物料清单(MES) → 建档上线(MES 生成在制工件,工位号 0) → 流转到装配工位。',
sections: [
{
title: '选工单与产品',
@@ -96,9 +96,9 @@ export const helpOnline = {
},
{
title: '领料确认(按物料清单核对)',
overview: '按产品 BOM 列出本台应领物料,操作员逐项核对后勾选确认。',
overview: '按产品物料清单列出本台应领物料,操作员逐项核对后勾选确认。',
fields: [
{ name: '应领料清单', source: 'MES 物料清单(BOM)。按产品编码查询。', purpose: '列明单台用量、图号、规格、管理方式、装配工位,指导备料', fill: '对照实物逐项核对,确认无误后勾选「我已核对」' },
{ name: '应领料清单', source: 'MES 物料清单。按产品编码查询。', purpose: '列明单台用量、图号、规格、管理方式、装配工位,指导备料', fill: '对照实物逐项核对,确认无误后勾选「我已核对」' },
{ name: '已核对勾选', source: '操作员确认。', purpose: '未勾选则无法提交建档,防止漏料上线', fill: '核对完成后勾选;有物料清单时必须勾选' }
]
},
@@ -151,7 +151,7 @@ export const helpMaterial = {
title: '装配物料绑定',
overview: '先在「作业」页扫描工件 SN,再按本工位应绑物料逐项扫码绑定。',
fields: [
{ name: '应绑物料', source: 'MES 物料清单(BOM)。按产品与工位带出。', purpose: '列明本工位需绑定的物料及已绑/应绑数量', fill: '对照标签:电气件扫 SN、结构件扫批次号,回车或点「绑定」' },
{ name: '应绑物料', source: 'MES 物料清单。按产品与工位带出。', purpose: '列明本工位需绑定的物料及已绑/应绑数量', fill: '对照标签:电气件扫 SN、结构件扫批次号,回车或点「绑定」' },
{ name: '已绑标签', source: 'MES 绑定记录。', purpose: '展示已绑定的 SN/批次,可点 × 撤销', fill: '绑错时点标签上的 × 撤销重绑' },
{ name: '已绑齐/未绑齐', source: '系统统计。已绑数 / 应绑数。', purpose: '提示本工位物料是否齐套', fill: '未绑齐会红色提示缺料,需补齐后才能完工' }
]
@@ -48,7 +48,7 @@
</div>
<el-empty v-if="!form.orderNo" description="请先选择工单" :image-size="70" />
<el-empty v-else-if="!bomItems.length" description="该产品未配置物料清单BOM" :image-size="70" />
<el-empty v-else-if="!bomItems.length" description="该产品未配置物料清单" :image-size="70" />
<template v-else>
<el-table :data="bomItems" border size="large" max-height="360">
<el-table-column type="index" label="#" width="55" align="center" />
@@ -162,7 +162,7 @@ async function loadOrders() {
loadingOrder.value = false
}
// 选工单 → 带出产品编码/名称 → 查 BOM 应领料
// 选工单 → 带出产品编码/名称 → 查物料清单应领料
async function onOrderChange(orderNo) {
product.code = ''
product.name = ''
+1 -1
View File
@@ -6,7 +6,7 @@
<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-Bed51ON8.js"></script>
<script type="module" crossorigin src="/assets/index-CETtbp9K.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-Dz4RGjfJ.css">
</head>
<body>