feat&refactor: 完成多模块功能迭代与配置优化

本次提交覆盖多个业务模块的功能完善与体验优化:
1.  **鉴权与配置调整**:
    - 统一JWT滑动续签逻辑,简化Token存储,移除RefreshToken相关冗余代码
    - 调整多项目配置文件中JWT过期时间为3600秒,统一会话闲置窗口
    - 工位配置放开1~12限制,改为仅校验大于0
2.  **术语统一替换**:全链路将"精密件"替换为"电气件",修正物料管理描述
3.  **功能新增**:
    - 新增工位类型、工艺路线与产线点位台账模块
    - 添加工艺PDF预览面板、工位终端代理转发接口
    - 新增操作日志按操作人列表筛选、工位登出日志记录
    - 新增PLC移料指令与产线点位状态管理
4.  **业务流程优化**:
    - 调整BOM物料删除校验逻辑,优化工单备料计算
    - 补充物料图号、检测单号等追溯字段
    - 完善工艺流程图与工位绑定关系说明
    - 优化前端页面文案与交互细节
5.  **代码规范与维护**:
    - 新增通用工具函数与前端静态资源
    - 整理路由权限与中间件逻辑
    - 修复部分接口与配置的不兼容问题
This commit is contained in:
SunYF
2026-09-10 16:59:15 +08:00
parent 6d8bb75696
commit 0ab21b1234
202 changed files with 21397 additions and 3172 deletions
+54 -39
View File
@@ -5,14 +5,14 @@
export const helpProductType = {
title: '产品型号(档案维护)',
overview:
'产品型号 = 企业要生产哪些产品的分类档案,是整条产线的源头基础数据。\n\n主数据链条:产品型号 → 工单(选产品型号+BOM) → 物料清单(给该产品编配料) → 日排产 → 备料单 → 库房出库 → 产线生产 → 完工成品自动回流 WMS 入库。\n\n关系说明(几对几):\n· 产品型号 ↔ 工单:1 对 N。一个产品型号可以建多个工单(同一型号今天做一批、明天做一批,工单号不同、产品编相同)。\n· 产品型号 ↔ 物料清单:1 对多(选用制)。同一型号可并存多份 BOM(不同厂家供货/含半成品结构),用「BOM 名称」区分,工单建单时选定一份,备料/装机都按工单锁定的那份算。\n· 产品型号 ↔ 备料单:间接。备料单由「日排产 × 工单锁定的 BOM」算出,与产品型号无直接约束。\n· 强约束:工单/物料清单都挂在产品编下,产品型号编码变了,下游关联会断,建议建好后不要改。\n· 与 WMS 的关系:两套系统解耦。产品/物料编码主数据以 WMS 为单一来源,MES 实时拉取(WMS 不可达时允许手填、仅提示不强校验);成品完工后由系统自动生成 SN 回流 WMS 入库,无需人工对账。',
'产品型号 = 企业要生产哪些产品的分类档案,是整条产线的源头基础数据。\n\n主数据链条:产品型号 → 工单(选产品型号+物料清单) → 物料清单(给该产品编配料) → 日排产 → 备料单 → 库房出库 → 产线生产 → 完工成品自动回流 WMS 入库。\n\n关系说明(几对几):\n· 产品型号 ↔ 工单:1 对 N。一个产品型号可以建多个工单(同一型号今天做一批、明天做一批,工单号不同、产品编相同)。\n· 产品型号 ↔ 物料清单:1 对多(选用制)。同一型号可并存多份物料清单(不同厂家供货/含半成品结构),用「物料清单名称」区分,工单建单时选定一份,备料/装机都按工单锁定的那份算。\n· 产品型号 ↔ 备料单:间接。备料单由「日排产 × 工单锁定的物料清单」算出,与产品型号无直接约束。\n· 强约束:工单/物料清单都挂在产品编下,产品型号编码变了,下游关联会断,建议建好后不要改。\n· 与 WMS 的关系:两套系统解耦。产品/物料编码主数据以 WMS 为单一来源,MES 实时拉取(WMS 不可达时允许手填、仅提示不强校验);成品完工后由系统自动生成 SN 回流 WMS 入库,无需人工对账。',
fields: [
{ name: '名称', source: '手工填写。用户自定义,无上游来源。', purpose: '产品型号的中文名,用于识别与下拉展示', fill: '如:智能电表、断路器、配电柜' },
{
name: '编码',
source: '系统自动生成 + 可手动修改。新建时会自动带出(格式 PROD-YYYYMMDD-序号),你可直接使用或改为自定义编码;编辑时保留已存值。一个产品编可对应多个工单(同一型号今天做一批、明天做一批,工单号不同,产品编相同)。',
purpose: '产品唯一编码。它是 MES 内部识别该产品的标识,决定该产品的物料清单(BOM)内容,也是工单、备料、拧紧、追溯的挂靠键。',
fill: '建议用有意义的编码,如 METER-01。要点:①编码主数据以 WMS(库房) 为单一来源,本系统实时从 WMS 拉取物料/产品档案;WMS 不可达时允许手填、仅提示不强校验;②成品完工后系统自动生成 SN 并回流 WMS 入库,无需人工对账;③如产品编就是"产品型号",则直接沿用该类型编码即可;④建好后不要随意改,否则下游工单/追溯的关联会断。'
source: '系统自动生成 + 可手动修改。新建时会自动带出(格式 PROD-YYYYMMDD-序号),你可直接使用或改为自定义编码;编辑时保留已存值。一个产品编可对应多个工单(同一型号今天做一批、明天做一批,工单号不同,产品编相同)。',
purpose: '产品唯一编码。它是 MES 内部识别该产品的标识,决定该产品的物料清单内容,也是工单、备料、拧紧、追溯的挂靠键。',
fill: '建议用有意义的编码,如 METER-01。要点:①编码主数据以 WMS(库房) 为单一来源,本系统实时从 WMS 拉取物料/产品档案;WMS 不可达时允许手填、仅提示不强校验;②成品完工后系统自动生成 SN 并回流 WMS 入库,无需人工对账;③如产品编就是"产品型号",则直接沿用该类型编码即可;④建好后不要随意改,否则下游工单/追溯的关联会断。'
},
{ name: '类别', source: '手工填写。可选,无上游来源。', purpose: '产品所属大类,便于分类统计', fill: '如:计量表 / 开关柜;可空' },
{ name: '启用', source: '开关选择。默认开启。', purpose: '启用后才允许在新建工单/备料的下拉里被选到', fill: '默认开启;暂时停产的可关闭(不删除,保留档案)' },
@@ -23,18 +23,18 @@ export const helpProductType = {
export const helpWorkOrder = {
title: '工单管理(新建 / 编辑 / 删除工单)',
overview:
'工单 = 一个"合同/生产批次"的唯一载体,是生产执行和仓库出库挂靠的核心对象。\n\n全流程:先有产品型号 → 建工单(选产品型号、选定 BOM、定数量、勾选工位组合) → 进"物料清单"给该产品配料 → 到"日排产"排哪天产多少 → 仓库按排产备料出库 → 产线装配/拧紧/报工 → 完工(成品 SN 系统自动生成,并自动回流 WMS 入库为"成品"品类)。\n工单号会贯穿 备料单、拧紧查询、手动报工、工件追溯、操作日志 全链路。\n\n查询:支持按 工单号 / 产品编 / 产品名称(模糊) / 状态 组合筛选;列表有 BOM 列显示各工单选用的 BOM 名称。\n删除:仅「已创建 / 待排产 / 已发布」且无排产、备料、生产数据的工单可删除(操作列「删除」),生产中或已完成的工单不可删除。',
'工单 = 一个"合同/生产批次"的唯一载体,是生产执行和仓库出库挂靠的核心对象。\n\n全流程:先有产品型号 → 建工单(选产品型号、选定物料清单、定数量、勾选工位组合) → 进"物料清单"给该产品配料 → 到"日排产"排哪天产多少 → 仓库按排产备料出库 → 产线装配/拧紧/报工 → 完工(成品 SN 系统自动生成,并自动回流 WMS 入库为"成品"品类)。\n工单号会贯穿 备料单、拧紧查询、手动报工、工件追溯、操作日志 全链路。\n\n查询:支持按 工单号 / 产品编 / 产品名称(模糊) / 状态 组合筛选;删除:仅「已创建 / 待排产 / 已发布」且无排产、备料、生产数据的工单可删除(操作列「删除」),生产中或已完成的工单不可删除。',
sections: [
{
title: '工单基本信息',
fields: [
{ name: '工单号', source: '系统自动生成(WO+时间戳),可手工改。新建时自动带出。', purpose: '唯一标识一个工单,备料/出库/报工/追溯都挂在此号下', fill: '一般不用改;如改动须保证唯一' },
{ name: '产品型号', source: '下拉选择。数据来自"产品型号"页面已启用的记录。', purpose: '说明这批生产的是什么产品,并决定物料清单内容', fill: '先到"产品型号"页面建好记录再选择' },
{ name: 'BOM 名称', source: '下拉选择。按所选产品编码实时拉取该型号下并存的 BOM(显示名称+料数),可输入新名创建。', purpose: '本工单选用哪一份 BOM;后续备料算料、装机绑定校验都锁定这一份,不同厂家料单互不串', fill: '一般选「默认」或对应厂家的料单名;不选则用「默认」' },
{ name: '产品编', source: '手工填写。通常与所选产品型号的编码一致。', purpose: '产品唯一编码,用于展示与追溯', fill: '如 METER-01,与产品型号编码对齐' },
{ name: '产品编', source: '手工填写。通常与所选产品型号的编码一致。', purpose: '产品唯一编码,用于展示与追溯', fill: '如 METER-01,与产品型号编码对齐' },
{ name: '产品名称', source: '手工填写。通常与产品型号名称一致。', purpose: '产品中文名,用于展示', fill: '如 智能电表' },
{ name: '数量', source: '手工填写整数。', purpose: '本工单生产总数量(合同台数),决定需求量与排产上限', fill: '整数 ≥1,如 100' },
{ name: '工位组合', source: '勾选 12 个工位(工位1~工位12)。', purpose: '本工单要经过的工位集合,PLC 按此组合下发控制产线', fill: '勾选要经过的工位即可,系统自动按 1→12 顺序执行(传送带不回走);半成品再上线可只勾漏做的工位' },
{ name: '工位组合', source: '勾选要经过的工位(工位数以数据库为准)。', purpose: '本工单要经过的工位集合,产线设备按此组合下发控制产线', fill: '勾选要经过的工位即可,系统自动按工位号顺序执行(传送带不回走);半成品再上线可只勾漏做的工位' },
{ name: '状态', source: '新建时选"已创建",后续由流程推进。', purpose: '工单生命周期:创建→发布→生产→完成', fill: '新建时选"已创建";也可在列表操作列点「状态」快捷流转(发布/开工/完工)' }
]
},
@@ -42,7 +42,7 @@ export const helpWorkOrder = {
title: '行内"工位组合"维护',
overview: '对当前工单快速维护要经过的工位组合。\n可自由勾选、补工位(半成品再上线):如本应走第3/5工位却做成半成品,可在此只勾第2工位重上线完成闭环。',
fields: [
{ name: '工位组合', source: '勾选 12 个工位。', purpose: '本工单经过的工位集合,PLC 组合下发', fill: '勾选即可,按工位号顺序执行;全选=全部工位' }
{ name: '工位组合', source: '勾选要经过的工位。', purpose: '本工单经过的工位集合,产线设备组合下发', fill: '勾选即可,按工位号顺序执行;全选=全部工位' }
]
}
]
@@ -63,17 +63,17 @@ export const helpDailyPlan = {
}
export const helpBom = {
title: '物料清单(产品 BOM',
title: '物料清单',
overview:
'物料清单 = 生产 1 台该产品需要哪些物料、各用多少。\n按「产品编 + BOM 名称」维护:同一产品编可并存多份 BOM(选用制)——不同厂家供货、含半成品的结构差异,都用不同的 BOM 名称区分(缺省叫「默认」,不用 V1/V2 版本号)。\n工单建单时选定其中一份,之后该工单的备料算料、装机绑定校验都锁定这份 BOM,不同厂家的料单互不串。\n\n与 WMS 的关系:本页(MES)只维护「产品由哪几种料、各用几个」;每种物料叫什么、规格、是精密件(SN)还是结构件(批次)、库存有多少,统一在 WMS(库房)的「物料档案」里维护,两套系统互相解耦、通过物料编码对齐。\n\n编码对应规则:本页的「物料编码」必须与 WMS 物料档案里的「编码」完全一致;「管理方式」也要对应(精密件=SN 逐件,结构件=批次)。编码对不上,WMS 将无法为对应工单备料/出库。\n\n保护规则:某份 BOM 一旦被工单选用过,就不允许再从中移除物料(防止历史工单追溯断链);新建/改名的 BOM 名称在本页「BOM 名称」下拉直接输入即可创建。\n\n数据链路:先建「产品型号」→ 到本页选产品编 + 命名 BOM,逐条添加物料 → 建工单时选定 BOM → 仓库才能为对应工单领料。',
'物料清单 = 生产 1 台该产品需要哪些物料、各用多少。\n按「产品编 + 物料清单名称」维护:同一产品编可并存多份物料清单(选用制)——不同厂家供货、含半成品的结构差异,都用不同的物料清单名称区分(缺省叫「默认」,不用 V1/V2 版本号)。\n工单建单时选定其中一份,之后该工单的备料算料、装机绑定校验都锁定这份物料清单,不同厂家的料单互不串。\n\n与 WMS 的关系:本页(MES)只维护「产品由哪几种料、各用几个」;每种物料叫什么、规格、是电气件(SN)还是结构件(批次)、库存有多少,统一在 WMS(库房)的「物料档案」里维护,两套系统互相解耦、通过物料编码对齐。\n\n编码对应规则:本页的「物料编码」必须与 WMS 物料档案里的「编码」完全一致;「管理方式」也要对应(电气件=SN 逐件,结构件=批次)。编码对不上,WMS 将无法为对应工单备料/出库。\n\n保护规则:某份物料清单一旦被工单选用过,就不允许再从中移除物料(防止历史工单追溯断链);新建/改名的物料清单名称在本页「物料清单名称」下拉直接输入即可创建。\n\n数据链路:先建「产品型号」→ 到本页选产品编 + 命名物料清单,逐条添加物料 → 建工单时选定物料清单 → 仓库才能为对应工单领料。',
fields: [
{ name: 'BOM 名称', source: '下拉选择/输入(可搜索,输入新名即创建)。缺省「默认」。', purpose: '同一产品编下多份 BOM 的区分名,工单建单时按此选定', fill: '如「默认」「A厂料单」「含半成品」;同一型号下名称唯一' },
{ name: '产品编', source: '下拉选择。来自「产品型号」里建的编码。', purpose: '要为哪个产品配置物料清单', fill: '在查询区或「添加物料」弹窗里选择产品编' },
{ name: '物料清单名称', source: '下拉选择/输入(可搜索,输入新名即创建)。缺省「默认」。', purpose: '同一产品编下多份物料清单的区分名,工单建单时按此选定', fill: '如「默认」「A厂料单」「含半成品」;同一型号下名称唯一' },
{ name: '产品编', source: '下拉选择。来自「产品型号」里建的编码。', purpose: '要为哪个产品配置物料清单', fill: '在查询区或「添加物料」弹窗里选择产品编' },
{ name: '物料编码', source: '手工填写。必须与 WMS(库房) 物料档案的编码一致。', purpose: '该物料在库房的全库唯一编码,两系统靠它关联', fill: '如 螺丝=GJ-LUOSI-M16;编码对不上 WMS 将无法备料' },
{ name: '物料名称', source: '手工填写。', purpose: '物料中文名,便于识别', fill: '如 十字螺丝、主控芯片' },
{ name: '规格', source: '手工填写。', purpose: '物料规格型号', fill: '如 M16×80 / SMT-48脚' },
{ name: '单位', source: '手工填写。', purpose: '计量单位,用于算量', fill: '个 / 件 / 套 / kg' },
{ name: '管理方式', source: '单选。按物料类型决定,与 WMS 一致。', purpose: '精密件=逐件按SN管理;结构件=按批次管理', fill: '电子件/精密件选"精密件 SN";螺丝等标准件选"结构件 批次"' },
{ 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: '一般自动算,不必改' }
@@ -83,11 +83,11 @@ export const helpBom = {
export const helpMaterial = {
title: '备料单(按日排产自动算料)',
overview:
'备料单 = 仓库备料的依据:某天要生产的所有工单,各需要哪些物料、各要多少。\n\n操作方式:① 先到「日排产」排好某天的计划数量;② 回到本页选该「日期」;③ 点「按日排产生成备料」,系统按各产品 BOM 自动计算(计划数量 × 单台用量 × (1+损耗率))并生成备料单明细;④ 仓库据此备料出库,由 AGV 配送到各工位。\n\n数据链路:日排产 → 本页按日期自动算料生成备料单 → 仓库出库 → AGV 配送。',
'备料单 = 仓库备料的依据:某天要生产的所有工单,各需要哪些物料、各要多少。\n\n操作方式:① 先到「日排产」排好某天的计划数量;② 回到本页选该「日期」;③ 点「按日排产生成备料」,系统按各产品物料清单自动计算(计划数量 × 单台用量 × (1+损耗率))并生成备料单明细;④ 仓库据此备料出库,由 AGV 配送到各工位。\n\n数据链路:日排产 → 本页按日期自动算料生成备料单 → 仓库出库 → AGV 配送。',
sections: [
{
title: '生成备料',
overview: '按所选日期,取当天所有排产工单,依据各自产品的 BOM 自动汇总所需物料。',
overview: '按所选日期,取当天所有排产工单,依据各自产品的物料清单自动汇总所需物料。',
fields: [
{ name: '日期', source: '手动选择。', purpose: '按哪个排产日期生成备料', fill: '先选择排产日期,再点「按日排产生成备料」' }
]
@@ -105,25 +105,25 @@ export const helpMaterial = {
export const helpPlc = {
title: '工位组合下发(下发录入 / 下发记录)',
overview:
'这个菜单做什么用:把某工单/工件的「工位组合」写入西门子 S7-1214 PLC,产线传送带据此只停靠勾选的工位,其余工位不加工。\n\n页面分两个页签:「下发录入」(默认打开)、「下发记录」(点击才加载,可按工单号/状态筛选)。\n\n操作流程:选工单号 → 下拉选出该工单已上线未完工的工件 SN(也可扫码/手输) → 系统按工件实际进度自动带出「当前工位」(只读) → 工位组合中 ≤ 当前工位的编号视为已完成,自动剔除且禁选 → 勾选剩余要走的工位 → 下发。\n\n为什么单独一个菜单:产线偶尔需要人工干预——比如本该走 3 号工位却做成了半成品,人工在此只勾剩余工位重上线,完成闭环。\n\n核心约束:系统遵循「上一条未收到完成信号,不下发下一条」,确保产线不串序。\n\n数据链路:工单(含工位组合) → 本页下发到 S7-1214 → PLC 驱动传送带/工位 → 收到完成信号再下发下一条。',
'这个菜单做什么用:把某工单/工件的「工位组合」写入产线设备(如 PLC 控制器),产线传送带据此只停靠勾选的工位,其余工位不加工。\n\n页面分两个页签:「下发录入」(默认打开)、「下发记录」(点击才加载,可按工单号/状态筛选)。\n\n操作流程:选工单号 → 下拉选出该工单已上线未完工的工件 SN(也可扫码/手输) → 系统按工件实际进度自动带出「当前工位」(只读) → 工位组合中 ≤ 当前工位的编号视为已完成,自动剔除且禁选 → 勾选剩余要走的工位 → 下发。\n\n为什么单独一个菜单:产线偶尔需要人工干预——比如本该走 3 号工位却做成了半成品,人工在此只勾剩余工位重上线,完成闭环。\n\n核心约束:系统遵循「上一条未收到完成信号,不下发下一条」,确保产线不串序。\n\n数据链路:工单(含工位组合) → 本页下发到产线设备 → 产线设备驱动传送带/工位 → 收到完成信号再下发下一条。',
fields: [
{ name: '工单号', source: '下拉选择/输入。来自工单。', purpose: '当前生产的工单,选中后带出该工单可下发的工件 SN', fill: '选择或输入工单号' },
{ name: '工件SN', source: '下拉选择(该工单已上线未完工的 SN,可搜索),也可扫码枪扫入手输。', purpose: '当前流经的工件唯一序列号', fill: '优先下拉选已上线 SN;扫码手输时须是已上线的工件才能带出当前工位' },
{ name: '当前工位', source: '自动带出(只读)。按所选工件的实际生产进度识别。', purpose: '从哪一站开始继续下发', fill: '无需填写;未带出说明工件未上线或 SN 有误' },
{ name: '工位组合', source: '勾选 12 个工位;≤当前工位的编号已禁选(视为完成)。', purpose: '该工件还要经过的工位,PLC 控制停靠', fill: '勾选剩余要走的工位即可,按工位号顺序执行' }
{ name: '工位组合', source: '勾选要经过的工位;≤当前工位的编号已禁选(视为完成)。', purpose: '该工件还要经过的工位,产线设备控制停靠', fill: '勾选剩余要走的工位即可,按工位号顺序执行' }
]
}
export const helpTorque = {
title: '拧紧数据(补录 / 记录查询)',
overview:
'接收丹尼科尔拧紧工具的采集结果(扭矩/角度/时间/结果/操作人),用于质量追溯。\n\n页面分两个页签:「拧紧补录」(默认打开) 补录设备漏传/手工修正的历史数据;「记录查询」(点击才加载) 按 SN / 工单号(均不区分大小写) 查询拧紧记录。\n\n实时采集不在本页:数据在工位终端/PLC 报工时由拧紧枪自动同步到 MES;本页补录仅用于设备漏传或手工修正历史,补录记录操作人自动标记「(补录)」并写入操作日志。',
'接收丹尼科尔拧紧工具的采集结果(扭矩/角度/时间/结果/操作人),用于质量追溯。\n\n页面分两个页签:「拧紧补录」(默认打开) 补录设备漏传/手工修正的历史数据;「记录查询」(点击才加载) 按 SN / 工单号(均不区分大小写) 查询拧紧记录。\n\n实时采集不在本页:数据在工位终端/产线设备 报工时由拧紧枪自动同步到 MES;本页补录仅用于设备漏传或手工修正历史,补录记录操作人自动标记「(补录)」并写入操作日志。',
fields: [
{ name: '工单号 / SN', source: '补录必填,手工填写。', purpose: '补录记录挂靠的工单与工件', fill: '设备漏传时补填对应工单号与 SN' },
{ name: '工位', source: '手工填写。', purpose: '拧紧发生在哪道工位', fill: '如 5,可空' },
{ name: '螺丝号', source: '手工填写。', purpose: '同一工件多颗螺丝时区分第几颗', fill: '如 S1,可空' },
{ name: '扭矩(N·m) / 角度(°)', source: '正常由拧紧枪自动采集;补录时手工填写。', purpose: '实际拧紧扭矩与旋转角度,判定是否达标', fill: '按实际值填写' },
{ name: '结果', source: '单选 OK/NG。', purpose: '拧紧判定结果', fill: '默认 OK' },
{ name: '结果', source: '单选 合格/不合格。', purpose: '拧紧判定结果', fill: '默认 OK' },
{ name: '补录原因', source: '手工填写,必填。', purpose: '说明为何补录,留痕审计', fill: '如:设备漏传 / 手工修正' },
{ name: '查询(SN / 工单号)', source: '「记录查询」页签筛选条件,不区分大小写。', purpose: '只看指定工件/工单的拧紧记录', fill: '可空=全部' }
]
@@ -132,12 +132,12 @@ export const helpTorque = {
export const helpScan = {
title: '手动报工(工位工序步骤完成上报)',
overview:
'页面分两个页签:「报工录入」(默认打开)、「报工记录」(点击才加载,分页)。\n\n录入流程:选择工位、扫入/输入工件 SN 后,系统自动载入该工位「启用」工艺流程的工序步骤(扭矩/角度/尺寸等采集项),逐参数录入提交;提交后写报工实绩 + 步骤数据,系统按考核标准自动判定 OK/NG。\n\n装机绑定:若该产品在本工序配置了需绑定的装配物料(BOM「装配工」),会出现装机绑定区——精密件扫 SN、结构件扫/输批次号,逐项绑齐(已绑/需绑)后才允许提交报工;未配置物料则不校验。\n\n数据链路:工艺流程(工序步骤+考核标准) + BOM 装机配置 → 本页选工位扫 SN 自动载入 → 绑料+录参数 → 判 OK/NG → 工件追溯可见。',
'页面分两个页签:「报工录入」(默认打开)、「报工记录」(点击才加载,分页)。\n\n录入流程:选择工位、扫入/输入工件 SN 后,系统自动载入该工位「启用」工艺流程的工序步骤(扭矩/角度/尺寸等采集项),逐参数录入提交;提交后写报工实绩 + 步骤数据,系统按考核标准自动判定 合格/不合格。\n\n装机绑定:若该产品在本工序配置了需绑定的装配物料(物料清单「装配工」),会出现装机绑定区——电气件扫 SN、结构件扫/输批次号,逐项绑齐(已绑/需绑)后才允许提交报工;未配置物料则不校验。\n\n数据链路:工艺流程(工序步骤+考核标准) + 物料清单 装机配置 → 本页选工位扫 SN 自动载入 → 绑料+录参数 → 判 合格/不合格 → 工件追溯可见。',
fields: [
{ name: '工位', source: '下拉选择(1~12)。', purpose: '哪个工位在报工,选择后自动载入该工位的工序步骤', fill: '选择工位 1~12' },
{ name: '工位', source: '下拉选择(工位数以数据库为准)。', purpose: '哪个工位在报工,选择后自动载入该工位的工序步骤', fill: '选择工位 1~12' },
{ name: '工件SN', source: '扫码枪扫描或手输。来自工件条码。', purpose: '工件的唯一序列号,报工对象', fill: '扫码枪扫入,与工位一起触发自动载入' },
{ name: '各步骤采集值', source: '手工填写 或 拧紧枪自动带出(视采集方式)。字段由【工艺流程】的工序步骤人为定义。', purpose: '收集该工位的扭矩/角度/尺寸等参数,按标准判定合格与否', fill: '逐条填采集值,未维护标准的步骤仅记录' },
{ name: '装机绑定(物料/已绑/需绑)', source: '来自 BOM 的「装配工」配置(按工单锁定的 BOM 过滤)。', purpose: '该工件本工序应装哪些料;精密件按 SN、结构件按批次绑定,齐套后才允许报工', fill: '在绑定输入框扫码或录入后点「绑定」,绑齐后提交报工' },
{ name: '装机绑定(物料/已绑/需绑)', source: '来自物料清单的「装配工」配置(按工单锁定的物料清单过滤)。', purpose: '该工件本工序应装哪些料;电气件按 SN、结构件按批次绑定,齐套后才允许报工', fill: '在绑定输入框扫码或录入后点「绑定」,绑齐后提交报工' },
{ name: '报工记录查询(SN / 工单号)', source: '「报工记录」页签筛选条件,分页查看。', purpose: '查历史报工实绩', fill: '可空=全部' }
]
}
@@ -145,18 +145,18 @@ export const helpScan = {
export const helpStation = {
title: '关联工位(工位总览)',
overview:
'产线固定 12 个工位,本页是工位总览:查看每个工位绑定了哪个工艺流程,可修改工位名称(不增删工位)。\n\n模型:一个工艺流程服务于一个工位(工艺流程页选择工位号);一个工位只能有一个启用的工艺流程;流程启用后自动绑定到该工位,停用后自动解绑。\n\n数据链路:工艺流程(选工位号+维护工序步骤+启用) → 自动绑定工位 → 手动报工/工位终端按该流程的工序步骤采集 → 报工判定 OK/NG。',
'工位数以数据库为准(仅可修改名称,不增删工位)。本页是工位总览:查看每个工位当前绑定了哪个工艺流程,可修改工位名称。\n\n绑定关系由本页单独维护:在下拉中选择「启用」的工艺流程即绑定到该工位;一个工位只能有一个启用的工艺流程(先停用旧流程再绑新流程);流程停用后自动解绑。\n\n数据链路:关联工位页(选启用流程绑定) → 手动报工/工位终端按该流程的工序步骤采集 → 报工判定 合格/不合格。',
fields: [
{ name: '工位号', source: '系统固定(1~12),不可增删。', purpose: '产线物理工位编号', fill: '无需填写' },
{ name: '工位号', source: '系统固定(工位数以数据库为准),不可增删。', purpose: '产线物理工位编号', fill: '无需填写' },
{ name: '工位名称', source: '可编辑。默认如 装配工位1。', purpose: '工位的显示名称', fill: '如 一号装配工位' },
{ name: '绑定工艺流程', source: '自动来自「工艺流程」页:流程选工位号并启用即绑定。', purpose: '该工位执行的工艺流程(决定工序步骤/考核标准/PDF)', fill: '到「工艺流程」页为该工位启用流程;本页只读展示' }
{ name: '绑定工艺流程', source: '自动来自本页:为工位选择「启用」的工艺流程即绑定。', purpose: '该工位执行的工艺流程(决定工序步骤/考核标准/PDF)', fill: '到页为该工位选择启用流程;本页只读展示' }
]
}
export const helpTrace = {
title: '工件追溯',
overview:
'输入工件 SN,查它的完整履历:进线/完工时间、各工位时间线、步骤考核数据(扭矩/角度)、拧紧记录、以及它用了哪些批次/精密件。\n\n数据来源:全部由前端各环节自动写入(扫码报工、拧紧采集、PLC下发、工位完成),本页只读查询。',
'输入工件 SN,查它的完整履历:进线/完工时间、各工位时间线、步骤考核数据(扭矩/角度)、拧紧记录、以及它用了哪些批次/电气件。\n\n数据来源:全部由前端各环节自动写入(扫码报工、拧紧采集、产线设备下发、工位完成),本页只读查询。',
fields: [
{ name: '工件SN', source: '扫码枪/手输。来自工件条码。', purpose: '要追溯的工件唯一序列号', fill: '扫 SN 或手动输入后点查询' }
]
@@ -221,16 +221,16 @@ export const helpEventLog = {
}
export const helpProcessFlow = {
title: '工艺流程(服务于固定工位,含工序步骤)',
title: '工艺流程(作业指导,含工序步骤)',
overview:
'页面分「流程列表」「流程配置」两个页签:列表查看全部流程并做启用/停用/删除;配置页维护流程基本信息与工序步骤(新增与编辑共用,不再弹窗套弹窗)。\n\n工艺流程 = 某个固定工位(1~12)的作业指导:包含 工位号、工艺图纸PDF、工序步骤(含采集方式考核标准)。\n\n概念统一说明:\n· 工位:产线固定 12 个物理工位(工位1~工位12),本流程页选择流程服务于哪个工位。\n· 工艺流程:一个流程服务于一个工位,可有多版本(如 3号工位_2026版)一个工位只能有一个「启用」的流程。\n· 工序步骤:流程内包含多个工序步骤(如:装配完成、拧紧扭矩、测试)。\n\n绑定规则:流程选工位号并「启用」后,自动绑定到该工位;「停用」后自动解绑。手动报工页选工位时,自动带出该工位启用流程的工序步骤。\n\n数据链路:本页维护流程+工序步骤+考核标准 → 自动绑定工位 → 手动报工/工位终端按工序步骤采集 → 报工按考核标准自动判 OK/NG → 工件追溯/绩效报表可见。',
'页面分「流程列表」「流程配置」两个页签:列表查看全部流程并做启用/停用/删除;配置页维护流程基本信息与工序步骤(新增与编辑共用,不再弹窗套弹窗)。\n\n工艺流程 = 一份「菜谱」:只描述某个产品该怎么装配(步骤名、采集方式考核标准),不绑定具体工位。\n\n概念统一说明:\n· 工位:产线上的物理工位(工位数以数据库为准,仅改名称不增删),相当于「灶台」。\n· 工艺流程:一份作业指导,可有多版本(如 总装流程_2026版)其启用状态决定是否参与生产。\n· 工序步骤:流程内包含多个工序步骤(如:装配完成、拧紧扭矩、测试)。\n\n绑定关系在「关联工位」页维护:在该页为某工位选择启用的工艺流程即绑定;一个工位只能有一个启用的流程。手动报工/工位终端按所选工位的绑定流程载入工序步骤。\n\n数据链路:本页维护流程+工序步骤+考核标准 → 关联工位页绑定 → 手动报工/工位终端按工序步骤采集 → 报工按考核标准自动判 合格/不合格 → 工件追溯/绩效报表可见。',
sections: [
{
title: '流程基本信息',
fields: [
{ name: '流程名称', source: '手工填写。人为定义。', purpose: '流程版本名,用于区分同一工位的不同版本', fill: '如 3号工位装配流程 / 3号工位_2026版' },
{ name: '工位号', source: '下拉选择(1~12)。产线固定 12 个工位。', purpose: '该流程服务于哪个工位;一个工位只能有一个启用流程', fill: '如 3;该工位已有启用流程时需先停用再启用新流程' },
{ name: '状态', source: '下拉选择 启用/停用。也可在列表操作列点「启用/停用」快捷切换。', purpose: '启用=自动绑定工位并参与生产;停用=自动解绑工位', fill: '启用后自动绑定工位;停用后自动解绑' },
{ name: '流程名称', source: '手工填写。人为定义。', purpose: '流程版本名,用于区分同一工位的不同版本', fill: '如 总装流程 / 总装流程_2026版' },
{ name: '状态', source: '下拉选择 启用/停用。也可在列表操作列点「启用/停用」快捷切换。', purpose: '启用=该流程可被「关联工位」页绑定工位并参与生产;停用=不可绑定、不参与生产', fill: '启用后可在「关联工位」页绑定工位;停用后不可绑定' },
{ name: '工艺图纸(PDF)', source: '本页上传。文件由 MES 服务器保存。', purpose: '该工位的作业指导图,工位终端打开预览', fill: '选择 PDF 上传,成功后显示文件名可预览' },
{ name: '工序步骤', source: '本页维护(步骤名/采集方式/是否拧紧/考核标准)。', purpose: '手动报工/工位终端报工时按此动态渲染参数输入', fill: '一个流程可含多个工序步骤,按序号顺序执行' }
]
@@ -246,7 +246,7 @@ export const helpProcessFlow = {
},
{
title: '考核标准(每个步骤可设多条)',
overview: '用于报工时自动判定该步骤「合格/不合格」。在哪用:工位终端/手动报工提交该步骤数值时,系统按此标准判 OK/NG,结果进入工件追溯与流程卡。如何收集:数值来自上面的采集方式(拧紧枪自动或手填)。',
overview: '用于报工时自动判定该步骤「合格/不合格」。在哪用:工位终端/手动报工提交该步骤数值时,系统按此标准判 合格/不合格,结果进入工件追溯与流程卡。如何收集:数值来自上面的采集方式(拧紧枪自动或手填)。',
fields: [
{ name: '指标名', source: '人为定义。', purpose: '标准叫什么(如 扭矩/角度/尺寸)', fill: '如 扭矩' },
{ name: '单位', source: '人为填写。', purpose: '数值单位', fill: '如 N·m、°、mm' },
@@ -263,10 +263,10 @@ export const helpPerformance = {
'按 操作人 × 日期 × 工位 汇总每个工人的完成/合格/NG 数量,用于工作量与绩效统计。\n\n页面提供「按人 / 按工位 / 明细」三个页签:按人看每人汇总,按工位看每工位汇总,明细看逐条记录(含工序名);三个视图各自独立分页,均受上方筛选条件约束。\n\n筛选与导出:支持 操作人 / 工位 / 日期范围 组合筛选(默认近 90 天);顶部汇总卡随查询刷新;「导出 xlsx」一次导出三个 sheet(按人/按工位/明细),导出遵循统一时间硬规则(时间范围为空默认近 3 个月、只传一端报错、跨度超 1 年报错)。\n\n数据来源:全部由工位终端/手动报工的「工位完成上报」自动写入报工实绩(workpiece_process),本页只读统计,不手工录入。',
fields: [
{ name: '操作人', source: '筛选条件。来自报工实绩的 operator 字段(工位终端登录人)。', purpose: '只看某个工人的工作量', fill: '输入姓名/账号,可空=全部' },
{ name: '工位', source: '下拉选择(工位1~工位12)。', purpose: '只看某个工位的报工情况', fill: '可空=全部工位' },
{ name: '工位', source: '下拉选择(工位数以数据库为准)。', purpose: '只看某个工位的报工情况', fill: '可空=全部工位' },
{ name: '日期范围', source: '筛选条件。来自报工实绩的产生时间,默认近 90 天。', purpose: '按时间段统计', fill: '选择起止日期;导出时同一范围' },
{ name: '完成数', source: '自动汇总。该 操作人×日期×工位 的报工次数。', purpose: '工作量核心指标', fill: '只读' },
{ name: '合格数/NG数', source: '自动汇总。按报工实绩 result 字段(OK/NG)分类计数。', purpose: '质量指标,OK+NG=完成数', fill: '只读' },
{ name: '合格数/不合格数', source: '自动汇总。按报工实绩 result 字段(合格/不合格)分类计数。', purpose: '质量指标,OK+NG=完成数', fill: '只读' },
{ name: '合格率', source: '自动计算 = 合格数/完成数。', purpose: '质量表现', fill: '只读' }
]
}
@@ -297,7 +297,7 @@ export const helpInspect = {
{
title: '工位点检',
fields: [
{ name: '工位号', source: '手动选择(1~12)。', purpose: '点检哪个工位', fill: '选 1~12' },
{ name: '工位号', source: '手动选择(工位数以数据库为准)。', purpose: '点检哪个工位', fill: '选 1~12' },
{ name: '点检项', source: '手动多选(设备运行正常/安全防护到位/工具齐全/工位清洁)。', purpose: '点检的项目清单', fill: '勾选已完成的项目' },
{ name: '拍照', source: '浏览器相册/摄像头上传。', purpose: '留证', fill: '拍照上传' }
]
@@ -306,7 +306,7 @@ export const helpInspect = {
title: '过程巡检',
fields: [
{ name: '工单号', source: '手动选择/搜索。来自【工单管理】已建工单。', purpose: '对哪个工单巡检,可查看其当前工位进度', fill: '搜索选择工单号' },
{ name: '合格/不合格', source: '手动选择(OK/NG)。', purpose: '本次巡检结论', fill: '选择合格或不合格' },
{ name: '合格/不合格', source: '手动选择(合格/不合格)。', purpose: '本次巡检结论', fill: '选择合格或不合格' },
{ name: '签字', source: '手写/输入签字内容。', purpose: '检验人签字留证', fill: '输入签字内容' }
]
},
@@ -321,7 +321,7 @@ export const helpInspect = {
{
title: '异常上报',
fields: [
{ name: '工位号', source: '手动选择(1~12)。', purpose: '异常发生在哪个工位', fill: '选 1~12' },
{ name: '工位号', source: '手动选择(工位数以数据库为准)。', purpose: '异常发生在哪个工位', fill: '选 1~12' },
{ name: '异常类型', source: '手动多选(设备故障/物料异常/工艺偏差/安全隐患/其他)。', purpose: '异常分类', fill: '勾选异常类型' },
{ name: '拍照', source: '浏览器相册/摄像头上传。', purpose: '留证异常现场', fill: '拍照上传' },
{ name: '文字描述', source: '手动填写。', purpose: '异常详细说明', fill: '描述异常情况' }
@@ -335,4 +335,19 @@ export const helpInspect = {
]
}
]
}
}
export const helpRoute = {
title: '工艺路线(有序并行工位段)',
overview: '工艺路线 = 一个产品从上线到完工所经过的「有序并行工位段」序列,是工单自动生成工位组合的源头。路线由若干「段」组成,段按序号顺序执行;每段 = 一个工艺流程(可空) + 一组并行工位(谁空停谁);段类型 LINE=在线(工位须存在于工位主数据)OFFLINE=线下位(如 0/13 不连 PLC、不拧紧)。建工单时选定一条「启用」的工艺路线,系统按路线展开所有在线工位的并集(去重、按工位号排序)自动生成工位组合;不选路线则手动勾选工位组合。路线可绑定产品型号,绑定后建该型号工单时优先带出对应路线。',
fields: [
{ name: '路线名称', source: '手工填写。', purpose: '工艺路线标识', fill: '如 标准三相表产线' },
{ name: '产品型号', source: '下拉选择,可选。来自「产品型号」页。', purpose: '按型号带出路线', fill: '可选;绑定后更易复用' },
{ name: '状态', source: '启用/停用。', purpose: '仅「启用」的路线可在建工单时被选择', fill: '默认启用' },
{ name: '路线段-序号', source: '手工填 >=0,可上移/下移排序。', purpose: '段执行顺序', fill: '0 起,越小越靠前' },
{ name: '路线段-段类型', source: 'LINE 在线 / OFFLINE 线下。', purpose: 'LINE 段工位须已在「关联工位」维护;OFFLINE 用于 0/13 等不连 PLC 的线下位', fill: '在线装配段选 LINE;上/下料等线下位选 OFFLINE' },
{ name: '路线段-工艺流程', source: '下拉选择,可选。来自「工艺流程」页。', purpose: '本段执行的作业步骤来源', fill: '可空(仅占位段)' },
{ name: '路线段-并行工位', source: '多选。工位数以数据库为准。', purpose: '本段并行的工位集合', fill: '在线段勾选真实工位;线下段可选 0/13' },
{ name: '路线段-备注', source: '手工填写,可空。', purpose: '补充说明', fill: '可不填' }
]
}