// MES 管理后台 页面级操作说明:整体流程 + 各字段 数据来源/用途/怎么填 // 由 components/PageHelp.vue 在左下角 "?" 按钮弹出展示。 // 说明:这里的"数据来源"特指该字段的数据由谁产生、从哪个系统/页面来,帮助跑通真实流程。 export const helpProductType = { title: '产品类型(档案维护)', overview: '产品类型 = 企业要生产哪些产品的分类档案,是整条产线的源头基础数据。\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: '如:智能电表、断路器、配电柜' }, { name: '编码', source: '系统自动生成 + 可手动修改。新建时会自动带出(格式 PROD-YYYYMMDD-序号),你可直接使用或改为自定义编码;编辑时保留已存值。一个产品编码可对应多个工单(同一型号今天做一批、明天做一批,工单号不同,产品编码相同)。', purpose: '产品唯一编码。它是 MES 内部识别该产品的标识,决定该产品的物料清单(BOM)内容,也是工单、备料、拧紧、追溯的挂靠键。', fill: '建议用有意义的编码,如 METER-01。要点:①本编码与 WMS 是两套系统、互相解耦,MES 这边独立维护,WMS 那边各自单独录入;②成品入库时,由操作人员把本编码**手动录入 WMS**,两系统靠人工对齐;③如产品编码就是"产品类型",则直接沿用该类型编码即可;④建好后不要随意改,否则下游工单/追溯的关联会断。' }, { name: '类别', source: '手工填写。可选,无上游来源。', purpose: '产品所属大类,便于分类统计', fill: '如:计量表 / 开关柜;可空' }, { name: '启用', source: '开关选择。默认开启。', purpose: '启用后才允许在新建工单/备料的下拉里被选到', fill: '默认开启;暂时停产的可关闭(不删除,保留档案)' }, { name: '备注', source: '手工填写。可选。', purpose: '补充说明', fill: '可不填' } ] } export const helpWorkOrder = { title: '工单管理(新建 / 编辑 / 删除工单)', overview: '工单 = 一个"合同/生产批次"的唯一载体,是生产执行和仓库出库挂靠的核心对象。\n\n全流程:先有产品类型 → 建工单(选产品类型、定数量、勾选工位组合) → 进"物料清单"给该产品配料 → 到"日排产"排哪天产多少 → 仓库按排产备料出库 → 产线装配/拧紧/报工 → 完工。\n工单号会贯穿 备料单、拧紧查询、手动报工、工件追溯、操作日志 全链路。\n\n查询:支持按 工单号 / 产品编码 / 产品名称(模糊) / 状态 组合筛选。\n删除:仅「已创建 / 待排产 / 已发布」且无排产、备料、生产数据的工单可删除(操作列「删除」),生产中或已完成的工单不可删除。', fields: [ { 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: '勾选 12 个工位(工位1~工位12)。', purpose: '本工单要经过的工位集合,PLC 按此组合下发控制产线', fill: '勾选要经过的工位即可,系统自动按 1→12 顺序执行(传送带不回走);半成品再上线可只勾漏做的工位' }, { name: '状态', source: '新建时选"已创建",后续由流程推进。', purpose: '工单生命周期:创建→发布→生产→完成', fill: '新建时选"已创建";也可在列表操作列点「状态」快捷流转(发布/开工/完工)' } ], sections: [ { title: '行内"工位组合"维护', overview: '对当前工单快速维护要经过的工位组合。\n可自由勾选、补工位(半成品再上线):如本应走第3/5工位却做成半成品,可在此只勾第2工位重上线完成闭环。', fields: [ { name: '工位组合', source: '勾选 12 个工位。', purpose: '本工单经过的工位集合,PLC 组合下发', fill: '勾选即可,按工位号顺序执行;全选=全部工位' } ] } ] } export const helpDailyPlan = { title: '日排产(生产计划)', overview: '日排产 = 安排"哪个工单、在哪天、生产多少",是备料和出库的触发依据。\n\n数据链路:工单(总数) → 日排产(按天拆分量,合计不得超过工单总数) → 仓库按日排产备料出库 → 产线按日生产。\n可以按 工单号 / 排产日期 两个维度查询,也可直接新增/编辑/删除排产。', fields: [ { name: '工单号', source: '下拉选择。来自"工单管理"已建的工单。', purpose: '该排产对应哪个生产工单', fill: '选择工单号;也可手动输入未列出的工单号' }, { name: '排产日期', source: '日历选择。', purpose: '计划在哪一天生产', fill: '选具体日期,如 2026-08-29' }, { name: '计划数量', source: '手工填写整数。', purpose: '这一天计划生产多少件', fill: '整数≥1;注意:该工单所有日排产的数量合计不能超过工单总数量' }, { name: '已完成', source: '系统自动累计。只读。', purpose: '该排产已实际完成多少件', fill: '无需填写' }, { name: '状态', source: '系统维护。只读。', purpose: '排产执行状态(待排产/已确认)', fill: '无需填写' } ] } export const helpBom = { title: '物料清单(产品 BOM)', overview: '物料清单 = 生产 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: '如 螺丝=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: '手工填写。', purpose: '生产 1 台产品用的该物料数量', fill: '如每台 8 颗螺丝 → 填 8' }, { name: '损耗率%', source: '手工填写。', purpose: '考虑报废/损耗的加放比例', fill: '如 2% 填 2;0=不计算损耗' }, { name: '需求量', source: '自动计算 = 数量×单台用量×(1+损耗率),可覆盖。', purpose: '该物料总需求,出库不能超它', fill: '一般自动算,不必改' } ] } export const helpMaterial = { title: '备料单(按日排产自动算料)', overview: '备料单 = 仓库备料的依据:某天要生产的所有工单,各需要哪些物料、各要多少。\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: '工位组合下发(业务说明)', overview: '这个菜单做什么用:把某个工单/工件的「工位组合」写入西门子 S7-1214 PLC,产线传送带据此只停靠勾选的工位,其余工位不加工。\n\n什么时候用:一个工件进线/上线时,需要告诉 PLC「这件货要走哪几个工位」,就在这里下发。\n\n为什么单独一个菜单:产线偶尔需要人工干预——比如本该走 3 号工位却做成了半成品,人工在此改成只补第 2 工位重上线,完成闭环。一切交给人工自行判断。\n\n核心约束:系统遵循「上一条未收到完成信号,不下发下一条」,确保产线不串序。\n\n数据链路:工单(含工位组合) → 本页下发到 S7-1214 → PLC 驱动传送带/工位 → 收到完成信号再下发下一条。', fields: [ { name: '工单号', source: '下拉选择/输入。来自工单。', purpose: '当前生产的工单,追溯依据', fill: '选择或输入工单号' }, { name: '工件SN', source: '扫码枪扫描。来自工件条码。', purpose: '当前流经的工件唯一序列号', fill: '扫码枪扫入;可空(按工单整体下发)' }, { name: '当前工位', source: '手动填写。', purpose: '当前要下发的工位(1~12)', fill: '输入 1~12 的整数' }, { name: '工位组合', source: '勾选 12 个工位。通常与工单的工位组合一致。', purpose: '该工件要经过的工位,PLC 控制停靠', fill: '勾选即可,按工位号顺序执行' } ] } export const helpTorque = { title: '拧紧数据(查询/录入)', overview: '接收丹尼科尔拧紧工具的采集结果(扭矩/角度/时间/结果/操作人),用于质量追溯。\n数据在工位终端点"工位完成上报"后由拧紧枪数据同步到 MES。本页可查询,也可手工补录。', fields: [ { name: 'SN', source: '扫码枪/手工。来自工件条码。', purpose: '被拧紧的工件唯一序列号', fill: '扫码枪扫描' }, { name: '工单号', source: '自动带出/选择。来自工单。', purpose: '该工件所属工单', fill: '选择工单号' }, { name: '工位', source: '手动填写。', purpose: '拧紧发生在哪道工位', fill: '如 3' }, { name: '扭矩', source: '拧紧枪自动采集(丹尼科尔工具)。', purpose: '实际拧紧扭矩(N·m),判定是否达标', fill: '工具自动带出;补录时手填' }, { name: '角度', source: '拧紧枪自动采集。', purpose: '实际旋转角度(°),判定滑牙/屈服', fill: '工具自动带出;补录时手填' }, { name: '操作人', source: '登录账号自动带出。', purpose: '执行拧紧的人,用于追溯', fill: '默认当前登录用户,可改' } ] } export const helpScan = { title: '手动报工(工位工序步骤完成上报)', overview: '每个工位完成本工位的工序步骤后,在【手动报工】页选择工位、扫入工件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: '手工填写 或 拧紧枪自动带出(视采集方式)。字段由【工艺流程】的工序步骤人为定义。', purpose: '收集该工位的扭矩/角度/尺寸等参数,按标准判定合格与否', fill: '逐条填采集值,未维护标准的步骤仅记录' } ] } export const helpStation = { title: '关联工位(工位总览)', overview: '产线固定 12 个工位,本页是工位总览:查看每个工位绑定了哪个工艺流程,可修改工位名称(不增删工位)。\n\n模型:一个工艺流程服务于一个工位(工艺流程页选择工位号);一个工位只能有一个「启用」的工艺流程;流程启用后自动绑定到该工位,停用后自动解绑。\n\n数据链路:工艺流程(选工位号+维护工序步骤+启用) → 自动绑定工位 → 手动报工/工位终端按该流程的工序步骤采集 → 报工判定 OK/NG。', fields: [ { 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下发、工位完成),本页只读查询。', fields: [ { name: '工件SN', source: '扫码枪/手输。来自工件条码。', purpose: '要追溯的工件唯一序列号', fill: '扫 SN 或手动输入后点查询' } ] } export const helpRbac = { title: '角色权限管理(用户/角色/权限)', overview: '管控谁能登录、能看哪些菜单。建议只给操作员分配其工位所需菜单权限。\n登录 token 有效期短(1800秒),超时自动失效需重新登录。', sections: [ { title: '用户(新建/编辑)', fields: [ { name: '用户名', source: '手工填写。', purpose: '登录账号,唯一', fill: '如 operator1' }, { name: '密码', source: '手工填写,保存时加密存储。', purpose: '登录密码', fill: '≥6位;编辑时留空=不修改' }, { name: '姓名', source: '手工填写。', purpose: '真实姓名,操作日志追溯用', fill: '如 张三' }, { name: '角色', source: '下拉选择。来自"角色"页已建的角色。', purpose: '决定该用户的菜单权限', fill: '选择已建角色' }, { name: '状态', source: '选择。', purpose: '禁用后无法登录', fill: '启用 / 禁用' } ] }, { title: '角色(新建/编辑)', fields: [ { name: '名称', source: '手工填写。', purpose: '角色中文名', fill: '如 装配工、质检员' }, { name: '编码', source: '手工填写。', purpose: '角色唯一编码(SUPER_ADMIN 为内置超级管理员,勿改)', fill: '如 OPERATOR' }, { name: '备注', source: '手工填写。', purpose: '说明', fill: '可空' }, { name: '权限', source: '多选。来自"权限"页的权限码。', purpose: '勾选该角色可见的菜单/功能', fill: '勾选所需权限码(如 produce.workorder)' } ] }, { title: '权限(新增/编辑)', overview: '通常由系统预置,一般无需手动新增。', fields: [ { name: '编码', source: '系统预置/手工。', purpose: '权限唯一码', fill: '如 produce.workorder' }, { name: '名称', source: '手工填写。', purpose: '权限名', fill: '如 工单管理' }, { name: '类型', source: '手工填写。', purpose: 'MENU=菜单权限 / API=接口权限', fill: '如 MENU' }, { name: '路径', source: '手工填写。', purpose: 'MENU 对应的前端路由路径', fill: '如 /work-order' }, { name: '排序', source: '手工填写。', purpose: '菜单显示顺序', fill: '数字,越小越靠前' } ] } ] } export const helpEventLog = { title: '操作日志', overview: '记录所有关键业务操作(建工单、物料清单维护、备料、PLC下发、拧紧、扫码报工等),按工单号、操作人、实体可追溯。\n数据由系统在各操作发生时自动写入,本页只读查询。', fields: [ { name: '工单号', source: '筛选条件。数据来自日志中的 workOrderNo 字段。', purpose: '按工单号过滤该工单的所有操作', fill: '输入工单号,可空=全部' }, { name: '操作人', source: '筛选条件。数据来自日志中的 operator 字段。', purpose: '按操作人过滤', fill: '输入姓名/账号,可空=全部' }, { name: '类型', source: '筛选条件。数据来自日志中的事件类型字段。', purpose: '按事件类型过滤', fill: '如 EVENT_WORK_ORDER / EVENT_TORQUE,可空' } ] } export const helpProcessFlow = { title: '工艺流程(服务于固定工位,含工序步骤)', overview: '工艺流程 = 某个固定工位(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号工位装配流程 / 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: '下拉选择 ≥/≤/>/