From dd078038e2587e0c68d29afe38adccfa00bff50d Mon Sep 17 00:00:00 2001 From: SunYF <123@hard_man.com> Date: Fri, 28 Aug 2026 17:23:44 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=B8=BA=E5=A4=9A=E4=B8=AA=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E6=B7=BB=E5=8A=A0=E6=93=8D=E4=BD=9C=E5=B8=AE=E5=8A=A9?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=8C=E6=9B=BF=E6=8D=A2=E6=97=A7=E7=89=88?= =?UTF-8?q?=E9=9D=99=E6=80=81=E8=B5=84=E6=BA=90=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 新增PageHelp通用帮助组件,实现页面左下角悬浮帮助按钮 2. 为WMS、MES、工位终端多个业务页面接入帮助系统 3. 替换项目中旧的打包静态资源文件,更新资源引用路径 4. 新增各模块的帮助文档配置数据 --- .../frontend/src/components/PageHelp.vue | 54 ++++++ bj_power_mes/frontend/src/help.js | 154 ++++++++++++++++++ bj_power_mes/frontend/src/pages/Bom.vue | 3 + bj_power_mes/frontend/src/pages/EventLog.vue | 3 + .../frontend/src/pages/MaterialRequest.vue | 3 + bj_power_mes/frontend/src/pages/PlcSend.vue | 3 + .../frontend/src/pages/ProductType.vue | 3 + bj_power_mes/frontend/src/pages/Rbac.vue | 3 + bj_power_mes/frontend/src/pages/Scan.vue | 3 + bj_power_mes/frontend/src/pages/Torque.vue | 3 + bj_power_mes/frontend/src/pages/Trace.vue | 3 + bj_power_mes/frontend/src/pages/WorkOrder.vue | 3 + bj_power_mes/public/assets/Bom-BbS8ZaBq.js | 1 + bj_power_mes/public/assets/Bom-se-PY-cH.js | 1 - .../public/assets/ChangePassword-C39D5Fiz.js | 1 + .../public/assets/ChangePassword-Uj1Owwvc.js | 1 - .../public/assets/EventLog-BY2Jf5Qb.js | 1 - .../public/assets/EventLog-Bqv_ixfX.js | 1 + .../{Login-D-fLZ_La.js => Login-CSzcmUPT.js} | 2 +- .../public/assets/MaterialRequest-BfPLIv-H.js | 1 + .../public/assets/MaterialRequest-EE81ASNE.js | 1 - .../public/assets/PlcSend-24lkO9rU.js | 1 + .../public/assets/PlcSend-By-S8MZL.js | 1 - .../public/assets/ProductType-A5UNiOwG.js | 1 + .../public/assets/ProductType-DAPhD0X_.js | 1 - bj_power_mes/public/assets/Rbac-D2e5KLAS.js | 1 - bj_power_mes/public/assets/Rbac-ZkJa7Bi6.js | 1 + bj_power_mes/public/assets/Scan-Ci4gakf_.js | 1 - bj_power_mes/public/assets/Scan-DmB6E_5U.js | 1 + bj_power_mes/public/assets/Torque-Cn4OgeK0.js | 1 - bj_power_mes/public/assets/Torque-DhNl-E6O.js | 1 + bj_power_mes/public/assets/Trace-ClajlyaP.js | 1 + bj_power_mes/public/assets/Trace-ar0q0a5O.js | 1 - .../public/assets/WorkOrder-B9rEMZxL.js | 1 - .../public/assets/WorkOrder-LyL6MOFg.js | 1 + bj_power_mes/public/assets/help-CWLgrbwB.css | 1 + bj_power_mes/public/assets/help-ChDFlpQm.js | 4 + .../{index-DK0Mia3I.js => index-DD5ZDdZq.js} | 4 +- bj_power_mes/public/index.html | 2 +- .../frontend/src/components/PageHelp.vue | 54 ++++++ bj_power_wms_client/frontend/src/help.js | 134 +++++++++++++++ .../frontend/src/pages/Inbound.vue | 3 + .../frontend/src/pages/Inspection.vue | 3 + .../frontend/src/pages/Inventory.vue | 3 + .../frontend/src/pages/Ledger.vue | 3 + .../frontend/src/pages/Outbound.vue | 3 + .../frontend/src/pages/Package.vue | 3 + .../frontend/src/pages/Semi.vue | 3 + .../frontend/src/pages/Stocktake.vue | 3 + ...oard-BIu1m4Tr.js => Dashboard-9ZMuASKU.js} | 2 +- ...isplay-CI0UX8XN.js => Display-kqdqg9cm.js} | 2 +- .../web/static/assets/Inbound-9MdMdmX-.css | 1 + .../web/static/assets/Inbound-BkfRpXV8.js | 1 - .../web/static/assets/Inbound-CT76ndRx.js | 1 + .../web/static/assets/Inbound-MGfygYCZ.css | 1 - .../web/static/assets/Inspection-Bqx6C5qX.js | 1 + .../web/static/assets/Inspection-DzaDd0T7.css | 1 - .../web/static/assets/Inspection-WwcR1XJI.css | 1 + .../web/static/assets/Inspection-xrSlBCzm.js | 1 - .../web/static/assets/Inventory-BHida8VU.js | 1 + .../web/static/assets/Inventory-BOwJ9mde.css | 1 - .../web/static/assets/Inventory-BgGaxbhr.js | 1 - .../web/static/assets/Inventory-BtjZn9Ke.css | 1 + .../web/static/assets/Ledger-B0maQl8D.js | 1 + .../web/static/assets/Ledger-BFUI6tf1.js | 1 - .../web/static/assets/Ledger-BmmuaNJh.css | 1 - .../web/static/assets/Ledger-CEwxB9t_.css | 1 + .../{Login-DyQH6tso.js => Login-BRqeanKv.js} | 2 +- .../web/static/assets/Outbound-Bcbt3L9J.css | 1 + .../web/static/assets/Outbound-DkW9Zzv5.js | 7 - .../web/static/assets/Outbound-qhXPvI6Z.css | 1 - .../web/static/assets/Outbound-s1kcAbhI.js | 7 + .../web/static/assets/Package-B9Jb84gl.js | 1 - .../web/static/assets/Package-CjM9VGVY.css | 1 + .../web/static/assets/Package-Cnt5TDnO.js | 1 + .../web/static/assets/Package-Q9djlEf_.css | 1 - .../web/static/assets/Semi-DIX6RAyj.js | 1 + .../web/static/assets/Semi-DS1MAvIv.js | 1 - .../web/static/assets/Semi-DnhxH4R2.css | 1 - .../web/static/assets/Semi-u_bi3d7g.css | 1 + .../web/static/assets/Stocktake-BJLe-mKx.css | 1 + .../web/static/assets/Stocktake-BPH37eLj.css | 1 - .../web/static/assets/Stocktake-CCINJwy6.js | 1 - .../web/static/assets/Stocktake-DoFWpv0S.js | 1 + .../web/static/assets/help-CGfNBMNA.js | 6 + .../web/static/assets/help-CWLgrbwB.css | 1 + .../{index-5Dh1saTW.js => index-I7IvEW25.js} | 4 +- ...equest-9HIXw4jF.js => request-CgQy1jz7.js} | 2 +- bj_power_wms_client/web/static/index.html | 2 +- .../frontend/src/components/PageHelp.vue | 54 ++++++ bj_power_workstation/frontend/src/help.js | 53 ++++++ .../frontend/src/views/Main.vue | 5 + bj_power_workstation/web/static/index.html | 2 +- 93 files changed, 619 insertions(+), 45 deletions(-) create mode 100644 bj_power_mes/frontend/src/components/PageHelp.vue create mode 100644 bj_power_mes/frontend/src/help.js create mode 100644 bj_power_mes/public/assets/Bom-BbS8ZaBq.js delete mode 100644 bj_power_mes/public/assets/Bom-se-PY-cH.js create mode 100644 bj_power_mes/public/assets/ChangePassword-C39D5Fiz.js delete mode 100644 bj_power_mes/public/assets/ChangePassword-Uj1Owwvc.js delete mode 100644 bj_power_mes/public/assets/EventLog-BY2Jf5Qb.js create mode 100644 bj_power_mes/public/assets/EventLog-Bqv_ixfX.js rename bj_power_mes/public/assets/{Login-D-fLZ_La.js => Login-CSzcmUPT.js} (95%) create mode 100644 bj_power_mes/public/assets/MaterialRequest-BfPLIv-H.js delete mode 100644 bj_power_mes/public/assets/MaterialRequest-EE81ASNE.js create mode 100644 bj_power_mes/public/assets/PlcSend-24lkO9rU.js delete mode 100644 bj_power_mes/public/assets/PlcSend-By-S8MZL.js create mode 100644 bj_power_mes/public/assets/ProductType-A5UNiOwG.js delete mode 100644 bj_power_mes/public/assets/ProductType-DAPhD0X_.js delete mode 100644 bj_power_mes/public/assets/Rbac-D2e5KLAS.js create mode 100644 bj_power_mes/public/assets/Rbac-ZkJa7Bi6.js delete mode 100644 bj_power_mes/public/assets/Scan-Ci4gakf_.js create mode 100644 bj_power_mes/public/assets/Scan-DmB6E_5U.js delete mode 100644 bj_power_mes/public/assets/Torque-Cn4OgeK0.js create mode 100644 bj_power_mes/public/assets/Torque-DhNl-E6O.js create mode 100644 bj_power_mes/public/assets/Trace-ClajlyaP.js delete mode 100644 bj_power_mes/public/assets/Trace-ar0q0a5O.js delete mode 100644 bj_power_mes/public/assets/WorkOrder-B9rEMZxL.js create mode 100644 bj_power_mes/public/assets/WorkOrder-LyL6MOFg.js create mode 100644 bj_power_mes/public/assets/help-CWLgrbwB.css create mode 100644 bj_power_mes/public/assets/help-ChDFlpQm.js rename bj_power_mes/public/assets/{index-DK0Mia3I.js => index-DD5ZDdZq.js} (99%) create mode 100644 bj_power_wms_client/frontend/src/components/PageHelp.vue create mode 100644 bj_power_wms_client/frontend/src/help.js rename bj_power_wms_client/web/static/assets/{Dashboard-BIu1m4Tr.js => Dashboard-9ZMuASKU.js} (96%) rename bj_power_wms_client/web/static/assets/{Display-CI0UX8XN.js => Display-kqdqg9cm.js} (95%) create mode 100644 bj_power_wms_client/web/static/assets/Inbound-9MdMdmX-.css delete mode 100644 bj_power_wms_client/web/static/assets/Inbound-BkfRpXV8.js create mode 100644 bj_power_wms_client/web/static/assets/Inbound-CT76ndRx.js delete mode 100644 bj_power_wms_client/web/static/assets/Inbound-MGfygYCZ.css create mode 100644 bj_power_wms_client/web/static/assets/Inspection-Bqx6C5qX.js delete mode 100644 bj_power_wms_client/web/static/assets/Inspection-DzaDd0T7.css create mode 100644 bj_power_wms_client/web/static/assets/Inspection-WwcR1XJI.css delete mode 100644 bj_power_wms_client/web/static/assets/Inspection-xrSlBCzm.js create mode 100644 bj_power_wms_client/web/static/assets/Inventory-BHida8VU.js delete mode 100644 bj_power_wms_client/web/static/assets/Inventory-BOwJ9mde.css delete mode 100644 bj_power_wms_client/web/static/assets/Inventory-BgGaxbhr.js create mode 100644 bj_power_wms_client/web/static/assets/Inventory-BtjZn9Ke.css create mode 100644 bj_power_wms_client/web/static/assets/Ledger-B0maQl8D.js delete mode 100644 bj_power_wms_client/web/static/assets/Ledger-BFUI6tf1.js delete mode 100644 bj_power_wms_client/web/static/assets/Ledger-BmmuaNJh.css create mode 100644 bj_power_wms_client/web/static/assets/Ledger-CEwxB9t_.css rename bj_power_wms_client/web/static/assets/{Login-DyQH6tso.js => Login-BRqeanKv.js} (92%) create mode 100644 bj_power_wms_client/web/static/assets/Outbound-Bcbt3L9J.css delete mode 100644 bj_power_wms_client/web/static/assets/Outbound-DkW9Zzv5.js delete mode 100644 bj_power_wms_client/web/static/assets/Outbound-qhXPvI6Z.css create mode 100644 bj_power_wms_client/web/static/assets/Outbound-s1kcAbhI.js delete mode 100644 bj_power_wms_client/web/static/assets/Package-B9Jb84gl.js create mode 100644 bj_power_wms_client/web/static/assets/Package-CjM9VGVY.css create mode 100644 bj_power_wms_client/web/static/assets/Package-Cnt5TDnO.js delete mode 100644 bj_power_wms_client/web/static/assets/Package-Q9djlEf_.css create mode 100644 bj_power_wms_client/web/static/assets/Semi-DIX6RAyj.js delete mode 100644 bj_power_wms_client/web/static/assets/Semi-DS1MAvIv.js delete mode 100644 bj_power_wms_client/web/static/assets/Semi-DnhxH4R2.css create mode 100644 bj_power_wms_client/web/static/assets/Semi-u_bi3d7g.css create mode 100644 bj_power_wms_client/web/static/assets/Stocktake-BJLe-mKx.css delete mode 100644 bj_power_wms_client/web/static/assets/Stocktake-BPH37eLj.css delete mode 100644 bj_power_wms_client/web/static/assets/Stocktake-CCINJwy6.js create mode 100644 bj_power_wms_client/web/static/assets/Stocktake-DoFWpv0S.js create mode 100644 bj_power_wms_client/web/static/assets/help-CGfNBMNA.js create mode 100644 bj_power_wms_client/web/static/assets/help-CWLgrbwB.css rename bj_power_wms_client/web/static/assets/{index-5Dh1saTW.js => index-I7IvEW25.js} (99%) rename bj_power_wms_client/web/static/assets/{request-9HIXw4jF.js => request-CgQy1jz7.js} (99%) create mode 100644 bj_power_workstation/frontend/src/components/PageHelp.vue create mode 100644 bj_power_workstation/frontend/src/help.js 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 @@ + + + + + \ 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 @@ + + + + + \ 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 @@ 北京动力 · 工位终端 - +