diff --git a/bj_power_mes/frontend/src/components/PageHelp.vue b/bj_power_mes/frontend/src/components/PageHelp.vue index 675678d..6ac86ef 100644 --- a/bj_power_mes/frontend/src/components/PageHelp.vue +++ b/bj_power_mes/frontend/src/components/PageHelp.vue @@ -1,10 +1,6 @@ diff --git a/bj_power_mes/frontend/src/help.js b/bj_power_mes/frontend/src/help.js index 9e4cd03..d9fbdcc 100644 --- a/bj_power_mes/frontend/src/help.js +++ b/bj_power_mes/frontend/src/help.js @@ -5,7 +5,7 @@ export const helpProductType = { title: '产品类型(档案维护)', overview: - '产品类型是"生产什么产品"的分类档案,是整条产线的源头基础数据。\n\n生产主数据链条:产品类型 → 建工单(选产品类型) → 配物料清单(BOM) → 日排产 → 备料 → PLC/AGV 配送 → 工位装配。\n必须先在这里维护好产品类型,后面所有环节(工单/BOM/备料/拧紧/追溯)才有可选对象。', + '产品类型 = 企业要生产哪些产品的分类档案,是整条产线的源头基础数据。\n\n主数据链条:产品类型 → 工单(选产品类型) → 物料清单(给该产品编码配料) → 日排产 → 备料单 → 库房出库 → 产线生产。\n\n关系说明(几对几):\n· 产品类型 ↔ 工单:1 对 N。一个产品类型可以建多个工单(同一型号今天做一批、明天做一批,工单号不同、产品编码相同)。\n· 产品类型 ↔ 物料清单:按产品编码 1 对 1。同型号产品共用一份 BOM。\n· 产品类型 ↔ 备料单:间接。备料单由「日排产 × 该产品 BOM」算出,与产品类型无直接约束。\n· 强约束:工单/物料清单都挂在产品编码下,产品类型编码变了,下游关联会断,建议建好后不要改。\n· 与 WMS 的关系:两套系统解耦。本页(MES)维护产品与 BOM;WMS(库房)维护物料档案与库存,靠「物料编码」对齐;成品编码由人员手动录入 WMS 实现两系统对齐。', fields: [ { name: '名称', source: '手工填写。用户自定义,无上游来源。', purpose: '产品类型的中文名,用于识别与下拉展示', fill: '如:智能电表、断路器、配电柜' }, { @@ -21,32 +21,24 @@ export const helpProductType = { } export const helpWorkOrder = { - title: '工单管理(新建 / 编辑工单)', + title: '工单管理(新建 / 编辑 / 删除工单)', overview: - '工单 = 一个"合同/生产批次"的唯一载体,是生产执行和仓库出库挂靠的核心对象。\n\n全流程:先有产品类型 → 建工单(选产品类型、定数量、定工序组合) → 进"物料清单"给该产品配料 → 行内"日排产"排哪天产多少 → 仓库按排产备料出库 → 产线装配/拧紧/报工 → 完工。\n工单号会贯穿 备料单、拧紧查询、手动报工、工件追溯、操作日志 全链路。', + '工单 = 一个"合同/生产批次"的唯一载体,是生产执行和仓库出库挂靠的核心对象。\n\n全流程:先有产品类型 → 建工单(选产品类型、定数量、勾选工位组合) → 进"物料清单"给该产品配料 → 到"日排产"排哪天产多少 → 仓库按排产备料出库 → 产线装配/拧紧/报工 → 完工。\n工单号会贯穿 备料单、拧紧查询、手动报工、工件追溯、操作日志 全链路。\n\n查询:支持按 工单号 / 产品编码 / 产品名称(模糊) / 状态 组合筛选。\n删除:仅「已创建 / 待排产 / 已发布」且无排产、备料、生产数据的工单可删除(操作列「删除」),生产中或已完成的工单不可删除。', fields: [ - { name: '工单号', source: '系统自动生成(WO+时间戳),可手工改。新建时自动带出。', purpose: '唯一标识一个工单,备料/出库/报工/追溯都挂在此号下', fill: '打开新建对话框时已自动生成,一般不用改;如改动须保证唯一' }, - { name: '产品类型', source: '下拉选择。数据来自"产品类型"页面已启用的记录。', purpose: '说明这批生产的是什么产品,并决定物料清单内容', fill: '先到"产品类型"页面建好记录,再到这边下拉选择;没有可选项=还没建产品类型' }, + { name: '工单号', source: '系统自动生成(WO+时间戳),可手工改。新建时自动带出。', purpose: '唯一标识一个工单,备料/出库/报工/追溯都挂在此号下', fill: '一般不用改;如改动须保证唯一' }, + { name: '产品类型', source: '下拉选择。数据来自"产品类型"页面已启用的记录。', purpose: '说明这批生产的是什么产品,并决定物料清单内容', fill: '先到"产品类型"页面建好记录再选择' }, { name: '产品编码', source: '手工填写。通常与所选产品类型的编码一致。', purpose: '产品唯一编码,用于展示与追溯', fill: '如 METER-01,与产品类型编码对齐' }, { name: '产品名称', source: '手工填写。通常与产品类型名称一致。', purpose: '产品中文名,用于展示', fill: '如 智能电表' }, { name: '数量', source: '手工填写整数。', purpose: '本工单生产总数量(合同台数),决定需求量与排产上限', fill: '整数 ≥1,如 100' }, - { name: '工序组合', source: '手工填写数字序列。', purpose: '本工单要在产线执行的工序集合,PLC 按此组合下发到各工位', fill: '组合写入PLC:135=只做第1/3/5序;全工序=123456789101112' }, - { name: '状态', source: '手动选择(新建时)。后续由系统流程自动推进。', purpose: '工单生命周期:创建→发布→生产→完成', fill: '新建时选"已创建",后续按流程推进无需手改' } + { name: '工位组合', source: '勾选 12 个工位(工位1~工位12)。', purpose: '本工单要经过的工位集合,PLC 按此组合下发控制产线', fill: '勾选要经过的工位即可,系统自动按 1→12 顺序执行(传送带不回走);半成品再上线可只勾漏做的工位' }, + { name: '状态', source: '新建时选"已创建",后续由流程推进。', purpose: '工单生命周期:创建→发布→生产→完成', fill: '新建时选"已创建";也可在列表操作列点「状态」快捷流转(发布/开工/完工)' } ], sections: [ { - title: '行内"日排产"弹窗', - overview: '对当前这行工单,排"哪天生产多少台"。排产结果会通知仓库按此备料/配送。', + title: '行内"工位组合"维护', + overview: '对当前工单快速维护要经过的工位组合。\n可自由勾选、补工位(半成品再上线):如本应走第3/5工位却做成半成品,可在此只勾第2工位重上线完成闭环。', fields: [ - { name: '日期', source: '手动选择日期。', purpose: '计划生产日期,仓库按它哪天备料', fill: '选一个日期,可对同一工单排未来多天' }, - { name: '计划数量', source: '手动填写整数。', purpose: '当天计划产量,作为仓库备料/AGV配送的前瞻依据', fill: '≤ 工单总数量;如今天产 20 台' } - ] - }, - { - title: '行内"工序组合"弹窗', - overview: '对当前这行工单快速维护要执行的工序组合,PLC 按此组合下发到工位。\n可自由拆组合、补工序(半成品再上线):如本应做第3/5序却做成了半成品,可在此把该件的组合改成只做漏掉的第2序,重上线完成闭环。', - fields: [ - { name: '工序组合', source: '人工自由维护。', purpose: '本工单在产线执行的工序集合,PLC 组合下发', fill: '只做第1/3/5序填 135;全序填 123456789101112;半成品补做第2序填 2' } + { name: '工位组合', source: '勾选 12 个工位。', purpose: '本工单经过的工位集合,PLC 组合下发', fill: '勾选即可,按工位号顺序执行;全选=全部工位' } ] } ] @@ -68,14 +60,14 @@ export const helpDailyPlan = { export const helpBom = { title: '物料清单(产品 BOM)', overview: - '物料清单 = 生产 1 台该产品需要哪些物料、各用多少。\n按产品编码维护:同型号产品今天做一批、明天做一批,工单号不同、产品编码相同,共用这一份 BOM。\n仓库(库房)按工单取其产品的 BOM 计算备料/出库需求量,并强约束累计出库 ≤ 需求总量。\n\n职责分工:本页(MES)只维护「产品由哪几种料、各用几个」;每种物料叫什么、规格、是批次件还是 SN 件、库存有多少,统一在 WMS(库房)的「物料档案」里维护,两套系统互相解耦。\n\n数据链路:先建「产品类型」→ 到本页选产品编码,为它逐条添加物料(编码要与 WMS 物料档案一致) → 之后仓库才能为对应工单领料。', + '物料清单 = 生产 1 台该产品需要哪些物料、各用多少。\n按产品编码维护:同型号产品今天做一批、明天做一批,工单号不同、产品编码相同,共用这一份 BOM。\n仓库(库房)按工单取其产品的 BOM 计算备料/出库需求量,并强约束累计出库 ≤ 需求总量。\n\n与 WMS 的关系:本页(MES)只维护「产品由哪几种料、各用几个」;每种物料叫什么、规格、是精密件(SN)还是结构件(批次)、库存有多少,统一在 WMS(库房)的「物料档案」里维护,两套系统互相解耦、通过物料编码对齐。\n\n编码对应规则:本页的「物料编码」必须与 WMS 物料档案里的「编码」完全一致;「管理方式」也要对应(精密件=SN 逐件,结构件=批次)。编码对不上,WMS 将无法为对应工单备料/出库。\n\n数据链路:先建「产品类型」→ 到本页选产品编码,为它逐条添加物料 → 之后仓库才能为对应工单领料。', fields: [ - { name: '产品编码', source: '下拉/输入选择。来自「产品类型」管理里建的编码;同一型号可对应多个工单。', purpose: '要为哪个产品配置物料清单', fill: '选择产品编码后加载该产品已有清单' }, - { name: '物料编码', source: '手工填写。必须与 WMS(库房) 物料档案的编码一致。', purpose: '该物料在库房的全库唯一编码,两条系统靠它关联', fill: '如 螺丝=SCREW-M3、主控芯片=IC-001;编码对不上 WMS 将无法备料' }, + { name: '产品编码', source: '下拉选择。来自「产品类型」里建的编码。', purpose: '要为哪个产品配置物料清单', fill: '在查询区或「添加物料」弹窗里选择产品编码' }, + { name: '物料编码', source: '手工填写。必须与 WMS(库房) 物料档案的编码一致。', purpose: '该物料在库房的全库唯一编码,两系统靠它关联', fill: '如 螺丝=GJ-LUOSI-M16;编码对不上 WMS 将无法备料' }, { name: '物料名称', source: '手工填写。', purpose: '物料中文名,便于识别', fill: '如 十字螺丝、主控芯片' }, - { name: '规格', source: '手工填写。', purpose: '物料规格型号', fill: '如 M3×8 / SMT-48脚' }, + { 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% 填 2;0=不计算损耗' }, { name: '需求量', source: '自动计算 = 数量×单台用量×(1+损耗率),可覆盖。', purpose: '该物料总需求,出库不能超它', fill: '一般自动算,不必改' } @@ -83,32 +75,43 @@ export const helpBom = { } export const helpMaterial = { - title: '备料单(查询)', + title: '备料单(按日排产自动算料)', overview: - '备料单按"日排产"自动算出某天需要的全部物料,仓库据此备料、由 AGV 配送到各工位(DOCK)。\n本页是只读查询,不修改数据。\n\n数据链路:日排产(工单内) → 本页按日期取那天所有工单的物料汇总 → 仓库出库 → AGV 配送。', - fields: [ - { name: '日期', source: '手动选择。筛选条件。', purpose: '查看哪一天的备料需求', fill: '选择某排产日期' }, - { name: '工单号', source: '手动输入。筛选条件。', purpose: '只查看指定工单的备料', fill: '可空,空=看全部工单' }, - { name: '状态', source: '下拉。数据来自备料执行状态。', purpose: '按备料进度筛选', fill: '可空' } + '备料单 = 仓库备料的依据:某天要生产的所有工单,各需要哪些物料、各要多少。\n\n操作方式:① 先到「日排产」排好某天的计划数量;② 回到本页选该「日期」;③ 点「按日排产生成备料」,系统按各产品 BOM 自动计算(计划数量 × 单台用量 × (1+损耗率))并生成备料单明细;④ 仓库据此备料出库,由 AGV 配送到各工位。\n\n数据链路:日排产 → 本页按日期自动算料生成备料单 → 仓库出库 → AGV 配送。', + sections: [ + { + title: '生成备料', + overview: '按所选日期,取当天所有排产工单,依据各自产品的 BOM 自动汇总所需物料。', + fields: [ + { name: '日期', source: '手动选择。', purpose: '按哪个排产日期生成备料', fill: '先选择排产日期,再点「按日排产生成备料」' } + ] + }, + { + title: '查询字段', + fields: [ + { name: '工单号', source: '手动输入。筛选条件。', purpose: '只查看指定工单的备料', fill: '可空,空=看全部工单' }, + { name: '状态', source: '下拉。待备料/已确认。', purpose: '按备料进度筛选', fill: '可空' } + ] + } ] } export const helpPlc = { - title: 'PLC 工序下发', + title: '工位组合下发(业务说明)', overview: - '把工序组合写入西门子 S7-1214 PLC 寄存器,产线传送带据此只执行对应工序。\n系统遵循"未收到完成信号不下发下一条",确保产线不串序。\n\n数据链路:工单(含工序组合) → 下发到 S7-1214 → PLC 驱动工位/传送带 → 收到完成信号再下发下一条。', + '这个菜单做什么用:把某个工单/工件的「工位组合」写入西门子 S7-1214 PLC,产线传送带据此只停靠勾选的工位,其余工位不加工。\n\n什么时候用:一个工件进线/上线时,需要告诉 PLC「这件货要走哪几个工位」,就在这里下发。\n\n为什么单独一个菜单:产线偶尔需要人工干预——比如本该走 3 号工位却做成了半成品,人工在此改成只补第 2 工位重上线,完成闭环。一切交给人工自行判断。\n\n核心约束:系统遵循「上一条未收到完成信号,不下发下一条」,确保产线不串序。\n\n数据链路:工单(含工位组合) → 本页下发到 S7-1214 → PLC 驱动传送带/工位 → 收到完成信号再下发下一条。', fields: [ - { name: '工单号', source: '手动输入/选择。来自工单。', purpose: '当前生产的工单,追溯依据', fill: '选择或输入工单号' }, + { name: '工单号', source: '下拉选择/输入。来自工单。', purpose: '当前生产的工单,追溯依据', fill: '选择或输入工单号' }, { name: '工件SN', source: '扫码枪扫描。来自工件条码。', purpose: '当前流经的工件唯一序列号', fill: '扫码枪扫入;可空(按工单整体下发)' }, - { name: '工位', source: '手动填写。', purpose: '下发到哪个工位(1~12)', fill: '输入 1~12 的整数' }, - { name: '工序组合', source: '手动填写。通常与工单的工序组合一致。', purpose: '该工位要执行的工序,PLC 组合执行', fill: '如 135(做第1/3/5序);全序=123456789101112' } + { name: '当前工位', source: '手动填写。', purpose: '当前要下发的工位(1~12)', fill: '输入 1~12 的整数' }, + { name: '工位组合', source: '勾选 12 个工位。通常与工单的工位组合一致。', purpose: '该工件要经过的工位,PLC 控制停靠', fill: '勾选即可,按工位号顺序执行' } ] } export const helpTorque = { title: '拧紧数据(查询/录入)', overview: - '接收丹尼科尔拧紧工具的采集结果(扭矩/角度/时间/结果/操作人),用于质量追溯。\n数据在工位终端点"工序完成上报"后由拧紧枪数据同步到 MES。本页可查询,也可手工补录。', + '接收丹尼科尔拧紧工具的采集结果(扭矩/角度/时间/结果/操作人),用于质量追溯。\n数据在工位终端点"工位完成上报"后由拧紧枪数据同步到 MES。本页可查询,也可手工补录。', fields: [ { name: 'SN', source: '扫码枪/手工。来自工件条码。', purpose: '被拧紧的工件唯一序列号', fill: '扫码枪扫描' }, { name: '工单号', source: '自动带出/选择。来自工单。', purpose: '该工件所属工单', fill: '选择工单号' }, @@ -120,34 +123,31 @@ export const helpTorque = { } export const helpScan = { - title: '手动报工(工位工序完成上报)', + title: '手动报工(工位工序步骤完成上报)', overview: - '每个工位装配/检测相对工序完成后,在【手动报工】页选择工位、扫入工件SN、选工序号,系统按该工序已维护的【工艺参数】模板动态展开需要采集的参数,人工录入并提交。\n提交后写工序实绩 + 步骤数据,系统按步骤考核标准自动判定 OK/NG。\n\n数据链路:工艺参数(维护每道工序要收集哪些参数、判定标准) → 手动报工页扫SN逐参数录入 → 判 OK/NG → 工件追溯可见。', + '每个工位完成本工位的工序步骤后,在【手动报工】页选择工位、扫入工件SN,系统按该工位「启用」的工艺流程自动展开其工序步骤(扭矩/角度/尺寸等采集项),人工录入并提交。\n提交后写报工实绩 + 步骤数据,系统按步骤考核标准自动判定 OK/NG。\n\n数据链路:工艺流程(为工位维护工序步骤与考核标准) → 手动报工页选工位扫SN → 自动载入该工位工序步骤 → 逐参数录入 → 判 OK/NG → 工件追溯可见。', fields: [ - { name: '工位', source: '下拉选择(1~12)。', purpose: '哪个工位在报工', fill: '选择工位 1~12' }, - { name: '工件SN', source: '扫码枪扫描。来自工件条码。', purpose: '工件的唯一序列号,报工对象', fill: '扫码枪扫入,触发载入参数模板' }, - { name: '工序号', source: '手动选择(1~12)。', purpose: '本次完成的工序,展开该工序的参数模板', fill: '选择 1~12' }, - { name: '各步骤采集值', source: '手工填写 或 拧紧枪自动带出(视采集方式)。字段由【工艺参数】维护页人为定义,可增加/删除/改采集方式与判定标准。', purpose: '收集该工序的扭矩/角度/尺寸等参数,按标准判定合格与否', fill: '逐条填采集值,未维护标准的步骤仅记录' } + { name: '工位', source: '下拉选择(1~12)。', purpose: '哪个工位在报工,自动带出该工位的工序步骤', fill: '选择工位 1~12' }, + { name: '工件SN', source: '扫码枪扫描。来自工件条码。', purpose: '工件的唯一序列号,报工对象', fill: '扫码枪扫入,触发载入工序步骤' }, + { name: '各步骤采集值', source: '手工填写 或 拧紧枪自动带出(视采集方式)。字段由【工艺流程】的工序步骤人为定义。', purpose: '收集该工位的扭矩/角度/尺寸等参数,按标准判定合格与否', fill: '逐条填采集值,未维护标准的步骤仅记录' } ] } -export const helpProcessStep = { - title: '工艺参数(工序步骤与考核标准维护)', +export const helpStation = { + title: '关联工位(工位总览)', overview: - '人为维护【每道工序要收集哪些参数】及【合格判定标准】,是手动报工的基础——报工页按这里的模板动态渲染参数输入框。\n· 一道工序可有多个步骤(参数);\n· 每步可选择采集方式:拧紧枪自动 / 手填 / 仅记录;\n· 每步可设考核标准(如扭矩在 [35,45] N·m 为合格),报工时系统自动判 OK/NG。', + '产线固定 12 个工位,本页是工位总览:查看每个工位绑定了哪个工艺流程,可修改工位名称(不增删工位)。\n\n模型:一个工艺流程服务于一个工位(工艺流程页选择工位号);一个工位只能有一个「启用」的工艺流程;流程启用后自动绑定到该工位,停用后自动解绑。\n\n数据链路:工艺流程(选工位号+维护工序步骤+启用) → 自动绑定工位 → 手动报工/工位终端按该流程的工序步骤采集 → 报工判定 OK/NG。', fields: [ - { name: '工序号', source: '手动选择(1~12)。', purpose: '给哪道工序配置步骤', fill: '选择工序号,加载该工序现有步骤' }, - { name: '步骤名称', source: '人为定义。', purpose: '该参数叫什么(如 装配完成/拧紧扭矩)', fill: '输入中文名称' }, - { name: '采集方式', source: '人为选择。', purpose: '该参数怎么来:拧紧枪自动/手填/仅记录', fill: 'AUTO=拧紧枪自动;MANUAL=手填;NONE=仅记录' }, - { name: '是否为拧紧', source: '开关。', purpose: '标识是否属于拧紧采集', fill: '拧紧扭矩/角度步骤打开' }, - { name: '判定标准', source: '人为定义。可为一条或多条。', purpose: '报工时自动判定 OK/NG 的依据', fill: '如 扭矩 RANGE [35,45];角度 GE 90 等' } + { name: '工位号', source: '系统固定(1~12),不可增删。', purpose: '产线物理工位编号', fill: '无需填写' }, + { name: '工位名称', source: '可编辑。默认如 装配工位1。', purpose: '工位的显示名称', fill: '如 一号装配工位' }, + { name: '绑定工艺流程', source: '自动来自「工艺流程」页:流程选工位号并启用即绑定。', purpose: '该工位执行的工艺流程(决定工序步骤/考核标准/PDF)', fill: '到「工艺流程」页为该工位启用流程;本页只读展示' } ] } export const helpTrace = { title: '工件追溯', overview: - '输入工件 SN,查它的完整履历:进线/完工时间、各工序时间线、步骤考核数据(扭矩/角度)、拧紧记录、以及它用了哪些批次/精密件。\n\n数据来源:全部由前端各环节自动写入(扫码报工、拧紧采集、PLC下发、工序完成),本页只读查询。', + '输入工件 SN,查它的完整履历:进线/完工时间、各工位时间线、步骤考核数据(扭矩/角度)、拧紧记录、以及它用了哪些批次/精密件。\n\n数据来源:全部由前端各环节自动写入(扫码报工、拧紧采集、PLC下发、工位完成),本页只读查询。', fields: [ { name: '工件SN', source: '扫码枪/手输。来自工件条码。', purpose: '要追溯的工件唯一序列号', fill: '扫 SN 或手动输入后点查询' } ] @@ -156,7 +156,7 @@ export const helpTrace = { export const helpRbac = { title: '角色权限管理(用户/角色/权限)', overview: - '管控谁能登录、能看哪些菜单。建议只给操作员分配其工序所需菜单权限。\n登录 token 有效期短(1800秒),超时自动失效需重新登录。', + '管控谁能登录、能看哪些菜单。建议只给操作员分配其工位所需菜单权限。\n登录 token 有效期短(1800秒),超时自动失效需重新登录。', sections: [ { title: '用户(新建/编辑)', @@ -203,28 +203,48 @@ export const helpEventLog = { } export const helpProcessFlow = { - title: '工艺流程(流程图 ↔ 工序编号 ↔ 工位)', + title: '工艺流程(服务于固定工位,含工序步骤)', overview: - '维护「流程图 → 工序编号(1~12) → 工位」三层关系,是工位终端和巡检的基础。\n\n模型:一个流程图只包含一个工序编号(如"工序3"),一个工序编号可有多个流程图版本(如 工序3_2026版/工序3_2027版),一个工位同时只绑定一个流程图。工位绑定流程图后,工位终端报工时 processCode 从流程取。\n\n数据链路:本页维护流程图+步骤模板+考核标准 → 工位绑定流程图 → 工位终端扫码采集按步骤模板渲染 → 报工写步骤数据并按标准判 OK/NG → 工件追溯/绩效报表可见。\n步骤的采集方式与考核标准与【工艺参数】页共用同一套模板数据。', + '工艺流程 = 某个固定工位(1~12)的作业指导:包含 工位号、工艺图纸PDF、工序步骤(含采集方式与考核标准)。\n\n概念统一说明:\n· 工位:产线固定 12 个物理工位(工位1~工位12),本流程页选择流程服务于哪个工位。\n· 工艺流程:一个流程服务于一个工位,可有多版本(如 3号工位_2026版);一个工位只能有一个「启用」的流程。\n· 工序步骤:流程内包含多个工序步骤(如:装配完成、拧紧扭矩、测试)。\n\n绑定规则:流程选工位号并「启用」后,自动绑定到该工位;「停用」后自动解绑。手动报工页选工位时,自动带出该工位启用流程的工序步骤。\n\n数据链路:本页维护流程+工序步骤+考核标准 → 自动绑定工位 → 手动报工/工位终端按工序步骤采集 → 报工按考核标准自动判 OK/NG → 工件追溯/绩效报表可见。', fields: [ - { name: '流程名称', source: '手工填写。人为定义。', purpose: '流程图版本名,用于区分同工序的不同版本', fill: '如 工序3_2026版' }, - { name: '工序编号', source: '下拉选择(1~12)。与产线 12 道工序一一对应。', purpose: '该流程图绑定哪道工序;一个流程只能绑一道', fill: '如 3' }, - { name: '工艺图纸(PDF)', source: '本页上传。上传的文件由 MES 服务器保存,生成文件名。', purpose: '该工序的作业指导图,工位终端打开并预览', fill: '选择 PDF 文件上传,上传成功后显示文件名,可预览' }, - { name: '步骤模板', source: '本页维护(步骤名/采集方式/是否拧紧)。采集方式三选一:AUTO=拧紧枪自动采集、MANUAL=手动录入、NONE=仅记录。', purpose: '工位终端报工时按此模板动态渲染参数输入;AUTO 步骤的值由拧紧枪采集结果带出', fill: '如 拧紧扭矩(MANUAL)、装配完成(NONE)' }, - { name: '考核标准', source: '本页为每个步骤维护(名称/单位/判定逻辑/目标值或上下限)。', purpose: '报工时系统按此标准自动判定该步骤 OK/NG,判定结果进入追溯与流程卡', fill: '如 扭矩 RANGE [35,45];角度 GE 90' }, - { name: '工位号', source: '【工位管理】tab 维护。下拉选择本页流程,即完成工位绑定。', purpose: '工位(1~12)绑定哪个流程图;一个工位同时只绑一个', fill: '选择工位号 + 该工位要用的流程' } + { name: '流程名称', source: '手工填写。人为定义。', purpose: '流程版本名,用于区分同一工位的不同版本', fill: '如 3号工位装配流程 / 3号工位_2026版' }, + { name: '工位号', source: '下拉选择(1~12)。产线固定 12 个工位。', purpose: '该流程服务于哪个工位;一个工位只能有一个启用流程', fill: '如 3;该工位已有启用流程时需先停用再启用新流程' }, + { name: '状态', source: '下拉选择 启用/停用。也可在列表操作列点「启用/停用」快捷切换。', purpose: '启用=自动绑定该工位并参与生产;停用=自动解绑工位', fill: '启用后自动绑定工位;停用后自动解绑' }, + { name: '工艺图纸(PDF)', source: '本页上传。文件由 MES 服务器保存。', purpose: '该工位的作业指导图,工位终端打开预览', fill: '选择 PDF 上传,成功后显示文件名可预览' }, + { name: '工序步骤', source: '本页维护(步骤名/采集方式/是否拧紧/考核标准)。', purpose: '手动报工/工位终端报工时按此动态渲染参数输入', fill: '一个流程可含多个工序步骤,按序号顺序执行' } + ], + sections: [ + { + title: '采集方式(每个工序步骤三选一)', + overview: '决定该步骤的数值从哪里来。', + fields: [ + { name: '拧紧枪自动', source: '拧紧枪设备自动回传。', purpose: '扭矩/角度等由拧紧枪采集,工人无需手输', fill: '选「拧紧枪自动」,并在「是否拧紧」打开开关' }, + { name: '手填', source: '工人在工位终端/报工页手动输入数值。', purpose: '无法自动采集的参数(如尺寸、电压)由人工录入', fill: '选「手填」' }, + { name: '仅记录', source: '无数据,只做操作步骤确认(如"装配完成")。', purpose: '记录该步骤已执行,不采集数值、不判定', fill: '选「仅记录」' } + ] + }, + { + title: '考核标准(每个步骤可设多条)', + overview: '用于报工时自动判定该步骤「合格/不合格」。在哪用:工位终端/手动报工提交该步骤数值时,系统按此标准判 OK/NG,结果进入工件追溯与流程卡。如何收集:数值来自上面的采集方式(拧紧枪自动或手填)。', + fields: [ + { name: '指标名', source: '人为定义。', purpose: '标准叫什么(如 扭矩/角度/尺寸)', fill: '如 扭矩' }, + { name: '单位', source: '人为填写。', purpose: '数值单位', fill: '如 N·m、°、mm' }, + { name: '逻辑', source: '下拉选择 ≥/≤/>/ + {{ m.name }} @@ -17,10 +18,17 @@ {{ $route.meta.title || '' }}
-
- {{ userName }} - 修改密码 - 退出 +
+ 帮助 + + {{ userName }} + +
@@ -33,6 +41,10 @@ \ No newline at end of file diff --git a/bj_power_mes/frontend/src/pages/Bom.vue b/bj_power_mes/frontend/src/pages/Bom.vue index d306112..bd7ba60 100644 --- a/bj_power_mes/frontend/src/pages/Bom.vue +++ b/bj_power_mes/frontend/src/pages/Bom.vue @@ -2,7 +2,7 @@ - + @@ -13,12 +13,13 @@ + - - + + @@ -31,15 +32,22 @@ + - + + + + + + - 精密件(SN) - 结构件(批次) + 精密件(SN) + 结构件(批次) @@ -66,19 +74,22 @@ import { helpBom } from '../help' const productCode = ref('') const products = ref([]) const list = ref([]) -const add = reactive({ show: false, materialCode: '', materialName: '', spec: '', unit: '', manageMode: '2', unitQty: 1, lossRate: 0, requiredQty: 1 }) +const add = reactive({ show: false, productCode: '', materialCode: '', materialName: '', spec: '', unit: '', manageMode: '2', unitQty: 1, lossRate: 0, requiredQty: 1 }) async function load() { - if (!productCode.value) return ElMessage.warning('请选择/输入产品编码') + if (!productCode.value) return ElMessage.warning('请选择产品编码') list.value = (await request.get('/bom', { params: { productCode: productCode.value } })) || [] } function openAdd() { - Object.assign(add, { show: true, materialCode: '', materialName: '', spec: '', unit: '', manageMode: '2', unitQty: 1, lossRate: 0, requiredQty: 1 }) + Object.assign(add, { show: true, productCode: productCode.value || '', materialCode: '', materialName: '', spec: '', unit: '', manageMode: '2', unitQty: 1, lossRate: 0, requiredQty: 1 }) } async function save() { - await request.put('/bom', { productCode: productCode.value, items: [add] }) + if (!add.productCode) return ElMessage.warning('请选择产品编码') + if (!add.materialCode) return ElMessage.warning('请填写物料编码') + await request.put('/bom', { productCode: add.productCode, items: [add] }) ElMessage.success('保存成功') add.show = false + productCode.value = add.productCode load() } async function remove(row) { @@ -92,4 +103,4 @@ async function remove(row) { onMounted(async () => { products.value = (await request.get('/product-types')) || [] }) - \ No newline at end of file + diff --git a/bj_power_mes/frontend/src/pages/Inspect.vue b/bj_power_mes/frontend/src/pages/Inspect.vue index 334d123..82277b9 100644 --- a/bj_power_mes/frontend/src/pages/Inspect.vue +++ b/bj_power_mes/frontend/src/pages/Inspect.vue @@ -63,7 +63,7 @@ - 已选工单:{{ process.order.workOrderNo }} + 已选工单:{{ process.order.workOrderNo }} @@ -90,7 +90,7 @@ - 确认该工单全部工序已完成 + 确认该工单全部工位已完成 @@ -293,7 +293,7 @@ async function submitProcess() { async function submitDone() { if (!done.orderNo) return ElMessage.warning('请选择工单号') - if (!done.confirmed) return ElMessage.warning('请确认全部工序已完成') + if (!done.confirmed) return ElMessage.warning('请确认全部工位已完成') if (!done.remark.trim()) return ElMessage.warning('请签字确认') submitting.value = true try { diff --git a/bj_power_mes/frontend/src/pages/MaterialRequest.vue b/bj_power_mes/frontend/src/pages/MaterialRequest.vue index 3b51758..4333d61 100644 --- a/bj_power_mes/frontend/src/pages/MaterialRequest.vue +++ b/bj_power_mes/frontend/src/pages/MaterialRequest.vue @@ -1,11 +1,19 @@ diff --git a/操作手册.md b/操作手册.md index e69de29..4c7fa6a 100644 --- a/操作手册.md +++ b/操作手册.md @@ -0,0 +1,136 @@ +# MES 产线控制 · 操作手册 + +> 面向产线管理人员、生产操作员、质检员、库房保管员。本文档说明「做什么、按什么顺序做、每个字段怎么填」。页面右上角「帮助」按钮或点击页面标题,也可弹出对应页面的在线帮助。 + +## 一、系统概述 + +MES 是装配线的控制中心:从「产品类型 → 工单 → 物料清单 → 日排产 → 备料 → 工位组合下发 → 工位报工 → 完工追溯」一条链路串起整条产线。 + +产线共 12 个固定工位(工位1 ~ 工位12),设备只有「扫码枪 + 拧紧枪」,其余为人工操作。传送带单向流转(工位 1 → 2 → … → 12),不会往回走。 + +**统一概念**(避免混淆): +- **工位**:产线固定的 12 个物理位置,编号 1~12。 +- **工艺流程**:服务于某个固定工位的作业指导(含工位号、PDF、工序步骤)。一个工位只能有一个「启用」的工艺流程。 +- **工序步骤**:工艺流程内的具体作业/采集项(如 装配完成、拧紧扭矩)。 + +五个系统分工: + +| 系统 | 用途 | +|------|------| +| MES(本项目) | 生产主数据、工单、排产、工艺流程、报工、追溯 | +| WMS | 仓库库存、出入库、物料档案(独立数据库) | +| WMS 客户端 | 库房出/入库操作台(带扫码枪) | +| 工位终端 | 12 个工位的触控一体机,扫码报工、采集拧紧数据 | +| 看板 | 厂房大屏,展示产线状态(数据来自 MES) | + +--- + +## 二、登录 + +1. 浏览器打开 MES 地址,输入账号密码登录。 +2. 内置超级管理员:`admin` / `123456`。 +3. 密码要求:至少 6 位,不能是纯数字。若为纯数字密码,登录时会提示「安全级别低」,但仍可继续登录,建议登录后立即修改。 +4. 修改密码:点击右上角自己的用户名 → 「修改密码」。 + +--- + +## 三、主数据操作顺序(首次上线务必按顺序) + +1. **产品类型**:建立「生产什么」的档案(名称 + 编码)。 +2. **工艺流程**:为每个工位维护流程(选工位号)+ 工序步骤 + 考核标准 + 作业指导 PDF;**启用后自动绑定到该工位**。 +3. **关联工位**:查看 12 个工位的绑定总览(绑定由工艺流程自动建立),可改工位名称。 +4. **工单管理**:建工单,勾选要经过的**工位组合**。 +5. **物料清单**:给工单对应的产品配置 BOM。 +6. **日排产**:安排哪天生产多少(合计不得超过工单总数)。 +7. **备料单**:按日排产自动算料,供仓库备料。 +8. **工位组合下发**:工件上线时把工位组合下发给 PLC。 +9. **手动报工 / 工位终端**:选工位 → 自动载入该工位工序步骤 → 采集数据、判合格。 +10. **工件追溯 / 绩效报表**:查看结果。 + +--- + +## 四、菜单操作说明 + +### 1. 产品类型 +- 维护产品的名称、编码、类别、启用状态、备注。 +- 编码自动生成(`PROD-YYYYMMDD-序号`),可修改。 +- **关系**:产品类型 ↔ 工单 = 1 对 N(同型号可多工单);产品类型 ↔ 物料清单 = 按产品编码 1 对 1;备料单由「日排产 × BOM」间接产生。 +- 产品编码与 WMS 是两套系统、互相解耦,成品入库时由操作人员把该编码**手动录入 WMS** 对齐。 + +### 2. 工单管理 +- **新建工单**:自动生成工单号;选择产品类型(未选时显示"请选择");填产品编码/名称、数量;**勾选工位组合**。 +- **查询**:支持 工单号 / 产品编码 / 产品名称(模糊)/ 状态 组合筛选。 +- **工位组合**:勾选本工单要经过的工位(1~12),系统自动按 `1 → 2 → … → 12` 顺序执行。全选 = 全部工位;只走部分工位就只勾那几道。半成品再上线时,可只勾「漏掉的工位」完成闭环。 +- **状态流转**:列表操作列「状态」按钮,按 已创建 → 发布 → 开工 → 完工 推进。 +- **删除**:仅「已创建 / 待排产 / 已发布」且无排产、备料、生产数据的工单可删除(操作列「删除」按钮)。 +- 工单号贯穿备料、报工、追溯、日志全链路。 + +### 3. 日排产 +- 按「工单号 + 日期」排哪天生产多少。 +- 同一工单多天排产的**合计数量不能超过工单总数量**(系统强校验,已修复重复累计 bug)。 +- 已完成/关闭的工单不能再排产;某天已有完工数量的排产不能改数量。 +- 排产是仓库备料的触发依据。 + +### 4. 物料清单(BOM) +- 维护「生产 1 台产品需要哪些物料、各用多少」,按产品编码归类。 +- **与 WMS 的关系**:本页只维护「产品由哪几种料、各用几个」;物料名称/规格/库存统一在 WMS 的「物料档案」维护。两系统靠**物料编码**对齐。 +- **编码对应**:本页「物料编码」必须与 WMS 物料档案的「编码」完全一致,否则仓库无法备料/出库。 +- **管理方式**:精密件 = 按 SN 逐件;结构件 = 按批次。 +- 添加物料:点「添加物料」→ 在弹窗里选产品编码、填物料信息、保存。 + +### 5. 备料单 +- ① 先到「日排产」排好某天计划;② 回本页选该「日期」;③ 点「按日排产生成备料」,系统按各产品 BOM 自动算料生成备料单;④ 仓库据此备料出库。 + +### 6. 工位组合下发 +- 把工单/工件的**工位组合**写入西门子 S7-1214 PLC,传送带据此只停靠勾选的工位。 +- 工件上线、或半成品补工位时,人工在此下发。 +- 约束:上一条未收到完成信号,不下发下一条,防止串序。 + +### 7. 工艺流程 +- 每个流程服务于一个**固定工位(1~12)**,一个工位可有多个流程版本,但**只能有一个「启用」的流程**。 +- 流程内容:名称、工位号、状态(启用/停用)、作业指导 PDF、**工序步骤**。 +- **工序步骤**:每步设「采集方式」(拧紧枪自动 / 手填 / 仅记录)和「考核标准」。 +- **考核标准**:在步骤行点「考核标准」弹出独立窗口,设指标名/单位/逻辑/目标值或区间;报工时按此自动判合格/不合格。未设标准 = 仅记录不判定。 +- **启用/停用**:列表操作列点「启用/停用」。**启用 = 自动绑定到该工位;停用 = 自动解绑该工位**。同一工位已有启用流程时,新流程无法启用,需先停用旧流程。 + +### 8. 关联工位 +- 产线固定 12 个工位,本页是工位总览:查看每个工位绑定的工艺流程、修改工位名称。 +- 绑定关系由「工艺流程」页自动建立(流程选工位号并启用即绑定),本页不需要手动选流程。 + +### 9. 拧紧查询 +- 查询/补录拧紧数据(扭矩、角度、结果、操作人),用于质量追溯。 + +### 10. 手动报工 +- 选**工位**、扫工件 SN → 系统自动载入该工位启用工艺流程的**工序步骤** → 逐条填采集值 → 提交。 +- 系统按考核标准自动判定合格/不合格(OK/NG)。 +- 若提示未配置工序步骤:请到「工艺流程」为该工位启用流程并维护工序步骤。 + +### 11. 工件追溯 +- 输入 SN 查完整履历:各工位时间线、步骤考核数据、拧紧记录、用了哪些批次/SN。 + +### 12. 绩效报表 +- 按 操作人 × 日期 × 工位 统计完成数、合格数、NG 数、合格率。 + +### 13. 巡检终端 +- 检验员/线长用平板或电脑做:开工签到、工位点检、过程巡检、完工确认、异常上报、记录查看。 + +### 14. 操作日志 +- 记录所有关键操作,按工单号、操作人、类型可追溯,只读。 + +### 15. 角色权限管理 +- 管理用户/角色/权限。**角色不可删除、编辑;管理员至少保留一个**。 + +--- + +## 五、常见问题 + +| 问题 | 解决 | +|------|------| +| 工艺流程无法启用 | 该工位已存在其他启用的流程,先停用旧流程 | +| 停用流程后工位没流程了 | 正常,停用即解绑;再到「工艺流程」为该工位启用另一个流程 | +| 关联工位显示"未绑定" | 到「工艺流程」为该工位号启用一个流程 | +| 备料/出库提示物料不存在 | 物料清单里的「物料编码」与 WMS 物料档案不一致,核对编码 | +| 报工页没有采集框 | 该工位未启用流程,或流程没维护工序步骤;到「工艺流程」处理 | +| 排产保存失败 | 多天排产合计超过工单总数量,或该工单已完成/关闭 | +| 工单删不掉 | 仅「已创建/待排产/已发布」且无排产、备料、生产数据的工单可删除 | +| 修改密码后要重新登录 | 正常现象,密码变更即失效当前登录 | diff --git a/问题修复记录.md b/问题修复记录.md index 2d3a8c2..89fc2dc 100644 --- a/问题修复记录.md +++ b/问题修复记录.md @@ -511,3 +511,40 @@ GET /api/internal/process-card/list ``` + + +一、 +mes --- > 工艺流程----> 工位管理 , 1、状态不要用 ENABLED 等英文。2、一个工位只能 有一个 启用的 工艺流程。 这个启用,分两个维度,1、工艺流程是否启动,第二工位管理有没有启用这个工艺流程。我建议简单化,把第二个去掉。所以逻辑就成了,一个工位只能绑定一个工艺流程即可。 +另外,工艺流程里面 也有英文 ACTIVE ,请改成中文 +另外,工位管理,改为关联工位。因为工位数量是不变的 +另外,请考虑,工艺流程、工序,叫法是否合适,如果合适,就保持不变即可。 + +二、工艺流程 ---> 编辑工艺流程 +1、采集方式:在帮助文档里面,给一个详细说明 +2、考核标准:在帮助文档里面,给一个详细说明,在什么地方用,如何收集数据等。 +3、菜单,工艺参数 ,和,工艺流程 里面的 步骤模版,重复了。我理解对吗,我建议,去除 工艺参数。 并提出建议:编辑工艺流程--》步骤模板---》考核标准 ,点击多个考核标准时,都出现在下面,不好,不知道哪个是哪个,也没有一个单独的保存按钮。你再设计设计。 + +4、工位绑定,倒是可以从工艺流程里面,拿出来,将来好分配菜单权限。 + + +三、我现在仍然不知道如何操作。原因:1、问号帮助文档,内容还是不够详细。2、缺少:操作手册.md + + +四、PLC工序下发,我们聊过,菜单,做什么用的,我仍然没明白。帮助文档里面,也没有业务说明。你再捋捋,弄清楚些 + +五、帮助按钮,太大了。放到右上角,是不是更好? 右上角优化,点击 登录人名称 例如“系统管理员”,修改密码,即可。修改密码,按钮,不要了。 帮助文档 点击标题 弹出来(不是左边菜单,是右边大模块左上角的标题,例如 工单管理) + + +五、工单管理---> 维护工序组合123456789101112 ,这也太潦草了。 如何区分 11 还是 11 。要求,1、必须按顺序执行,比如,可以是123不能是 132,传送带不会往回走。要求2,可以选择 启动或未启动的 工序,如果工序禁用,这个工位就不走。 另外说明,当 操作 一个工艺流程,让他变成 停用时,必须先跟工位解绑。 同理,工位绑定 工艺流程,必须是 启用的。 +另外,工艺流程 菜单,里面的 操作列,加上 按钮 “启用”“停用”。同理,同操作习惯 工单管理也加上 状态操作,在操作里面 + + +六、菜单:工单管理,里面有个 日排产 。和 菜单: 日排产,重复了,菜单责任划分不明确。应该去除 前者。 + +七、添加物料清单,跟 wms什么关系,帮助也没说清楚。 编码如何对应。等等 。 +操作方式,非常错误。 选择:产品编码, 点击 添加物料 。列表,又没有 产品编码 。非常反人类。禁止这种 标题选择添加,有病吗,你的设计。添加物料清单,就好好添加,在选择框里面选择 产品编码。 你有病吗 +备料单---》按日排产生成备料, 不明不白,你有病吗。是互联网操作方式吗。 + + + + diff --git a/问题记录.md b/问题记录.md index 12b81fd..aa9dcb7 100644 --- a/问题记录.md +++ b/问题记录.md @@ -1,38 +1,32 @@ -一、 -mes --- > 工艺流程----> 工位管理 , 1、状态不要用 ENABLED 等英文。2、一个工位只能 有一个 启用的 工艺流程。 这个启用,分两个维度,1、工艺流程是否启动,第二工位管理有没有启用这个工艺流程。我建议简单化,把第二个去掉。所以逻辑就成了,一个工位只能绑定一个工艺流程即可。 -另外,工艺流程里面 也有英文 ACTIVE ,请改成中文 -另外,工位管理,改为关联工位。因为工位数量是不变的 -另外,请考虑,工艺流程、工序,叫法是否合适,如果合适,就保持不变即可。 -二、工艺流程 ---> 编辑工艺流程 -1、采集方式:在帮助文档里面,给一个详细说明 -2、考核标准:在帮助文档里面,给一个详细说明,在什么地方用,如何收集数据等。 -3、菜单,工艺参数 ,和,工艺流程 里面的 步骤模版,重复了。我理解对吗,我建议,去除 工艺参数。 并提出建议:编辑工艺流程--》步骤模板---》考核标准 ,点击多个考核标准时,都出现在下面,不好,不知道哪个是哪个,也没有一个单独的保存按钮。你再设计设计。 - -4、工位绑定,倒是可以从工艺流程里面,拿出来,将来好分配菜单权限。 - - -三、我现在仍然不知道如何操作。原因:1、问号帮助文档,内容还是不够详细。2、缺少:操作手册.md - - -四、PLC工序下发,我们聊过,菜单,做什么用的,我仍然没明白。帮助文档里面,也没有业务说明。你再捋捋,弄清楚些 - -五、帮助按钮,太大了。放到右上角,是不是更好? 右上角优化,点击 登录人名称 例如“系统管理员”,修改密码,即可。修改密码,按钮,不要了。 帮助文档 点击标题 弹出来(不是左边菜单,是右边大模块左上角的标题,例如 工单管理) - - -五、工单管理---> 维护工序组合123456789101112 ,这也太潦草了。 如何区分 11 还是 11 。要求,1、必须按顺序执行,比如,可以是123不能是 132,传送带不会往回走。要求2,可以选择 启动或未启动的 工序,如果工序禁用,这个工位就不走。 另外说明,当 操作 一个工艺流程,让他变成 停用时,必须先跟工位解绑。 同理,工位绑定 工艺流程,必须是 启用的。 -另外,工艺流程 菜单,里面的 操作列,加上 按钮 “启用”“停用”。同理,同操作习惯 工单管理也加上 状态操作,在操作里面 - - -六、菜单:工单管理,里面有个 日排产 。和 菜单: 日排产,重复了,菜单责任划分不明确。应该去除 前者。 - -七、添加物料清单,跟 wms什么关系,帮助也没说清楚。 编码如何对应。等等 。 -操作方式,非常错误。 选择:产品编码, 点击 添加物料 。列表,又没有 产品编码 。非常反人类。禁止这种 标题选择添加,有病吗,你的设计。添加物料清单,就好好添加,在选择框里面选择 产品编码。 你有病吗 -备料单---》按日排产生成备料, 不明不白,你有病吗。是互联网操作方式吗。 +一、菜单:工单管理 +1、新建工单, 产品类型 选择框,用户未选择时, 选择框显示“请选择”。所有选择框,都应如此。 +2、工单,不能删除吗。 满足某些条件时,应该可以删除。请考虑一下 +3、查询条件,多一些,比如:产品编码、产品名称 模糊查询 +4、新建工单、工序组合,是不是应该是 工位 ? 你看看,怎么更合适 +二、菜单: 工艺流程 +1、名称起的有些不合适: 工艺流程、 流程名称叫 “工序1_默认” ,流程,和工序,是不一样的。不能叫工序。原设计,一个流程包含多个序 +2、编辑工艺流程 ---> 工序编号 ? 应该是工位编码吧,固定 12个。认真审核,名字统一。 +3、编辑工艺流程 ---> 步骤模板 ? 工序步骤吧。 你好好统一一下,现在非常容易混淆。 比如,去除 工艺 概念 ? 去除 工序 概念。你好好考虑 + +三、菜单: PLC工序下发 +这个全人工操作,挺好的。名称变一下,更符合业务场景,操作人员更容易理解。见名知意。 +四、菜单: 日排产 +工单号:WO1787966513636 , 计划数量 总和,超出了 工单的 工件 数量。是个bug + + +五、菜单: 产品类型 +帮助文档,说清楚,和工单、物料清单、备料单、如何分工,几对几关系,有没有强约束,等。 相关菜单,也要把这些关系写清楚。 如果有和wms关联的,更要说清楚。 + + + +整体建议: +菜单,能不能,分分类。包括 wms,先优化,后分类。 仅思考,判定是否合适,给方案。 +