feat&fix: 完善半成品/序列号闭环流转逻辑
1. 调整物料编码字段为可空,优化注释说明 2. 修复Vite构建自动清空产物目录冲突问题 3. 优化前端提示文案与表单占位符 4. 为各前端项目添加内联SVG图标 5. 重构MES半成品流转逻辑,不再静默吞掉WMS错误并记录日志 6. 生成并添加空的WMS客户端静态文件 7. 完善Ent ORM模型的空值支持与查询谓词 8. 优化半成品入库接口,支持doneProcessCodes数组格式,新增SN反查物料编码逻辑 9. 更新帮助文档与操作手册
This commit is contained in:
@@ -4,9 +4,11 @@
|
||||
<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'/><path d='M16 7l9 4.5v9L16 25l-9-4.5v-9L16 7z' fill='none' stroke='%23fff' stroke-width='2' stroke-linejoin='round'/><path d='M7 11.5L16 16l9-4.5M16 16v9' fill='none' stroke='%23fff' stroke-width='2' stroke-linejoin='round'/></svg>">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
<script type="module" src="/src/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
||||
@@ -69,7 +69,7 @@ export const helpInspection = {
|
||||
{ name: '目标类型', source: '单选。', purpose: '检验对象是批次还是 SN', fill: '批次 BATCH / 序列号 SN' },
|
||||
{ name: '检验结论', source: '单选。', purpose: '判定结果', fill: '合格 / 不合格' },
|
||||
{ name: '检验员', source: '手动填写(默认当前用户)。', purpose: '谁检验的,追溯用', fill: '检验员姓名' },
|
||||
{ name: '扫码输入', source: '扫码枪。来自批次号/SN条码。', purpose: '单个待检目标编号', fill: '扫批次号或 SN,回车提交' },
|
||||
{ name: '扫码输入', source: '扫码枪。来自批次号/SN条码。', purpose: '单个待检的批次号或 SN', fill: '扫批次号或 SN,回车提交' },
|
||||
{ name: '批量编号', source: '扫码枪连续录入。', purpose: '一次性翻转多个目标的检验状态', fill: '每行一个编号' }
|
||||
]
|
||||
}
|
||||
@@ -103,14 +103,19 @@ export const helpPackage = {
|
||||
export const helpSemi = {
|
||||
title: '半成品/成品(流转)',
|
||||
overview:
|
||||
'产线工位"暂存/退回"的半成品或完工成品可在此入库(记录已完成工序),需要时再出库(重上线),MES 从下一工序继续。\n\n半成品生命周期:工位暂存退库 → 本页入库(记已完成工序) → 需要时本页出库→ MES 下发下一工序 → 工位继续装配。',
|
||||
'产线工位"暂存/退回"的半成品或完工成品先在此入库(记已完成工序),需要时再出库(重上线),MES 从下一工序继续。\n\n闭环逻辑(与 MES 自动打通):\n' +
|
||||
'① 工位终端"暂存退库" → 调 MES 工序流转接口 → MES 自动调 WMS /api/internal/semi/inbound 入库(带 SN、工单号、已完成工序码)。\n' +
|
||||
'② WMS 收到后生成"半成品库存"记录,并写入 SN 台账,状态=在库。\n' +
|
||||
'③ 该件后续要接着做时,在本页"半成品出库"或 MES 重上线 → WMS /api/internal/semi/outbound 把状态置为出库。\n' +
|
||||
'④ MES 据此下发下一工序,工位继续装配,直至完工。\n\n' +
|
||||
'SN 是两系统唯一的追溯锚点,因此物料编码非必填:MES 调用时不传,WMS 会优先用请求里的、其次按 SN 反查序列号台账,都没有则留空,不影响闭环。',
|
||||
sections: [
|
||||
{
|
||||
title: '半成品/成品入库',
|
||||
overview: '把产线退回的半成品或成品收进库房。',
|
||||
overview: '把产线退回的半成品或成品收进库房(手工录入或 MES 自动同步均走此接口)。',
|
||||
fields: [
|
||||
{ name: '物料', source: '下拉选择。来自物料档案。', purpose: '入库物料', fill: '选择物料编码' },
|
||||
{ name: '已完成工序', source: '自动带出/手工填写。数据来自工位终端的"已完成工序"上报。', purpose: '该件做到第几道工序,重上线时 MES 从这里继续', fill: '如 135,可空' },
|
||||
{ name: '物料', source: '下拉选择。来自物料档案。', purpose: '入库物料(MES 自动同步时通常留空,由 WMS 反查)', fill: '选择物料编码' },
|
||||
{ name: '已完成工序', source: 'MES 自动带出(doneProcessCodes,如 [1,3,5]);手工录入填逗号分隔,如 1,3,5。', purpose: '该件已做到哪些工序,重上线时 MES 从下一工序继续', fill: '如 1,3,5,可空' },
|
||||
{ name: '工单号', source: '自动带出/手工填写。来自工单。', purpose: '来源工单', fill: '输入工单号' },
|
||||
{ name: '区域', source: '手动填写(可空)。', purpose: '存放库区', fill: '如 Z05' },
|
||||
{ name: '扫码录入', source: '扫码枪连续扫码。来自工件 SN 条码。', purpose: '半成品 SN 清单', fill: '扫入 SN 回车追加' }
|
||||
@@ -118,7 +123,7 @@ export const helpSemi = {
|
||||
},
|
||||
{
|
||||
title: '半成品出库(重上线)',
|
||||
overview: '把半成品重新送上线,MES 会从记录的下一个工序继续。',
|
||||
overview: '把半成品重新送上线,WMS 状态置为出库,MES 从记录的下一工序继续。',
|
||||
fields: [
|
||||
{ name: 'SN', source: '扫码枪/手输。来自工件 SN 条码。', purpose: '要重上线的半成品 SN', fill: '扫描或输入 SN,回车出库' }
|
||||
]
|
||||
|
||||
@@ -20,7 +20,7 @@ onMounted(() => nextTick(() => scanRef.value?.focus()))
|
||||
async function submitSingle() {
|
||||
const id = targetId.value.trim()
|
||||
if (!id) {
|
||||
ElMessage.warning('请扫入或输入目标编号')
|
||||
ElMessage.warning('请扫入或输入批次号或 SN 序列号')
|
||||
return
|
||||
}
|
||||
if (!inspector.value.trim()) {
|
||||
|
||||
@@ -133,7 +133,7 @@ function search() {
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="已完成工序">
|
||||
<el-input v-model="inForm.completedProcess" placeholder="如:135(可空)" clearable />
|
||||
<el-input v-model="inForm.completedProcess" placeholder="如:1,3,5(可空)" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item label="工单号">
|
||||
<el-input v-model="inForm.orderNo" placeholder="来源工单号(可空)" clearable />
|
||||
|
||||
@@ -183,7 +183,7 @@ async function loadHistory() {
|
||||
style="margin-bottom:10px" />
|
||||
<el-table :data="finishResult.diffs || []" border size="small"
|
||||
empty-text="无差异,账实相符">
|
||||
<el-table-column prop="targetId" label="目标编号" min-width="190" />
|
||||
<el-table-column prop="targetId" label="批次号 / SN 序列号" min-width="190" />
|
||||
<el-table-column prop="type" label="类型" width="100" align="center">
|
||||
<template #default="{ row }">{{ row.type === 'BATCH' ? '批次' : 'SN' }}</template>
|
||||
</el-table-column>
|
||||
|
||||
@@ -6,7 +6,9 @@ export default defineConfig({
|
||||
plugins: [vue()],
|
||||
build: {
|
||||
outDir: '../web/static',
|
||||
emptyOutDir: true
|
||||
// 不自动清空产物目录:自动清空会与系统安全删除机制冲突导致构建失败,
|
||||
// 需要重新完整构建时手动执行 rm -rf ../web/static 后再 build。
|
||||
emptyOutDir: false
|
||||
},
|
||||
server: {
|
||||
port: 5173,
|
||||
|
||||
@@ -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'/><path d='M16 7l9 4.5v9L16 25l-9-4.5v-9L16 7z' fill='none' stroke='%23fff' stroke-width='2' stroke-linejoin='round'/><path d='M7 11.5L16 16l9-4.5M16 16v9' fill='none' stroke='%23fff' stroke-width='2' stroke-linejoin='round'/></svg>">
|
||||
<script type="module" crossorigin src="/assets/index-BWAZ_x_Q.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-DncRC_8X.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user