diff --git a/bj_power_mes/frontend/src/components/PageHelp.vue b/bj_power_mes/frontend/src/components/PageHelp.vue
new file mode 100644
index 0000000..d8296bd
--- /dev/null
+++ b/bj_power_mes/frontend/src/components/PageHelp.vue
@@ -0,0 +1,54 @@
+
+
+
+
+ ?
+
+
+
+ {{ data.overview }}
+
+
+
+
{{ sec.title }}
+
{{ sec.overview }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bj_power_mes/frontend/src/help.js b/bj_power_mes/frontend/src/help.js
new file mode 100644
index 0000000..b9115e4
--- /dev/null
+++ b/bj_power_mes/frontend/src/help.js
@@ -0,0 +1,154 @@
+// 页面级操作说明:每个页面/弹窗的整体介绍 + 各字段 来源/用途/怎么填
+// 由 components/PageHelp.vue 在左下角 "?" 按钮弹出展示。
+
+export const helpProductType = {
+ title: '产品类型',
+ overview: '产品类型是对“生产什么产品”的分类档案,好比“产品种类”。新建工单时必须先选择产品类型。\n只有先维护好产品类型,工单、BOM 才能正常建立。',
+ fields: [
+ { name: '名称', source: '手动填写', purpose: '产品类型的中文名称,用于识别', fill: '如:智能电表、断路器、配电柜' },
+ { name: '编码', source: '手动填写', purpose: '产品类型的唯一编码,BOM/工单按此关联', fill: '如:METER-01(尽量唯一,不重复)' },
+ { name: '类别', source: '手动填写', purpose: '产品所属大类,方便分类统计', fill: '如:计量表 / 开关柜(可空)' },
+ { name: '启用', source: '开关选择', purpose: '启用后才能在新建工单/备料时被选到', fill: '默认开启;暂不用的可关闭' },
+ { name: '备注', source: '手动填写', purpose: '补充说明文字', fill: '可不填' }
+ ]
+}
+
+export const helpWorkOrder = {
+ title: '工单管理(新建 / 编辑工单)',
+ overview: '工单是一个“合同/生产批次”的唯一载体,也是仓库出库挂靠的唯一对象。\n流程:建工单 → 配 BOM(单台用哪些料)→ 日排产(今天产多少台)→ 系统按排产备料 → AGV 配送到各工位。',
+ fields: [
+ { name: '工单号', source: '系统自动生成,可改', purpose: '唯一标识一个工单,备料/出库/报工都挂在此号下', fill: '如 WO20260828,保证唯一' },
+ { name: '产品类型', source: '先维护“产品类型”后选择', purpose: '说明这批生产的是什么产品', fill: '下拉选择已启用的产品类型' },
+ { name: '产品编码', source: '手动填写', purpose: '产品的唯一编码(通常与产品类型编码一致)', fill: '如 METER-01' },
+ { name: '产品名称', source: '手动填写', purpose: '产品的中文名称,用于展示与追溯', fill: '如 智能电表' },
+ { name: '数量', source: '手动填写', purpose: '本工单的总数量(如一个合同 100 台)', fill: '填写整数 ≥1' },
+ { name: '工序组合', source: '手动填写', purpose: '本工单在产线要执行的工序序列,PLC 按此下发', fill: '如 135=做第1/3/5序;全工序=123456789101112' },
+ { name: '状态', source: '系统流程驱动', purpose: '工单生命周期:创建→发布→生产→完成', fill: '新建时选“已创建”,后续由流程推进' }
+ ],
+ sections: [
+ {
+ title: '日排产(弹窗)',
+ overview: '只排“哪天生产多少台”,是仓库备料/配送的前瞻参考,不直接触发出库与下单。',
+ fields: [
+ { name: '日期', source: '手动选择', purpose: '计划生产日期', fill: '选择一个日期,可排未来多天' },
+ { name: '计划数量', source: '手动填写', purpose: '当天计划产量(≤ 工单总数量)', fill: '填写整数,如今天产 20 台' }
+ ]
+ }
+ ]
+}
+
+export const helpBom = {
+ title: 'BOM(添加 BOM 物料)',
+ overview: 'BOM 列出“生产 1 台该工单产品需要哪些物料、各用多少”。系统按它是算备料/出库的需求量,并强约束出库不能超需求。',
+ fields: [
+ { name: '物料编码', source: '手动填写', purpose: '该物料在全库房的唯一编码(与 WMS 物料档案一致)', fill: '如螺丝=SCREW-M3,芯片=IC-001' },
+ { name: '物料名称', source: '手动填写', purpose: '物料中文名,用于识别', fill: '如 十字螺丝、主控芯片' },
+ { name: '规格', source: '手动填写', purpose: '物料的规格型号', fill: '如 M3×8 / SMT-48脚' },
+ { name: '单位', source: '手动填写', purpose: '计量单位,用于算量', fill: '个 / 件 / 套 / kg' },
+ { name: '管理方式', source: '单选,按物料类型', purpose: '精密件=逐件按SN管理;结构件=按批次管理', fill: '电子件选精密件(SN);螺丝等选结构件(批次)' },
+ { name: '单台用量', source: '手动填写', purpose: '生产 1 台产品用多少个该物料', fill: '如每台用 8 颗螺丝 → 填 8' },
+ { name: '损耗率%', source: '手动填写', purpose: '考虑报废/损耗的加放比例', fill: '如 2% 填 2;0 表示不计算' },
+ { name: '需求量', source: '通常自动算出,可覆盖', purpose: '总需求 = 数量×单台用量×(1+损耗率)', fill: '自动算,也可手动修正' }
+ ]
+}
+
+export const helpMaterial = {
+ title: '备料单',
+ overview: '备料单是按“日排产”自动算出的:该日生产所需物料清单。仓库看它备料,再用 AGV 配送到对应工位(DOCK01~20)。',
+ fields: [
+ { name: '日期', source: '手动选择', purpose: '按哪一天的排产生成备料', fill: '选择某排产日期' },
+ { name: '工单号', source: '筛选条件', purpose: '只查看指定工单的备料', fill: '可空,空=全部' },
+ { name: '状态', source: '筛选条件', purpose: '按备料状态筛选', fill: '可空' }
+ ]
+}
+
+export const helpPlc = {
+ title: 'PLC 工序下发',
+ overview: '把工序组合(如 135)写入西门子 S7-1214 的寄存器,产线传送带据此只做对应工序。\n系统遵循“未收到完成信号,绝不下发下一条”,保证产线不会串序。',
+ fields: [
+ { 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' }
+ ]
+}
+
+export const helpTorque = {
+ title: '拧紧数据(查询 / 扫码录入)',
+ overview: '接收丹尼科尔拧紧工具的采集结果(扭矩/角度/时间/结果/操作人),用于质量追溯。工位终端点“完成”后数据才会报到这里。',
+ 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: '产线扫码枪扫到工件,按类型记录该工件在各工序的流转:进线、工序完成、完工、暂存退回。这是工单进度与追溯的数据来源。',
+ fields: [
+ { name: 'SN', source: '扫码枪横扫', purpose: '工件的唯一序列号', fill: '扫码枪扫描' },
+ { name: '工单号', source: '自动带出/选择', purpose: '工件所属工单', fill: '输入或选择' },
+ { name: '工位', source: '扫码枪绑定', purpose: '当前扫码的工位编号', fill: '如 5' },
+ { name: '类型', source: '按操作选择', purpose: '本次扫码的业务含义', fill: '进线ONLINE / 工序PROCESS / 完工DONE / 暂存TEMP_STORE' },
+ { name: '工序号', source: '手动填写', purpose: 'PROCESS 时填第几道工序', fill: '如 3' }
+ ]
+}
+
+export const helpTrace = {
+ title: '工件追溯',
+ overview: '输入工件的 SN,即可查到它的完整履历:进线/完工时间、各工序时间线、步骤考核数据(扭矩/角度等)、拧紧记录、以及它用了哪些批次/精密件(成品关联)。',
+ fields: [
+ { name: '工件SN', source: '扫码枪 / 手输', purpose: '要追溯的工件唯一序列号', fill: '扫SN条码或手动输入后点查询' }
+ ]
+}
+
+export const helpRbac = {
+ title: '角色权限管理(用户 / 角色 / 权限)',
+ overview: '管控谁能登录、能看哪些菜单。建议:只给操作员分配其工序所需的菜单权限。登录 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: '勾选所需权限码' }
+ ]
+ },
+ {
+ title: '权限(新增 / 编辑)',
+ overview: '通常由系统预置,一般无需手动新增。',
+ fields: [
+ { name: '编码', source: '系统预置', purpose: '权限唯一码,如 produce.workorder', fill: '按系统预置填写' },
+ { name: '名称', source: '手动填写', purpose: '权限名', fill: '如 工单管理' },
+ { name: '类型', source: '手动填写', purpose: 'MENU=菜单权限 / API=接口权限', fill: '如 MENU' },
+ { name: '路径', source: '手动填写', purpose: 'MESU 对应的前端路由路径', fill: '如 /work-order' },
+ { name: '排序', source: '手动填写', purpose: '菜单显示顺序', fill: '数字,越小越靠前' }
+ ]
+ }
+ ]
+}
+
+export const helpEventLog = {
+ title: '操作日志',
+ overview: '记录所有关键业务操作(建工单、BOM维护、备料、PLC下发、拧紧、扫码报工等),按工单号、操作人、实体可追溯。',
+ fields: [
+ { name: '工单号', source: '筛选条件', purpose: '按工单号过滤该工单的所有操作', fill: '输入工单号,可空=全部' },
+ { name: '操作人', source: '筛选条件', purpose: '按操作人过滤', fill: '输入姓名/账号,可空=全部' },
+ { name: '类型', source: '筛选条件', purpose: '按事件类型过滤', fill: '如 EVENT_WORK_ORDER / EVENT_TORQUE,可空' }
+ ]
+}
\ 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 62a491e..2b859eb 100644
--- a/bj_power_mes/frontend/src/pages/Bom.vue
+++ b/bj_power_mes/frontend/src/pages/Bom.vue
@@ -52,12 +52,15 @@
+
+
diff --git a/bj_power_wms_client/frontend/src/components/PageHelp.vue b/bj_power_wms_client/frontend/src/components/PageHelp.vue
new file mode 100644
index 0000000..d8296bd
--- /dev/null
+++ b/bj_power_wms_client/frontend/src/components/PageHelp.vue
@@ -0,0 +1,54 @@
+
+
+
+
+ ?
+
+
+
+ {{ data.overview }}
+
+
+
+
{{ sec.title }}
+
{{ sec.overview }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bj_power_wms_client/frontend/src/help.js b/bj_power_wms_client/frontend/src/help.js
new file mode 100644
index 0000000..0dbf3e4
--- /dev/null
+++ b/bj_power_wms_client/frontend/src/help.js
@@ -0,0 +1,134 @@
+// 库房客户端(WMS Client) 页面级操作说明:整体介绍 + 各字段 来源/用途/怎么填
+// 由 components/PageHelp.vue 在左下角 "?" 按钮弹出展示。
+
+export const helpInbound = {
+ title: '入库',
+ overview: '把来料记入 WMS 库存。按物料类型分两种方式:\n· 结构件(螺丝/机加工件)→ 按【批次】入库,一进多件;\n· 精密件(芯片/器件)→ 按【SN 序列号】逐件扫码入库,单件可追溯。\n入库先选“物料模板”,否则需要手工填大量信息;支持连续扫码与 Excel 批量导入。',
+ sections: [
+ {
+ title: 'Tab1 结构件入库(批次)',
+ fields: [
+ { name: '物料', source: '下拉选择(来自物料档案)', purpose: '入库的是什么物料;必须先有物料档案', fill: '选择物料编码,如 SCREW-M3' },
+ { name: '批次号', source: '留空自动生成', purpose: '区看到货批次,实现先进先出', fill: '留空系统按日期+序号自动生成,或手工填' },
+ { name: '数量', source: '手动填写', purpose: '本批到货数量', fill: '整数,≥1' },
+ { name: '区域', source: '下拉选择(库区字典)', purpose: '放到哪个库区(待检/合格/不合格等)', fill: '通常先放待检区,检验后转合格区' },
+ { name: '生产日期', source: '手动选择', purpose: '生产时间,用于时效/批次管理', fill: '选择日期' },
+ { name: '供应商', source: '手动填写', purpose: '来料来源', fill: '供应商名称,可空' }
+ ]
+ },
+ {
+ title: 'Tab2 精密件 SN 入库',
+ fields: [
+ { name: '物料', source: '下拉选择', purpose: '入库的精密件物料', fill: '选择物料编码' },
+ { name: '区域', source: '下拉选择', purpose: '放到哪个库区', fill: '可选,空则默认' },
+ { name: '扫码录入', source: '扫码枪连续扫码', purpose: '逐件登记 SN,实现单件追溯', fill: '扫入/粘贴 SN 后回车追加,可一次多条' }
+ ]
+ },
+ {
+ title: 'Tab3 Excel 导入',
+ overview: '用于大批量结构件入库。列头顺序(首行忽略):物料编码 | 批次号(可空自动生成) | 数量 | 生产日期 | 供应商 | 区域。',
+ fields: [
+ { name: '文件', source: '选择 .xlsx', purpose: '批量导入的物料清单', fill: '按列头顺序准备好 Excel 后选择上传' }
+ ]
+ }
+ ]
+}
+
+export const helpOutbound = {
+ title: '出库(按工单领料)',
+ overview: '仓库按工单台账为生产备料出库。系统强约束:单物料累计出库 ≤ 工单需求总量,超发走补料流程。\n可一次出完,也可分多次、分批由 AGV 配送到各 DOCK(决策权在仓库)。',
+ fields: [
+ { name: '工单号', source: '输入(来自 MES)', purpose: '出库挂靠的工单,决定可领料总量', fill: '输入工单号回车查询台账' },
+ { name: '操作人', source: '登录账号自动带出', purpose: '本次出库执行人,便于追溯', fill: '自动,无需填' },
+ { name: '目标工位', source: '手动填写', purpose: '本次配送送达的接驳台/DOCK', fill: '如 DOCK-A,可空' },
+ { name: '一键分配出库', source: '系统自动按 FIFO 分配', purpose: '从合格区(Z02)按批次先进先出凑够缺口并出库', fill: '点按钮,系统自动算批次并二次确认' }
+ ]
+}
+
+export const helpInventory = {
+ title: '库存查询',
+ overview: '查看当前库存:结构件按批次台账(数量/锁定/区域),精密件按 SN 序列号(状态/区域)。',
+ fields: [
+ { name: '物料编码', source: '筛选条件', purpose: '只看某物料', fill: '输入编码,可空=全部' },
+ { name: '库存类型', source: '单选', purpose: '看批次还是看 SN 序列', fill: '全部 / 批次 / SN 序列' },
+ { name: '关键字', source: '筛选条件', purpose: '按批次号/物料名称/SN 模糊过滤', fill: '输入关键字,可空' }
+ ]
+}
+
+export const helpInspection = {
+ title: '质量检验',
+ overview: '对到货物料或 SN 做来料检:把“未检”翻转为【合格】或【不合格】。支持单条扫码录入与批量翻转。合格后才能被出库锁定(出库自动分配只取合格区)。',
+ fields: [
+ { name: '目标类型', source: '单选', purpose: '检验对象是批次还是 SN', fill: '批次 BATCH / 序列号 SN' },
+ { name: '检验结论', source: '单选', purpose: '判定结果', fill: '合格 / 不合格' },
+ { name: '检验员', source: '手动填写(默认当前用户)', purpose: '谁检验的,用于追溯', fill: '检验员姓名' },
+ { name: '扫码输入', source: '扫码枪', purpose: '单个目标编号', fill: '扫批次号或 SN,回车提交' },
+ { name: '批量编号', source: '扫码枪连续录入', purpose: '一次性翻转多个目标的检验状态', fill: '每行一个编号' }
+ ]
+}
+
+export const helpStocktake = {
+ title: '盘点',
+ overview: '核对账面与实际库存,支持扫码快速盘点,完成时按差异修正库存。\n步骤:发起盘点(冻结快照)→ 扫码录入实盘数(入库)→ 完成并生成差异(可选:差异写回库存)。',
+ fields: [
+ { name: '操作人', source: '登录账号', purpose: '发起盘点人', fill: '自动' },
+ { name: '发起盘点', source: '按钮', purpose: '冻结当前库存快照,生成盘点单', fill: '点按钮发起' },
+ { name: '差异写回库存', source: '开关', purpose: '完成后是否用实盘差异修正库存', fill: '开启=写回,关闭=仅记录差异' },
+ { name: '目标编号', source: '扫码枪', purpose: '要盘点的批次号或 SN', fill: '扫批次号/SN,回车提交' },
+ { name: '实盘数量', source: '扫码/手输', purpose: '实际数到的数量', fill: '非负整数;0 表示盘亏为零' }
+ ]
+}
+
+export const helpPackage = {
+ title: '包装绑定(箱号 ↔ SN)',
+ overview: '把若干精密件 SN 绑定到一个箱号,形成包装箱。用于发货/入库整箱追溯。',
+ fields: [
+ { name: '箱号', source: '扫码/手输', purpose: '包装箱唯一号', fill: '扫描或手输箱号' },
+ { name: '物料', source: '下拉选择(可空)', purpose: '箱内物料类型', fill: '可选' },
+ { name: '操作人', source: '登录账号', purpose: '绑定人', fill: '自动' },
+ { name: 'SN 录入', source: '扫码枪连续扫码', purpose: '装箱的 SN 序列号清单', fill: '扫入 SN 回车追加' }
+ ]
+}
+
+export const helpSemi = {
+ title: '半成品/成品(流转)',
+ overview: '产线工位“暂存/退回”的半成品或完工成品可在此入库(记录已完成工序),需要时再出库(重上线),MES 从下一工序继续。',
+ sections: [
+ {
+ title: '半成品/成品入库',
+ fields: [
+ { name: '物料', source: '下拉选择', purpose: '入库物料', fill: '选择物料编码' },
+ { name: '已完成工序', source: '工位终端上报', purpose: '该件做到第几道工序,重上线时 MES 从这里继续', fill: '如 135,可空' },
+ { name: '工单号', source: '手动填写(可空)', purpose: '来源工单', fill: '输入工单号' },
+ { name: '区域', source: '手动填写(可空)', purpose: '存放库区', fill: '如 Z05' },
+ { name: '扫码录入', source: '扫码枪连续扫码', purpose: '半成品 SN 清单', fill: '扫入 SN 回车追加' }
+ ]
+ },
+ {
+ title: '半成品出库(重上线)',
+ fields: [
+ { name: 'SN', source: '扫码枪/手输', purpose: '要重上线的半成品 SN', fill: '扫描或输入 SN,回车出库' }
+ ]
+ }
+ ]
+}
+
+export const helpLedger = {
+ title: '工单物料台账',
+ overview: '实时展示每个物料:需求总量、累计已出库、剩余缺口。系统强约束累计出库 ≤ 需求总量,达到即“领料完结”。',
+ fields: [
+ { name: '工单号', source: '输入', purpose: '查看哪个工单的领料台账', fill: '输入工单号查询' }
+ ]
+}
+
+export const helpDisplay = {
+ title: '库房总览显示',
+ overview: '给库房显示器用的只读总览页,展示库存与出入库概况。',
+ fields: []
+}
+
+export const helpDashboard = {
+ title: '库房看板',
+ overview: '只读看板:库存总量、物料种类、出入库动态等。',
+ fields: []
+}
\ No newline at end of file
diff --git a/bj_power_wms_client/frontend/src/pages/Inbound.vue b/bj_power_wms_client/frontend/src/pages/Inbound.vue
index 55c4019..e8d5c43 100644
--- a/bj_power_wms_client/frontend/src/pages/Inbound.vue
+++ b/bj_power_wms_client/frontend/src/pages/Inbound.vue
@@ -3,6 +3,8 @@ import { onMounted, reactive, ref } from 'vue'
import { ElMessage } from 'element-plus'
import request from '../utils/request'
import { getRealName } from '../utils/auth'
+import PageHelp from '../components/PageHelp.vue'
+import { helpInbound } from '../help'
// 公共字典:物料 / 区域
const materials = ref([])
@@ -246,6 +248,7 @@ async function importExcel() {
+
\ No newline at end of file
diff --git a/bj_power_workstation/frontend/src/help.js b/bj_power_workstation/frontend/src/help.js
new file mode 100644
index 0000000..1e878bb
--- /dev/null
+++ b/bj_power_workstation/frontend/src/help.js
@@ -0,0 +1,53 @@
+// 工位终端(bj_power_workstation)操作帮助数据
+// 结构:title=界面名称,overview=整体说明,sections=按功能分组的字段/操作说明
+
+export const helpWorkstation = {
+ title: '工位终端 使用说明',
+ overview:
+ '工位终端运行在 DOCK01~21 各工序工位的触屏设备上。操作员负责扫码、拧紧、上报工序完成或暂存退库。\n\n标准流程:①选择本工位号 → ②扫描工件SN → ③照工艺图纸用拧紧枪打螺丝 → ④看拧紧结果是否全部OK → ⑤该工序做完点「工序完成上报」→ 工件流转到下一工序。',
+ sections: [
+ {
+ title: '顶部与工位',
+ overview: '顶部显示当前工位号、登录人、离线同步状态。',
+ fields: [
+ { name: '工位号', source: '下拉/固定', purpose: '当前所在工位 DOCK01~21,决定读哪道工序的任务', fill: '固定工位由配置锁定不可改;否则选择与实物一致的编号' },
+ { name: '待同步 N 条', source: '系统统计', purpose: '标记有拧紧/工序数据尚未上报MES(离线缓存)', fill: '点击「重试同步」立即补传,消红为正常' },
+ { name: '登录人', source: '登录信息', purpose: '当前操作员账号,上报记录会带此名字溯源', fill: '开机登入本人账号,勿共用' }
+ ]
+ },
+ {
+ title: '扫码区',
+ overview: '扫码枪扫工件SN条码,作为本次操作的追踪依据。',
+ fields: [
+ { name: '当前工件 SN', source: '扫码枪扫描', purpose: '唯一识别正在加工的工件,拧紧结果和上报都挂在此SN下', fill: '用扫码枪扫条码自动填入;没枪可手输回车' },
+ { name: '进度 N/M颗', source: '拧紧结果统计', purpose: '已打的螺丝数/应打总颗数', fill: '每打一颗自动+1,无需手工维护' }
+ ]
+ },
+ {
+ title: '当前工单与工序',
+ overview: '左栏显示本工位当前装配任务的工单号、产品型号、整件进度和工序清单。',
+ fields: [
+ { name: '工单号', source: 'MES派发', purpose: '当前正在装配的生产工单,来源系统自动下发', fill: '不可改,随任务自动带出' },
+ { name: '工序清单', source: 'MES工艺配置', purpose: '12道工序任务,✔为已完成,高亮为当前应做工序', fill: '照高亮工序执行,不用手工勾选' },
+ { name: '工艺图纸', source: 'MES下发PDF', purpose: '当前工序的工艺图/拧紧点位,指导怎么打螺丝', fill: '点「放大查看」全屏看图,照图示点位顺序拧' }
+ ]
+ },
+ {
+ title: '拧紧结果',
+ overview: '实时列出当前SN每一颗螺丝拧紧的扭矩/角度/结果,任何NG会红色闪烁告警。',
+ fields: [
+ { name: '扭矩 Nm', source: '拧紧枪采集', purpose: '每颗螺丝达到的拧紧扭矩,判断是否合格', fill: '自动上传,与工艺标准不符标NG' },
+ { name: '角度 °', source: '拧紧枪采集', purpose: '拧紧过程中的角度,判断屈服形变/滑牙', fill: '自动上传,无需填写' },
+ { name: '结果 OK/NG', source: '系统判定', purpose: '该颗螺丝是否合格;有NG则必须复检', fill: 'NG时按告警横幅提示优先复检该工件' }
+ ]
+ },
+ {
+ title: '底部三大按钮',
+ fields: [
+ { name: '工序完成上报', source: '按钮操作+确认框', purpose: '本工位当前这道工序已做完,通知MES流转到下一工序', fill: '点后输入当前工序号(如OP10)确认;联网失败会自动离线缓存' },
+ { name: '暂存退库', source: '按钮操作+确认框', purpose: '工件本工序不做完,退回库房暂存(如来料要下午继续)', fill: '点击并二次确认;系统会记录已完成工序,重上线从下一工序继续' },
+ { name: '重试同步', source: '按钮操作', purpose: '立即把离线缓存的拧紧/上报数据补传给MES', fill: '看到「待同步」非0时点一下即可' }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/bj_power_workstation/frontend/src/views/Main.vue b/bj_power_workstation/frontend/src/views/Main.vue
index ca97272..4963271 100644
--- a/bj_power_workstation/frontend/src/views/Main.vue
+++ b/bj_power_workstation/frontend/src/views/Main.vue
@@ -120,6 +120,9 @@
暂存退库
重试同步
+
+
+
@@ -127,6 +130,8 @@
import { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue'
import { useRouter } from 'vue-router'
import { ElMessage, ElMessageBox } from 'element-plus'
+import PageHelp from '../components/PageHelp.vue'
+import { helpWorkstation } from '../help'
import {
getConfig,
getSyncStats,
diff --git a/bj_power_workstation/web/static/index.html b/bj_power_workstation/web/static/index.html
index f252127..7117bf7 100644
--- a/bj_power_workstation/web/static/index.html
+++ b/bj_power_workstation/web/static/index.html
@@ -4,7 +4,7 @@
北京动力 · 工位终端
-
+