From e82b744bbd24e839873cc69683dee1d6989bf3c0 Mon Sep 17 00:00:00 2001 From: SunYF <123@hard_man.com> Date: Sat, 29 Aug 2026 08:11:44 +0800 Subject: [PATCH] build: update frontend build asset hashes this commit updates all the static asset file hashes in index.html templates, and adds/removes the corresponding chunk files, which is typical after a frontend project rebuild to deploy updated static resources. --- bj_power_mes/frontend/src/help.js | 170 ++++++++++-------- .../{Bom-qRGZwfNl.js => Bom-y4OLVdty.js} | 2 +- ...7_NBFIM7.js => ChangePassword-D-u1tXDb.js} | 2 +- ...ntLog-D9KNbo8j.js => EventLog-pbGVVfEk.js} | 2 +- .../{Login-QL740R5V.js => Login-BKOWbZ3k.js} | 2 +- ...WLPKDuD.js => MaterialRequest-HEPebPYp.js} | 2 +- ...lcSend-DJ_ld__Q.js => PlcSend-B772h7Wq.js} | 2 +- ...pe-Un9zwxaF.js => ProductType-Dppvewox.js} | 2 +- .../{Rbac-76zcPd_G.js => Rbac-DpQZV-fc.js} | 2 +- .../{Scan-D2iJS4hm.js => Scan-B_JseKq5.js} | 2 +- ...{Torque-CoflmdZb.js => Torque-D780rGIR.js} | 2 +- .../{Trace-JYn0Y_aZ.js => Trace-DmFL3ikQ.js} | 2 +- ...rder-TX6kimh3.js => WorkOrder-D-K9BxdI.js} | 2 +- bj_power_mes/public/assets/help-CJCtd61z.js | 4 - bj_power_mes/public/assets/help-DqtsZH2B.js | 23 +++ .../{index-BORa7dH4.js => index-0akZQTPV.js} | 4 +- bj_power_mes/public/index.html | 2 +- bj_power_wms_client/frontend/src/help.js | 125 +++++++------ ...oard-DneNlEpi.js => Dashboard-DlINI6qy.js} | 2 +- ...isplay-6wuJI2Dp.js => Display-BLVWdPLV.js} | 2 +- ...nbound-BOLxl4Lt.js => Inbound-DGRjaxp8.js} | 2 +- ...ion-Cp7Ilzqc.js => Inspection-DDPsjS2O.js} | 2 +- ...tory-DLOSwwgi.js => Inventory-WA97rYQY.js} | 2 +- ...{Ledger-Dx4pgeep.js => Ledger-53K6Smgj.js} | 2 +- .../{Login-CiXa7TLP.js => Login-BWT5U0wo.js} | 2 +- ...bound-BGRoJuha.js => Outbound-DvjCYsMG.js} | 2 +- ...ackage-CiuyXcgR.js => Package-J77JJef_.js} | 2 +- .../{Semi-Bs9UASrg.js => Semi-BvYUqYU7.js} | 2 +- ...take-YjnlyZRF.js => Stocktake-DnVN5m0F.js} | 2 +- .../web/static/assets/help-BMgMow4j.js | 6 - .../web/static/assets/help-BzPC6_2h.css | 1 + .../web/static/assets/help-CwFORLjJ.css | 1 - .../web/static/assets/help-DfzkTHcJ.js | 19 ++ .../{index-9NS-icag.js => index-BhhFt5Di.js} | 4 +- ...equest-DS_8eNi1.js => request-By4ij0Lz.js} | 2 +- bj_power_wms_client/web/static/index.html | 2 +- bj_power_workstation/frontend/src/help.js | 37 ++-- bj_power_workstation/web/static/index.html | 2 +- 38 files changed, 253 insertions(+), 195 deletions(-) rename bj_power_mes/public/assets/{Bom-qRGZwfNl.js => Bom-y4OLVdty.js} (97%) rename bj_power_mes/public/assets/{ChangePassword-7_NBFIM7.js => ChangePassword-D-u1tXDb.js} (97%) rename bj_power_mes/public/assets/{EventLog-D9KNbo8j.js => EventLog-pbGVVfEk.js} (94%) rename bj_power_mes/public/assets/{Login-QL740R5V.js => Login-BKOWbZ3k.js} (95%) rename bj_power_mes/public/assets/{MaterialRequest-CWLPKDuD.js => MaterialRequest-HEPebPYp.js} (94%) rename bj_power_mes/public/assets/{PlcSend-DJ_ld__Q.js => PlcSend-B772h7Wq.js} (95%) rename bj_power_mes/public/assets/{ProductType-Un9zwxaF.js => ProductType-Dppvewox.js} (96%) rename bj_power_mes/public/assets/{Rbac-76zcPd_G.js => Rbac-DpQZV-fc.js} (98%) rename bj_power_mes/public/assets/{Scan-D2iJS4hm.js => Scan-B_JseKq5.js} (95%) rename bj_power_mes/public/assets/{Torque-CoflmdZb.js => Torque-D780rGIR.js} (96%) rename bj_power_mes/public/assets/{Trace-JYn0Y_aZ.js => Trace-DmFL3ikQ.js} (98%) rename bj_power_mes/public/assets/{WorkOrder-TX6kimh3.js => WorkOrder-D-K9BxdI.js} (98%) delete mode 100644 bj_power_mes/public/assets/help-CJCtd61z.js create mode 100644 bj_power_mes/public/assets/help-DqtsZH2B.js rename bj_power_mes/public/assets/{index-BORa7dH4.js => index-0akZQTPV.js} (99%) rename bj_power_wms_client/web/static/assets/{Dashboard-DneNlEpi.js => Dashboard-DlINI6qy.js} (96%) rename bj_power_wms_client/web/static/assets/{Display-6wuJI2Dp.js => Display-BLVWdPLV.js} (95%) rename bj_power_wms_client/web/static/assets/{Inbound-BOLxl4Lt.js => Inbound-DGRjaxp8.js} (97%) rename bj_power_wms_client/web/static/assets/{Inspection-Cp7Ilzqc.js => Inspection-DDPsjS2O.js} (96%) rename bj_power_wms_client/web/static/assets/{Inventory-DLOSwwgi.js => Inventory-WA97rYQY.js} (96%) rename bj_power_wms_client/web/static/assets/{Ledger-Dx4pgeep.js => Ledger-53K6Smgj.js} (95%) rename bj_power_wms_client/web/static/assets/{Login-CiXa7TLP.js => Login-BWT5U0wo.js} (92%) rename bj_power_wms_client/web/static/assets/{Outbound-BGRoJuha.js => Outbound-DvjCYsMG.js} (96%) rename bj_power_wms_client/web/static/assets/{Package-CiuyXcgR.js => Package-J77JJef_.js} (96%) rename bj_power_wms_client/web/static/assets/{Semi-Bs9UASrg.js => Semi-BvYUqYU7.js} (97%) rename bj_power_wms_client/web/static/assets/{Stocktake-YjnlyZRF.js => Stocktake-DnVN5m0F.js} (97%) delete mode 100644 bj_power_wms_client/web/static/assets/help-BMgMow4j.js create mode 100644 bj_power_wms_client/web/static/assets/help-BzPC6_2h.css delete mode 100644 bj_power_wms_client/web/static/assets/help-CwFORLjJ.css create mode 100644 bj_power_wms_client/web/static/assets/help-DfzkTHcJ.js rename bj_power_wms_client/web/static/assets/{index-9NS-icag.js => index-BhhFt5Di.js} (99%) rename bj_power_wms_client/web/static/assets/{request-DS_8eNi1.js => request-By4ij0Lz.js} (99%) diff --git a/bj_power_mes/frontend/src/help.js b/bj_power_mes/frontend/src/help.js index b9115e4..9e7f9be 100644 --- a/bj_power_mes/frontend/src/help.js +++ b/bj_power_mes/frontend/src/help.js @@ -1,143 +1,154 @@ -// 页面级操作说明:每个页面/弹窗的整体介绍 + 各字段 来源/用途/怎么填 +// MES 管理后台 页面级操作说明:整体流程 + 各字段 数据来源/用途/怎么填 // 由 components/PageHelp.vue 在左下角 "?" 按钮弹出展示。 +// 说明:这里的"数据来源"特指该字段的数据由谁产生、从哪个系统/页面来,帮助跑通真实流程。 export const helpProductType = { - title: '产品类型', - overview: '产品类型是对“生产什么产品”的分类档案,好比“产品种类”。新建工单时必须先选择产品类型。\n只有先维护好产品类型,工单、BOM 才能正常建立。', + title: '产品类型(档案维护)', + overview: + '产品类型是"生产什么产品"的分类档案,是整条产线的源头基础数据。\n\n生产主数据链条:产品类型 → 建工单(选产品类型) → 配物料清单(BOM) → 日排产 → 备料 → PLC/AGV 配送 → 工位装配。\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: '可不填' } + { name: '名称', source: '手工填写。用户自定义,无上游来源。', purpose: '产品类型的中文名,用于识别与下拉展示', fill: '如:智能电表、断路器、配电柜' }, + { name: '编码', source: '手工填写。你自定义的编码,保存入库后成为该记录的唯一标识。', purpose: '产品唯一编码,工单/物料清单等下游按此关联', fill: '如 METER-01;全局唯一,建了不要随意改,否则下游关联会断' }, + { name: '类别', source: '手工填写。可选,无上游来源。', purpose: '产品所属大类,便于分类统计', fill: '如:计量表 / 开关柜;可空' }, + { name: '启用', source: '开关选择。默认开启。', purpose: '启用后才允许在新建工单/备料的下拉里被选到', fill: '默认开启;暂时停产的可关闭(不删除,保留档案)' }, + { name: '备注', source: '手工填写。可选。', purpose: '补充说明', fill: '可不填' } ] } export const helpWorkOrder = { title: '工单管理(新建 / 编辑工单)', - overview: '工单是一个“合同/生产批次”的唯一载体,也是仓库出库挂靠的唯一对象。\n流程:建工单 → 配 BOM(单台用哪些料)→ 日排产(今天产多少台)→ 系统按排产备料 → AGV 配送到各工位。', + overview: + '工单 = 一个"合同/生产批次"的唯一载体,是生产执行和仓库出库挂靠的核心对象。\n\n全流程:先有产品类型 → 建工单(选产品类型、定数量、定工序组合) → 进"物料清单"给该工单配料 → 行内"日排产"排哪天产多少 → 仓库按排产备料出库 → 产线装配/拧紧/报工 → 完工。\n工单号会贯穿 备料单、拧紧查询、扫码报工、工件追溯、操作日志 全链路。', 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: '新建时选“已创建”,后续由流程推进' } + { 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: '新建时选"已创建",后续按流程推进无需手改' } ], sections: [ { - title: '日排产(弹窗)', - overview: '只排“哪天生产多少台”,是仓库备料/配送的前瞻参考,不直接触发出库与下单。', + title: '行内"日排产"弹窗', + overview: '对当前这行工单,排"哪天生产多少台"。排产结果会通知仓库按此备料/配送。', fields: [ - { name: '日期', source: '手动选择', purpose: '计划生产日期', fill: '选择一个日期,可排未来多天' }, - { name: '计划数量', source: '手动填写', purpose: '当天计划产量(≤ 工单总数量)', fill: '填写整数,如今天产 20 台' } + { name: '日期', source: '手动选择日期。', purpose: '计划生产日期,仓库按它哪天备料', fill: '选一个日期,可对同一工单排未来多天' }, + { name: '计划数量', source: '手动填写整数。', purpose: '当天计划产量,作为仓库备料/AGV配送的前瞻依据', fill: '≤ 工单总数量;如今天产 20 台' } ] } ] } export const helpBom = { - title: 'BOM(添加 BOM 物料)', - overview: 'BOM 列出“生产 1 台该工单产品需要哪些物料、各用多少”。系统按它是算备料/出库的需求量,并强约束出库不能超需求。', + title: '物料清单(BOM)', + overview: + '物料清单 = 生产 1 台该工单产品需要哪些物料、各用多少。\n仓库按它计算备料/出库需求量,并强约束累计出库 ≤ 需求总量。\n\n数据链路:先建工单 → 到本页选工单 → 为它逐条添加物料(编码要与 WMS 物料档案一致) → 之后仓库才能按此为工单领料。', 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: '自动算,也可手动修正' } + { name: '工单号', source: '下拉/输入选择。来自已建的工单。', purpose: '要为哪个工单配置物料清单', fill: '选择工单号后加载该工单已有清单' }, + { name: '物料编码', source: '手工填写。必须与 WMS(库房) 物料档案的编码一致。', purpose: '该物料在库房的全库唯一编码,两条系统靠它关联', fill: '如 螺丝=SCREW-M3、主控芯片=IC-001;编码对不上 WMS 将无法备料' }, + { name: '物料名称', source: '手工填写。', purpose: '物料中文名,便于识别', fill: '如 十字螺丝、主控芯片' }, + { name: '规格', source: '手工填写。', purpose: '物料规格型号', fill: '如 M3×8 / 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: '备料单是按“日排产”自动算出的:该日生产所需物料清单。仓库看它备料,再用 AGV 配送到对应工位(DOCK01~20)。', + title: '备料单(查询)', + overview: + '备料单按"日排产"自动算出某天需要的全部物料,仓库据此备料、由 AGV 配送到各工位(DOCK)。\n本页是只读查询,不修改数据。\n\n数据链路:日排产(工单内) → 本页按日期取那天所有工单的物料汇总 → 仓库出库 → AGV 配送。', fields: [ - { name: '日期', source: '手动选择', purpose: '按哪一天的排产生成备料', fill: '选择某排产日期' }, - { name: '工单号', source: '筛选条件', purpose: '只查看指定工单的备料', fill: '可空,空=全部' }, - { name: '状态', source: '筛选条件', purpose: '按备料状态筛选', fill: '可空' } + { name: '日期', source: '手动选择。筛选条件。', purpose: '查看哪一天的备料需求', fill: '选择某排产日期' }, + { name: '工单号', source: '手动输入。筛选条件。', purpose: '只查看指定工单的备料', fill: '可空,空=看全部工单' }, + { name: '状态', source: '下拉。数据来自备料执行状态。', purpose: '按备料进度筛选', fill: '可空' } ] } export const helpPlc = { title: 'PLC 工序下发', - overview: '把工序组合(如 135)写入西门子 S7-1214 的寄存器,产线传送带据此只做对应工序。\n系统遵循“未收到完成信号,绝不下发下一条”,保证产线不会串序。', + overview: + '把工序组合写入西门子 S7-1214 PLC 寄存器,产线传送带据此只执行对应工序。\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: '手动填写', purpose: '该工位要执行的工序,PLC 会组合执行', fill: '如 135(做第1/3/5序),全序=123456789101112' } + { 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: '接收丹尼科尔拧紧工具的采集结果(扭矩/角度/时间/结果/操作人),用于质量追溯。工位终端点“完成”后数据才会报到这里。', + 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: '默认当前登录用户,可改' } + { 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: '产线扫码枪扫到工件,按类型记录该工件在各工序的流转:进线、工序完成、完工、暂存退回。这是工单进度与追溯的数据来源。', + overview: + '扫码枪扫到工件,按类型记录工件在产线的流转事件。这是工单进度与工件追溯的核心数据来源。\n\n类型含义:进线(进入产线) → 工序(完成某道工序) → 完工(整件完成) → 暂存退回(退回库房)。', 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' } + { 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: '类型为"工序"时填第几道工序', fill: '如 3' } ] } export const helpTrace = { title: '工件追溯', - overview: '输入工件的 SN,即可查到它的完整履历:进线/完工时间、各工序时间线、步骤考核数据(扭矩/角度等)、拧紧记录、以及它用了哪些批次/精密件(成品关联)。', + overview: + '输入工件 SN,查它的完整履历:进线/完工时间、各工序时间线、步骤考核数据(扭矩/角度)、拧紧记录、以及它用了哪些批次/精密件。\n\n数据来源:全部由前端各环节自动写入(扫码报工、拧紧采集、PLC下发、工序完成),本页只读查询。', fields: [ - { name: '工件SN', source: '扫码枪 / 手输', purpose: '要追溯的工件唯一序列号', fill: '扫SN条码或手动输入后点查询' } + { name: '工件SN', source: '扫码枪/手输。来自工件条码。', purpose: '要追溯的工件唯一序列号', fill: '扫 SN 或手动输入后点查询' } ] } export const helpRbac = { - title: '角色权限管理(用户 / 角色 / 权限)', - overview: '管控谁能登录、能看哪些菜单。建议:只给操作员分配其工序所需的菜单权限。登录 token 有效期短(1800 秒),超时自动失效。', + title: '角色权限管理(用户/角色/权限)', + overview: + '管控谁能登录、能看哪些菜单。建议只给操作员分配其工序所需菜单权限。\n登录 token 有效期短(1800秒),超时自动失效需重新登录。', sections: [ { - title: '用户(新建 / 编辑)', + title: '用户(新建/编辑)', fields: [ - { name: '用户名', source: '手动填写', purpose: '登录账号,唯一', fill: '如 operator1' }, - { name: '密码', source: '手动填写', purpose: '登录密码,保存时加密', fill: '≥6 位;编辑时留空=不修改' }, - { name: '姓名', source: '手动填写', purpose: '真实姓名,用于操作日志追溯', fill: '如 张三' }, - { name: '角色', source: '下拉选择', purpose: '决定该用户有哪些菜单权限', fill: '选择已建角色' }, - { name: '状态', source: '选择', purpose: '禁用后无法登录', fill: '启用 / 禁用' } + { name: '用户名', source: '手工填写。', purpose: '登录账号,唯一', fill: '如 operator1' }, + { name: '密码', source: '手工填写,保存时加密存储。', purpose: '登录密码', fill: '≥6位;编辑时留空=不修改' }, + { name: '姓名', source: '手工填写。', purpose: '真实姓名,操作日志追溯用', fill: '如 张三' }, + { name: '角色', source: '下拉选择。来自"角色"页已建的角色。', purpose: '决定该用户的菜单权限', fill: '选择已建角色' }, + { name: '状态', source: '选择。', purpose: '禁用后无法登录', fill: '启用 / 禁用' } ] }, { - title: '角色(新建 / 编辑)', + title: '角色(新建/编辑)', fields: [ - { name: '名称', source: '手动填写', purpose: '角色中文名', fill: '如 装配工、质检员' }, - { name: '编码', source: '手动填写', purpose: '角色唯一编码(SUPER_ADMIN 为超级管理员内置码,勿改)', fill: '如 OPERATOR' }, - { name: '备注', source: '手动填写', purpose: '说明文字', fill: '可空' }, - { name: '权限', source: '多选勾选', purpose: '勾选该角色可见的菜单/功能', fill: '勾选所需权限码' } + { name: '名称', source: '手工填写。', purpose: '角色中文名', fill: '如 装配工、质检员' }, + { name: '编码', source: '手工填写。', purpose: '角色唯一编码(SUPER_ADMIN 为内置超级管理员,勿改)', fill: '如 OPERATOR' }, + { name: '备注', source: '手工填写。', purpose: '说明', fill: '可空' }, + { name: '权限', source: '多选。来自"权限"页的权限码。', purpose: '勾选该角色可见的菜单/功能', fill: '勾选所需权限码(如 produce.workorder)' } ] }, { - title: '权限(新增 / 编辑)', + 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: '数字,越小越靠前' } + { 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: '数字,越小越靠前' } ] } ] @@ -145,10 +156,11 @@ export const helpRbac = { export const helpEventLog = { title: '操作日志', - overview: '记录所有关键业务操作(建工单、BOM维护、备料、PLC下发、拧紧、扫码报工等),按工单号、操作人、实体可追溯。', + overview: + '记录所有关键业务操作(建工单、物料清单维护、备料、PLC下发、拧紧、扫码报工等),按工单号、操作人、实体可追溯。\n数据由系统在各操作发生时自动写入,本页只读查询。', fields: [ - { name: '工单号', source: '筛选条件', purpose: '按工单号过滤该工单的所有操作', fill: '输入工单号,可空=全部' }, - { name: '操作人', source: '筛选条件', purpose: '按操作人过滤', fill: '输入姓名/账号,可空=全部' }, - { name: '类型', source: '筛选条件', purpose: '按事件类型过滤', fill: '如 EVENT_WORK_ORDER / EVENT_TORQUE,可空' } + { name: '工单号', source: '筛选条件。数据来自日志中的 workOrderNo 字段。', purpose: '按工单号过滤该工单的所有操作', fill: '输入工单号,可空=全部' }, + { name: '操作人', source: '筛选条件。数据来自日志中的 operator 字段。', purpose: '按操作人过滤', fill: '输入姓名/账号,可空=全部' }, + { name: '类型', source: '筛选条件。数据来自日志中的事件类型字段。', purpose: '按事件类型过滤', fill: '如 EVENT_WORK_ORDER / EVENT_TORQUE,可空' } ] } \ No newline at end of file diff --git a/bj_power_mes/public/assets/Bom-qRGZwfNl.js b/bj_power_mes/public/assets/Bom-y4OLVdty.js similarity index 97% rename from bj_power_mes/public/assets/Bom-qRGZwfNl.js rename to bj_power_mes/public/assets/Bom-y4OLVdty.js index 98d5ca4..f640aa3 100644 --- a/bj_power_mes/public/assets/Bom-qRGZwfNl.js +++ b/bj_power_mes/public/assets/Bom-y4OLVdty.js @@ -1 +1 @@ -import{j as S,h as b,c as U,a as e,w as o,k as j,F as M,i as k,r as n,o as v,m as z,n as F,f as r,t as P,E as x,p as $,l as A}from"./index-BORa7dH4.js";import{a as D,P as H}from"./help-CJCtd61z.js";const J={__name:"Bom",setup(L){const i=k(""),N=k([]),w=k([]),t=A({show:!1,materialCode:"",materialName:"",spec:"",unit:"",manageMode:"2",unitQty:1,lossRate:0,requiredQty:1});async function f(){if(!i.value)return x.warning("请选择/输入工单号");w.value=await b.get("/bom",{params:{workOrderNo:i.value}})||[]}function O(){Object.assign(t,{show:!0,materialCode:"",materialName:"",spec:"",unit:"",manageMode:"2",unitQty:1,lossRate:0,requiredQty:1})}async function q(){await b.put("/bom",{workOrderNo:i.value,items:[t]}),x.success("保存成功"),t.show=!1,f()}async function B(C){await $.confirm("确认移除该物料?","提示",{type:"warning"});const l=w.value.filter(p=>p.id!==C.id).map(({materialCode:p,materialName:V,spec:d,unit:m,manageMode:_,unitQty:u,lossRate:y,requiredQty:s})=>({materialCode:p,materialName:V,spec:d,unit:m,manageMode:_,unitQty:u,lossRate:y,requiredQty:s}));await b.put("/bom",{workOrderNo:i.value,items:l}),await f()}return S(async()=>{N.value=await b.get("/work-orders")||[]}),(C,l)=>{const p=n("el-option"),V=n("el-select"),d=n("el-form-item"),m=n("el-button"),_=n("el-form"),u=n("el-table-column"),y=n("el-table"),s=n("el-input"),Q=n("el-radio"),R=n("el-radio-group"),g=n("el-input-number"),E=n("el-dialog"),c=n("el-card");return v(),U(M,null,[e(c,null,{default:o(()=>[e(_,{inline:""},{default:o(()=>[e(d,{label:"工单号"},{default:o(()=>[e(V,{modelValue:i.value,"onUpdate:modelValue":l[0]||(l[0]=a=>i.value=a),filterable:"","allow-create":"","default-first-option":"",style:{width:"220px"},onChange:f},{default:o(()=>[(v(!0),U(M,null,z(N.value,a=>(v(),F(p,{key:a.workOrderNo,label:a.workOrderNo,value:a.workOrderNo},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(d,null,{default:o(()=>[e(m,{type:"primary",onClick:f},{default:o(()=>[...l[11]||(l[11]=[r("查询",-1)])]),_:1}),e(m,{onClick:O},{default:o(()=>[...l[12]||(l[12]=[r("添加物料",-1)])]),_:1})]),_:1})]),_:1}),e(y,{data:w.value,border:"",size:"small"},{default:o(()=>[e(u,{prop:"materialCode",label:"物料编码","min-width":"120"}),e(u,{prop:"materialName",label:"物料名称","min-width":"120"}),e(u,{prop:"spec",label:"规格"}),e(u,{prop:"unit",label:"单位",width:"70"}),e(u,{prop:"manageMode",label:"管理方式",width:"100"},{default:o(({row:a})=>[r(P(a.manageMode==="1"?"精密件(SN)":"结构件(批次)"),1)]),_:1}),e(u,{prop:"unitQty",label:"单台用量",width:"90"}),e(u,{prop:"lossRate",label:"损耗率%",width:"90"}),e(u,{prop:"requiredQty",label:"需求量",width:"90"}),e(u,{label:"操作",width:"90"},{default:o(({row:a})=>[e(m,{size:"small",type:"danger",onClick:T=>B(a)},{default:o(()=>[...l[13]||(l[13]=[r("移除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"]),e(E,{modelValue:t.show,"onUpdate:modelValue":l[10]||(l[10]=a=>t.show=a),title:"添加物料清单",width:"520px"},{footer:o(()=>[e(m,{onClick:l[9]||(l[9]=a=>t.show=!1)},{default:o(()=>[...l[16]||(l[16]=[r("取消",-1)])]),_:1}),e(m,{type:"primary",onClick:q},{default:o(()=>[...l[17]||(l[17]=[r("保存",-1)])]),_:1})]),default:o(()=>[e(_,{model:t,"label-width":"90px"},{default:o(()=>[e(d,{label:"物料编码"},{default:o(()=>[e(s,{modelValue:t.materialCode,"onUpdate:modelValue":l[1]||(l[1]=a=>t.materialCode=a)},null,8,["modelValue"])]),_:1}),e(d,{label:"物料名称"},{default:o(()=>[e(s,{modelValue:t.materialName,"onUpdate:modelValue":l[2]||(l[2]=a=>t.materialName=a)},null,8,["modelValue"])]),_:1}),e(d,{label:"规格"},{default:o(()=>[e(s,{modelValue:t.spec,"onUpdate:modelValue":l[3]||(l[3]=a=>t.spec=a)},null,8,["modelValue"])]),_:1}),e(d,{label:"单位"},{default:o(()=>[e(s,{modelValue:t.unit,"onUpdate:modelValue":l[4]||(l[4]=a=>t.unit=a)},null,8,["modelValue"])]),_:1}),e(d,{label:"管理方式"},{default:o(()=>[e(R,{modelValue:t.manageMode,"onUpdate:modelValue":l[5]||(l[5]=a=>t.manageMode=a)},{default:o(()=>[e(Q,{label:"1"},{default:o(()=>[...l[14]||(l[14]=[r("精密件(SN)",-1)])]),_:1}),e(Q,{label:"2"},{default:o(()=>[...l[15]||(l[15]=[r("结构件(批次)",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),e(d,{label:"单台用量"},{default:o(()=>[e(g,{modelValue:t.unitQty,"onUpdate:modelValue":l[6]||(l[6]=a=>t.unitQty=a),min:0},null,8,["modelValue"])]),_:1}),e(d,{label:"损耗率%"},{default:o(()=>[e(g,{modelValue:t.lossRate,"onUpdate:modelValue":l[7]||(l[7]=a=>t.lossRate=a),min:0},null,8,["modelValue"])]),_:1}),e(d,{label:"需求量"},{default:o(()=>[e(g,{modelValue:t.requiredQty,"onUpdate:modelValue":l[8]||(l[8]=a=>t.requiredQty=a),min:0},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue"])]),_:1}),e(H,{data:j(D)},null,8,["data"])],64)}}};export{J as default}; +import{j as S,h as b,c as U,a as e,w as o,k as j,F as M,i as k,r as n,o as v,m as z,n as F,f as r,t as P,E as x,p as $,l as A}from"./index-0akZQTPV.js";import{a as D,P as H}from"./help-DqtsZH2B.js";const J={__name:"Bom",setup(L){const i=k(""),N=k([]),w=k([]),t=A({show:!1,materialCode:"",materialName:"",spec:"",unit:"",manageMode:"2",unitQty:1,lossRate:0,requiredQty:1});async function f(){if(!i.value)return x.warning("请选择/输入工单号");w.value=await b.get("/bom",{params:{workOrderNo:i.value}})||[]}function O(){Object.assign(t,{show:!0,materialCode:"",materialName:"",spec:"",unit:"",manageMode:"2",unitQty:1,lossRate:0,requiredQty:1})}async function q(){await b.put("/bom",{workOrderNo:i.value,items:[t]}),x.success("保存成功"),t.show=!1,f()}async function B(C){await $.confirm("确认移除该物料?","提示",{type:"warning"});const l=w.value.filter(p=>p.id!==C.id).map(({materialCode:p,materialName:V,spec:d,unit:m,manageMode:_,unitQty:u,lossRate:y,requiredQty:s})=>({materialCode:p,materialName:V,spec:d,unit:m,manageMode:_,unitQty:u,lossRate:y,requiredQty:s}));await b.put("/bom",{workOrderNo:i.value,items:l}),await f()}return S(async()=>{N.value=await b.get("/work-orders")||[]}),(C,l)=>{const p=n("el-option"),V=n("el-select"),d=n("el-form-item"),m=n("el-button"),_=n("el-form"),u=n("el-table-column"),y=n("el-table"),s=n("el-input"),Q=n("el-radio"),R=n("el-radio-group"),g=n("el-input-number"),E=n("el-dialog"),c=n("el-card");return v(),U(M,null,[e(c,null,{default:o(()=>[e(_,{inline:""},{default:o(()=>[e(d,{label:"工单号"},{default:o(()=>[e(V,{modelValue:i.value,"onUpdate:modelValue":l[0]||(l[0]=a=>i.value=a),filterable:"","allow-create":"","default-first-option":"",style:{width:"220px"},onChange:f},{default:o(()=>[(v(!0),U(M,null,z(N.value,a=>(v(),F(p,{key:a.workOrderNo,label:a.workOrderNo,value:a.workOrderNo},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(d,null,{default:o(()=>[e(m,{type:"primary",onClick:f},{default:o(()=>[...l[11]||(l[11]=[r("查询",-1)])]),_:1}),e(m,{onClick:O},{default:o(()=>[...l[12]||(l[12]=[r("添加物料",-1)])]),_:1})]),_:1})]),_:1}),e(y,{data:w.value,border:"",size:"small"},{default:o(()=>[e(u,{prop:"materialCode",label:"物料编码","min-width":"120"}),e(u,{prop:"materialName",label:"物料名称","min-width":"120"}),e(u,{prop:"spec",label:"规格"}),e(u,{prop:"unit",label:"单位",width:"70"}),e(u,{prop:"manageMode",label:"管理方式",width:"100"},{default:o(({row:a})=>[r(P(a.manageMode==="1"?"精密件(SN)":"结构件(批次)"),1)]),_:1}),e(u,{prop:"unitQty",label:"单台用量",width:"90"}),e(u,{prop:"lossRate",label:"损耗率%",width:"90"}),e(u,{prop:"requiredQty",label:"需求量",width:"90"}),e(u,{label:"操作",width:"90"},{default:o(({row:a})=>[e(m,{size:"small",type:"danger",onClick:T=>B(a)},{default:o(()=>[...l[13]||(l[13]=[r("移除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"]),e(E,{modelValue:t.show,"onUpdate:modelValue":l[10]||(l[10]=a=>t.show=a),title:"添加物料清单",width:"520px"},{footer:o(()=>[e(m,{onClick:l[9]||(l[9]=a=>t.show=!1)},{default:o(()=>[...l[16]||(l[16]=[r("取消",-1)])]),_:1}),e(m,{type:"primary",onClick:q},{default:o(()=>[...l[17]||(l[17]=[r("保存",-1)])]),_:1})]),default:o(()=>[e(_,{model:t,"label-width":"90px"},{default:o(()=>[e(d,{label:"物料编码"},{default:o(()=>[e(s,{modelValue:t.materialCode,"onUpdate:modelValue":l[1]||(l[1]=a=>t.materialCode=a)},null,8,["modelValue"])]),_:1}),e(d,{label:"物料名称"},{default:o(()=>[e(s,{modelValue:t.materialName,"onUpdate:modelValue":l[2]||(l[2]=a=>t.materialName=a)},null,8,["modelValue"])]),_:1}),e(d,{label:"规格"},{default:o(()=>[e(s,{modelValue:t.spec,"onUpdate:modelValue":l[3]||(l[3]=a=>t.spec=a)},null,8,["modelValue"])]),_:1}),e(d,{label:"单位"},{default:o(()=>[e(s,{modelValue:t.unit,"onUpdate:modelValue":l[4]||(l[4]=a=>t.unit=a)},null,8,["modelValue"])]),_:1}),e(d,{label:"管理方式"},{default:o(()=>[e(R,{modelValue:t.manageMode,"onUpdate:modelValue":l[5]||(l[5]=a=>t.manageMode=a)},{default:o(()=>[e(Q,{label:"1"},{default:o(()=>[...l[14]||(l[14]=[r("精密件(SN)",-1)])]),_:1}),e(Q,{label:"2"},{default:o(()=>[...l[15]||(l[15]=[r("结构件(批次)",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),e(d,{label:"单台用量"},{default:o(()=>[e(g,{modelValue:t.unitQty,"onUpdate:modelValue":l[6]||(l[6]=a=>t.unitQty=a),min:0},null,8,["modelValue"])]),_:1}),e(d,{label:"损耗率%"},{default:o(()=>[e(g,{modelValue:t.lossRate,"onUpdate:modelValue":l[7]||(l[7]=a=>t.lossRate=a),min:0},null,8,["modelValue"])]),_:1}),e(d,{label:"需求量"},{default:o(()=>[e(g,{modelValue:t.requiredQty,"onUpdate:modelValue":l[8]||(l[8]=a=>t.requiredQty=a),min:0},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue"])]),_:1}),e(H,{data:j(D)},null,8,["data"])],64)}}};export{J as default}; diff --git a/bj_power_mes/public/assets/ChangePassword-7_NBFIM7.js b/bj_power_mes/public/assets/ChangePassword-D-u1tXDb.js similarity index 97% rename from bj_power_mes/public/assets/ChangePassword-7_NBFIM7.js rename to bj_power_mes/public/assets/ChangePassword-D-u1tXDb.js index d5eb762..3e4bb2c 100644 --- a/bj_power_mes/public/assets/ChangePassword-7_NBFIM7.js +++ b/bj_power_mes/public/assets/ChangePassword-D-u1tXDb.js @@ -1 +1 @@ -import{n as V,w as l,r as a,u as b,o as y,a as s,e as x,f as i,d as v,l as C,E as n,h as k,v as h,i as B}from"./index-BORa7dH4.js";const E={__name:"ChangePassword",setup(N){const p=b(),d=B(!1),e=C({oldPassword:"",newPassword:"",confirmPassword:""});async function m(){if(!e.oldPassword||!e.newPassword)return n.warning("请填写旧密码和新密码");if(e.newPassword!==e.confirmPassword)return n.warning("两次输入的新密码不一致");if(e.newPassword.length<6)return n.warning("新密码长度至少 6 位");d.value=!0;try{await k.post("/user/change-password",{oldPassword:e.oldPassword,newPassword:e.newPassword}),n.success("密码修改成功,请重新登录"),h(),p.replace("/login")}catch{}finally{d.value=!1}}function f(){e.oldPassword="",e.newPassword="",e.confirmPassword=""}return(P,o)=>{const c=a("el-alert"),w=a("el-input"),t=a("el-form-item"),u=a("el-button"),_=a("el-form"),g=a("el-card");return y(),V(g,{style:{"max-width":"480px","margin-top":"20px"}},{header:l(()=>[...o[4]||(o[4]=[v("b",null,"修改我的密码",-1)])]),default:l(()=>[s(c,{type:"warning",closable:!1,style:{"margin-bottom":"16px"},title:"密码修改成功后需重新登录"}),s(_,{model:e,"label-width":"100px",onSubmit:o[3]||(o[3]=x(()=>{},["prevent"]))},{default:l(()=>[s(t,{label:"旧密码"},{default:l(()=>[s(w,{modelValue:e.oldPassword,"onUpdate:modelValue":o[0]||(o[0]=r=>e.oldPassword=r),type:"password","show-password":"",placeholder:"请输入当前密码"},null,8,["modelValue"])]),_:1}),s(t,{label:"新密码"},{default:l(()=>[s(w,{modelValue:e.newPassword,"onUpdate:modelValue":o[1]||(o[1]=r=>e.newPassword=r),type:"password","show-password":"",placeholder:"至少 6 位"},null,8,["modelValue"])]),_:1}),s(t,{label:"确认新密码"},{default:l(()=>[s(w,{modelValue:e.confirmPassword,"onUpdate:modelValue":o[2]||(o[2]=r=>e.confirmPassword=r),type:"password","show-password":"",placeholder:"请再次输入新密码"},null,8,["modelValue"])]),_:1}),s(t,null,{default:l(()=>[s(u,{type:"primary",loading:d.value,onClick:m},{default:l(()=>[...o[5]||(o[5]=[i("保存",-1)])]),_:1},8,["loading"]),s(u,{onClick:f},{default:l(()=>[...o[6]||(o[6]=[i("重置",-1)])]),_:1})]),_:1})]),_:1},8,["model"])]),_:1})}}};export{E as default}; +import{n as V,w as l,r as a,u as b,o as y,a as s,e as x,f as i,d as v,l as C,E as n,h as k,v as h,i as B}from"./index-0akZQTPV.js";const E={__name:"ChangePassword",setup(N){const p=b(),d=B(!1),e=C({oldPassword:"",newPassword:"",confirmPassword:""});async function m(){if(!e.oldPassword||!e.newPassword)return n.warning("请填写旧密码和新密码");if(e.newPassword!==e.confirmPassword)return n.warning("两次输入的新密码不一致");if(e.newPassword.length<6)return n.warning("新密码长度至少 6 位");d.value=!0;try{await k.post("/user/change-password",{oldPassword:e.oldPassword,newPassword:e.newPassword}),n.success("密码修改成功,请重新登录"),h(),p.replace("/login")}catch{}finally{d.value=!1}}function f(){e.oldPassword="",e.newPassword="",e.confirmPassword=""}return(P,o)=>{const c=a("el-alert"),w=a("el-input"),t=a("el-form-item"),u=a("el-button"),_=a("el-form"),g=a("el-card");return y(),V(g,{style:{"max-width":"480px","margin-top":"20px"}},{header:l(()=>[...o[4]||(o[4]=[v("b",null,"修改我的密码",-1)])]),default:l(()=>[s(c,{type:"warning",closable:!1,style:{"margin-bottom":"16px"},title:"密码修改成功后需重新登录"}),s(_,{model:e,"label-width":"100px",onSubmit:o[3]||(o[3]=x(()=>{},["prevent"]))},{default:l(()=>[s(t,{label:"旧密码"},{default:l(()=>[s(w,{modelValue:e.oldPassword,"onUpdate:modelValue":o[0]||(o[0]=r=>e.oldPassword=r),type:"password","show-password":"",placeholder:"请输入当前密码"},null,8,["modelValue"])]),_:1}),s(t,{label:"新密码"},{default:l(()=>[s(w,{modelValue:e.newPassword,"onUpdate:modelValue":o[1]||(o[1]=r=>e.newPassword=r),type:"password","show-password":"",placeholder:"至少 6 位"},null,8,["modelValue"])]),_:1}),s(t,{label:"确认新密码"},{default:l(()=>[s(w,{modelValue:e.confirmPassword,"onUpdate:modelValue":o[2]||(o[2]=r=>e.confirmPassword=r),type:"password","show-password":"",placeholder:"请再次输入新密码"},null,8,["modelValue"])]),_:1}),s(t,null,{default:l(()=>[s(u,{type:"primary",loading:d.value,onClick:m},{default:l(()=>[...o[5]||(o[5]=[i("保存",-1)])]),_:1},8,["loading"]),s(u,{onClick:f},{default:l(()=>[...o[6]||(o[6]=[i("重置",-1)])]),_:1})]),_:1})]),_:1},8,["model"])]),_:1})}}};export{E as default}; diff --git a/bj_power_mes/public/assets/EventLog-D9KNbo8j.js b/bj_power_mes/public/assets/EventLog-pbGVVfEk.js similarity index 94% rename from bj_power_mes/public/assets/EventLog-D9KNbo8j.js rename to bj_power_mes/public/assets/EventLog-pbGVVfEk.js index 96897b3..af03ca3 100644 --- a/bj_power_mes/public/assets/EventLog-D9KNbo8j.js +++ b/bj_power_mes/public/assets/EventLog-pbGVVfEk.js @@ -1 +1 @@ -import{j as x,c as h,a as e,w as o,k,F as N,h as T,r as a,i as d,l as z,o as C,g as _,f as K}from"./index-BORa7dH4.js";import{i as U,P as E}from"./help-CJCtd61z.js";const B={__name:"EventLog",setup(I){const n=z({orderNo:"",operator:"",eventType:""}),c=d([]),b=d(0),i=d(1),g=d(20);async function u(){const r=await T.get("/event-logs",{params:{...n,page:i.value,pageSize:g.value}});c.value=(r==null?void 0:r.list)||[],b.value=(r==null?void 0:r.total)||0}return x(u),(r,t)=>{const m=a("el-input"),s=a("el-form-item"),f=a("el-button"),y=a("el-form"),l=a("el-table-column"),v=a("el-table"),w=a("el-pagination"),V=a("el-card");return C(),h(N,null,[e(V,null,{default:o(()=>[e(y,{inline:""},{default:o(()=>[e(s,{label:"工单号"},{default:o(()=>[e(m,{modelValue:n.orderNo,"onUpdate:modelValue":t[0]||(t[0]=p=>n.orderNo=p),clearable:"",style:{width:"180px"},onKeyup:_(u,["enter"])},null,8,["modelValue"])]),_:1}),e(s,{label:"操作人"},{default:o(()=>[e(m,{modelValue:n.operator,"onUpdate:modelValue":t[1]||(t[1]=p=>n.operator=p),clearable:"",style:{width:"120px"},onKeyup:_(u,["enter"])},null,8,["modelValue"])]),_:1}),e(s,{label:"类型"},{default:o(()=>[e(m,{modelValue:n.eventType,"onUpdate:modelValue":t[2]||(t[2]=p=>n.eventType=p),clearable:"",style:{width:"180px"},onKeyup:_(u,["enter"])},null,8,["modelValue"])]),_:1}),e(s,null,{default:o(()=>[e(f,{type:"primary",onClick:u},{default:o(()=>[...t[4]||(t[4]=[K("查询",-1)])]),_:1})]),_:1})]),_:1}),e(v,{data:c.value,border:"",size:"small"},{default:o(()=>[e(l,{prop:"id",label:"ID",width:"60"}),e(l,{prop:"eventType",label:"事件类型","min-width":"150"}),e(l,{prop:"workOrderNo",label:"工单号","min-width":"130"}),e(l,{prop:"description",label:"描述","min-width":"160"}),e(l,{prop:"entityType",label:"实体",width:"130"}),e(l,{prop:"entityId",label:"实体ID",width:"120"}),e(l,{prop:"operator",label:"操作人",width:"90"}),e(l,{prop:"createdAt",label:"时间","min-width":"170"})]),_:1},8,["data"]),e(w,{"current-page":i.value,"onUpdate:currentPage":t[3]||(t[3]=p=>i.value=p),"page-size":g.value,total:b.value,layout:"total, prev, pager, next",background:"",style:{"margin-top":"10px"},onCurrentChange:u},null,8,["current-page","page-size","total"])]),_:1}),e(E,{data:k(U)},null,8,["data"])],64)}}};export{B as default}; +import{j as x,c as h,a as e,w as o,k,F as N,h as T,r as a,i as d,l as z,o as C,g as _,f as K}from"./index-0akZQTPV.js";import{i as U,P as E}from"./help-DqtsZH2B.js";const B={__name:"EventLog",setup(I){const n=z({orderNo:"",operator:"",eventType:""}),c=d([]),b=d(0),i=d(1),g=d(20);async function u(){const r=await T.get("/event-logs",{params:{...n,page:i.value,pageSize:g.value}});c.value=(r==null?void 0:r.list)||[],b.value=(r==null?void 0:r.total)||0}return x(u),(r,t)=>{const m=a("el-input"),s=a("el-form-item"),f=a("el-button"),y=a("el-form"),l=a("el-table-column"),v=a("el-table"),w=a("el-pagination"),V=a("el-card");return C(),h(N,null,[e(V,null,{default:o(()=>[e(y,{inline:""},{default:o(()=>[e(s,{label:"工单号"},{default:o(()=>[e(m,{modelValue:n.orderNo,"onUpdate:modelValue":t[0]||(t[0]=p=>n.orderNo=p),clearable:"",style:{width:"180px"},onKeyup:_(u,["enter"])},null,8,["modelValue"])]),_:1}),e(s,{label:"操作人"},{default:o(()=>[e(m,{modelValue:n.operator,"onUpdate:modelValue":t[1]||(t[1]=p=>n.operator=p),clearable:"",style:{width:"120px"},onKeyup:_(u,["enter"])},null,8,["modelValue"])]),_:1}),e(s,{label:"类型"},{default:o(()=>[e(m,{modelValue:n.eventType,"onUpdate:modelValue":t[2]||(t[2]=p=>n.eventType=p),clearable:"",style:{width:"180px"},onKeyup:_(u,["enter"])},null,8,["modelValue"])]),_:1}),e(s,null,{default:o(()=>[e(f,{type:"primary",onClick:u},{default:o(()=>[...t[4]||(t[4]=[K("查询",-1)])]),_:1})]),_:1})]),_:1}),e(v,{data:c.value,border:"",size:"small"},{default:o(()=>[e(l,{prop:"id",label:"ID",width:"60"}),e(l,{prop:"eventType",label:"事件类型","min-width":"150"}),e(l,{prop:"workOrderNo",label:"工单号","min-width":"130"}),e(l,{prop:"description",label:"描述","min-width":"160"}),e(l,{prop:"entityType",label:"实体",width:"130"}),e(l,{prop:"entityId",label:"实体ID",width:"120"}),e(l,{prop:"operator",label:"操作人",width:"90"}),e(l,{prop:"createdAt",label:"时间","min-width":"170"})]),_:1},8,["data"]),e(w,{"current-page":i.value,"onUpdate:currentPage":t[3]||(t[3]=p=>i.value=p),"page-size":g.value,total:b.value,layout:"total, prev, pager, next",background:"",style:{"margin-top":"10px"},onCurrentChange:u},null,8,["current-page","page-size","total"])]),_:1}),e(E,{data:k(U)},null,8,["data"])],64)}}};export{B as default}; diff --git a/bj_power_mes/public/assets/Login-QL740R5V.js b/bj_power_mes/public/assets/Login-BKOWbZ3k.js similarity index 95% rename from bj_power_mes/public/assets/Login-QL740R5V.js rename to bj_power_mes/public/assets/Login-BKOWbZ3k.js index 72b9fac..8230fe2 100644 --- a/bj_power_mes/public/assets/Login-QL740R5V.js +++ b/bj_power_mes/public/assets/Login-BKOWbZ3k.js @@ -1 +1 @@ -import{_ as V,c as x,a as o,w as t,r as s,u as k,b as S,o as b,d as E,e as N,f as d,g as z,E as B,h as _,s as C,i as p}from"./index-BORa7dH4.js";const L={class:"login-wrap"},M={__name:"Login",setup(q){const f=k(),g=S(),a=p("admin"),l=p(""),n=p(!1);async function r(){if(!a.value||!l.value)return B.warning("请输入账号和密码");n.value=!0;try{const u=await _.post("/login",{username:a.value,password:l.value});C(u.accessToken,{username:a.value});const e=await _.get("/userinfo");localStorage.setItem("user",JSON.stringify(e)),f.replace(g.query.redirect||"/work-order")}catch{}finally{n.value=!1}}return(u,e)=>{const m=s("el-input"),c=s("el-form-item"),v=s("el-button"),w=s("el-form"),y=s("el-card");return b(),x("div",L,[o(y,{class:"login-card"},{default:t(()=>[e[5]||(e[5]=E("h2",{class:"title"},"MES 产线控制",-1)),o(w,{onSubmit:N(r,["prevent"])},{default:t(()=>[o(c,null,{default:t(()=>[o(m,{modelValue:a.value,"onUpdate:modelValue":e[0]||(e[0]=i=>a.value=i),placeholder:"用户名",size:"large"},{prefix:t(()=>[...e[2]||(e[2]=[d("👤",-1)])]),_:1},8,["modelValue"])]),_:1}),o(c,null,{default:t(()=>[o(m,{modelValue:l.value,"onUpdate:modelValue":e[1]||(e[1]=i=>l.value=i),type:"password",placeholder:"密码",size:"large","show-password":"",onKeyup:z(r,["enter"])},{prefix:t(()=>[...e[3]||(e[3]=[d("🔒",-1)])]),_:1},8,["modelValue"])]),_:1}),o(v,{type:"primary",size:"large",style:{width:"100%"},loading:n.value,onClick:r},{default:t(()=>[...e[4]||(e[4]=[d("登 录",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})])}}},K=V(M,[["__scopeId","data-v-ee01258d"]]);export{K as default}; +import{_ as V,c as x,a as o,w as t,r as s,u as k,b as S,o as b,d as E,e as N,f as d,g as z,E as B,h as _,s as C,i as p}from"./index-0akZQTPV.js";const L={class:"login-wrap"},M={__name:"Login",setup(q){const f=k(),g=S(),a=p("admin"),l=p(""),n=p(!1);async function r(){if(!a.value||!l.value)return B.warning("请输入账号和密码");n.value=!0;try{const u=await _.post("/login",{username:a.value,password:l.value});C(u.accessToken,{username:a.value});const e=await _.get("/userinfo");localStorage.setItem("user",JSON.stringify(e)),f.replace(g.query.redirect||"/work-order")}catch{}finally{n.value=!1}}return(u,e)=>{const m=s("el-input"),c=s("el-form-item"),v=s("el-button"),w=s("el-form"),y=s("el-card");return b(),x("div",L,[o(y,{class:"login-card"},{default:t(()=>[e[5]||(e[5]=E("h2",{class:"title"},"MES 产线控制",-1)),o(w,{onSubmit:N(r,["prevent"])},{default:t(()=>[o(c,null,{default:t(()=>[o(m,{modelValue:a.value,"onUpdate:modelValue":e[0]||(e[0]=i=>a.value=i),placeholder:"用户名",size:"large"},{prefix:t(()=>[...e[2]||(e[2]=[d("👤",-1)])]),_:1},8,["modelValue"])]),_:1}),o(c,null,{default:t(()=>[o(m,{modelValue:l.value,"onUpdate:modelValue":e[1]||(e[1]=i=>l.value=i),type:"password",placeholder:"密码",size:"large","show-password":"",onKeyup:z(r,["enter"])},{prefix:t(()=>[...e[3]||(e[3]=[d("🔒",-1)])]),_:1},8,["modelValue"])]),_:1}),o(v,{type:"primary",size:"large",style:{width:"100%"},loading:n.value,onClick:r},{default:t(()=>[...e[4]||(e[4]=[d("登 录",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})])}}},K=V(M,[["__scopeId","data-v-ee01258d"]]);export{K as default}; diff --git a/bj_power_mes/public/assets/MaterialRequest-CWLPKDuD.js b/bj_power_mes/public/assets/MaterialRequest-HEPebPYp.js similarity index 94% rename from bj_power_mes/public/assets/MaterialRequest-CWLPKDuD.js rename to bj_power_mes/public/assets/MaterialRequest-HEPebPYp.js index 4dbb5e8..1c0d20d 100644 --- a/bj_power_mes/public/assets/MaterialRequest-CWLPKDuD.js +++ b/bj_power_mes/public/assets/MaterialRequest-HEPebPYp.js @@ -1 +1 @@ -import{j as N,c as h,a as e,w as o,k as M,F as k,l as q,h as c,r as n,i as x,o as C,g as f,f as d,t as v,E as b}from"./index-BORa7dH4.js";import{b as S,P as Y}from"./help-CJCtd61z.js";const B={__name:"MaterialRequest",setup(E){const t=q({planDate:"",orderNo:"",status:""}),i=x([]);async function s(){i.value=await c.get("/material-requests",{params:t})||[]}async function w(){if(!t.planDate)return b.warning("请先选择排产日期");const p=await c.post("/material-requests/generate",{planDate:t.planDate});b.success(`已生成 ${(p==null?void 0:p.count)||0} 条备料`),s()}return N(()=>{t.planDate=new Date().toISOString().slice(0,10),s()}),(p,a)=>{const y=n("el-date-picker"),u=n("el-form-item"),m=n("el-input"),_=n("el-button"),g=n("el-form"),l=n("el-table-column"),D=n("el-table"),V=n("el-card");return C(),h(k,null,[e(V,null,{default:o(()=>[e(g,{inline:""},{default:o(()=>[e(u,{label:"日期"},{default:o(()=>[e(y,{modelValue:t.planDate,"onUpdate:modelValue":a[0]||(a[0]=r=>t.planDate=r),type:"date","value-format":"YYYY-MM-DD",onChange:s},null,8,["modelValue"])]),_:1}),e(u,{label:"工单号"},{default:o(()=>[e(m,{modelValue:t.orderNo,"onUpdate:modelValue":a[1]||(a[1]=r=>t.orderNo=r),clearable:"",style:{width:"160px"},onKeyup:f(s,["enter"])},null,8,["modelValue"])]),_:1}),e(u,{label:"状态"},{default:o(()=>[e(m,{modelValue:t.status,"onUpdate:modelValue":a[2]||(a[2]=r=>t.status=r),style:{width:"120px"},onKeyup:f(s,["enter"])},null,8,["modelValue"])]),_:1}),e(u,null,{default:o(()=>[e(_,{type:"primary",onClick:s},{default:o(()=>[...a[3]||(a[3]=[d("查询",-1)])]),_:1}),e(_,{type:"success",onClick:w},{default:o(()=>[...a[4]||(a[4]=[d("按日排产生成备料",-1)])]),_:1})]),_:1})]),_:1}),e(D,{data:i.value,border:"",size:"small"},{default:o(()=>[e(l,{prop:"requestNo",label:"备料单号","min-width":"180"}),e(l,{prop:"orderNo",label:"工单号","min-width":"130"}),e(l,{prop:"planDate",label:"排产日期",width:"110"}),e(l,{prop:"materialCode",label:"物料编码","min-width":"110"}),e(l,{prop:"materialName",label:"物料名称","min-width":"110"}),e(l,{prop:"unit",label:"单位",width:"70"}),e(l,{prop:"manageMode",label:"管理方式",width:"110"},{default:o(({row:r})=>[d(v(r.manageMode==="1"?"SN":"批次"),1)]),_:1}),e(l,{prop:"reqQty",label:"需求数量",width:"90"}),e(l,{prop:"status",label:"状态",width:"90"}),e(l,{prop:"operator",label:"操作人",width:"90"})]),_:1},8,["data"])]),_:1}),e(Y,{data:M(S)},null,8,["data"])],64)}}};export{B as default}; +import{j as N,c as h,a as e,w as o,k as M,F as k,l as q,h as c,r as n,i as x,o as C,g as f,f as d,t as v,E as b}from"./index-0akZQTPV.js";import{b as S,P as Y}from"./help-DqtsZH2B.js";const B={__name:"MaterialRequest",setup(E){const t=q({planDate:"",orderNo:"",status:""}),i=x([]);async function s(){i.value=await c.get("/material-requests",{params:t})||[]}async function w(){if(!t.planDate)return b.warning("请先选择排产日期");const p=await c.post("/material-requests/generate",{planDate:t.planDate});b.success(`已生成 ${(p==null?void 0:p.count)||0} 条备料`),s()}return N(()=>{t.planDate=new Date().toISOString().slice(0,10),s()}),(p,a)=>{const y=n("el-date-picker"),u=n("el-form-item"),m=n("el-input"),_=n("el-button"),g=n("el-form"),l=n("el-table-column"),D=n("el-table"),V=n("el-card");return C(),h(k,null,[e(V,null,{default:o(()=>[e(g,{inline:""},{default:o(()=>[e(u,{label:"日期"},{default:o(()=>[e(y,{modelValue:t.planDate,"onUpdate:modelValue":a[0]||(a[0]=r=>t.planDate=r),type:"date","value-format":"YYYY-MM-DD",onChange:s},null,8,["modelValue"])]),_:1}),e(u,{label:"工单号"},{default:o(()=>[e(m,{modelValue:t.orderNo,"onUpdate:modelValue":a[1]||(a[1]=r=>t.orderNo=r),clearable:"",style:{width:"160px"},onKeyup:f(s,["enter"])},null,8,["modelValue"])]),_:1}),e(u,{label:"状态"},{default:o(()=>[e(m,{modelValue:t.status,"onUpdate:modelValue":a[2]||(a[2]=r=>t.status=r),style:{width:"120px"},onKeyup:f(s,["enter"])},null,8,["modelValue"])]),_:1}),e(u,null,{default:o(()=>[e(_,{type:"primary",onClick:s},{default:o(()=>[...a[3]||(a[3]=[d("查询",-1)])]),_:1}),e(_,{type:"success",onClick:w},{default:o(()=>[...a[4]||(a[4]=[d("按日排产生成备料",-1)])]),_:1})]),_:1})]),_:1}),e(D,{data:i.value,border:"",size:"small"},{default:o(()=>[e(l,{prop:"requestNo",label:"备料单号","min-width":"180"}),e(l,{prop:"orderNo",label:"工单号","min-width":"130"}),e(l,{prop:"planDate",label:"排产日期",width:"110"}),e(l,{prop:"materialCode",label:"物料编码","min-width":"110"}),e(l,{prop:"materialName",label:"物料名称","min-width":"110"}),e(l,{prop:"unit",label:"单位",width:"70"}),e(l,{prop:"manageMode",label:"管理方式",width:"110"},{default:o(({row:r})=>[d(v(r.manageMode==="1"?"SN":"批次"),1)]),_:1}),e(l,{prop:"reqQty",label:"需求数量",width:"90"}),e(l,{prop:"status",label:"状态",width:"90"}),e(l,{prop:"operator",label:"操作人",width:"90"})]),_:1},8,["data"])]),_:1}),e(Y,{data:M(S)},null,8,["data"])],64)}}};export{B as default}; diff --git a/bj_power_mes/public/assets/PlcSend-DJ_ld__Q.js b/bj_power_mes/public/assets/PlcSend-B772h7Wq.js similarity index 95% rename from bj_power_mes/public/assets/PlcSend-DJ_ld__Q.js rename to bj_power_mes/public/assets/PlcSend-B772h7Wq.js index fb25e10..5e697cb 100644 --- a/bj_power_mes/public/assets/PlcSend-DJ_ld__Q.js +++ b/bj_power_mes/public/assets/PlcSend-B772h7Wq.js @@ -1 +1 @@ -import{j as k,c as v,a as e,w as o,k as U,F as S,h as f,r as d,i as h,l as c,o as P,f as u,t as E,E as w}from"./index-BORa7dH4.js";import{c as T,P as q}from"./help-CJCtd61z.js";const M={__name:"PlcSend",setup(B){const a=c({orderNo:"",sn:"",stationNo:1,processCombination:""}),r=c({orderNo:"",status:""}),m=h([]);async function V(){if(!a.orderNo||!a.processCombination)return w.warning("请填写工单号和工序组合");try{await f.post("/plc/send-process",{...a}),w.success("工序码下发成功(未收到完成信号不会下发下一条)"),i()}catch{}}async function i(){m.value=await f.get("/plc/send-logs",{params:r})||[]}return k(i),(N,l)=>{const p=d("el-input"),s=d("el-form-item"),y=d("el-input-number"),_=d("el-button"),b=d("el-form"),x=d("el-divider"),n=d("el-table-column"),C=d("el-table"),g=d("el-card");return P(),v(S,null,[e(g,null,{default:o(()=>[e(b,{inline:""},{default:o(()=>[e(s,{label:"工单号"},{default:o(()=>[e(p,{modelValue:a.orderNo,"onUpdate:modelValue":l[0]||(l[0]=t=>a.orderNo=t),style:{width:"170px"}},null,8,["modelValue"])]),_:1}),e(s,{label:"工件SN"},{default:o(()=>[e(p,{modelValue:a.sn,"onUpdate:modelValue":l[1]||(l[1]=t=>a.sn=t),style:{width:"170px"}},null,8,["modelValue"])]),_:1}),e(s,{label:"工位"},{default:o(()=>[e(y,{modelValue:a.stationNo,"onUpdate:modelValue":l[2]||(l[2]=t=>a.stationNo=t),min:1,max:12},null,8,["modelValue"])]),_:1}),e(s,{label:"工序组合"},{default:o(()=>[e(p,{modelValue:a.processCombination,"onUpdate:modelValue":l[3]||(l[3]=t=>a.processCombination=t),placeholder:"如 135",style:{width:"110px"}},null,8,["modelValue"])]),_:1}),e(s,null,{default:o(()=>[e(_,{type:"primary",onClick:V},{default:o(()=>[...l[6]||(l[6]=[u("下发工序码",-1)])]),_:1})]),_:1})]),_:1}),e(x,{"content-position":"left"},{default:o(()=>[...l[7]||(l[7]=[u("下发日志",-1)])]),_:1}),e(b,{inline:""},{default:o(()=>[e(s,{label:"工单号"},{default:o(()=>[e(p,{modelValue:r.orderNo,"onUpdate:modelValue":l[4]||(l[4]=t=>r.orderNo=t),clearable:"",style:{width:"160px"}},null,8,["modelValue"])]),_:1}),e(s,{label:"状态"},{default:o(()=>[e(p,{modelValue:r.status,"onUpdate:modelValue":l[5]||(l[5]=t=>r.status=t),style:{width:"120px"}},null,8,["modelValue"])]),_:1}),e(s,null,{default:o(()=>[e(_,{onClick:i},{default:o(()=>[...l[8]||(l[8]=[u("刷新",-1)])]),_:1})]),_:1})]),_:1}),e(C,{data:m.value,border:"",size:"small"},{default:o(()=>[e(n,{prop:"id",label:"ID",width:"60"}),e(n,{prop:"orderNo",label:"工单号","min-width":"130"}),e(n,{prop:"sn",label:"SN","min-width":"130"}),e(n,{prop:"stationNo",label:"工位",width:"70"}),e(n,{prop:"processCombination",label:"工序组合",width:"100"}),e(n,{prop:"processCodes",label:"工序码",width:"120"}),e(n,{prop:"status",label:"状态",width:"90"}),e(n,{prop:"ack",label:"完成",width:"70"},{default:o(({row:t})=>[u(E(t.ack?"是":"否"),1)]),_:1}),e(n,{prop:"sendTime",label:"下发时间",width:"170"}),e(n,{prop:"doneTime",label:"完成时间",width:"170"}),e(n,{prop:"operator",label:"操作人",width:"90"})]),_:1},8,["data"])]),_:1}),e(q,{data:U(T)},null,8,["data"])],64)}}};export{M as default}; +import{j as k,c as v,a as e,w as o,k as U,F as S,h as f,r as d,i as h,l as c,o as P,f as u,t as E,E as w}from"./index-0akZQTPV.js";import{c as T,P as q}from"./help-DqtsZH2B.js";const M={__name:"PlcSend",setup(B){const a=c({orderNo:"",sn:"",stationNo:1,processCombination:""}),r=c({orderNo:"",status:""}),m=h([]);async function V(){if(!a.orderNo||!a.processCombination)return w.warning("请填写工单号和工序组合");try{await f.post("/plc/send-process",{...a}),w.success("工序码下发成功(未收到完成信号不会下发下一条)"),i()}catch{}}async function i(){m.value=await f.get("/plc/send-logs",{params:r})||[]}return k(i),(N,l)=>{const p=d("el-input"),s=d("el-form-item"),y=d("el-input-number"),_=d("el-button"),b=d("el-form"),x=d("el-divider"),n=d("el-table-column"),C=d("el-table"),g=d("el-card");return P(),v(S,null,[e(g,null,{default:o(()=>[e(b,{inline:""},{default:o(()=>[e(s,{label:"工单号"},{default:o(()=>[e(p,{modelValue:a.orderNo,"onUpdate:modelValue":l[0]||(l[0]=t=>a.orderNo=t),style:{width:"170px"}},null,8,["modelValue"])]),_:1}),e(s,{label:"工件SN"},{default:o(()=>[e(p,{modelValue:a.sn,"onUpdate:modelValue":l[1]||(l[1]=t=>a.sn=t),style:{width:"170px"}},null,8,["modelValue"])]),_:1}),e(s,{label:"工位"},{default:o(()=>[e(y,{modelValue:a.stationNo,"onUpdate:modelValue":l[2]||(l[2]=t=>a.stationNo=t),min:1,max:12},null,8,["modelValue"])]),_:1}),e(s,{label:"工序组合"},{default:o(()=>[e(p,{modelValue:a.processCombination,"onUpdate:modelValue":l[3]||(l[3]=t=>a.processCombination=t),placeholder:"如 135",style:{width:"110px"}},null,8,["modelValue"])]),_:1}),e(s,null,{default:o(()=>[e(_,{type:"primary",onClick:V},{default:o(()=>[...l[6]||(l[6]=[u("下发工序码",-1)])]),_:1})]),_:1})]),_:1}),e(x,{"content-position":"left"},{default:o(()=>[...l[7]||(l[7]=[u("下发日志",-1)])]),_:1}),e(b,{inline:""},{default:o(()=>[e(s,{label:"工单号"},{default:o(()=>[e(p,{modelValue:r.orderNo,"onUpdate:modelValue":l[4]||(l[4]=t=>r.orderNo=t),clearable:"",style:{width:"160px"}},null,8,["modelValue"])]),_:1}),e(s,{label:"状态"},{default:o(()=>[e(p,{modelValue:r.status,"onUpdate:modelValue":l[5]||(l[5]=t=>r.status=t),style:{width:"120px"}},null,8,["modelValue"])]),_:1}),e(s,null,{default:o(()=>[e(_,{onClick:i},{default:o(()=>[...l[8]||(l[8]=[u("刷新",-1)])]),_:1})]),_:1})]),_:1}),e(C,{data:m.value,border:"",size:"small"},{default:o(()=>[e(n,{prop:"id",label:"ID",width:"60"}),e(n,{prop:"orderNo",label:"工单号","min-width":"130"}),e(n,{prop:"sn",label:"SN","min-width":"130"}),e(n,{prop:"stationNo",label:"工位",width:"70"}),e(n,{prop:"processCombination",label:"工序组合",width:"100"}),e(n,{prop:"processCodes",label:"工序码",width:"120"}),e(n,{prop:"status",label:"状态",width:"90"}),e(n,{prop:"ack",label:"完成",width:"70"},{default:o(({row:t})=>[u(E(t.ack?"是":"否"),1)]),_:1}),e(n,{prop:"sendTime",label:"下发时间",width:"170"}),e(n,{prop:"doneTime",label:"完成时间",width:"170"}),e(n,{prop:"operator",label:"操作人",width:"90"})]),_:1},8,["data"])]),_:1}),e(q,{data:U(T)},null,8,["data"])],64)}}};export{M as default}; diff --git a/bj_power_mes/public/assets/ProductType-Un9zwxaF.js b/bj_power_mes/public/assets/ProductType-Dppvewox.js similarity index 96% rename from bj_power_mes/public/assets/ProductType-Un9zwxaF.js rename to bj_power_mes/public/assets/ProductType-Dppvewox.js index ef1c687..b019867 100644 --- a/bj_power_mes/public/assets/ProductType-Un9zwxaF.js +++ b/bj_power_mes/public/assets/ProductType-Dppvewox.js @@ -1 +1 @@ -import{j as U,c as E,a as e,w as o,k as P,F as $,h as m,r as n,i as j,o as z,f as i,t as B,p as M,l as T,E as D}from"./index-BORa7dH4.js";import{g as F,P as N}from"./help-CJCtd61z.js";const I={__name:"ProductType",setup(O){const c=j([]),t=T({show:!1,id:0,name:"",code:"",category:"",remark:"",isActive:!0});async function f(){c.value=await m.get("/product-types")||[]}function w(){Object.assign(t,{show:!0,id:0,name:"",code:"",category:"",remark:"",isActive:!0})}function y(p){Object.assign(t,{show:!0,...p})}async function b(){t.id?await m.put("/product-types",{...t}):await m.post("/product-types",{...t}),D.success("保存成功"),t.show=!1,f()}async function g(p){await M.confirm("确认删除?","提示",{type:"warning"}),await m.delete(`/product-types/${p.id}`),f()}return U(f),(p,l)=>{const u=n("el-button"),s=n("el-form-item"),_=n("el-form"),d=n("el-table-column"),V=n("el-tag"),k=n("el-table"),r=n("el-input"),v=n("el-switch"),C=n("el-dialog"),x=n("el-card");return z(),E($,null,[e(x,null,{default:o(()=>[e(_,{inline:""},{default:o(()=>[e(s,null,{default:o(()=>[e(u,{type:"primary",onClick:w},{default:o(()=>[...l[7]||(l[7]=[i("新增产品类型",-1)])]),_:1})]),_:1})]),_:1}),e(k,{data:c.value,border:"",size:"small"},{default:o(()=>[e(d,{prop:"id",label:"ID",width:"60"}),e(d,{prop:"name",label:"名称","min-width":"120"}),e(d,{prop:"code",label:"编码","min-width":"120"}),e(d,{prop:"category",label:"类别",width:"110"}),e(d,{prop:"isActive",label:"启用",width:"80"},{default:o(({row:a})=>[e(V,{type:a.isActive?"success":"info"},{default:o(()=>[i(B(a.isActive?"是":"否"),1)]),_:2},1032,["type"])]),_:1}),e(d,{prop:"remark",label:"备注","min-width":"160"}),e(d,{label:"操作",width:"140"},{default:o(({row:a})=>[e(u,{size:"small",onClick:A=>y(a)},{default:o(()=>[...l[8]||(l[8]=[i("编辑",-1)])]),_:1},8,["onClick"]),e(u,{size:"small",type:"danger",onClick:A=>g(a)},{default:o(()=>[...l[9]||(l[9]=[i("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"]),e(C,{modelValue:t.show,"onUpdate:modelValue":l[6]||(l[6]=a=>t.show=a),title:t.id?"编辑产品类型":"新增产品类型",width:"460px"},{footer:o(()=>[e(u,{onClick:l[5]||(l[5]=a=>t.show=!1)},{default:o(()=>[...l[10]||(l[10]=[i("取消",-1)])]),_:1}),e(u,{type:"primary",onClick:b},{default:o(()=>[...l[11]||(l[11]=[i("保存",-1)])]),_:1})]),default:o(()=>[e(_,{model:t,"label-width":"80px"},{default:o(()=>[e(s,{label:"名称"},{default:o(()=>[e(r,{modelValue:t.name,"onUpdate:modelValue":l[0]||(l[0]=a=>t.name=a)},null,8,["modelValue"])]),_:1}),e(s,{label:"编码"},{default:o(()=>[e(r,{modelValue:t.code,"onUpdate:modelValue":l[1]||(l[1]=a=>t.code=a)},null,8,["modelValue"])]),_:1}),e(s,{label:"类别"},{default:o(()=>[e(r,{modelValue:t.category,"onUpdate:modelValue":l[2]||(l[2]=a=>t.category=a)},null,8,["modelValue"])]),_:1}),e(s,{label:"启用"},{default:o(()=>[e(v,{modelValue:t.isActive,"onUpdate:modelValue":l[3]||(l[3]=a=>t.isActive=a)},null,8,["modelValue"])]),_:1}),e(s,{label:"备注"},{default:o(()=>[e(r,{modelValue:t.remark,"onUpdate:modelValue":l[4]||(l[4]=a=>t.remark=a),type:"textarea"},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])]),_:1}),e(N,{data:P(F)},null,8,["data"])],64)}}};export{I as default}; +import{j as U,c as E,a as e,w as o,k as P,F as $,h as m,r as n,i as j,o as z,f as i,t as B,p as M,l as T,E as D}from"./index-0akZQTPV.js";import{g as F,P as N}from"./help-DqtsZH2B.js";const I={__name:"ProductType",setup(O){const c=j([]),t=T({show:!1,id:0,name:"",code:"",category:"",remark:"",isActive:!0});async function f(){c.value=await m.get("/product-types")||[]}function w(){Object.assign(t,{show:!0,id:0,name:"",code:"",category:"",remark:"",isActive:!0})}function y(p){Object.assign(t,{show:!0,...p})}async function b(){t.id?await m.put("/product-types",{...t}):await m.post("/product-types",{...t}),D.success("保存成功"),t.show=!1,f()}async function g(p){await M.confirm("确认删除?","提示",{type:"warning"}),await m.delete(`/product-types/${p.id}`),f()}return U(f),(p,l)=>{const u=n("el-button"),s=n("el-form-item"),_=n("el-form"),d=n("el-table-column"),V=n("el-tag"),k=n("el-table"),r=n("el-input"),v=n("el-switch"),C=n("el-dialog"),x=n("el-card");return z(),E($,null,[e(x,null,{default:o(()=>[e(_,{inline:""},{default:o(()=>[e(s,null,{default:o(()=>[e(u,{type:"primary",onClick:w},{default:o(()=>[...l[7]||(l[7]=[i("新增产品类型",-1)])]),_:1})]),_:1})]),_:1}),e(k,{data:c.value,border:"",size:"small"},{default:o(()=>[e(d,{prop:"id",label:"ID",width:"60"}),e(d,{prop:"name",label:"名称","min-width":"120"}),e(d,{prop:"code",label:"编码","min-width":"120"}),e(d,{prop:"category",label:"类别",width:"110"}),e(d,{prop:"isActive",label:"启用",width:"80"},{default:o(({row:a})=>[e(V,{type:a.isActive?"success":"info"},{default:o(()=>[i(B(a.isActive?"是":"否"),1)]),_:2},1032,["type"])]),_:1}),e(d,{prop:"remark",label:"备注","min-width":"160"}),e(d,{label:"操作",width:"140"},{default:o(({row:a})=>[e(u,{size:"small",onClick:A=>y(a)},{default:o(()=>[...l[8]||(l[8]=[i("编辑",-1)])]),_:1},8,["onClick"]),e(u,{size:"small",type:"danger",onClick:A=>g(a)},{default:o(()=>[...l[9]||(l[9]=[i("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"]),e(C,{modelValue:t.show,"onUpdate:modelValue":l[6]||(l[6]=a=>t.show=a),title:t.id?"编辑产品类型":"新增产品类型",width:"460px"},{footer:o(()=>[e(u,{onClick:l[5]||(l[5]=a=>t.show=!1)},{default:o(()=>[...l[10]||(l[10]=[i("取消",-1)])]),_:1}),e(u,{type:"primary",onClick:b},{default:o(()=>[...l[11]||(l[11]=[i("保存",-1)])]),_:1})]),default:o(()=>[e(_,{model:t,"label-width":"80px"},{default:o(()=>[e(s,{label:"名称"},{default:o(()=>[e(r,{modelValue:t.name,"onUpdate:modelValue":l[0]||(l[0]=a=>t.name=a)},null,8,["modelValue"])]),_:1}),e(s,{label:"编码"},{default:o(()=>[e(r,{modelValue:t.code,"onUpdate:modelValue":l[1]||(l[1]=a=>t.code=a)},null,8,["modelValue"])]),_:1}),e(s,{label:"类别"},{default:o(()=>[e(r,{modelValue:t.category,"onUpdate:modelValue":l[2]||(l[2]=a=>t.category=a)},null,8,["modelValue"])]),_:1}),e(s,{label:"启用"},{default:o(()=>[e(v,{modelValue:t.isActive,"onUpdate:modelValue":l[3]||(l[3]=a=>t.isActive=a)},null,8,["modelValue"])]),_:1}),e(s,{label:"备注"},{default:o(()=>[e(r,{modelValue:t.remark,"onUpdate:modelValue":l[4]||(l[4]=a=>t.remark=a),type:"textarea"},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])]),_:1}),e(N,{data:P(F)},null,8,["data"])],64)}}};export{I as default}; diff --git a/bj_power_mes/public/assets/Rbac-76zcPd_G.js b/bj_power_mes/public/assets/Rbac-DpQZV-fc.js similarity index 98% rename from bj_power_mes/public/assets/Rbac-76zcPd_G.js rename to bj_power_mes/public/assets/Rbac-DpQZV-fc.js index 47c1162..56b3bdd 100644 --- a/bj_power_mes/public/assets/Rbac-76zcPd_G.js +++ b/bj_power_mes/public/assets/Rbac-DpQZV-fc.js @@ -1 +1 @@ -import{j as X,c as I,a as l,w as a,k as Y,F as z,h as f,r as p,i as C,o as y,d as B,f as r,m as O,n as F,p as D,l as N,E as j}from"./index-BORa7dH4.js";import{j as Z,P as h}from"./help-CJCtd61z.js";const c={style:{"margin-bottom":"10px"}},ee={style:{"margin-bottom":"10px"}},le={style:{"margin-bottom":"10px"}},de={__name:"Rbac",setup(te){const A=C("users"),L=C([]),v=C([]),_=C([]),d=N({show:!1,id:0,username:"",password:"",name:"",roleId:0,status:"ENABLED"}),n=N({show:!1,id:0,name:"",code:"",remark:"",permissionCodes:[]}),o=N({show:!1,id:0,code:"",name:"",type:"MENU",path:"",sort:0,remark:""});async function w(){L.value=await f.get("/users")||[],v.value=await f.get("/roles")||[],_.value=await f.get("/permissions")||[]}function M(u){var e;Object.assign(d,u?{...u,show:!0,password:""}:{show:!0,id:0,username:"",password:"",name:"",roleId:((e=v.value[0])==null?void 0:e.id)||0,status:"ENABLED"})}async function q(){d.id?await f.put("/users",{...d}):await f.post("/users",{...d}),j.success("保存成功"),d.show=!1,w()}async function H(u){await D.confirm("确认删除该用户?","提示",{type:"warning"}),await f.delete(`/users/${u.id}`),w()}function P(u){Object.assign(n,u?{...u,show:!0}:{show:!0,id:0,name:"",code:"",remark:"",permissionCodes:[]})}async function S(){n.id?await f.put("/roles",{...n}):await f.post("/roles",{...n}),j.success("保存成功"),n.show=!1,w()}async function T(u){await D.confirm("确认删除该角色?","提示",{type:"warning"}),await f.delete(`/roles/${u.id}`),w()}function R(u){Object.assign(o,u?{...u,show:!0}:{show:!0,id:0,code:"",name:"",type:"MENU",path:"",sort:0,remark:""})}async function G(){o.id?await f.put("/permissions",{...o}):await f.post("/permissions",{...o}),j.success("保存成功"),o.show=!1,w()}async function J(u){await D.confirm("确认删除该权限?","提示",{type:"warning"}),await f.delete(`/permissions/${u.id}`),w()}return X(w),(u,e)=>{const i=p("el-button"),s=p("el-table-column"),U=p("el-table"),g=p("el-tab-pane"),K=p("el-tabs"),b=p("el-input"),m=p("el-form-item"),k=p("el-option"),$=p("el-select"),x=p("el-form"),E=p("el-dialog"),Q=p("el-input-number"),W=p("el-card");return y(),I(z,null,[l(W,null,{default:a(()=>[l(K,{modelValue:A.value,"onUpdate:modelValue":e[3]||(e[3]=t=>A.value=t)},{default:a(()=>[l(g,{label:"用户",name:"users"},{default:a(()=>[B("div",c,[l(i,{type:"primary",onClick:e[0]||(e[0]=t=>M())},{default:a(()=>[...e[25]||(e[25]=[r("新增用户",-1)])]),_:1})]),l(U,{data:L.value,border:"",size:"small"},{default:a(()=>[l(s,{prop:"id",label:"ID",width:"60"}),l(s,{prop:"username",label:"用户名","min-width":"120"}),l(s,{prop:"name",label:"姓名","min-width":"110"}),l(s,{prop:"roleId",label:"角色ID",width:"80"}),l(s,{prop:"status",label:"状态",width:"90"}),l(s,{label:"操作",width:"140"},{default:a(({row:t})=>[l(i,{size:"small",onClick:V=>M(t)},{default:a(()=>[...e[26]||(e[26]=[r("编辑",-1)])]),_:1},8,["onClick"]),l(i,{size:"small",type:"danger",onClick:V=>H(t)},{default:a(()=>[...e[27]||(e[27]=[r("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])]),_:1}),l(g,{label:"角色",name:"roles"},{default:a(()=>[B("div",ee,[l(i,{type:"primary",onClick:e[1]||(e[1]=t=>P())},{default:a(()=>[...e[28]||(e[28]=[r("新增角色",-1)])]),_:1})]),l(U,{data:v.value,border:"",size:"small"},{default:a(()=>[l(s,{prop:"id",label:"ID",width:"60"}),l(s,{prop:"name",label:"名称","min-width":"120"}),l(s,{prop:"code",label:"编码","min-width":"130"}),l(s,{prop:"remark",label:"备注","min-width":"150"}),l(s,{label:"操作",width:"140"},{default:a(({row:t})=>[l(i,{size:"small",onClick:V=>P(t)},{default:a(()=>[...e[29]||(e[29]=[r("编辑",-1)])]),_:1},8,["onClick"]),l(i,{size:"small",type:"danger",onClick:V=>T(t)},{default:a(()=>[...e[30]||(e[30]=[r("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])]),_:1}),l(g,{label:"权限菜单",name:"perms"},{default:a(()=>[B("div",le,[l(i,{type:"primary",onClick:e[2]||(e[2]=t=>R())},{default:a(()=>[...e[31]||(e[31]=[r("新增权限",-1)])]),_:1})]),l(U,{data:_.value,border:"",size:"small"},{default:a(()=>[l(s,{prop:"id",label:"ID",width:"60"}),l(s,{prop:"code",label:"编码","min-width":"150"}),l(s,{prop:"name",label:"名称","min-width":"120"}),l(s,{prop:"type",label:"类型",width:"80"}),l(s,{prop:"path",label:"路径","min-width":"120"}),l(s,{prop:"sort",label:"排序",width:"70"}),l(s,{label:"操作",width:"140"},{default:a(({row:t})=>[l(i,{size:"small",onClick:V=>R(t)},{default:a(()=>[...e[32]||(e[32]=[r("编辑",-1)])]),_:1},8,["onClick"]),l(i,{size:"small",type:"danger",onClick:V=>J(t)},{default:a(()=>[...e[33]||(e[33]=[r("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])]),_:1})]),_:1},8,["modelValue"]),l(E,{modelValue:d.show,"onUpdate:modelValue":e[10]||(e[10]=t=>d.show=t),title:d.id?"编辑用户":"新增用户",width:"420px"},{footer:a(()=>[l(i,{onClick:e[9]||(e[9]=t=>d.show=!1)},{default:a(()=>[...e[34]||(e[34]=[r("取消",-1)])]),_:1}),l(i,{type:"primary",onClick:q},{default:a(()=>[...e[35]||(e[35]=[r("保存",-1)])]),_:1})]),default:a(()=>[l(x,{model:d,"label-width":"80px"},{default:a(()=>[l(m,{label:"用户名"},{default:a(()=>[l(b,{modelValue:d.username,"onUpdate:modelValue":e[4]||(e[4]=t=>d.username=t)},null,8,["modelValue"])]),_:1}),l(m,{label:"密码"},{default:a(()=>[l(b,{modelValue:d.password,"onUpdate:modelValue":e[5]||(e[5]=t=>d.password=t),type:"password","show-password":""},null,8,["modelValue"])]),_:1}),l(m,{label:"姓名"},{default:a(()=>[l(b,{modelValue:d.name,"onUpdate:modelValue":e[6]||(e[6]=t=>d.name=t)},null,8,["modelValue"])]),_:1}),l(m,{label:"角色"},{default:a(()=>[l($,{modelValue:d.roleId,"onUpdate:modelValue":e[7]||(e[7]=t=>d.roleId=t),style:{width:"100%"}},{default:a(()=>[(y(!0),I(z,null,O(v.value,t=>(y(),F(k,{key:t.id,label:t.name,value:t.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),l(m,{label:"状态"},{default:a(()=>[l($,{modelValue:d.status,"onUpdate:modelValue":e[8]||(e[8]=t=>d.status=t),style:{width:"100%"}},{default:a(()=>[l(k,{label:"启用",value:"ENABLED"}),l(k,{label:"禁用",value:"DISABLED"})]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"]),l(E,{modelValue:n.show,"onUpdate:modelValue":e[16]||(e[16]=t=>n.show=t),title:n.id?"编辑角色":"新增角色",width:"560px"},{footer:a(()=>[l(i,{onClick:e[15]||(e[15]=t=>n.show=!1)},{default:a(()=>[...e[36]||(e[36]=[r("取消",-1)])]),_:1}),l(i,{type:"primary",onClick:S},{default:a(()=>[...e[37]||(e[37]=[r("保存",-1)])]),_:1})]),default:a(()=>[l(x,{model:n,"label-width":"80px"},{default:a(()=>[l(m,{label:"名称"},{default:a(()=>[l(b,{modelValue:n.name,"onUpdate:modelValue":e[11]||(e[11]=t=>n.name=t)},null,8,["modelValue"])]),_:1}),l(m,{label:"编码"},{default:a(()=>[l(b,{modelValue:n.code,"onUpdate:modelValue":e[12]||(e[12]=t=>n.code=t)},null,8,["modelValue"])]),_:1}),l(m,{label:"备注"},{default:a(()=>[l(b,{modelValue:n.remark,"onUpdate:modelValue":e[13]||(e[13]=t=>n.remark=t)},null,8,["modelValue"])]),_:1}),l(m,{label:"权限"},{default:a(()=>[l($,{modelValue:n.permissionCodes,"onUpdate:modelValue":e[14]||(e[14]=t=>n.permissionCodes=t),multiple:"",filterable:"",placeholder:"请选择权限",style:{width:"100%"}},{default:a(()=>[(y(!0),I(z,null,O(_.value,t=>(y(),F(k,{key:t.code,label:t.name,value:t.code},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"]),l(E,{modelValue:o.show,"onUpdate:modelValue":e[24]||(e[24]=t=>o.show=t),title:o.id?"编辑权限":"新增权限",width:"460px"},{footer:a(()=>[l(i,{onClick:e[23]||(e[23]=t=>o.show=!1)},{default:a(()=>[...e[38]||(e[38]=[r("取消",-1)])]),_:1}),l(i,{type:"primary",onClick:G},{default:a(()=>[...e[39]||(e[39]=[r("保存",-1)])]),_:1})]),default:a(()=>[l(x,{model:o,"label-width":"80px"},{default:a(()=>[l(m,{label:"编码"},{default:a(()=>[l(b,{modelValue:o.code,"onUpdate:modelValue":e[17]||(e[17]=t=>o.code=t)},null,8,["modelValue"])]),_:1}),l(m,{label:"名称"},{default:a(()=>[l(b,{modelValue:o.name,"onUpdate:modelValue":e[18]||(e[18]=t=>o.name=t)},null,8,["modelValue"])]),_:1}),l(m,{label:"类型"},{default:a(()=>[l(b,{modelValue:o.type,"onUpdate:modelValue":e[19]||(e[19]=t=>o.type=t)},null,8,["modelValue"])]),_:1}),l(m,{label:"路径"},{default:a(()=>[l(b,{modelValue:o.path,"onUpdate:modelValue":e[20]||(e[20]=t=>o.path=t)},null,8,["modelValue"])]),_:1}),l(m,{label:"排序"},{default:a(()=>[l(Q,{modelValue:o.sort,"onUpdate:modelValue":e[21]||(e[21]=t=>o.sort=t)},null,8,["modelValue"])]),_:1}),l(m,{label:"备注"},{default:a(()=>[l(b,{modelValue:o.remark,"onUpdate:modelValue":e[22]||(e[22]=t=>o.remark=t)},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])]),_:1}),l(h,{data:Y(Z)},null,8,["data"])],64)}}};export{de as default}; +import{j as X,c as I,a as l,w as a,k as Y,F as z,h as f,r as p,i as C,o as y,d as B,f as r,m as O,n as F,p as D,l as N,E as j}from"./index-0akZQTPV.js";import{j as Z,P as h}from"./help-DqtsZH2B.js";const c={style:{"margin-bottom":"10px"}},ee={style:{"margin-bottom":"10px"}},le={style:{"margin-bottom":"10px"}},de={__name:"Rbac",setup(te){const A=C("users"),L=C([]),v=C([]),_=C([]),d=N({show:!1,id:0,username:"",password:"",name:"",roleId:0,status:"ENABLED"}),n=N({show:!1,id:0,name:"",code:"",remark:"",permissionCodes:[]}),o=N({show:!1,id:0,code:"",name:"",type:"MENU",path:"",sort:0,remark:""});async function w(){L.value=await f.get("/users")||[],v.value=await f.get("/roles")||[],_.value=await f.get("/permissions")||[]}function M(u){var e;Object.assign(d,u?{...u,show:!0,password:""}:{show:!0,id:0,username:"",password:"",name:"",roleId:((e=v.value[0])==null?void 0:e.id)||0,status:"ENABLED"})}async function q(){d.id?await f.put("/users",{...d}):await f.post("/users",{...d}),j.success("保存成功"),d.show=!1,w()}async function H(u){await D.confirm("确认删除该用户?","提示",{type:"warning"}),await f.delete(`/users/${u.id}`),w()}function P(u){Object.assign(n,u?{...u,show:!0}:{show:!0,id:0,name:"",code:"",remark:"",permissionCodes:[]})}async function S(){n.id?await f.put("/roles",{...n}):await f.post("/roles",{...n}),j.success("保存成功"),n.show=!1,w()}async function T(u){await D.confirm("确认删除该角色?","提示",{type:"warning"}),await f.delete(`/roles/${u.id}`),w()}function R(u){Object.assign(o,u?{...u,show:!0}:{show:!0,id:0,code:"",name:"",type:"MENU",path:"",sort:0,remark:""})}async function G(){o.id?await f.put("/permissions",{...o}):await f.post("/permissions",{...o}),j.success("保存成功"),o.show=!1,w()}async function J(u){await D.confirm("确认删除该权限?","提示",{type:"warning"}),await f.delete(`/permissions/${u.id}`),w()}return X(w),(u,e)=>{const i=p("el-button"),s=p("el-table-column"),U=p("el-table"),g=p("el-tab-pane"),K=p("el-tabs"),b=p("el-input"),m=p("el-form-item"),k=p("el-option"),$=p("el-select"),x=p("el-form"),E=p("el-dialog"),Q=p("el-input-number"),W=p("el-card");return y(),I(z,null,[l(W,null,{default:a(()=>[l(K,{modelValue:A.value,"onUpdate:modelValue":e[3]||(e[3]=t=>A.value=t)},{default:a(()=>[l(g,{label:"用户",name:"users"},{default:a(()=>[B("div",c,[l(i,{type:"primary",onClick:e[0]||(e[0]=t=>M())},{default:a(()=>[...e[25]||(e[25]=[r("新增用户",-1)])]),_:1})]),l(U,{data:L.value,border:"",size:"small"},{default:a(()=>[l(s,{prop:"id",label:"ID",width:"60"}),l(s,{prop:"username",label:"用户名","min-width":"120"}),l(s,{prop:"name",label:"姓名","min-width":"110"}),l(s,{prop:"roleId",label:"角色ID",width:"80"}),l(s,{prop:"status",label:"状态",width:"90"}),l(s,{label:"操作",width:"140"},{default:a(({row:t})=>[l(i,{size:"small",onClick:V=>M(t)},{default:a(()=>[...e[26]||(e[26]=[r("编辑",-1)])]),_:1},8,["onClick"]),l(i,{size:"small",type:"danger",onClick:V=>H(t)},{default:a(()=>[...e[27]||(e[27]=[r("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])]),_:1}),l(g,{label:"角色",name:"roles"},{default:a(()=>[B("div",ee,[l(i,{type:"primary",onClick:e[1]||(e[1]=t=>P())},{default:a(()=>[...e[28]||(e[28]=[r("新增角色",-1)])]),_:1})]),l(U,{data:v.value,border:"",size:"small"},{default:a(()=>[l(s,{prop:"id",label:"ID",width:"60"}),l(s,{prop:"name",label:"名称","min-width":"120"}),l(s,{prop:"code",label:"编码","min-width":"130"}),l(s,{prop:"remark",label:"备注","min-width":"150"}),l(s,{label:"操作",width:"140"},{default:a(({row:t})=>[l(i,{size:"small",onClick:V=>P(t)},{default:a(()=>[...e[29]||(e[29]=[r("编辑",-1)])]),_:1},8,["onClick"]),l(i,{size:"small",type:"danger",onClick:V=>T(t)},{default:a(()=>[...e[30]||(e[30]=[r("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])]),_:1}),l(g,{label:"权限菜单",name:"perms"},{default:a(()=>[B("div",le,[l(i,{type:"primary",onClick:e[2]||(e[2]=t=>R())},{default:a(()=>[...e[31]||(e[31]=[r("新增权限",-1)])]),_:1})]),l(U,{data:_.value,border:"",size:"small"},{default:a(()=>[l(s,{prop:"id",label:"ID",width:"60"}),l(s,{prop:"code",label:"编码","min-width":"150"}),l(s,{prop:"name",label:"名称","min-width":"120"}),l(s,{prop:"type",label:"类型",width:"80"}),l(s,{prop:"path",label:"路径","min-width":"120"}),l(s,{prop:"sort",label:"排序",width:"70"}),l(s,{label:"操作",width:"140"},{default:a(({row:t})=>[l(i,{size:"small",onClick:V=>R(t)},{default:a(()=>[...e[32]||(e[32]=[r("编辑",-1)])]),_:1},8,["onClick"]),l(i,{size:"small",type:"danger",onClick:V=>J(t)},{default:a(()=>[...e[33]||(e[33]=[r("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])]),_:1})]),_:1},8,["modelValue"]),l(E,{modelValue:d.show,"onUpdate:modelValue":e[10]||(e[10]=t=>d.show=t),title:d.id?"编辑用户":"新增用户",width:"420px"},{footer:a(()=>[l(i,{onClick:e[9]||(e[9]=t=>d.show=!1)},{default:a(()=>[...e[34]||(e[34]=[r("取消",-1)])]),_:1}),l(i,{type:"primary",onClick:q},{default:a(()=>[...e[35]||(e[35]=[r("保存",-1)])]),_:1})]),default:a(()=>[l(x,{model:d,"label-width":"80px"},{default:a(()=>[l(m,{label:"用户名"},{default:a(()=>[l(b,{modelValue:d.username,"onUpdate:modelValue":e[4]||(e[4]=t=>d.username=t)},null,8,["modelValue"])]),_:1}),l(m,{label:"密码"},{default:a(()=>[l(b,{modelValue:d.password,"onUpdate:modelValue":e[5]||(e[5]=t=>d.password=t),type:"password","show-password":""},null,8,["modelValue"])]),_:1}),l(m,{label:"姓名"},{default:a(()=>[l(b,{modelValue:d.name,"onUpdate:modelValue":e[6]||(e[6]=t=>d.name=t)},null,8,["modelValue"])]),_:1}),l(m,{label:"角色"},{default:a(()=>[l($,{modelValue:d.roleId,"onUpdate:modelValue":e[7]||(e[7]=t=>d.roleId=t),style:{width:"100%"}},{default:a(()=>[(y(!0),I(z,null,O(v.value,t=>(y(),F(k,{key:t.id,label:t.name,value:t.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),l(m,{label:"状态"},{default:a(()=>[l($,{modelValue:d.status,"onUpdate:modelValue":e[8]||(e[8]=t=>d.status=t),style:{width:"100%"}},{default:a(()=>[l(k,{label:"启用",value:"ENABLED"}),l(k,{label:"禁用",value:"DISABLED"})]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"]),l(E,{modelValue:n.show,"onUpdate:modelValue":e[16]||(e[16]=t=>n.show=t),title:n.id?"编辑角色":"新增角色",width:"560px"},{footer:a(()=>[l(i,{onClick:e[15]||(e[15]=t=>n.show=!1)},{default:a(()=>[...e[36]||(e[36]=[r("取消",-1)])]),_:1}),l(i,{type:"primary",onClick:S},{default:a(()=>[...e[37]||(e[37]=[r("保存",-1)])]),_:1})]),default:a(()=>[l(x,{model:n,"label-width":"80px"},{default:a(()=>[l(m,{label:"名称"},{default:a(()=>[l(b,{modelValue:n.name,"onUpdate:modelValue":e[11]||(e[11]=t=>n.name=t)},null,8,["modelValue"])]),_:1}),l(m,{label:"编码"},{default:a(()=>[l(b,{modelValue:n.code,"onUpdate:modelValue":e[12]||(e[12]=t=>n.code=t)},null,8,["modelValue"])]),_:1}),l(m,{label:"备注"},{default:a(()=>[l(b,{modelValue:n.remark,"onUpdate:modelValue":e[13]||(e[13]=t=>n.remark=t)},null,8,["modelValue"])]),_:1}),l(m,{label:"权限"},{default:a(()=>[l($,{modelValue:n.permissionCodes,"onUpdate:modelValue":e[14]||(e[14]=t=>n.permissionCodes=t),multiple:"",filterable:"",placeholder:"请选择权限",style:{width:"100%"}},{default:a(()=>[(y(!0),I(z,null,O(_.value,t=>(y(),F(k,{key:t.code,label:t.name,value:t.code},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"]),l(E,{modelValue:o.show,"onUpdate:modelValue":e[24]||(e[24]=t=>o.show=t),title:o.id?"编辑权限":"新增权限",width:"460px"},{footer:a(()=>[l(i,{onClick:e[23]||(e[23]=t=>o.show=!1)},{default:a(()=>[...e[38]||(e[38]=[r("取消",-1)])]),_:1}),l(i,{type:"primary",onClick:G},{default:a(()=>[...e[39]||(e[39]=[r("保存",-1)])]),_:1})]),default:a(()=>[l(x,{model:o,"label-width":"80px"},{default:a(()=>[l(m,{label:"编码"},{default:a(()=>[l(b,{modelValue:o.code,"onUpdate:modelValue":e[17]||(e[17]=t=>o.code=t)},null,8,["modelValue"])]),_:1}),l(m,{label:"名称"},{default:a(()=>[l(b,{modelValue:o.name,"onUpdate:modelValue":e[18]||(e[18]=t=>o.name=t)},null,8,["modelValue"])]),_:1}),l(m,{label:"类型"},{default:a(()=>[l(b,{modelValue:o.type,"onUpdate:modelValue":e[19]||(e[19]=t=>o.type=t)},null,8,["modelValue"])]),_:1}),l(m,{label:"路径"},{default:a(()=>[l(b,{modelValue:o.path,"onUpdate:modelValue":e[20]||(e[20]=t=>o.path=t)},null,8,["modelValue"])]),_:1}),l(m,{label:"排序"},{default:a(()=>[l(Q,{modelValue:o.sort,"onUpdate:modelValue":e[21]||(e[21]=t=>o.sort=t)},null,8,["modelValue"])]),_:1}),l(m,{label:"备注"},{default:a(()=>[l(b,{modelValue:o.remark,"onUpdate:modelValue":e[22]||(e[22]=t=>o.remark=t)},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])]),_:1}),l(h,{data:Y(Z)},null,8,["data"])],64)}}};export{de as default}; diff --git a/bj_power_mes/public/assets/Scan-D2iJS4hm.js b/bj_power_mes/public/assets/Scan-B_JseKq5.js similarity index 95% rename from bj_power_mes/public/assets/Scan-D2iJS4hm.js rename to bj_power_mes/public/assets/Scan-B_JseKq5.js index 9600205..bf136f5 100644 --- a/bj_power_mes/public/assets/Scan-D2iJS4hm.js +++ b/bj_power_mes/public/assets/Scan-B_JseKq5.js @@ -1 +1 @@ -import{j as x,c as O,a as e,w as o,k as P,F as U,h as c,r as a,i as g,l as V,o as k,f as m,E as N}from"./index-BORa7dH4.js";import{e as R,P as T}from"./help-CJCtd61z.js";const D={__name:"Scan",setup(M){const t=V({sn:"",orderNo:"",station:"",type:"PROCESS",processCode:0}),u=V({sn:"",orderNo:""}),_=g([]);async function w(){if(!t.sn)return N.warning("请输入SN");await c.post("/scan/report",t),N.success("报工成功"),Object.assign(t,{sn:"",station:"",processCode:0}),i()}async function i(){_.value=await c.get("/scan/records",{params:u})||[]}return x(i),(j,l)=>{const r=a("el-input"),d=a("el-form-item"),p=a("el-option"),y=a("el-select"),E=a("el-input-number"),f=a("el-button"),b=a("el-form"),S=a("el-divider"),s=a("el-table-column"),C=a("el-table"),v=a("el-card");return k(),O(U,null,[e(v,null,{default:o(()=>[e(b,{inline:""},{default:o(()=>[e(d,{label:"SN"},{default:o(()=>[e(r,{modelValue:t.sn,"onUpdate:modelValue":l[0]||(l[0]=n=>t.sn=n),style:{width:"170px"}},null,8,["modelValue"])]),_:1}),e(d,{label:"工单号"},{default:o(()=>[e(r,{modelValue:t.orderNo,"onUpdate:modelValue":l[1]||(l[1]=n=>t.orderNo=n),style:{width:"170px"}},null,8,["modelValue"])]),_:1}),e(d,{label:"工位"},{default:o(()=>[e(r,{modelValue:t.station,"onUpdate:modelValue":l[2]||(l[2]=n=>t.station=n),style:{width:"90px"}},null,8,["modelValue"])]),_:1}),e(d,{label:"类型"},{default:o(()=>[e(y,{modelValue:t.type,"onUpdate:modelValue":l[3]||(l[3]=n=>t.type=n),placeholder:"请选择类型",style:{width:"130px"}},{default:o(()=>[e(p,{label:"进线ONLINE",value:"ONLINE"}),e(p,{label:"工序PROCESS",value:"PROCESS"}),e(p,{label:"完工DONE",value:"DONE"}),e(p,{label:"暂存TEMP_STORE",value:"TEMP_STORE"})]),_:1},8,["modelValue"])]),_:1}),e(d,{label:"工序号"},{default:o(()=>[e(E,{modelValue:t.processCode,"onUpdate:modelValue":l[4]||(l[4]=n=>t.processCode=n),min:0},null,8,["modelValue"])]),_:1}),e(d,null,{default:o(()=>[e(f,{type:"primary",onClick:w},{default:o(()=>[...l[7]||(l[7]=[m("扫码报工",-1)])]),_:1})]),_:1})]),_:1}),e(S,{"content-position":"left"},{default:o(()=>[...l[8]||(l[8]=[m("报工记录",-1)])]),_:1}),e(b,{inline:""},{default:o(()=>[e(d,{label:"SN"},{default:o(()=>[e(r,{modelValue:u.sn,"onUpdate:modelValue":l[5]||(l[5]=n=>u.sn=n),clearable:"",style:{width:"160px"}},null,8,["modelValue"])]),_:1}),e(d,{label:"工单号"},{default:o(()=>[e(r,{modelValue:u.orderNo,"onUpdate:modelValue":l[6]||(l[6]=n=>u.orderNo=n),clearable:"",style:{width:"160px"}},null,8,["modelValue"])]),_:1}),e(d,null,{default:o(()=>[e(f,{onClick:i},{default:o(()=>[...l[9]||(l[9]=[m("刷新",-1)])]),_:1})]),_:1})]),_:1}),e(C,{data:_.value,border:"",size:"small"},{default:o(()=>[e(s,{prop:"sn",label:"SN","min-width":"130"}),e(s,{prop:"orderNo",label:"工单号","min-width":"130"}),e(s,{prop:"station",label:"工位",width:"80"}),e(s,{prop:"type",label:"类型",width:"110"}),e(s,{prop:"processCode",label:"工序号",width:"80"}),e(s,{prop:"operator",label:"操作人",width:"90"}),e(s,{prop:"time",label:"时间","min-width":"170"})]),_:1},8,["data"])]),_:1}),e(T,{data:P(R)},null,8,["data"])],64)}}};export{D as default}; +import{j as x,c as O,a as e,w as o,k as P,F as U,h as c,r as a,i as g,l as V,o as k,f as m,E as N}from"./index-0akZQTPV.js";import{e as R,P as T}from"./help-DqtsZH2B.js";const D={__name:"Scan",setup(M){const t=V({sn:"",orderNo:"",station:"",type:"PROCESS",processCode:0}),u=V({sn:"",orderNo:""}),_=g([]);async function w(){if(!t.sn)return N.warning("请输入SN");await c.post("/scan/report",t),N.success("报工成功"),Object.assign(t,{sn:"",station:"",processCode:0}),i()}async function i(){_.value=await c.get("/scan/records",{params:u})||[]}return x(i),(j,l)=>{const r=a("el-input"),d=a("el-form-item"),p=a("el-option"),y=a("el-select"),E=a("el-input-number"),f=a("el-button"),b=a("el-form"),S=a("el-divider"),s=a("el-table-column"),C=a("el-table"),v=a("el-card");return k(),O(U,null,[e(v,null,{default:o(()=>[e(b,{inline:""},{default:o(()=>[e(d,{label:"SN"},{default:o(()=>[e(r,{modelValue:t.sn,"onUpdate:modelValue":l[0]||(l[0]=n=>t.sn=n),style:{width:"170px"}},null,8,["modelValue"])]),_:1}),e(d,{label:"工单号"},{default:o(()=>[e(r,{modelValue:t.orderNo,"onUpdate:modelValue":l[1]||(l[1]=n=>t.orderNo=n),style:{width:"170px"}},null,8,["modelValue"])]),_:1}),e(d,{label:"工位"},{default:o(()=>[e(r,{modelValue:t.station,"onUpdate:modelValue":l[2]||(l[2]=n=>t.station=n),style:{width:"90px"}},null,8,["modelValue"])]),_:1}),e(d,{label:"类型"},{default:o(()=>[e(y,{modelValue:t.type,"onUpdate:modelValue":l[3]||(l[3]=n=>t.type=n),placeholder:"请选择类型",style:{width:"130px"}},{default:o(()=>[e(p,{label:"进线ONLINE",value:"ONLINE"}),e(p,{label:"工序PROCESS",value:"PROCESS"}),e(p,{label:"完工DONE",value:"DONE"}),e(p,{label:"暂存TEMP_STORE",value:"TEMP_STORE"})]),_:1},8,["modelValue"])]),_:1}),e(d,{label:"工序号"},{default:o(()=>[e(E,{modelValue:t.processCode,"onUpdate:modelValue":l[4]||(l[4]=n=>t.processCode=n),min:0},null,8,["modelValue"])]),_:1}),e(d,null,{default:o(()=>[e(f,{type:"primary",onClick:w},{default:o(()=>[...l[7]||(l[7]=[m("扫码报工",-1)])]),_:1})]),_:1})]),_:1}),e(S,{"content-position":"left"},{default:o(()=>[...l[8]||(l[8]=[m("报工记录",-1)])]),_:1}),e(b,{inline:""},{default:o(()=>[e(d,{label:"SN"},{default:o(()=>[e(r,{modelValue:u.sn,"onUpdate:modelValue":l[5]||(l[5]=n=>u.sn=n),clearable:"",style:{width:"160px"}},null,8,["modelValue"])]),_:1}),e(d,{label:"工单号"},{default:o(()=>[e(r,{modelValue:u.orderNo,"onUpdate:modelValue":l[6]||(l[6]=n=>u.orderNo=n),clearable:"",style:{width:"160px"}},null,8,["modelValue"])]),_:1}),e(d,null,{default:o(()=>[e(f,{onClick:i},{default:o(()=>[...l[9]||(l[9]=[m("刷新",-1)])]),_:1})]),_:1})]),_:1}),e(C,{data:_.value,border:"",size:"small"},{default:o(()=>[e(s,{prop:"sn",label:"SN","min-width":"130"}),e(s,{prop:"orderNo",label:"工单号","min-width":"130"}),e(s,{prop:"station",label:"工位",width:"80"}),e(s,{prop:"type",label:"类型",width:"110"}),e(s,{prop:"processCode",label:"工序号",width:"80"}),e(s,{prop:"operator",label:"操作人",width:"90"}),e(s,{prop:"time",label:"时间","min-width":"170"})]),_:1},8,["data"])]),_:1}),e(T,{data:P(R)},null,8,["data"])],64)}}};export{D as default}; diff --git a/bj_power_mes/public/assets/Torque-CoflmdZb.js b/bj_power_mes/public/assets/Torque-D780rGIR.js similarity index 96% rename from bj_power_mes/public/assets/Torque-CoflmdZb.js rename to bj_power_mes/public/assets/Torque-D780rGIR.js index 9c24b5a..d062cdc 100644 --- a/bj_power_mes/public/assets/Torque-CoflmdZb.js +++ b/bj_power_mes/public/assets/Torque-D780rGIR.js @@ -1 +1 @@ -import{j as q,c as U,a as e,w as t,k as S,F as v,h as w,r as n,i as C,l as V,o as E,f as m,t as T,E as c}from"./index-BORa7dH4.js";import{d as j,P as B}from"./help-CJCtd61z.js";const D={__name:"Torque",setup(F){const s=V({sn:"",workOrderNo:""}),a=V({sn:"",workOrderNo:"",stationNo:"",strain:20,angle:90,operator:""}),i=C([]);async function p(){i.value=await w.get("/torque/records",{params:s})||[]}async function N(){if(!a.sn)return c.warning("请输入SN");await w.post("/torque/report",a),c.success("拧紧数据已上报"),Object.assign(a,{sn:"",workOrderNo:"",strain:20,angle:90}),p()}return q(p),(M,l)=>{const d=n("el-input"),r=n("el-form-item"),_=n("el-button"),f=n("el-form"),b=n("el-input-number"),y=n("el-collapse-item"),g=n("el-collapse"),u=n("el-table-column"),k=n("el-tag"),x=n("el-table"),O=n("el-card");return E(),U(v,null,[e(O,null,{default:t(()=>[e(f,{inline:""},{default:t(()=>[e(r,{label:"SN"},{default:t(()=>[e(d,{modelValue:s.sn,"onUpdate:modelValue":l[0]||(l[0]=o=>s.sn=o),clearable:"",style:{width:"170px"}},null,8,["modelValue"])]),_:1}),e(r,{label:"工单号"},{default:t(()=>[e(d,{modelValue:s.workOrderNo,"onUpdate:modelValue":l[1]||(l[1]=o=>s.workOrderNo=o),clearable:"",style:{width:"170px"}},null,8,["modelValue"])]),_:1}),e(r,null,{default:t(()=>[e(_,{type:"primary",onClick:p},{default:t(()=>[...l[8]||(l[8]=[m("查询",-1)])]),_:1})]),_:1})]),_:1}),e(g,{style:{"margin-bottom":"12px"}},{default:t(()=>[e(y,{title:"扫码录入拧紧数据",name:"1"},{default:t(()=>[e(f,{inline:""},{default:t(()=>[e(r,{label:"SN"},{default:t(()=>[e(d,{modelValue:a.sn,"onUpdate:modelValue":l[2]||(l[2]=o=>a.sn=o),style:{width:"150px"}},null,8,["modelValue"])]),_:1}),e(r,{label:"工单号"},{default:t(()=>[e(d,{modelValue:a.workOrderNo,"onUpdate:modelValue":l[3]||(l[3]=o=>a.workOrderNo=o),style:{width:"150px"}},null,8,["modelValue"])]),_:1}),e(r,{label:"工位"},{default:t(()=>[e(d,{modelValue:a.stationNo,"onUpdate:modelValue":l[4]||(l[4]=o=>a.stationNo=o),style:{width:"80px"}},null,8,["modelValue"])]),_:1}),e(r,{label:"扭矩"},{default:t(()=>[e(b,{modelValue:a.strain,"onUpdate:modelValue":l[5]||(l[5]=o=>a.strain=o),min:0},null,8,["modelValue"])]),_:1}),e(r,{label:"角度"},{default:t(()=>[e(b,{modelValue:a.angle,"onUpdate:modelValue":l[6]||(l[6]=o=>a.angle=o),min:0},null,8,["modelValue"])]),_:1}),e(r,{label:"操作人"},{default:t(()=>[e(d,{modelValue:a.operator,"onUpdate:modelValue":l[7]||(l[7]=o=>a.operator=o),style:{width:"100px"}},null,8,["modelValue"])]),_:1}),e(r,null,{default:t(()=>[e(_,{type:"primary",onClick:N},{default:t(()=>[...l[9]||(l[9]=[m("上报",-1)])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1}),e(x,{data:i.value,border:"",size:"small"},{default:t(()=>[e(u,{prop:"sn",label:"SN","min-width":"130"}),e(u,{prop:"workOrderNo",label:"工单号","min-width":"130"}),e(u,{prop:"stationNo",label:"工位",width:"70"}),e(u,{prop:"torque",label:"扭矩(N·m)",width:"100"}),e(u,{prop:"angle",label:"角度(°)",width:"90"}),e(u,{prop:"result",label:"结果",width:"80"},{default:t(({row:o})=>[e(k,{type:o.result==="OK"?"success":"danger"},{default:t(()=>[m(T(o.result),1)]),_:2},1032,["type"])]),_:1}),e(u,{prop:"operator",label:"操作人",width:"90"}),e(u,{prop:"time",label:"时间","min-width":"170"})]),_:1},8,["data"])]),_:1}),e(B,{data:S(j)},null,8,["data"])],64)}}};export{D as default}; +import{j as q,c as U,a as e,w as t,k as S,F as v,h as w,r as n,i as C,l as V,o as E,f as m,t as T,E as c}from"./index-0akZQTPV.js";import{d as j,P as B}from"./help-DqtsZH2B.js";const D={__name:"Torque",setup(F){const s=V({sn:"",workOrderNo:""}),a=V({sn:"",workOrderNo:"",stationNo:"",strain:20,angle:90,operator:""}),i=C([]);async function p(){i.value=await w.get("/torque/records",{params:s})||[]}async function N(){if(!a.sn)return c.warning("请输入SN");await w.post("/torque/report",a),c.success("拧紧数据已上报"),Object.assign(a,{sn:"",workOrderNo:"",strain:20,angle:90}),p()}return q(p),(M,l)=>{const d=n("el-input"),r=n("el-form-item"),_=n("el-button"),f=n("el-form"),b=n("el-input-number"),y=n("el-collapse-item"),g=n("el-collapse"),u=n("el-table-column"),k=n("el-tag"),x=n("el-table"),O=n("el-card");return E(),U(v,null,[e(O,null,{default:t(()=>[e(f,{inline:""},{default:t(()=>[e(r,{label:"SN"},{default:t(()=>[e(d,{modelValue:s.sn,"onUpdate:modelValue":l[0]||(l[0]=o=>s.sn=o),clearable:"",style:{width:"170px"}},null,8,["modelValue"])]),_:1}),e(r,{label:"工单号"},{default:t(()=>[e(d,{modelValue:s.workOrderNo,"onUpdate:modelValue":l[1]||(l[1]=o=>s.workOrderNo=o),clearable:"",style:{width:"170px"}},null,8,["modelValue"])]),_:1}),e(r,null,{default:t(()=>[e(_,{type:"primary",onClick:p},{default:t(()=>[...l[8]||(l[8]=[m("查询",-1)])]),_:1})]),_:1})]),_:1}),e(g,{style:{"margin-bottom":"12px"}},{default:t(()=>[e(y,{title:"扫码录入拧紧数据",name:"1"},{default:t(()=>[e(f,{inline:""},{default:t(()=>[e(r,{label:"SN"},{default:t(()=>[e(d,{modelValue:a.sn,"onUpdate:modelValue":l[2]||(l[2]=o=>a.sn=o),style:{width:"150px"}},null,8,["modelValue"])]),_:1}),e(r,{label:"工单号"},{default:t(()=>[e(d,{modelValue:a.workOrderNo,"onUpdate:modelValue":l[3]||(l[3]=o=>a.workOrderNo=o),style:{width:"150px"}},null,8,["modelValue"])]),_:1}),e(r,{label:"工位"},{default:t(()=>[e(d,{modelValue:a.stationNo,"onUpdate:modelValue":l[4]||(l[4]=o=>a.stationNo=o),style:{width:"80px"}},null,8,["modelValue"])]),_:1}),e(r,{label:"扭矩"},{default:t(()=>[e(b,{modelValue:a.strain,"onUpdate:modelValue":l[5]||(l[5]=o=>a.strain=o),min:0},null,8,["modelValue"])]),_:1}),e(r,{label:"角度"},{default:t(()=>[e(b,{modelValue:a.angle,"onUpdate:modelValue":l[6]||(l[6]=o=>a.angle=o),min:0},null,8,["modelValue"])]),_:1}),e(r,{label:"操作人"},{default:t(()=>[e(d,{modelValue:a.operator,"onUpdate:modelValue":l[7]||(l[7]=o=>a.operator=o),style:{width:"100px"}},null,8,["modelValue"])]),_:1}),e(r,null,{default:t(()=>[e(_,{type:"primary",onClick:N},{default:t(()=>[...l[9]||(l[9]=[m("上报",-1)])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1}),e(x,{data:i.value,border:"",size:"small"},{default:t(()=>[e(u,{prop:"sn",label:"SN","min-width":"130"}),e(u,{prop:"workOrderNo",label:"工单号","min-width":"130"}),e(u,{prop:"stationNo",label:"工位",width:"70"}),e(u,{prop:"torque",label:"扭矩(N·m)",width:"100"}),e(u,{prop:"angle",label:"角度(°)",width:"90"}),e(u,{prop:"result",label:"结果",width:"80"},{default:t(({row:o})=>[e(k,{type:o.result==="OK"?"success":"danger"},{default:t(()=>[m(T(o.result),1)]),_:2},1032,["type"])]),_:1}),e(u,{prop:"operator",label:"操作人",width:"90"}),e(u,{prop:"time",label:"时间","min-width":"170"})]),_:1},8,["data"])]),_:1}),e(B,{data:S(j)},null,8,["data"])],64)}}};export{D as default}; diff --git a/bj_power_mes/public/assets/Trace-JYn0Y_aZ.js b/bj_power_mes/public/assets/Trace-DmFL3ikQ.js similarity index 98% rename from bj_power_mes/public/assets/Trace-JYn0Y_aZ.js rename to bj_power_mes/public/assets/Trace-DmFL3ikQ.js index e287971..672517a 100644 --- a/bj_power_mes/public/assets/Trace-JYn0Y_aZ.js +++ b/bj_power_mes/public/assets/Trace-DmFL3ikQ.js @@ -1 +1 @@ -import{c as f,a as t,w as l,k as z,F as v,r as a,o as c,g as D,f as s,n as k,q as x,t as n,m as F,d as T,h as G,i as w}from"./index-BORa7dH4.js";import{f as I,P as E}from"./help-CJCtd61z.js";const U={__name:"Trace",setup(H){const p=w(""),o=w(null),_=w("");async function h(){if(p.value){_.value="",o.value=null;try{o.value=await G.get("/trace",{params:{sn:p.value}})}catch(i){_.value=i.message||"查询失败"}}}function d(i){return i?String(i).replace("T"," ").slice(0,19):"-"}return(i,m)=>{const V=a("el-input"),y=a("el-form-item"),K=a("el-button"),S=a("el-form"),C=a("el-alert"),u=a("el-descriptions-item"),q=a("el-descriptions"),A=a("el-timeline-item"),B=a("el-timeline"),b=a("el-tab-pane"),r=a("el-table-column"),O=a("el-tag"),N=a("el-table"),P=a("el-tabs"),j=a("el-card");return c(),f(v,null,[t(j,null,{default:l(()=>[t(S,{inline:""},{default:l(()=>[t(y,{label:"工件SN"},{default:l(()=>[t(V,{modelValue:p.value,"onUpdate:modelValue":m[0]||(m[0]=e=>p.value=e),style:{width:"220px"},placeholder:"输入SN查询追溯",onKeyup:D(h,["enter"])},null,8,["modelValue"])]),_:1}),t(y,null,{default:l(()=>[t(K,{type:"primary",onClick:h},{default:l(()=>[...m[1]||(m[1]=[s("追溯查询",-1)])]),_:1})]),_:1})]),_:1}),_.value?(c(),k(C,{key:0,title:_.value,type:"error","show-icon":"",closable:"",style:{"margin-bottom":"10px"}},null,8,["title"])):x("",!0),o.value?(c(),f(v,{key:1},[t(q,{column:4,border:"",style:{"margin-bottom":"12px"}},{default:l(()=>[t(u,{label:"SN"},{default:l(()=>{var e;return[s(n((e=o.value.workpiece)==null?void 0:e.sn),1)]}),_:1}),t(u,{label:"工单号"},{default:l(()=>{var e;return[s(n((e=o.value.workpiece)==null?void 0:e.orderNo),1)]}),_:1}),t(u,{label:"状态"},{default:l(()=>{var e;return[s(n((e=o.value.workpiece)==null?void 0:e.status),1)]}),_:1}),t(u,{label:"当前工序"},{default:l(()=>{var e;return[s(n((e=o.value.workpiece)==null?void 0:e.currentProcess),1)]}),_:1}),t(u,{label:"进线时间"},{default:l(()=>{var e;return[s(n(d((e=o.value.workpiece)==null?void 0:e.onlineAt)),1)]}),_:1}),t(u,{label:"完工时间"},{default:l(()=>{var e;return[s(n(d((e=o.value.workpiece)==null?void 0:e.doneAt)),1)]}),_:1})]),_:1}),t(P,null,{default:l(()=>[t(b,{label:"工序时间线"},{default:l(()=>[t(B,null,{default:l(()=>[(c(!0),f(v,null,F(o.value.processTimeline||[],e=>(c(),k(A,{key:e.id,timestamp:e.operator?e.operator+" · "+d(e.endedAt):d(e.endedAt),type:e.result==="NG"?"danger":"success"},{default:l(()=>[s(n(e.processName)+"(工序 "+n(e.processCode)+",工位 "+n(e.stationNo)+")— "+n(e.result),1)]),_:2},1032,["timestamp","type"]))),128))]),_:1})]),_:1}),t(b,{label:"步骤考核数据"},{default:l(()=>[t(N,{data:o.value.stepData||[],border:"",size:"small"},{default:l(()=>[t(r,{prop:"stepName",label:"步骤","min-width":"110"}),t(r,{prop:"criterionName",label:"考核项","min-width":"110"}),t(r,{prop:"value",label:"数值",width:"100"}),t(r,{prop:"isOK",label:"合格",width:"80"},{default:l(({row:e})=>[t(O,{type:e.isOK?"success":"danger"},{default:l(()=>[s(n(e.isOK?"OK":"NG"),1)]),_:2},1032,["type"])]),_:1}),t(r,{prop:"operator",label:"操作人",width:"90"})]),_:1},8,["data"])]),_:1}),t(b,{label:"拧紧数据"},{default:l(()=>[t(N,{data:o.value.torqueRecords||[],border:"",size:"small"},{default:l(()=>[t(r,{prop:"stationNo",label:"工位",width:"80"}),t(r,{prop:"torque",label:"扭矩",width:"100"}),t(r,{prop:"angle",label:"角度",width:"90"}),t(r,{prop:"result",label:"结果",width:"80"}),t(r,{prop:"operator",label:"操作人",width:"90"}),t(r,{prop:"time",label:"时间","min-width":"160"})]),_:1},8,["data"])]),_:1}),t(b,{label:"成品关联"},{default:l(()=>{var e,g;return[T("p",null,"批次号:"+n((((e=o.value.associationTrace)==null?void 0:e.batchItems)||[]).join(", ")||"无"),1),T("p",null,"精密件SN:"+n((((g=o.value.associationTrace)==null?void 0:g.serialItems)||[]).join(", ")||"无"),1)]}),_:1})]),_:1})],64)):x("",!0)]),_:1}),t(E,{data:z(I)},null,8,["data"])],64)}}};export{U as default}; +import{c as f,a as t,w as l,k as z,F as v,r as a,o as c,g as D,f as s,n as k,q as x,t as n,m as F,d as T,h as G,i as w}from"./index-0akZQTPV.js";import{f as I,P as E}from"./help-DqtsZH2B.js";const U={__name:"Trace",setup(H){const p=w(""),o=w(null),_=w("");async function h(){if(p.value){_.value="",o.value=null;try{o.value=await G.get("/trace",{params:{sn:p.value}})}catch(i){_.value=i.message||"查询失败"}}}function d(i){return i?String(i).replace("T"," ").slice(0,19):"-"}return(i,m)=>{const V=a("el-input"),y=a("el-form-item"),K=a("el-button"),S=a("el-form"),C=a("el-alert"),u=a("el-descriptions-item"),q=a("el-descriptions"),A=a("el-timeline-item"),B=a("el-timeline"),b=a("el-tab-pane"),r=a("el-table-column"),O=a("el-tag"),N=a("el-table"),P=a("el-tabs"),j=a("el-card");return c(),f(v,null,[t(j,null,{default:l(()=>[t(S,{inline:""},{default:l(()=>[t(y,{label:"工件SN"},{default:l(()=>[t(V,{modelValue:p.value,"onUpdate:modelValue":m[0]||(m[0]=e=>p.value=e),style:{width:"220px"},placeholder:"输入SN查询追溯",onKeyup:D(h,["enter"])},null,8,["modelValue"])]),_:1}),t(y,null,{default:l(()=>[t(K,{type:"primary",onClick:h},{default:l(()=>[...m[1]||(m[1]=[s("追溯查询",-1)])]),_:1})]),_:1})]),_:1}),_.value?(c(),k(C,{key:0,title:_.value,type:"error","show-icon":"",closable:"",style:{"margin-bottom":"10px"}},null,8,["title"])):x("",!0),o.value?(c(),f(v,{key:1},[t(q,{column:4,border:"",style:{"margin-bottom":"12px"}},{default:l(()=>[t(u,{label:"SN"},{default:l(()=>{var e;return[s(n((e=o.value.workpiece)==null?void 0:e.sn),1)]}),_:1}),t(u,{label:"工单号"},{default:l(()=>{var e;return[s(n((e=o.value.workpiece)==null?void 0:e.orderNo),1)]}),_:1}),t(u,{label:"状态"},{default:l(()=>{var e;return[s(n((e=o.value.workpiece)==null?void 0:e.status),1)]}),_:1}),t(u,{label:"当前工序"},{default:l(()=>{var e;return[s(n((e=o.value.workpiece)==null?void 0:e.currentProcess),1)]}),_:1}),t(u,{label:"进线时间"},{default:l(()=>{var e;return[s(n(d((e=o.value.workpiece)==null?void 0:e.onlineAt)),1)]}),_:1}),t(u,{label:"完工时间"},{default:l(()=>{var e;return[s(n(d((e=o.value.workpiece)==null?void 0:e.doneAt)),1)]}),_:1})]),_:1}),t(P,null,{default:l(()=>[t(b,{label:"工序时间线"},{default:l(()=>[t(B,null,{default:l(()=>[(c(!0),f(v,null,F(o.value.processTimeline||[],e=>(c(),k(A,{key:e.id,timestamp:e.operator?e.operator+" · "+d(e.endedAt):d(e.endedAt),type:e.result==="NG"?"danger":"success"},{default:l(()=>[s(n(e.processName)+"(工序 "+n(e.processCode)+",工位 "+n(e.stationNo)+")— "+n(e.result),1)]),_:2},1032,["timestamp","type"]))),128))]),_:1})]),_:1}),t(b,{label:"步骤考核数据"},{default:l(()=>[t(N,{data:o.value.stepData||[],border:"",size:"small"},{default:l(()=>[t(r,{prop:"stepName",label:"步骤","min-width":"110"}),t(r,{prop:"criterionName",label:"考核项","min-width":"110"}),t(r,{prop:"value",label:"数值",width:"100"}),t(r,{prop:"isOK",label:"合格",width:"80"},{default:l(({row:e})=>[t(O,{type:e.isOK?"success":"danger"},{default:l(()=>[s(n(e.isOK?"OK":"NG"),1)]),_:2},1032,["type"])]),_:1}),t(r,{prop:"operator",label:"操作人",width:"90"})]),_:1},8,["data"])]),_:1}),t(b,{label:"拧紧数据"},{default:l(()=>[t(N,{data:o.value.torqueRecords||[],border:"",size:"small"},{default:l(()=>[t(r,{prop:"stationNo",label:"工位",width:"80"}),t(r,{prop:"torque",label:"扭矩",width:"100"}),t(r,{prop:"angle",label:"角度",width:"90"}),t(r,{prop:"result",label:"结果",width:"80"}),t(r,{prop:"operator",label:"操作人",width:"90"}),t(r,{prop:"time",label:"时间","min-width":"160"})]),_:1},8,["data"])]),_:1}),t(b,{label:"成品关联"},{default:l(()=>{var e,g;return[T("p",null,"批次号:"+n((((e=o.value.associationTrace)==null?void 0:e.batchItems)||[]).join(", ")||"无"),1),T("p",null,"精密件SN:"+n((((g=o.value.associationTrace)==null?void 0:g.serialItems)||[]).join(", ")||"无"),1)]}),_:1})]),_:1})],64)):x("",!0)]),_:1}),t(E,{data:z(I)},null,8,["data"])],64)}}};export{U as default}; diff --git a/bj_power_mes/public/assets/WorkOrder-TX6kimh3.js b/bj_power_mes/public/assets/WorkOrder-D-K9BxdI.js similarity index 98% rename from bj_power_mes/public/assets/WorkOrder-TX6kimh3.js rename to bj_power_mes/public/assets/WorkOrder-D-K9BxdI.js index 3ac4b96..7aef3e4 100644 --- a/bj_power_mes/public/assets/WorkOrder-TX6kimh3.js +++ b/bj_power_mes/public/assets/WorkOrder-D-K9BxdI.js @@ -1 +1 @@ -import{j as Q,c as w,d as W,a as e,w as o,k as F,F as V,h as m,r as s,l as C,i as O,o as b,g as K,m as g,f as p,t as G,n as H,E as I}from"./index-BORa7dH4.js";import{h as J,P as X}from"./help-CJCtd61z.js";const le={__name:"WorkOrder",setup(Z){const _=[{v:"CREATED",l:"已创建"},{v:"RELEASED",l:"已发布"},{v:"IN_PROGRESS",l:"生产中"},{v:"DONE",l:"已完成"}],P=d=>(_.find(l=>l.v===d)||{}).l||d,f=C({orderNo:"",status:""}),E=O([]),S=O([]),a=C({show:!1,id:0,workOrderNo:"",productTypeId:0,productCode:"",productName:"",quantity:1,processSeq:"",status:"CREATED"}),u=C({show:!1,orderNo:"",date:"",qty:1}),D=O([]);async function c(){const d=await m.get("/work-orders",{params:f});E.value=d||[]}async function R(){S.value=await m.get("/product-types")||[]}function z(){Object.assign(a,{show:!0,id:0,workOrderNo:`WO${Date.now()}`,productTypeId:0,productCode:"",productName:"",quantity:1,processSeq:"123456789101112",status:"CREATED"})}function A(d){Object.assign(a,{show:!0,id:d.id,workOrderNo:d.workOrderNo,productTypeId:d.productTypeId,productCode:d.productCode,productName:d.productName,quantity:d.quantity,processSeq:d.processSeq,status:d.status})}async function B(){const d={id:a.id,workOrderNo:a.workOrderNo,productTypeId:a.productTypeId,productCode:a.productCode,productName:a.productName,quantity:a.quantity,processSeq:a.processSeq,status:a.status};a.id?await m.put("/work-orders",d):await m.post("/work-orders",d),I.success("保存成功"),a.show=!1,c()}function M(d){u.orderNo=d.workOrderNo,u.date=new Date().toISOString().slice(0,10),u.qty=d.quantity,u.show=!0,k()}async function k(){D.value=await m.get("/daily-plans",{params:{orderNo:u.orderNo}})||[]}async function Y(){await m.post("/daily-plans",{orderNo:u.orderNo,planDate:u.date,planQty:u.qty}),I.success("排产保存成功"),k()}return Q(()=>{c(),R()}),(d,l)=>{const y=s("el-input"),r=s("el-form-item"),N=s("el-option"),v=s("el-select"),i=s("el-button"),q=s("el-form"),n=s("el-table-column"),T=s("el-table"),$=s("el-card"),U=s("el-input-number"),x=s("el-dialog"),j=s("el-date-picker");return b(),w(V,null,[W("div",null,[e($,null,{default:o(()=>[e(q,{inline:""},{default:o(()=>[e(r,{label:"工单号"},{default:o(()=>[e(y,{modelValue:f.orderNo,"onUpdate:modelValue":l[0]||(l[0]=t=>f.orderNo=t),placeholder:"模糊查询",clearable:"",style:{width:"180px"},onKeyup:K(c,["enter"])},null,8,["modelValue"])]),_:1}),e(r,{label:"状态"},{default:o(()=>[e(v,{modelValue:f.status,"onUpdate:modelValue":l[1]||(l[1]=t=>f.status=t),clearable:"",placeholder:"请选择状态",style:{width:"150px"}},{default:o(()=>[(b(),w(V,null,g(_,t=>e(N,{key:t.v,label:t.l,value:t.v},null,8,["label","value"])),64))]),_:1},8,["modelValue"])]),_:1}),e(r,null,{default:o(()=>[e(i,{type:"primary",onClick:c},{default:o(()=>[...l[14]||(l[14]=[p("查询",-1)])]),_:1}),e(i,{onClick:z},{default:o(()=>[...l[15]||(l[15]=[p("新建工单",-1)])]),_:1})]),_:1})]),_:1}),e(T,{data:E.value,border:"",stripe:"",size:"small"},{default:o(()=>[e(n,{prop:"id",label:"ID",width:"55"}),e(n,{prop:"workOrderNo",label:"工单号","min-width":"140"}),e(n,{prop:"productCode",label:"产品编码","min-width":"120"}),e(n,{prop:"productName",label:"产品名称","min-width":"120"}),e(n,{prop:"quantity",label:"数量",width:"70"}),e(n,{prop:"finishedNum",label:"已完工",width:"70"}),e(n,{prop:"processSeq",label:"工序组合",width:"120"}),e(n,{prop:"status",label:"状态",width:"100"},{default:o(({row:t})=>[p(G(P(t.status)),1)]),_:1}),e(n,{label:"操作",width:"170",fixed:"right"},{default:o(({row:t})=>[e(i,{size:"small",onClick:L=>M(t)},{default:o(()=>[...l[16]||(l[16]=[p("日排产",-1)])]),_:1},8,["onClick"]),e(i,{size:"small",type:"warning",onClick:L=>A(t)},{default:o(()=>[...l[17]||(l[17]=[p("编辑",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])]),_:1}),e(x,{modelValue:a.show,"onUpdate:modelValue":l[10]||(l[10]=t=>a.show=t),title:a.id?"编辑工单":"新建工单",width:"520px"},{footer:o(()=>[e(i,{onClick:l[9]||(l[9]=t=>a.show=!1)},{default:o(()=>[...l[18]||(l[18]=[p("取消",-1)])]),_:1}),e(i,{type:"primary",onClick:B},{default:o(()=>[...l[19]||(l[19]=[p("保存",-1)])]),_:1})]),default:o(()=>[e(q,{model:a,"label-width":"90px"},{default:o(()=>[e(r,{label:"工单号"},{default:o(()=>[e(y,{modelValue:a.workOrderNo,"onUpdate:modelValue":l[2]||(l[2]=t=>a.workOrderNo=t)},null,8,["modelValue"])]),_:1}),e(r,{label:"产品类型"},{default:o(()=>[e(v,{modelValue:a.productTypeId,"onUpdate:modelValue":l[3]||(l[3]=t=>a.productTypeId=t),placeholder:"选择产品类型",style:{width:"100%"}},{default:o(()=>[(b(!0),w(V,null,g(S.value,t=>(b(),H(N,{key:t.id,label:t.name+(t.code?" / "+t.code:""),value:t.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(r,{label:"产品编码"},{default:o(()=>[e(y,{modelValue:a.productCode,"onUpdate:modelValue":l[4]||(l[4]=t=>a.productCode=t)},null,8,["modelValue"])]),_:1}),e(r,{label:"产品名称"},{default:o(()=>[e(y,{modelValue:a.productName,"onUpdate:modelValue":l[5]||(l[5]=t=>a.productName=t)},null,8,["modelValue"])]),_:1}),e(r,{label:"数量"},{default:o(()=>[e(U,{modelValue:a.quantity,"onUpdate:modelValue":l[6]||(l[6]=t=>a.quantity=t),min:1},null,8,["modelValue"])]),_:1}),e(r,{label:"工序组合"},{default:o(()=>[e(y,{modelValue:a.processSeq,"onUpdate:modelValue":l[7]||(l[7]=t=>a.processSeq=t),placeholder:"如 135"},null,8,["modelValue"])]),_:1}),e(r,{label:"状态"},{default:o(()=>[e(v,{modelValue:a.status,"onUpdate:modelValue":l[8]||(l[8]=t=>a.status=t),placeholder:"请选择状态",style:{width:"100%"}},{default:o(()=>[(b(),w(V,null,g(_,t=>e(N,{key:t.v,label:t.l,value:t.v},null,8,["label","value"])),64))]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"]),e(x,{modelValue:u.show,"onUpdate:modelValue":l[13]||(l[13]=t=>u.show=t),title:"日排产",width:"720px"},{default:o(()=>[e(q,{inline:"",style:{"margin-bottom":"10px"}},{default:o(()=>[e(r,{label:"日期"},{default:o(()=>[e(j,{modelValue:u.date,"onUpdate:modelValue":l[11]||(l[11]=t=>u.date=t),type:"date","value-format":"YYYY-MM-DD"},null,8,["modelValue"])]),_:1}),e(r,{label:"计划数量"},{default:o(()=>[e(U,{modelValue:u.qty,"onUpdate:modelValue":l[12]||(l[12]=t=>u.qty=t),min:1},null,8,["modelValue"])]),_:1}),e(r,null,{default:o(()=>[e(i,{type:"primary",onClick:Y},{default:o(()=>[...l[20]||(l[20]=[p("保存排产",-1)])]),_:1}),e(i,{onClick:k},{default:o(()=>[...l[21]||(l[21]=[p("刷新",-1)])]),_:1})]),_:1})]),_:1}),e(T,{data:D.value,border:"",size:"small"},{default:o(()=>[e(n,{prop:"planDate",label:"日期",width:"120"}),e(n,{prop:"planQty",label:"计划数量",width:"100"}),e(n,{prop:"completedQty",label:"已完成"}),e(n,{prop:"status",label:"状态"}),e(n,{prop:"operator",label:"操作人"})]),_:1},8,["data"])]),_:1},8,["modelValue"])]),e(X,{data:F(J)},null,8,["data"])],64)}}};export{le as default}; +import{j as Q,c as w,d as W,a as e,w as o,k as F,F as V,h as m,r as s,l as C,i as O,o as b,g as K,m as g,f as p,t as G,n as H,E as I}from"./index-0akZQTPV.js";import{h as J,P as X}from"./help-DqtsZH2B.js";const le={__name:"WorkOrder",setup(Z){const _=[{v:"CREATED",l:"已创建"},{v:"RELEASED",l:"已发布"},{v:"IN_PROGRESS",l:"生产中"},{v:"DONE",l:"已完成"}],P=d=>(_.find(l=>l.v===d)||{}).l||d,f=C({orderNo:"",status:""}),E=O([]),S=O([]),a=C({show:!1,id:0,workOrderNo:"",productTypeId:0,productCode:"",productName:"",quantity:1,processSeq:"",status:"CREATED"}),u=C({show:!1,orderNo:"",date:"",qty:1}),D=O([]);async function c(){const d=await m.get("/work-orders",{params:f});E.value=d||[]}async function R(){S.value=await m.get("/product-types")||[]}function z(){Object.assign(a,{show:!0,id:0,workOrderNo:`WO${Date.now()}`,productTypeId:0,productCode:"",productName:"",quantity:1,processSeq:"123456789101112",status:"CREATED"})}function A(d){Object.assign(a,{show:!0,id:d.id,workOrderNo:d.workOrderNo,productTypeId:d.productTypeId,productCode:d.productCode,productName:d.productName,quantity:d.quantity,processSeq:d.processSeq,status:d.status})}async function B(){const d={id:a.id,workOrderNo:a.workOrderNo,productTypeId:a.productTypeId,productCode:a.productCode,productName:a.productName,quantity:a.quantity,processSeq:a.processSeq,status:a.status};a.id?await m.put("/work-orders",d):await m.post("/work-orders",d),I.success("保存成功"),a.show=!1,c()}function M(d){u.orderNo=d.workOrderNo,u.date=new Date().toISOString().slice(0,10),u.qty=d.quantity,u.show=!0,k()}async function k(){D.value=await m.get("/daily-plans",{params:{orderNo:u.orderNo}})||[]}async function Y(){await m.post("/daily-plans",{orderNo:u.orderNo,planDate:u.date,planQty:u.qty}),I.success("排产保存成功"),k()}return Q(()=>{c(),R()}),(d,l)=>{const y=s("el-input"),r=s("el-form-item"),N=s("el-option"),v=s("el-select"),i=s("el-button"),q=s("el-form"),n=s("el-table-column"),T=s("el-table"),$=s("el-card"),U=s("el-input-number"),x=s("el-dialog"),j=s("el-date-picker");return b(),w(V,null,[W("div",null,[e($,null,{default:o(()=>[e(q,{inline:""},{default:o(()=>[e(r,{label:"工单号"},{default:o(()=>[e(y,{modelValue:f.orderNo,"onUpdate:modelValue":l[0]||(l[0]=t=>f.orderNo=t),placeholder:"模糊查询",clearable:"",style:{width:"180px"},onKeyup:K(c,["enter"])},null,8,["modelValue"])]),_:1}),e(r,{label:"状态"},{default:o(()=>[e(v,{modelValue:f.status,"onUpdate:modelValue":l[1]||(l[1]=t=>f.status=t),clearable:"",placeholder:"请选择状态",style:{width:"150px"}},{default:o(()=>[(b(),w(V,null,g(_,t=>e(N,{key:t.v,label:t.l,value:t.v},null,8,["label","value"])),64))]),_:1},8,["modelValue"])]),_:1}),e(r,null,{default:o(()=>[e(i,{type:"primary",onClick:c},{default:o(()=>[...l[14]||(l[14]=[p("查询",-1)])]),_:1}),e(i,{onClick:z},{default:o(()=>[...l[15]||(l[15]=[p("新建工单",-1)])]),_:1})]),_:1})]),_:1}),e(T,{data:E.value,border:"",stripe:"",size:"small"},{default:o(()=>[e(n,{prop:"id",label:"ID",width:"55"}),e(n,{prop:"workOrderNo",label:"工单号","min-width":"140"}),e(n,{prop:"productCode",label:"产品编码","min-width":"120"}),e(n,{prop:"productName",label:"产品名称","min-width":"120"}),e(n,{prop:"quantity",label:"数量",width:"70"}),e(n,{prop:"finishedNum",label:"已完工",width:"70"}),e(n,{prop:"processSeq",label:"工序组合",width:"120"}),e(n,{prop:"status",label:"状态",width:"100"},{default:o(({row:t})=>[p(G(P(t.status)),1)]),_:1}),e(n,{label:"操作",width:"170",fixed:"right"},{default:o(({row:t})=>[e(i,{size:"small",onClick:L=>M(t)},{default:o(()=>[...l[16]||(l[16]=[p("日排产",-1)])]),_:1},8,["onClick"]),e(i,{size:"small",type:"warning",onClick:L=>A(t)},{default:o(()=>[...l[17]||(l[17]=[p("编辑",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])]),_:1}),e(x,{modelValue:a.show,"onUpdate:modelValue":l[10]||(l[10]=t=>a.show=t),title:a.id?"编辑工单":"新建工单",width:"520px"},{footer:o(()=>[e(i,{onClick:l[9]||(l[9]=t=>a.show=!1)},{default:o(()=>[...l[18]||(l[18]=[p("取消",-1)])]),_:1}),e(i,{type:"primary",onClick:B},{default:o(()=>[...l[19]||(l[19]=[p("保存",-1)])]),_:1})]),default:o(()=>[e(q,{model:a,"label-width":"90px"},{default:o(()=>[e(r,{label:"工单号"},{default:o(()=>[e(y,{modelValue:a.workOrderNo,"onUpdate:modelValue":l[2]||(l[2]=t=>a.workOrderNo=t)},null,8,["modelValue"])]),_:1}),e(r,{label:"产品类型"},{default:o(()=>[e(v,{modelValue:a.productTypeId,"onUpdate:modelValue":l[3]||(l[3]=t=>a.productTypeId=t),placeholder:"选择产品类型",style:{width:"100%"}},{default:o(()=>[(b(!0),w(V,null,g(S.value,t=>(b(),H(N,{key:t.id,label:t.name+(t.code?" / "+t.code:""),value:t.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(r,{label:"产品编码"},{default:o(()=>[e(y,{modelValue:a.productCode,"onUpdate:modelValue":l[4]||(l[4]=t=>a.productCode=t)},null,8,["modelValue"])]),_:1}),e(r,{label:"产品名称"},{default:o(()=>[e(y,{modelValue:a.productName,"onUpdate:modelValue":l[5]||(l[5]=t=>a.productName=t)},null,8,["modelValue"])]),_:1}),e(r,{label:"数量"},{default:o(()=>[e(U,{modelValue:a.quantity,"onUpdate:modelValue":l[6]||(l[6]=t=>a.quantity=t),min:1},null,8,["modelValue"])]),_:1}),e(r,{label:"工序组合"},{default:o(()=>[e(y,{modelValue:a.processSeq,"onUpdate:modelValue":l[7]||(l[7]=t=>a.processSeq=t),placeholder:"如 135"},null,8,["modelValue"])]),_:1}),e(r,{label:"状态"},{default:o(()=>[e(v,{modelValue:a.status,"onUpdate:modelValue":l[8]||(l[8]=t=>a.status=t),placeholder:"请选择状态",style:{width:"100%"}},{default:o(()=>[(b(),w(V,null,g(_,t=>e(N,{key:t.v,label:t.l,value:t.v},null,8,["label","value"])),64))]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"]),e(x,{modelValue:u.show,"onUpdate:modelValue":l[13]||(l[13]=t=>u.show=t),title:"日排产",width:"720px"},{default:o(()=>[e(q,{inline:"",style:{"margin-bottom":"10px"}},{default:o(()=>[e(r,{label:"日期"},{default:o(()=>[e(j,{modelValue:u.date,"onUpdate:modelValue":l[11]||(l[11]=t=>u.date=t),type:"date","value-format":"YYYY-MM-DD"},null,8,["modelValue"])]),_:1}),e(r,{label:"计划数量"},{default:o(()=>[e(U,{modelValue:u.qty,"onUpdate:modelValue":l[12]||(l[12]=t=>u.qty=t),min:1},null,8,["modelValue"])]),_:1}),e(r,null,{default:o(()=>[e(i,{type:"primary",onClick:Y},{default:o(()=>[...l[20]||(l[20]=[p("保存排产",-1)])]),_:1}),e(i,{onClick:k},{default:o(()=>[...l[21]||(l[21]=[p("刷新",-1)])]),_:1})]),_:1})]),_:1}),e(T,{data:D.value,border:"",size:"small"},{default:o(()=>[e(n,{prop:"planDate",label:"日期",width:"120"}),e(n,{prop:"planQty",label:"计划数量",width:"100"}),e(n,{prop:"completedQty",label:"已完成"}),e(n,{prop:"status",label:"状态"}),e(n,{prop:"operator",label:"操作人"})]),_:1},8,["data"])]),_:1},8,["modelValue"])]),e(X,{data:F(J)},null,8,["data"])],64)}}};export{le as default}; diff --git a/bj_power_mes/public/assets/help-CJCtd61z.js b/bj_power_mes/public/assets/help-CJCtd61z.js deleted file mode 100644 index 71db48d..0000000 --- a/bj_power_mes/public/assets/help-CJCtd61z.js +++ /dev/null @@ -1,4 +0,0 @@ -import{_ as g,o,c as i,a as f,w as m,f as a,d as e,t as r,q as p,F as v,m as h,n as M,r as u,i as k}from"./index-BORa7dH4.js";const y={class:"page-help"},P={class:"ph-inner"},R={class:"ph-banner"},C={class:"ph-banner-title"},T={key:0,class:"ph-overview"},B={key:1,class:"ph-section"},b={class:"ph-fname"},V={class:"ph-fsource"},L={class:"ph-fpurpose"},x={class:"ph-ffill"},U={key:0,class:"ph-sec-title"},A={key:1,class:"ph-sec-overview"},D={class:"ph-fname"},I={class:"ph-fsource"},W={class:"ph-fpurpose"},j={class:"ph-ffill"},q={__name:"PageHelp",props:{data:{type:Object,default:()=>({title:"操作说明",overview:"",fields:[]})}},setup(s){const c=k(!1);function _(){c.value=!0}return(z,t)=>{const w=u("el-button"),E=u("el-tooltip"),N=u("el-empty"),O=u("el-drawer");return o(),i("div",y,[f(E,{content:"本页操作说明",placement:"left"},{default:m(()=>[f(w,{class:"help-fab",circle:"",onClick:_},{default:m(()=>[...t[1]||(t[1]=[a("?",-1)])]),_:1})]),_:1}),f(O,{modelValue:c.value,"onUpdate:modelValue":t[0]||(t[0]=l=>c.value=l),title:s.data.title||"操作说明",size:"520px","append-to-body":"",class:"ph-drawer"},{default:m(()=>[e("div",P,[e("div",R,[e("div",C,r(s.data.title||"操作说明"),1),t[2]||(t[2]=e("div",{class:"ph-banner-sub"},"页面整体说明",-1))]),s.data.overview?(o(),i("div",T,r(s.data.overview),1)):p("",!0),t[3]||(t[3]=e("div",{class:"ph-legend"},[e("span",{class:"lg"},[e("i",{class:"ic lg-source"}),a("来源:这个字段从哪来、谁填")]),e("span",{class:"lg"},[e("i",{class:"ic lg-purpose"}),a("用途:它起什么作用")]),e("span",{class:"lg"},[e("i",{class:"ic lg-fill"}),a("怎么填:具体填什么")])],-1)),s.data.fields&&s.data.fields.length?(o(),i("div",B,[(o(!0),i(v,null,h(s.data.fields,(l,d)=>(o(),i("div",{class:"ph-field",key:"top"+d},[e("div",b,[a(r(l.name)+" ",1),e("span",V,r(l.source),1)]),e("div",L,r(l.purpose),1),e("div",x,"👉 "+r(l.fill),1)]))),128))])):p("",!0),s.data.sections&&s.data.sections.length?(o(!0),i(v,{key:2},h(s.data.sections,(l,d)=>(o(),i("div",{key:d,class:"ph-section"},[l.title?(o(),i("div",U,r(l.title),1)):p("",!0),l.overview?(o(),i("div",A,r(l.overview),1)):p("",!0),(o(!0),i(v,null,h(l.fields,(n,S)=>(o(),i("div",{class:"ph-field",key:S},[e("div",D,[a(r(n.name)+" ",1),e("span",I,r(n.source),1)]),e("div",W,r(n.purpose),1),e("div",j,"👉 "+r(n.fill),1)]))),128))]))),128)):p("",!0),!s.data.fields&&!(s.data.sections&&s.data.sections.length)?(o(),M(N,{key:3,description:"暂无说明","image-size":70})):p("",!0)])]),_:1},8,["modelValue","title"])])}}},G=g(q,[["__scopeId","data-v-75d9d55f"]]),H={title:"产品类型",overview:`产品类型是对“生产什么产品”的分类档案,好比“产品种类”。新建工单时必须先选择产品类型。 -只有先维护好产品类型,工单、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:"可不填"}]},K={title:"工单管理(新建 / 编辑工单)",overview:`工单是一个“合同/生产批次”的唯一载体,也是仓库出库挂靠的唯一对象。 -流程:建工单 → 配 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 台"}]}]},Q={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:"自动算,也可手动修正"}]},J={title:"备料单",overview:"备料单是按“日排产”自动算出的:该日生产所需物料清单。仓库看它备料,再用 AGV 配送到对应工位(DOCK01~20)。",fields:[{name:"日期",source:"手动选择",purpose:"按哪一天的排产生成备料",fill:"选择某排产日期"},{name:"工单号",source:"筛选条件",purpose:"只查看指定工单的备料",fill:"可空,空=全部"},{name:"状态",source:"筛选条件",purpose:"按备料状态筛选",fill:"可空"}]},X={title:"PLC 工序下发",overview:`把工序组合(如 135)写入西门子 S7-1214 的寄存器,产线传送带据此只做对应工序。 -系统遵循“未收到完成信号,绝不下发下一条”,保证产线不会串序。`,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"}]},Y={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:"默认当前登录用户,可改"}]},Z={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"}]},$={title:"工件追溯",overview:"输入工件的 SN,即可查到它的完整履历:进线/完工时间、各工序时间线、步骤考核数据(扭矩/角度等)、拧紧记录、以及它用了哪些批次/精密件(成品关联)。",fields:[{name:"工件SN",source:"扫码枪 / 手输",purpose:"要追溯的工件唯一序列号",fill:"扫SN条码或手动输入后点查询"}]},ee={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:"数字,越小越靠前"}]}]},se={title:"操作日志",overview:"记录所有关键业务操作(建工单、BOM维护、备料、PLC下发、拧紧、扫码报工等),按工单号、操作人、实体可追溯。",fields:[{name:"工单号",source:"筛选条件",purpose:"按工单号过滤该工单的所有操作",fill:"输入工单号,可空=全部"},{name:"操作人",source:"筛选条件",purpose:"按操作人过滤",fill:"输入姓名/账号,可空=全部"},{name:"类型",source:"筛选条件",purpose:"按事件类型过滤",fill:"如 EVENT_WORK_ORDER / EVENT_TORQUE,可空"}]};export{G as P,Q as a,J as b,X as c,Y as d,Z as e,$ as f,H as g,K as h,se as i,ee as j}; diff --git a/bj_power_mes/public/assets/help-DqtsZH2B.js b/bj_power_mes/public/assets/help-DqtsZH2B.js new file mode 100644 index 0000000..158d6b6 --- /dev/null +++ b/bj_power_mes/public/assets/help-DqtsZH2B.js @@ -0,0 +1,23 @@ +import{_ as g,o,c as i,a as f,w as m,f as a,d as e,t as r,q as n,F as v,m as h,n as M,r as u,i as P}from"./index-0akZQTPV.js";const C={class:"page-help"},O={class:"ph-inner"},y={class:"ph-banner"},R={class:"ph-banner-title"},T={key:0,class:"ph-overview"},V={key:1,class:"ph-section"},L={class:"ph-fname"},b={class:"ph-fsource"},B={class:"ph-fpurpose"},W={class:"ph-ffill"},A={key:0,class:"ph-sec-title"},x={key:1,class:"ph-sec-overview"},U={class:"ph-fname"},D={class:"ph-fsource"},I={class:"ph-fpurpose"},G={class:"ph-ffill"},j={__name:"PageHelp",props:{data:{type:Object,default:()=>({title:"操作说明",overview:"",fields:[]})}},setup(s){const c=P(!1);function _(){c.value=!0}return(q,t)=>{const w=u("el-button"),E=u("el-tooltip"),N=u("el-empty"),S=u("el-drawer");return o(),i("div",C,[f(E,{content:"本页操作说明",placement:"left"},{default:m(()=>[f(w,{class:"help-fab",circle:"",onClick:_},{default:m(()=>[...t[1]||(t[1]=[a("?",-1)])]),_:1})]),_:1}),f(S,{modelValue:c.value,"onUpdate:modelValue":t[0]||(t[0]=l=>c.value=l),title:s.data.title||"操作说明",size:"520px","append-to-body":"",class:"ph-drawer"},{default:m(()=>[e("div",O,[e("div",y,[e("div",R,r(s.data.title||"操作说明"),1),t[2]||(t[2]=e("div",{class:"ph-banner-sub"},"页面整体说明",-1))]),s.data.overview?(o(),i("div",T,r(s.data.overview),1)):n("",!0),t[3]||(t[3]=e("div",{class:"ph-legend"},[e("span",{class:"lg"},[e("i",{class:"ic lg-source"}),a("来源:这个字段从哪来、谁填")]),e("span",{class:"lg"},[e("i",{class:"ic lg-purpose"}),a("用途:它起什么作用")]),e("span",{class:"lg"},[e("i",{class:"ic lg-fill"}),a("怎么填:具体填什么")])],-1)),s.data.fields&&s.data.fields.length?(o(),i("div",V,[(o(!0),i(v,null,h(s.data.fields,(l,d)=>(o(),i("div",{class:"ph-field",key:"top"+d},[e("div",L,[a(r(l.name)+" ",1),e("span",b,r(l.source),1)]),e("div",B,r(l.purpose),1),e("div",W,"👉 "+r(l.fill),1)]))),128))])):n("",!0),s.data.sections&&s.data.sections.length?(o(!0),i(v,{key:2},h(s.data.sections,(l,d)=>(o(),i("div",{key:d,class:"ph-section"},[l.title?(o(),i("div",A,r(l.title),1)):n("",!0),l.overview?(o(),i("div",x,r(l.overview),1)):n("",!0),(o(!0),i(v,null,h(l.fields,(p,k)=>(o(),i("div",{class:"ph-field",key:k},[e("div",U,[a(r(p.name)+" ",1),e("span",D,r(p.source),1)]),e("div",I,r(p.purpose),1),e("div",G,"👉 "+r(p.fill),1)]))),128))]))),128)):n("",!0),!s.data.fields&&!(s.data.sections&&s.data.sections.length)?(o(),M(N,{key:3,description:"暂无说明","image-size":70})):n("",!0)])]),_:1},8,["modelValue","title"])])}}},F=g(j,[["__scopeId","data-v-75d9d55f"]]),H={title:"产品类型(档案维护)",overview:`产品类型是"生产什么产品"的分类档案,是整条产线的源头基础数据。 + +生产主数据链条:产品类型 → 建工单(选产品类型) → 配物料清单(BOM) → 日排产 → 备料 → PLC/AGV 配送 → 工位装配。 +必须先在这里维护好产品类型,后面所有环节(工单/BOM/备料/拧紧/追溯)才有可选对象。`,fields:[{name:"名称",source:"手工填写。用户自定义,无上游来源。",purpose:"产品类型的中文名,用于识别与下拉展示",fill:"如:智能电表、断路器、配电柜"},{name:"编码",source:"手工填写。你自定义的编码,保存入库后成为该记录的唯一标识。",purpose:"产品唯一编码,工单/物料清单等下游按此关联",fill:"如 METER-01;全局唯一,建了不要随意改,否则下游关联会断"},{name:"类别",source:"手工填写。可选,无上游来源。",purpose:"产品所属大类,便于分类统计",fill:"如:计量表 / 开关柜;可空"},{name:"启用",source:"开关选择。默认开启。",purpose:"启用后才允许在新建工单/备料的下拉里被选到",fill:"默认开启;暂时停产的可关闭(不删除,保留档案)"},{name:"备注",source:"手工填写。可选。",purpose:"补充说明",fill:"可不填"}]},K={title:"工单管理(新建 / 编辑工单)",overview:`工单 = 一个"合同/生产批次"的唯一载体,是生产执行和仓库出库挂靠的核心对象。 + +全流程:先有产品类型 → 建工单(选产品类型、定数量、定工序组合) → 进"物料清单"给该工单配料 → 行内"日排产"排哪天产多少 → 仓库按排产备料出库 → 产线装配/拧紧/报工 → 完工。 +工单号会贯穿 备料单、拧紧查询、扫码报工、工件追溯、操作日志 全链路。`,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:"手工填写数字序列。",purpose:"本工单要在产线执行的工序集合,PLC 按此组合下发到各工位",fill:"组合写入PLC:135=只做第1/3/5序;全工序=123456789101112"},{name:"状态",source:"手动选择(新建时)。后续由系统流程自动推进。",purpose:"工单生命周期:创建→发布→生产→完成",fill:'新建时选"已创建",后续按流程推进无需手改'}],sections:[{title:'行内"日排产"弹窗',overview:'对当前这行工单,排"哪天生产多少台"。排产结果会通知仓库按此备料/配送。',fields:[{name:"日期",source:"手动选择日期。",purpose:"计划生产日期,仓库按它哪天备料",fill:"选一个日期,可对同一工单排未来多天"},{name:"计划数量",source:"手动填写整数。",purpose:"当天计划产量,作为仓库备料/AGV配送的前瞻依据",fill:"≤ 工单总数量;如今天产 20 台"}]}]},Q={title:"物料清单(BOM)",overview:`物料清单 = 生产 1 台该工单产品需要哪些物料、各用多少。 +仓库按它计算备料/出库需求量,并强约束累计出库 ≤ 需求总量。 + +数据链路:先建工单 → 到本页选工单 → 为它逐条添加物料(编码要与 WMS 物料档案一致) → 之后仓库才能按此为工单领料。`,fields:[{name:"工单号",source:"下拉/输入选择。来自已建的工单。",purpose:"要为哪个工单配置物料清单",fill:"选择工单号后加载该工单已有清单"},{name:"物料编码",source:"手工填写。必须与 WMS(库房) 物料档案的编码一致。",purpose:"该物料在库房的全库唯一编码,两条系统靠它关联",fill:"如 螺丝=SCREW-M3、主控芯片=IC-001;编码对不上 WMS 将无法备料"},{name:"物料名称",source:"手工填写。",purpose:"物料中文名,便于识别",fill:"如 十字螺丝、主控芯片"},{name:"规格",source:"手工填写。",purpose:"物料规格型号",fill:"如 M3×8 / 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:"一般自动算,不必改"}]},J={title:"备料单(查询)",overview:`备料单按"日排产"自动算出某天需要的全部物料,仓库据此备料、由 AGV 配送到各工位(DOCK)。 +本页是只读查询,不修改数据。 + +数据链路:日排产(工单内) → 本页按日期取那天所有工单的物料汇总 → 仓库出库 → AGV 配送。`,fields:[{name:"日期",source:"手动选择。筛选条件。",purpose:"查看哪一天的备料需求",fill:"选择某排产日期"},{name:"工单号",source:"手动输入。筛选条件。",purpose:"只查看指定工单的备料",fill:"可空,空=看全部工单"},{name:"状态",source:"下拉。数据来自备料执行状态。",purpose:"按备料进度筛选",fill:"可空"}]},X={title:"PLC 工序下发",overview:`把工序组合写入西门子 S7-1214 PLC 寄存器,产线传送带据此只执行对应工序。 +系统遵循"未收到完成信号不下发下一条",确保产线不串序。 + +数据链路:工单(含工序组合) → 下发到 S7-1214 → PLC 驱动工位/传送带 → 收到完成信号再下发下一条。`,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"}]},Y={title:"拧紧数据(查询/录入)",overview:`接收丹尼科尔拧紧工具的采集结果(扭矩/角度/时间/结果/操作人),用于质量追溯。 +数据在工位终端点"工序完成上报"后由拧紧枪数据同步到 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:"默认当前登录用户,可改"}]},Z={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:'类型为"工序"时填第几道工序',fill:"如 3"}]},$={title:"工件追溯",overview:`输入工件 SN,查它的完整履历:进线/完工时间、各工序时间线、步骤考核数据(扭矩/角度)、拧紧记录、以及它用了哪些批次/精密件。 + +数据来源:全部由前端各环节自动写入(扫码报工、拧紧采集、PLC下发、工序完成),本页只读查询。`,fields:[{name:"工件SN",source:"扫码枪/手输。来自工件条码。",purpose:"要追溯的工件唯一序列号",fill:"扫 SN 或手动输入后点查询"}]},ee={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:"勾选所需权限码(如 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:"数字,越小越靠前"}]}]},se={title:"操作日志",overview:`记录所有关键业务操作(建工单、物料清单维护、备料、PLC下发、拧紧、扫码报工等),按工单号、操作人、实体可追溯。 +数据由系统在各操作发生时自动写入,本页只读查询。`,fields:[{name:"工单号",source:"筛选条件。数据来自日志中的 workOrderNo 字段。",purpose:"按工单号过滤该工单的所有操作",fill:"输入工单号,可空=全部"},{name:"操作人",source:"筛选条件。数据来自日志中的 operator 字段。",purpose:"按操作人过滤",fill:"输入姓名/账号,可空=全部"},{name:"类型",source:"筛选条件。数据来自日志中的事件类型字段。",purpose:"按事件类型过滤",fill:"如 EVENT_WORK_ORDER / EVENT_TORQUE,可空"}]};export{F as P,Q as a,J as b,X as c,Y as d,Z as e,$ as f,H as g,K as h,se as i,ee as j}; diff --git a/bj_power_mes/public/assets/index-BORa7dH4.js b/bj_power_mes/public/assets/index-0akZQTPV.js similarity index 99% rename from bj_power_mes/public/assets/index-BORa7dH4.js rename to bj_power_mes/public/assets/index-0akZQTPV.js index a3022db..ab0e288 100644 --- a/bj_power_mes/public/assets/index-BORa7dH4.js +++ b/bj_power_mes/public/assets/index-0akZQTPV.js @@ -1,4 +1,4 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./Login-QL740R5V.js","./Login-CeC3FKj9.css","./WorkOrder-TX6kimh3.js","./help-CJCtd61z.js","./help-C9Za1gjv.css","./Bom-qRGZwfNl.js","./MaterialRequest-CWLPKDuD.js","./PlcSend-DJ_ld__Q.js","./Torque-CoflmdZb.js","./Scan-D2iJS4hm.js","./Trace-JYn0Y_aZ.js","./ProductType-Un9zwxaF.js","./EventLog-D9KNbo8j.js","./Rbac-76zcPd_G.js"])))=>i.map(i=>d[i]); +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./Login-BKOWbZ3k.js","./Login-CeC3FKj9.css","./WorkOrder-D-K9BxdI.js","./help-DqtsZH2B.js","./help-C9Za1gjv.css","./Bom-y4OLVdty.js","./MaterialRequest-HEPebPYp.js","./PlcSend-B772h7Wq.js","./Torque-D780rGIR.js","./Scan-B_JseKq5.js","./Trace-DmFL3ikQ.js","./ProductType-Dppvewox.js","./EventLog-pbGVVfEk.js","./Rbac-DpQZV-fc.js"])))=>i.map(i=>d[i]); (function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))a(o);new MutationObserver(o=>{for(const l of o)if(l.type==="childList")for(const s of l.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&a(s)}).observe(document,{childList:!0,subtree:!0});function n(o){const l={};return o.integrity&&(l.integrity=o.integrity),o.referrerPolicy&&(l.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?l.credentials="include":o.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function a(o){if(o.ep)return;o.ep=!0;const l=n(o);fetch(o.href,l)}})();/** * @vue/shared v3.5.42 * (c) 2018-present Yuxi (Evan) You and Vue contributors @@ -94,4 +94,4 @@ usage: app.provide(ZINDEX_INJECTION_KEY, { current: 0 })`),{initialZIndex:a,curr `);s=r===-1?"":l.slice(r+1)}if(!a.stack)a.stack=s;else if(s){const r=s.indexOf(` `),u=r===-1?-1:s.indexOf(` `,r+1),c=u===-1?"":s.slice(u+1);String(a.stack).endsWith(c)||(a.stack+=` -`+s)}}catch{}throw a}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=Ys(this.defaults,n);const{transitional:a,paramsSerializer:o,headers:l}=n;a!==void 0&&ld.assertOptions(a,{silentJSONParsing:la.transitional(la.boolean),forcedJSONParsing:la.transitional(la.boolean),clarifyTimeoutError:la.transitional(la.boolean),legacyInterceptorReqResOrdering:la.transitional(la.boolean),advertiseZstdAcceptEncoding:la.transitional(la.boolean),validateStatusUndefinedResolves:la.transitional(la.boolean)},!1),o!=null&&(me.isFunction(o)?n.paramsSerializer={serialize:o}:ld.assertOptions(o,{encode:la.function,serialize:la.function},!0)),n.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?n.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:n.allowAbsoluteUrls=!0),ld.assertOptions(n,{baseUrl:la.spelling("baseURL"),withXsrfToken:la.spelling("withXSRFToken")},!0),n.method=(me.getSafeProp(n,"method")||me.getSafeProp(this.defaults,"method")||"get").toLowerCase();let s=l&&me.merge(l.common,l[n.method]);l&&me.forEach(UT.concat("common"),v=>{delete l[v]}),n.headers=fa.concat(s,l);const r=[];let u=!0;this.interceptors.request.forEach(function(h){if(typeof h.runWhen=="function"&&h.runWhen(n)===!1)return;u=u&&h.synchronous;const g=n.transitional||zg;g&&g.legacyInterceptorReqResOrdering?r.unshift(h.fulfilled,h.rejected):r.push(h.fulfilled,h.rejected)});const c=[];this.interceptors.response.forEach(function(h){c.push(h.fulfilled,h.rejected)});let d,f=0,p;if(!u){const v=[oh.bind(this),void 0];for(v.unshift(...r),v.push(...c),p=v.length,d=Promise.resolve(n);foh.call(this,m)))}catch(y){d=Promise.reject(y)}break}}if(!d)try{d=oh.call(this,m)}catch(v){d=Promise.reject(v)}for(f=0,p=c.length;f{if(!a._listeners)return;let l=a._listeners.length;for(;l-- >0;)a._listeners[l](o);a._listeners=null}),this.promise.then=o=>{let l;const s=new Promise(r=>{a.subscribe(r),l=r}).then(o);return s.cancel=function(){a.unsubscribe(l)},s},t(function(l,s,r){a.reason||(a.reason=new Qu(l,s,r),n(a.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=a=>{t.abort(a)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new nO(function(o){t=o}),cancel:t}}};function aoe(e){return function(n){return e.apply(null,n)}}function ooe(e){return me.isObject(e)&&e.isAxiosError===!0}const sd={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,ContentTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,UnprocessableContent:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerReturnsAnUnknownError:520,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(sd).forEach(([e,t])=>{sd[t]===void 0&&(sd[t]=e)});function aO(e){const t=new Ms(e),n=OT(Ms.prototype.request,t);return me.extend(n,Ms.prototype,t,{allOwnKeys:!0}),me.extend(n,t,null,{allOwnKeys:!0}),n.create=function(o){return aO(Ys(e,o))},n}const An=aO(Zu);An.Axios=Ms;An.CanceledError=Qu;An.CancelToken=noe;An.isCancel=YT;An.VERSION=Kg;An.toFormData=Zf;An.AxiosError=ft;An.Cancel=An.CanceledError;An.all=function(t){return Promise.all(t)};An.spread=aoe;An.isAxiosError=ooe;An.mergeConfig=Ys;An.AxiosHeaders=fa;An.formToJSON=e=>qT(me.isHTMLForm(e)?new FormData(e):e);An.getAdapter=tO.getAdapter;An.HttpStatusCode=sd;An.default=An;const{Axios:voe,AxiosError:moe,CanceledError:goe,isCancel:yoe,CancelToken:boe,VERSION:woe,all:Soe,Cancel:Coe,isAxiosError:koe,spread:Eoe,toFormData:xoe,AxiosHeaders:Toe,HttpStatusCode:Ooe,formToJSON:Roe,getAdapter:$oe,mergeConfig:Noe,create:Poe}=An,Wg=An.create({baseURL:"/api/v1",timeout:3e4});Wg.interceptors.request.use(e=>{const t=Yte();return t&&(e.headers.Authorization=`Bearer ${t}`),e});Wg.interceptors.response.use(e=>{const t=e.data;return t&&typeof t=="object"&&"code"in t?t.code!==0?(nd.error(t.message||"操作失败"),Promise.reject(new Error(t.message||"操作失败"))):t.data!==void 0?t.data:t:t},e=>{var t,n,a;if(((t=e.response)==null?void 0:t.status)===401)TT(),nd.error("登录已失效,请重新登录"),window.location.pathname.startsWith("/login")||(window.location.href="/login");else{const o=((a=(n=e.response)==null?void 0:n.data)==null?void 0:a.message)||e.message||"网络错误";nd.error(o)}return Promise.reject(e)});const loe={class:"page-title"},soe={style:{"margin-right":"16px"}},roe={__name:"MainLayout",setup(e){const t=Ute(),n=C(()=>{const s=t1();if(!s)return a;const r=s.permissionCodes||[],u=c=>s.roleCode==="SUPER_ADMIN"||r.includes("*")||r.includes(c);return a.filter(c=>u(c.code))}),a=[{code:"produce.workorder",name:"工单管理",path:"/work-order"},{code:"produce.bom",name:"物料清单",path:"/bom"},{code:"produce.material",name:"备料单",path:"/material-request"},{code:"produce.plc",name:"PLC工序下发",path:"/plc-send"},{code:"produce.torque",name:"拧紧查询",path:"/torque"},{code:"produce.scan",name:"扫码报工",path:"/scan"},{code:"produce.trace",name:"工件追溯",path:"/trace"},{code:"produce.product",name:"产品类型",path:"/product-type"},{code:"sys.eventlog",name:"操作日志",path:"/event-log"},{code:"sys.rbac",name:"角色权限管理",path:"/rbac"}],o=C(()=>{const s=t1();return s?s.name||s.username:"未登录"});yt(async()=>{try{const s=await Wg.get("/userinfo");localStorage.setItem("user",JSON.stringify(s))}catch{}});function l(){TT(),t.replace("/login")}return(s,r)=>{const u=It("el-menu-item"),c=It("el-menu"),d=It("el-aside"),f=It("el-button"),p=It("el-header"),m=It("router-view"),v=It("el-main"),h=It("el-container");return R(),ce(h,{class:"layout",style:{"min-height":"100vh"}},{default:ae(()=>[Z(d,{width:"210px",class:"aside"},{default:ae(()=>[r[1]||(r[1]=q("div",{class:"logo"},"MES 产线控制",-1)),Z(c,{"default-active":s.$route.path,router:"","background-color":"#001529","text-color":"#a6adb4","active-text-color":"#409eff",style:{"border-right":"none"}},{default:ae(()=>[(R(!0),H(Ke,null,Ct(n.value,g=>(R(),ce(u,{key:g.path,index:g.path},{default:ae(()=>[q("span",null,Te(g.name),1)]),_:2},1032,["index"]))),128))]),_:1},8,["default-active"])]),_:1}),Z(h,null,{default:ae(()=>[Z(p,{class:"header"},{default:ae(()=>[q("span",loe,Te(s.$route.meta.title||""),1),r[4]||(r[4]=q("div",{class:"spacer"},null,-1)),q("div",null,[q("span",soe,Te(o.value),1),Z(f,{size:"small",onClick:r[0]||(r[0]=g=>i(t).push("/change-password"))},{default:ae(()=>[...r[2]||(r[2]=[wt("修改密码",-1)])]),_:1}),Z(f,{size:"small",onClick:l},{default:ae(()=>[...r[3]||(r[3]=[wt("退出",-1)])]),_:1})])]),_:1}),Z(v,{style:{padding:"14px"}},{default:ae(()=>[Z(m)]),_:1})]),_:1})]),_:1})}}},ioe=pT(roe,[["__scopeId","data-v-56cf433e"]]),uoe=[{path:"/login",name:"Login",component:()=>ja(()=>import("./Login-QL740R5V.js"),__vite__mapDeps([0,1]),import.meta.url),meta:{title:"登录"}},{path:"/",component:ioe,children:[{path:"",redirect:"/work-order"},{path:"work-order",name:"WorkOrder",component:()=>ja(()=>import("./WorkOrder-TX6kimh3.js"),__vite__mapDeps([2,3,4]),import.meta.url),meta:{title:"工单管理"}},{path:"bom",name:"Bom",component:()=>ja(()=>import("./Bom-qRGZwfNl.js"),__vite__mapDeps([5,3,4]),import.meta.url),meta:{title:"物料清单"}},{path:"material-request",name:"MaterialRequest",component:()=>ja(()=>import("./MaterialRequest-CWLPKDuD.js"),__vite__mapDeps([6,3,4]),import.meta.url),meta:{title:"备料单"}},{path:"plc-send",name:"PlcSend",component:()=>ja(()=>import("./PlcSend-DJ_ld__Q.js"),__vite__mapDeps([7,3,4]),import.meta.url),meta:{title:"PLC工序下发"}},{path:"torque",name:"Torque",component:()=>ja(()=>import("./Torque-CoflmdZb.js"),__vite__mapDeps([8,3,4]),import.meta.url),meta:{title:"拧紧查询"}},{path:"scan",name:"Scan",component:()=>ja(()=>import("./Scan-D2iJS4hm.js"),__vite__mapDeps([9,3,4]),import.meta.url),meta:{title:"扫码报工"}},{path:"trace",name:"Trace",component:()=>ja(()=>import("./Trace-JYn0Y_aZ.js"),__vite__mapDeps([10,3,4]),import.meta.url),meta:{title:"工件追溯"}},{path:"product-type",name:"ProductType",component:()=>ja(()=>import("./ProductType-Un9zwxaF.js"),__vite__mapDeps([11,3,4]),import.meta.url),meta:{title:"产品类型"}},{path:"event-log",name:"EventLog",component:()=>ja(()=>import("./EventLog-D9KNbo8j.js"),__vite__mapDeps([12,3,4]),import.meta.url),meta:{title:"操作日志"}},{path:"change-password",name:"ChangePassword",component:()=>ja(()=>import("./ChangePassword-7_NBFIM7.js"),[],import.meta.url),meta:{title:"修改密码"}},{path:"rbac",name:"Rbac",component:()=>ja(()=>import("./Rbac-76zcPd_G.js"),__vite__mapDeps([13,3,4]),import.meta.url),meta:{title:"角色权限管理"}}]},{path:"/:pathMatch(.*)*",redirect:"/work-order"}],qg=qte({history:Ete(),routes:uoe});qg.beforeEach(e=>{if(e.path!=="/login"&&!localStorage.getItem("token"))return{path:"/login",query:e.fullPath?{redirect:e.fullPath}:{}}});qg.afterEach(e=>{var t;document.title=(t=e.meta)!=null&&t.title?`${e.meta.title} - MES 产线控制`:"MES 产线控制"});JS(Bee).use(qg).use(Iee,{locale:Aee}).mount("#app");export{nd as E,Ke as F,pT as _,Z as a,coe as b,H as c,q as d,Ze as e,wt as f,rn as g,Wg as h,L as i,yt as j,i as k,zt as l,Ct as m,ce as n,R as o,yee as p,se as q,It as r,doe as s,Te as t,Ute as u,TT as v,ae as w}; +`+s)}}catch{}throw a}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=Ys(this.defaults,n);const{transitional:a,paramsSerializer:o,headers:l}=n;a!==void 0&&ld.assertOptions(a,{silentJSONParsing:la.transitional(la.boolean),forcedJSONParsing:la.transitional(la.boolean),clarifyTimeoutError:la.transitional(la.boolean),legacyInterceptorReqResOrdering:la.transitional(la.boolean),advertiseZstdAcceptEncoding:la.transitional(la.boolean),validateStatusUndefinedResolves:la.transitional(la.boolean)},!1),o!=null&&(me.isFunction(o)?n.paramsSerializer={serialize:o}:ld.assertOptions(o,{encode:la.function,serialize:la.function},!0)),n.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?n.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:n.allowAbsoluteUrls=!0),ld.assertOptions(n,{baseUrl:la.spelling("baseURL"),withXsrfToken:la.spelling("withXSRFToken")},!0),n.method=(me.getSafeProp(n,"method")||me.getSafeProp(this.defaults,"method")||"get").toLowerCase();let s=l&&me.merge(l.common,l[n.method]);l&&me.forEach(UT.concat("common"),v=>{delete l[v]}),n.headers=fa.concat(s,l);const r=[];let u=!0;this.interceptors.request.forEach(function(h){if(typeof h.runWhen=="function"&&h.runWhen(n)===!1)return;u=u&&h.synchronous;const g=n.transitional||zg;g&&g.legacyInterceptorReqResOrdering?r.unshift(h.fulfilled,h.rejected):r.push(h.fulfilled,h.rejected)});const c=[];this.interceptors.response.forEach(function(h){c.push(h.fulfilled,h.rejected)});let d,f=0,p;if(!u){const v=[oh.bind(this),void 0];for(v.unshift(...r),v.push(...c),p=v.length,d=Promise.resolve(n);foh.call(this,m)))}catch(y){d=Promise.reject(y)}break}}if(!d)try{d=oh.call(this,m)}catch(v){d=Promise.reject(v)}for(f=0,p=c.length;f{if(!a._listeners)return;let l=a._listeners.length;for(;l-- >0;)a._listeners[l](o);a._listeners=null}),this.promise.then=o=>{let l;const s=new Promise(r=>{a.subscribe(r),l=r}).then(o);return s.cancel=function(){a.unsubscribe(l)},s},t(function(l,s,r){a.reason||(a.reason=new Qu(l,s,r),n(a.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=a=>{t.abort(a)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new nO(function(o){t=o}),cancel:t}}};function aoe(e){return function(n){return e.apply(null,n)}}function ooe(e){return me.isObject(e)&&e.isAxiosError===!0}const sd={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,ContentTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,UnprocessableContent:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerReturnsAnUnknownError:520,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(sd).forEach(([e,t])=>{sd[t]===void 0&&(sd[t]=e)});function aO(e){const t=new Ms(e),n=OT(Ms.prototype.request,t);return me.extend(n,Ms.prototype,t,{allOwnKeys:!0}),me.extend(n,t,null,{allOwnKeys:!0}),n.create=function(o){return aO(Ys(e,o))},n}const An=aO(Zu);An.Axios=Ms;An.CanceledError=Qu;An.CancelToken=noe;An.isCancel=YT;An.VERSION=Kg;An.toFormData=Zf;An.AxiosError=ft;An.Cancel=An.CanceledError;An.all=function(t){return Promise.all(t)};An.spread=aoe;An.isAxiosError=ooe;An.mergeConfig=Ys;An.AxiosHeaders=fa;An.formToJSON=e=>qT(me.isHTMLForm(e)?new FormData(e):e);An.getAdapter=tO.getAdapter;An.HttpStatusCode=sd;An.default=An;const{Axios:voe,AxiosError:moe,CanceledError:goe,isCancel:yoe,CancelToken:boe,VERSION:woe,all:Soe,Cancel:Coe,isAxiosError:koe,spread:Eoe,toFormData:xoe,AxiosHeaders:Toe,HttpStatusCode:Ooe,formToJSON:Roe,getAdapter:$oe,mergeConfig:Noe,create:Poe}=An,Wg=An.create({baseURL:"/api/v1",timeout:3e4});Wg.interceptors.request.use(e=>{const t=Yte();return t&&(e.headers.Authorization=`Bearer ${t}`),e});Wg.interceptors.response.use(e=>{const t=e.data;return t&&typeof t=="object"&&"code"in t?t.code!==0?(nd.error(t.message||"操作失败"),Promise.reject(new Error(t.message||"操作失败"))):t.data!==void 0?t.data:t:t},e=>{var t,n,a;if(((t=e.response)==null?void 0:t.status)===401)TT(),nd.error("登录已失效,请重新登录"),window.location.pathname.startsWith("/login")||(window.location.href="/login");else{const o=((a=(n=e.response)==null?void 0:n.data)==null?void 0:a.message)||e.message||"网络错误";nd.error(o)}return Promise.reject(e)});const loe={class:"page-title"},soe={style:{"margin-right":"16px"}},roe={__name:"MainLayout",setup(e){const t=Ute(),n=C(()=>{const s=t1();if(!s)return a;const r=s.permissionCodes||[],u=c=>s.roleCode==="SUPER_ADMIN"||r.includes("*")||r.includes(c);return a.filter(c=>u(c.code))}),a=[{code:"produce.workorder",name:"工单管理",path:"/work-order"},{code:"produce.bom",name:"物料清单",path:"/bom"},{code:"produce.material",name:"备料单",path:"/material-request"},{code:"produce.plc",name:"PLC工序下发",path:"/plc-send"},{code:"produce.torque",name:"拧紧查询",path:"/torque"},{code:"produce.scan",name:"扫码报工",path:"/scan"},{code:"produce.trace",name:"工件追溯",path:"/trace"},{code:"produce.product",name:"产品类型",path:"/product-type"},{code:"sys.eventlog",name:"操作日志",path:"/event-log"},{code:"sys.rbac",name:"角色权限管理",path:"/rbac"}],o=C(()=>{const s=t1();return s?s.name||s.username:"未登录"});yt(async()=>{try{const s=await Wg.get("/userinfo");localStorage.setItem("user",JSON.stringify(s))}catch{}});function l(){TT(),t.replace("/login")}return(s,r)=>{const u=It("el-menu-item"),c=It("el-menu"),d=It("el-aside"),f=It("el-button"),p=It("el-header"),m=It("router-view"),v=It("el-main"),h=It("el-container");return R(),ce(h,{class:"layout",style:{"min-height":"100vh"}},{default:ae(()=>[Z(d,{width:"210px",class:"aside"},{default:ae(()=>[r[1]||(r[1]=q("div",{class:"logo"},"MES 产线控制",-1)),Z(c,{"default-active":s.$route.path,router:"","background-color":"#001529","text-color":"#a6adb4","active-text-color":"#409eff",style:{"border-right":"none"}},{default:ae(()=>[(R(!0),H(Ke,null,Ct(n.value,g=>(R(),ce(u,{key:g.path,index:g.path},{default:ae(()=>[q("span",null,Te(g.name),1)]),_:2},1032,["index"]))),128))]),_:1},8,["default-active"])]),_:1}),Z(h,null,{default:ae(()=>[Z(p,{class:"header"},{default:ae(()=>[q("span",loe,Te(s.$route.meta.title||""),1),r[4]||(r[4]=q("div",{class:"spacer"},null,-1)),q("div",null,[q("span",soe,Te(o.value),1),Z(f,{size:"small",onClick:r[0]||(r[0]=g=>i(t).push("/change-password"))},{default:ae(()=>[...r[2]||(r[2]=[wt("修改密码",-1)])]),_:1}),Z(f,{size:"small",onClick:l},{default:ae(()=>[...r[3]||(r[3]=[wt("退出",-1)])]),_:1})])]),_:1}),Z(v,{style:{padding:"14px"}},{default:ae(()=>[Z(m)]),_:1})]),_:1})]),_:1})}}},ioe=pT(roe,[["__scopeId","data-v-56cf433e"]]),uoe=[{path:"/login",name:"Login",component:()=>ja(()=>import("./Login-BKOWbZ3k.js"),__vite__mapDeps([0,1]),import.meta.url),meta:{title:"登录"}},{path:"/",component:ioe,children:[{path:"",redirect:"/work-order"},{path:"work-order",name:"WorkOrder",component:()=>ja(()=>import("./WorkOrder-D-K9BxdI.js"),__vite__mapDeps([2,3,4]),import.meta.url),meta:{title:"工单管理"}},{path:"bom",name:"Bom",component:()=>ja(()=>import("./Bom-y4OLVdty.js"),__vite__mapDeps([5,3,4]),import.meta.url),meta:{title:"物料清单"}},{path:"material-request",name:"MaterialRequest",component:()=>ja(()=>import("./MaterialRequest-HEPebPYp.js"),__vite__mapDeps([6,3,4]),import.meta.url),meta:{title:"备料单"}},{path:"plc-send",name:"PlcSend",component:()=>ja(()=>import("./PlcSend-B772h7Wq.js"),__vite__mapDeps([7,3,4]),import.meta.url),meta:{title:"PLC工序下发"}},{path:"torque",name:"Torque",component:()=>ja(()=>import("./Torque-D780rGIR.js"),__vite__mapDeps([8,3,4]),import.meta.url),meta:{title:"拧紧查询"}},{path:"scan",name:"Scan",component:()=>ja(()=>import("./Scan-B_JseKq5.js"),__vite__mapDeps([9,3,4]),import.meta.url),meta:{title:"扫码报工"}},{path:"trace",name:"Trace",component:()=>ja(()=>import("./Trace-DmFL3ikQ.js"),__vite__mapDeps([10,3,4]),import.meta.url),meta:{title:"工件追溯"}},{path:"product-type",name:"ProductType",component:()=>ja(()=>import("./ProductType-Dppvewox.js"),__vite__mapDeps([11,3,4]),import.meta.url),meta:{title:"产品类型"}},{path:"event-log",name:"EventLog",component:()=>ja(()=>import("./EventLog-pbGVVfEk.js"),__vite__mapDeps([12,3,4]),import.meta.url),meta:{title:"操作日志"}},{path:"change-password",name:"ChangePassword",component:()=>ja(()=>import("./ChangePassword-D-u1tXDb.js"),[],import.meta.url),meta:{title:"修改密码"}},{path:"rbac",name:"Rbac",component:()=>ja(()=>import("./Rbac-DpQZV-fc.js"),__vite__mapDeps([13,3,4]),import.meta.url),meta:{title:"角色权限管理"}}]},{path:"/:pathMatch(.*)*",redirect:"/work-order"}],qg=qte({history:Ete(),routes:uoe});qg.beforeEach(e=>{if(e.path!=="/login"&&!localStorage.getItem("token"))return{path:"/login",query:e.fullPath?{redirect:e.fullPath}:{}}});qg.afterEach(e=>{var t;document.title=(t=e.meta)!=null&&t.title?`${e.meta.title} - MES 产线控制`:"MES 产线控制"});JS(Bee).use(qg).use(Iee,{locale:Aee}).mount("#app");export{nd as E,Ke as F,pT as _,Z as a,coe as b,H as c,q as d,Ze as e,wt as f,rn as g,Wg as h,L as i,yt as j,i as k,zt as l,Ct as m,ce as n,R as o,yee as p,se as q,It as r,doe as s,Te as t,Ute as u,TT as v,ae as w}; diff --git a/bj_power_mes/public/index.html b/bj_power_mes/public/index.html index 678c79d..48e7b01 100644 --- a/bj_power_mes/public/index.html +++ b/bj_power_mes/public/index.html @@ -4,7 +4,7 @@ MES 产线控制 - + diff --git a/bj_power_wms_client/frontend/src/help.js b/bj_power_wms_client/frontend/src/help.js index 0dbf3e4..d6296b3 100644 --- a/bj_power_wms_client/frontend/src/help.js +++ b/bj_power_wms_client/frontend/src/help.js @@ -1,34 +1,38 @@ -// 库房客户端(WMS Client) 页面级操作说明:整体介绍 + 各字段 来源/用途/怎么填 +// WMS 库房客户端 页面级操作说明:整体流程 + 各字段 数据来源/用途/怎么填 // 由 components/PageHelp.vue 在左下角 "?" 按钮弹出展示。 +// 说明:这里的"数据来源"特指该字段数据由谁产生、从哪个系统/页面来,帮助跑通真实流程。 export const helpInbound = { - title: '入库', - overview: '把来料记入 WMS 库存。按物料类型分两种方式:\n· 结构件(螺丝/机加工件)→ 按【批次】入库,一进多件;\n· 精密件(芯片/器件)→ 按【SN 序列号】逐件扫码入库,单件可追溯。\n入库先选“物料模板”,否则需要手工填大量信息;支持连续扫码与 Excel 批量导入。', + title: '入库(来料入账)', + overview: + '把到货的来料记入 WMS 库存。按物料类型分两种入库方式:\n· 结构件(螺丝/机加工件) → 按【批次】入库,一批多件;\n· 精密件(芯片/器件) → 按【SN 序列号】逐件扫码,可单件追溯。\n\n物料类型由 WMS 的"物料档案"决定(精密件/结构件),入库方式随之自动给出。\n入库是整个库存链路的第一环:入库(Held) → 质量检验(合格Z02) → 之后才能被出库锁定。', sections: [ { - title: 'Tab1 结构件入库(批次)', + title: 'Tab1 结构件入库(按批次)', + overview: '适用于螺丝、机加工件等标准件,一次到货入一批。', 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: '供应商名称,可空' } + { name: '物料', source: '下拉选择。数据来自 WMS"物料档案"里类型为"结构件"的物料。', purpose: '入库的是什么物料;档案里必须存在才能选到', fill: '选择物料编码,如 SCREW-M3;选不到=还没建该物料档案' }, + { name: '批次号', source: '留空系统自动生成(日期+序号);也可手工填。', purpose: '区别不同到货批次,实现先进先出(FIFO)', fill: '默认留空自动生成;供应商自带批号时可手填' }, + { name: '数量', source: '手工填写整数。', purpose: '本批到货数量', fill: '整数 ≥1' }, + { name: '区域', source: '下拉选择。数据来自库区字典。', purpose: '放到哪个库区(待检/合格/不合格…)', fill: '新到货一般先放"待检"区,检验合格后再转"合格"区(Z02)' }, + { name: '生产日期', source: '手动选择日期。', purpose: '生产时间,用于时效和批次管理', fill: '选择日期' }, + { name: '供应商', source: '手工填写。', purpose: '来料来源', fill: '供应商名称,可空' } ] }, { - title: 'Tab2 精密件 SN 入库', + title: 'Tab2 精密件 SN 入库(逐件)', + overview: '适用于芯片、器件等需要单件追溯的来料,一件一个 SN。', fields: [ - { name: '物料', source: '下拉选择', purpose: '入库的精密件物料', fill: '选择物料编码' }, - { name: '区域', source: '下拉选择', purpose: '放到哪个库区', fill: '可选,空则默认' }, - { name: '扫码录入', source: '扫码枪连续扫码', purpose: '逐件登记 SN,实现单件追溯', fill: '扫入/粘贴 SN 后回车追加,可一次多条' } + { name: '物料', source: '下拉选择。来自"物料档案"类型为"精密件"的物料。', purpose: '入库的精密件物料', fill: '选择物料编码' }, + { name: '区域', source: '下拉选择。来自库区字典。', purpose: '放到哪个库区', fill: '可选,空则默认待检区' }, + { name: '扫码录入', source: '扫码枪连续扫码。来自每颗器件自带的 SN 条码。', purpose: '逐件登记 SN,实现单件追溯', fill: '扫入/粘贴 SN 后回车追加,可一次连续多条' } ] }, { - title: 'Tab3 Excel 导入', - overview: '用于大批量结构件入库。列头顺序(首行忽略):物料编码 | 批次号(可空自动生成) | 数量 | 生产日期 | 供应商 | 区域。', + title: 'Tab3 Excel 批量导入', + overview: '用于大批量结构件入库。列头顺序(首行忽略):物料编码 | 批次号(空自动生成) | 数量 | 生产日期 | 供应商 | 区域。', fields: [ - { name: '文件', source: '选择 .xlsx', purpose: '批量导入的物料清单', fill: '按列头顺序准备好 Excel 后选择上传' } + { name: '文件', source: '选择本地 .xlsx 文件。', purpose: '批量导入的物料清单', fill: '按列头顺序准备好 Excel,选择上传' } ] } ] @@ -36,78 +40,86 @@ export const helpInbound = { export const helpOutbound = { title: '出库(按工单领料)', - overview: '仓库按工单台账为生产备料出库。系统强约束:单物料累计出库 ≤ 工单需求总量,超发走补料流程。\n可一次出完,也可分多次、分批由 AGV 配送到各 DOCK(决策权在仓库)。', + overview: + '仓库按工单台账为生产备料出库。系统强约束:单物料累计出库 ≤ 工单需求总量,超发走补料流程。\n可一次出完,也可分多次、分批由 AGV 配送到各 DOCK(配送节奏由仓库决定)。\n\n前置条件:必须先有"工单物料台账"(GOMES 工单+物料清单导入),且该物料在【合格区Z02】有足够库存。', fields: [ - { name: '工单号', source: '输入(来自 MES)', purpose: '出库挂靠的工单,决定可领料总量', fill: '输入工单号回车查询台账' }, - { name: '操作人', source: '登录账号自动带出', purpose: '本次出库执行人,便于追溯', fill: '自动,无需填' }, - { name: '目标工位', source: '手动填写', purpose: '本次配送送达的接驳台/DOCK', fill: '如 DOCK-A,可空' }, - { name: '一键分配出库', source: '系统自动按 FIFO 分配', purpose: '从合格区(Z02)按批次先进先出凑够缺口并出库', fill: '点按钮,系统自动算批次并二次确认' } + { name: '工单号', source: '手动输入。数据来自 MES 已建的工单及导入的物料台账。', purpose: '出库挂靠的工单,决定可领料总量与需求缺口', fill: '输入工单号回车,查询该工单的物料台账' }, + { name: '操作人', source: '登录账号自动带出。', purpose: '本次出库执行人,追溯用', fill: '自动,无需填' }, + { name: '目标工位', source: '手动填写。', purpose: '本次配送送达的接驳台/DOCK', fill: '如 DOCK-A,可空' }, + { name: '一键分配出库', source: '系统自动按 FIFO 分配。数据来自合格区Z02的批次库存。', purpose: '从合格区按先进先出凑够缺口并出库', fill: '点按钮,系统自动算批次并二次确认' } ] } export const helpInventory = { title: '库存查询', - overview: '查看当前库存:结构件按批次台账(数量/锁定/区域),精密件按 SN 序列号(状态/区域)。', + overview: + '查看当前库存:结构件按批次台账(数量/锁定/区域),精密件按 SN 序列号(状态/区域)。\n数据由入库、出库、盘点等业务实时维护,本页只读查询。', fields: [ - { name: '物料编码', source: '筛选条件', purpose: '只看某物料', fill: '输入编码,可空=全部' }, - { name: '库存类型', source: '单选', purpose: '看批次还是看 SN 序列', fill: '全部 / 批次 / SN 序列' }, - { name: '关键字', source: '筛选条件', purpose: '按批次号/物料名称/SN 模糊过滤', fill: '输入关键字,可空' } + { name: '物料编码', source: '筛选条件。', purpose: '只看某物料', fill: '输入编码,可空=全部' }, + { name: '库存类型', source: '单选。', purpose: '看批次台账还是 SN 序列', fill: '全部 / 批次 / SN 序列' }, + { name: '关键字', source: '筛选条件。', purpose: '按批次号/物料名称/SN 模糊过滤', fill: '输入关键字,可空' } ] } export const helpInspection = { - title: '质量检验', - overview: '对到货物料或 SN 做来料检:把“未检”翻转为【合格】或【不合格】。支持单条扫码录入与批量翻转。合格后才能被出库锁定(出库自动分配只取合格区)。', + title: '质量检验(来料检)', + overview: + '对入库的未检物料/SN 做检验:把"未检"翻转为【合格】或【不合格】。\n合格后才能被出库锁定(出库自动分配只取合格区Z02)。\n\n数据链路:入库(状态=未检) → 本页检验翻转 → 合格Z02 / 不合格隔离。', 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: '每行一个编号' } + { name: '目标类型', source: '单选。', purpose: '检验对象是批次还是 SN', fill: '批次 BATCH / 序列号 SN' }, + { name: '检验结论', source: '单选。', purpose: '判定结果', fill: '合格 / 不合格' }, + { name: '检验员', source: '手动填写(默认当前用户)。', purpose: '谁检验的,追溯用', fill: '检验员姓名' }, + { name: '扫码输入', source: '扫码枪。来自批次号/SN条码。', purpose: '单个待检目标编号', fill: '扫批次号或 SN,回车提交' }, + { name: '批量编号', source: '扫码枪连续录入。', purpose: '一次性翻转多个目标的检验状态', fill: '每行一个编号' } ] } export const helpStocktake = { - title: '盘点', - overview: '核对账面与实际库存,支持扫码快速盘点,完成时按差异修正库存。\n步骤:发起盘点(冻结快照)→ 扫码录入实盘数(入库)→ 完成并生成差异(可选:差异写回库存)。', + 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 表示盘亏为零' } + { name: '操作人', source: '登录账号自动带出。', purpose: '发起盘点人', fill: '自动' }, + { name: '发起盘点', source: '按钮操作。', purpose: '冻结当前库存快照,生成盘点单', fill: '点按钮发起' }, + { name: '差异写回库存', source: '开关。', purpose: '完成后是否用实盘差异修正账面库存', fill: '开=写回;关=仅记录差异' }, + { name: '目标编号', source: '扫码枪。来自批次号/SN条码。', purpose: '要盘点的批次号或 SN', fill: '扫批次号/SN,回车提交' }, + { name: '实盘数量', source: '扫码/手输。', purpose: '实际数到数量', fill: '非负整数;0=盘亏为零' } ] } export const helpPackage = { title: '包装绑定(箱号 ↔ SN)', - overview: '把若干精密件 SN 绑定到一个箱号,形成包装箱。用于发货/入库整箱追溯。', + overview: + '把若干精密件 SN 绑定到一个箱号,形成包装箱,用于发货/入库整箱追溯。\n数据链路:拣选出的 SN → 绑到箱号 → 一个箱号代表一箱货。', fields: [ - { name: '箱号', source: '扫码/手输', purpose: '包装箱唯一号', fill: '扫描或手输箱号' }, - { name: '物料', source: '下拉选择(可空)', purpose: '箱内物料类型', fill: '可选' }, - { name: '操作人', source: '登录账号', purpose: '绑定人', fill: '自动' }, - { name: 'SN 录入', source: '扫码枪连续扫码', purpose: '装箱的 SN 序列号清单', fill: '扫入 SN 回车追加' } + { name: '箱号', source: '扫码/手输。', purpose: '包装箱唯一号', fill: '扫描或手输箱号' }, + { name: '物料', source: '下拉选择(可空)。来自物料档案。', purpose: '箱内物料类型', fill: '可选' }, + { name: '操作人', source: '登录账号自动带出。', purpose: '绑定人', fill: '自动' }, + { name: 'SN 录入', source: '扫码枪连续扫码。来自器件 SN 条码。', purpose: '装箱的 SN 清单', fill: '扫入 SN 回车追加' } ] } export const helpSemi = { title: '半成品/成品(流转)', - overview: '产线工位“暂存/退回”的半成品或完工成品可在此入库(记录已完成工序),需要时再出库(重上线),MES 从下一工序继续。', + overview: + '产线工位"暂存/退回"的半成品或完工成品可在此入库(记录已完成工序),需要时再出库(重上线),MES 从下一工序继续。\n\n半成品生命周期:工位暂存退库 → 本页入库(记已完成工序) → 需要时本页出库→ MES 下发下一工序 → 工位继续装配。', sections: [ { title: '半成品/成品入库', + overview: '把产线退回的半成品或成品收进库房。', 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 回车追加' } + { name: '物料', source: '下拉选择。来自物料档案。', purpose: '入库物料', fill: '选择物料编码' }, + { name: '已完成工序', source: '自动带出/手工填写。数据来自工位终端的"已完成工序"上报。', purpose: '该件做到第几道工序,重上线时 MES 从这里继续', fill: '如 135,可空' }, + { name: '工单号', source: '自动带出/手工填写。来自工单。', purpose: '来源工单', fill: '输入工单号' }, + { name: '区域', source: '手动填写(可空)。', purpose: '存放库区', fill: '如 Z05' }, + { name: '扫码录入', source: '扫码枪连续扫码。来自工件 SN 条码。', purpose: '半成品 SN 清单', fill: '扫入 SN 回车追加' } ] }, { title: '半成品出库(重上线)', + overview: '把半成品重新送上线,MES 会从记录的下一个工序继续。', fields: [ - { name: 'SN', source: '扫码枪/手输', purpose: '要重上线的半成品 SN', fill: '扫描或输入 SN,回车出库' } + { name: 'SN', source: '扫码枪/手输。来自工件 SN 条码。', purpose: '要重上线的半成品 SN', fill: '扫描或输入 SN,回车出库' } ] } ] @@ -115,20 +127,21 @@ export const helpSemi = { export const helpLedger = { title: '工单物料台账', - overview: '实时展示每个物料:需求总量、累计已出库、剩余缺口。系统强约束累计出库 ≤ 需求总量,达到即“领料完结”。', + overview: + '实时展示每个物料:需求总量、累计已出库、剩余缺口。\n系统强约束累计出库 ≤ 需求总量,达到即"领料完结"。\n数据链路:MES 工单+物料清单 → 导入本台账 → 出库时自动扣减累计,形成缺口/完结。', fields: [ - { name: '工单号', source: '输入', purpose: '查看哪个工单的领料台账', fill: '输入工单号查询' } + { name: '工单号', source: '手动输入。来自 MES 工单。', purpose: '查看哪个工单的领料台账', fill: '输入工单号查询' } ] } export const helpDisplay = { title: '库房总览显示', - overview: '给库房显示器用的只读总览页,展示库存与出入库概况。', + overview: '给库房显示器用的只读总览页,展示库存与出入库概况。\n数据实时读取库存统计,本页不可编辑。', fields: [] } export const helpDashboard = { title: '库房看板', - overview: '只读看板:库存总量、物料种类、出入库动态等。', + overview: '只读看板:库存总量、物料种类、出入库动态等。\n数据实时读取统计接口,本页不可编辑。', fields: [] } \ No newline at end of file diff --git a/bj_power_wms_client/web/static/assets/Dashboard-DneNlEpi.js b/bj_power_wms_client/web/static/assets/Dashboard-DlINI6qy.js similarity index 96% rename from bj_power_wms_client/web/static/assets/Dashboard-DneNlEpi.js rename to bj_power_wms_client/web/static/assets/Dashboard-DlINI6qy.js index 515603f..1702a8c 100644 --- a/bj_power_wms_client/web/static/assets/Dashboard-DneNlEpi.js +++ b/bj_power_wms_client/web/static/assets/Dashboard-DlINI6qy.js @@ -1 +1 @@ -import{_ as C,i as B,c as s,a as t,w as a,r as o,h as u,u as D,o as l,F as _,k as p,d as n,t as c,p as k,q as N,v as S,x as I,y as T,z as V,A as q,B as h,C as z,D as F,G as Q,f as A}from"./index-9NS-icag.js";import{r as E}from"./request-DS_8eNi1.js";import{f as G}from"./format-C9Ok6skr.js";const L={class:"kpi-label"},M={class:"kpi-value"},R={class:"entries"},$={__name:"Dashboard",setup(j){const m=D(),i=u({}),r=u(!1);async function f(){i.value=await E.get("/display/overview"),r.value=!0}B(f);const y=[{key:"totalQty",label:"在库总量"},{key:"lockedQty",label:"锁定量"},{key:"snInStock",label:"SN 在库数"},{key:"semiInStock",label:"半成品在库"},{key:"packageCount",label:"包装箱数"},{key:"batchCount",label:"批次数"},{key:"inToday",label:"今日入库单"},{key:"outToday",label:"今日出库单"}],v=[{path:"/inbound",title:"入库管理",icon:N},{path:"/outbound",title:"备料出库",icon:S},{path:"/inventory",title:"库存查询",icon:I},{path:"/inspection",title:"质量检验",icon:T},{path:"/stocktake",title:"库存盘点",icon:V},{path:"/semi",title:"半成品/成品",icon:q},{path:"/package",title:"包装绑定",icon:h},{path:"/ledger",title:"物料台账",icon:h},{path:"/display",title:"免登录大屏",icon:z}];return(H,J)=>{const d=o("el-card"),b=o("el-col"),g=o("el-row"),w=o("el-icon"),x=o("el-button");return l(),s("div",null,[t(g,{gutter:12},{default:a(()=>[(l(),s(_,null,p(y,e=>t(b,{key:e.key,xs:12,sm:8,md:6,style:{"margin-bottom":"12px"}},{default:a(()=>[t(d,{shadow:"hover"},{default:a(()=>[n("div",L,c(e.label),1),n("div",M,c(r.value?k(G)(i.value[e.key]):"—"),1)]),_:2},1024)]),_:2},1024)),64))]),_:1}),t(d,{shadow:"never",header:"快捷入口"},{default:a(()=>[n("div",R,[(l(),s(_,null,p(v,e=>t(x,{key:e.path,size:"large",onClick:K=>k(m).push(e.path)},{default:a(()=>[t(w,{style:{"margin-right":"6px"}},{default:a(()=>[(l(),F(Q(e.icon)))]),_:2},1024),A(c(e.title),1)]),_:2},1032,["onClick"])),64))])]),_:1})])}}},W=C($,[["__scopeId","data-v-3a500a05"]]);export{W as default}; +import{_ as C,i as B,c as s,a as t,w as a,r as o,h as u,u as D,o as l,F as _,k as p,d as n,t as c,p as k,q as N,v as S,x as I,y as T,z as V,A as q,B as h,C as z,D as F,G as Q,f as A}from"./index-BhhFt5Di.js";import{r as E}from"./request-By4ij0Lz.js";import{f as G}from"./format-C9Ok6skr.js";const L={class:"kpi-label"},M={class:"kpi-value"},R={class:"entries"},$={__name:"Dashboard",setup(j){const m=D(),i=u({}),r=u(!1);async function f(){i.value=await E.get("/display/overview"),r.value=!0}B(f);const y=[{key:"totalQty",label:"在库总量"},{key:"lockedQty",label:"锁定量"},{key:"snInStock",label:"SN 在库数"},{key:"semiInStock",label:"半成品在库"},{key:"packageCount",label:"包装箱数"},{key:"batchCount",label:"批次数"},{key:"inToday",label:"今日入库单"},{key:"outToday",label:"今日出库单"}],v=[{path:"/inbound",title:"入库管理",icon:N},{path:"/outbound",title:"备料出库",icon:S},{path:"/inventory",title:"库存查询",icon:I},{path:"/inspection",title:"质量检验",icon:T},{path:"/stocktake",title:"库存盘点",icon:V},{path:"/semi",title:"半成品/成品",icon:q},{path:"/package",title:"包装绑定",icon:h},{path:"/ledger",title:"物料台账",icon:h},{path:"/display",title:"免登录大屏",icon:z}];return(H,J)=>{const d=o("el-card"),b=o("el-col"),g=o("el-row"),w=o("el-icon"),x=o("el-button");return l(),s("div",null,[t(g,{gutter:12},{default:a(()=>[(l(),s(_,null,p(y,e=>t(b,{key:e.key,xs:12,sm:8,md:6,style:{"margin-bottom":"12px"}},{default:a(()=>[t(d,{shadow:"hover"},{default:a(()=>[n("div",L,c(e.label),1),n("div",M,c(r.value?k(G)(i.value[e.key]):"—"),1)]),_:2},1024)]),_:2},1024)),64))]),_:1}),t(d,{shadow:"never",header:"快捷入口"},{default:a(()=>[n("div",R,[(l(),s(_,null,p(v,e=>t(x,{key:e.path,size:"large",onClick:K=>k(m).push(e.path)},{default:a(()=>[t(w,{style:{"margin-right":"6px"}},{default:a(()=>[(l(),F(Q(e.icon)))]),_:2},1024),A(c(e.title),1)]),_:2},1032,["onClick"])),64))])]),_:1})])}}},W=C($,[["__scopeId","data-v-3a500a05"]]);export{W as default}; diff --git a/bj_power_wms_client/web/static/assets/Display-6wuJI2Dp.js b/bj_power_wms_client/web/static/assets/Display-BLVWdPLV.js similarity index 95% rename from bj_power_wms_client/web/static/assets/Display-6wuJI2Dp.js rename to bj_power_wms_client/web/static/assets/Display-BLVWdPLV.js index 847dc8d..4687081 100644 --- a/bj_power_wms_client/web/static/assets/Display-6wuJI2Dp.js +++ b/bj_power_wms_client/web/static/assets/Display-BLVWdPLV.js @@ -1 +1 @@ -import{r as w}from"./request-DS_8eNi1.js";import{f as o}from"./format-C9Ok6skr.js";import{_ as S,i as z,j as I,c as i,d as t,t as n,F as _,k,l as q,h,m as r,o as c,n as D}from"./index-9NS-icag.js";const $={class:"screen"},N={class:"head"},T={class:"side right"},x={class:"date"},M={class:"time"},Q={class:"kpi-grid"},B={class:"kpi-value"},C={class:"kpi-label"},j={class:"zones"},F={class:"zone-list"},L={class:"zone-name"},O={class:"bar-wrap"},V={class:"zone-qty"},E={key:0,class:"empty"},H={__name:"Display",setup(U){const v=h(new Date);let y=null,m=null;const l=h({}),g=r(()=>{const a=Object.values(u.value).map(e=>Number(e.qty)||0);return Math.max(...a,1)}),u=r(()=>{const a=l.value.zoneDetail||{};return Object.entries(a).map(([e,s])=>({zone:e,qty:Number(s)||0})).sort((e,s)=>s.qty-e.qty)}),b=r(()=>[{key:"totalQty",label:"在库总量",value:o(l.value.totalQty)},{key:"lockedQty",label:"锁定量",value:o(l.value.lockedQty)},{key:"snInStock",label:"SN 在库",value:o(l.value.snInStock)},{key:"semiInStock",label:"半成品在库",value:o(l.value.semiInStock)},{key:"packageCount",label:"包装箱数",value:o(l.value.packageCount)},{key:"inToday",label:"今日入库单",value:o(l.value.inToday)},{key:"outToday",label:"今日出库单",value:o(l.value.outToday)}]),f=["周日","周一","周二","周三","周四","周五","周六"],d=r(()=>{const a=v.value,e=s=>String(s).padStart(2,"0");return{date:`${a.getFullYear()}-${e(a.getMonth()+1)}-${e(a.getDate())}`,time:`${e(a.getHours())}:${e(a.getMinutes())}:${e(a.getSeconds())}`,week:`星期${f[a.getDay()].replace("周","")}`}});async function p(){try{l.value=await w.get("/display/overview")}catch{}}return z(()=>{y=setInterval(()=>{v.value=new Date},1e3),p(),m=setInterval(p,5e3)}),I(()=>{clearInterval(y),clearInterval(m)}),(a,e)=>(c(),i("div",$,[t("header",N,[e[0]||(e[0]=t("div",{class:"side left"},"北自所 · 库房监控",-1)),e[1]||(e[1]=t("h1",{class:"title"},"库存动态大屏",-1)),t("div",T,[t("span",x,n(d.value.date),1),t("span",M,n(d.value.time),1),t("span",null,n(d.value.week),1)])]),t("section",Q,[(c(!0),i(_,null,k(b.value,s=>(c(),i("div",{key:s.key,class:"kpi"},[t("div",B,n(s.value),1),t("div",C,n(s.label),1)]))),128))]),t("section",j,[e[2]||(e[2]=t("div",{class:"zone-title"},"区域明细(区域 / 质量状态)",-1)),t("div",F,[(c(!0),i(_,null,k(u.value,s=>(c(),i("div",{key:s.zone,class:"zone-row"},[t("div",L,n(s.zone),1),t("div",O,[t("div",{class:"bar",style:D({width:`${s.qty/g.value*100}%`})},null,4)]),t("div",V,n(s.qty.toLocaleString("zh-CN")),1)]))),128)),u.value.length?q("",!0):(c(),i("div",E,"暂无区域数据…"))])]),e[3]||(e[3]=t("footer",{class:"foot"},"数据来源:WMS 后端 · 每 5 秒自动刷新",-1))]))}},A=S(H,[["__scopeId","data-v-bd4d24ae"]]);export{A as default}; +import{r as w}from"./request-By4ij0Lz.js";import{f as o}from"./format-C9Ok6skr.js";import{_ as S,i as z,j as I,c as i,d as t,t as n,F as _,k,l as q,h,m as r,o as c,n as D}from"./index-BhhFt5Di.js";const $={class:"screen"},N={class:"head"},T={class:"side right"},x={class:"date"},M={class:"time"},Q={class:"kpi-grid"},B={class:"kpi-value"},C={class:"kpi-label"},j={class:"zones"},F={class:"zone-list"},L={class:"zone-name"},O={class:"bar-wrap"},V={class:"zone-qty"},E={key:0,class:"empty"},H={__name:"Display",setup(U){const v=h(new Date);let y=null,m=null;const l=h({}),g=r(()=>{const a=Object.values(u.value).map(e=>Number(e.qty)||0);return Math.max(...a,1)}),u=r(()=>{const a=l.value.zoneDetail||{};return Object.entries(a).map(([e,s])=>({zone:e,qty:Number(s)||0})).sort((e,s)=>s.qty-e.qty)}),b=r(()=>[{key:"totalQty",label:"在库总量",value:o(l.value.totalQty)},{key:"lockedQty",label:"锁定量",value:o(l.value.lockedQty)},{key:"snInStock",label:"SN 在库",value:o(l.value.snInStock)},{key:"semiInStock",label:"半成品在库",value:o(l.value.semiInStock)},{key:"packageCount",label:"包装箱数",value:o(l.value.packageCount)},{key:"inToday",label:"今日入库单",value:o(l.value.inToday)},{key:"outToday",label:"今日出库单",value:o(l.value.outToday)}]),f=["周日","周一","周二","周三","周四","周五","周六"],d=r(()=>{const a=v.value,e=s=>String(s).padStart(2,"0");return{date:`${a.getFullYear()}-${e(a.getMonth()+1)}-${e(a.getDate())}`,time:`${e(a.getHours())}:${e(a.getMinutes())}:${e(a.getSeconds())}`,week:`星期${f[a.getDay()].replace("周","")}`}});async function p(){try{l.value=await w.get("/display/overview")}catch{}}return z(()=>{y=setInterval(()=>{v.value=new Date},1e3),p(),m=setInterval(p,5e3)}),I(()=>{clearInterval(y),clearInterval(m)}),(a,e)=>(c(),i("div",$,[t("header",N,[e[0]||(e[0]=t("div",{class:"side left"},"北自所 · 库房监控",-1)),e[1]||(e[1]=t("h1",{class:"title"},"库存动态大屏",-1)),t("div",T,[t("span",x,n(d.value.date),1),t("span",M,n(d.value.time),1),t("span",null,n(d.value.week),1)])]),t("section",Q,[(c(!0),i(_,null,k(b.value,s=>(c(),i("div",{key:s.key,class:"kpi"},[t("div",B,n(s.value),1),t("div",C,n(s.label),1)]))),128))]),t("section",j,[e[2]||(e[2]=t("div",{class:"zone-title"},"区域明细(区域 / 质量状态)",-1)),t("div",F,[(c(!0),i(_,null,k(u.value,s=>(c(),i("div",{key:s.zone,class:"zone-row"},[t("div",L,n(s.zone),1),t("div",O,[t("div",{class:"bar",style:D({width:`${s.qty/g.value*100}%`})},null,4)]),t("div",V,n(s.qty.toLocaleString("zh-CN")),1)]))),128)),u.value.length?q("",!0):(c(),i("div",E,"暂无区域数据…"))])]),e[3]||(e[3]=t("footer",{class:"foot"},"数据来源:WMS 后端 · 每 5 秒自动刷新",-1))]))}},A=S(H,[["__scopeId","data-v-bd4d24ae"]]);export{A as default}; diff --git a/bj_power_wms_client/web/static/assets/Inbound-BOLxl4Lt.js b/bj_power_wms_client/web/static/assets/Inbound-DGRjaxp8.js similarity index 97% rename from bj_power_wms_client/web/static/assets/Inbound-BOLxl4Lt.js rename to bj_power_wms_client/web/static/assets/Inbound-DGRjaxp8.js index a18fb9a..27c2e40 100644 --- a/bj_power_wms_client/web/static/assets/Inbound-BOLxl4Lt.js +++ b/bj_power_wms_client/web/static/assets/Inbound-DGRjaxp8.js @@ -1 +1 @@ -import{_ as ue,i as ie,c as x,a as t,w as a,p as se,F as C,h as d,r as u,o as s,k as q,D as _,f as c,l as T,e as re,H as de,d as V,t as $,g as H,E as g,I as j}from"./index-9NS-icag.js";import{r as z}from"./request-DS_8eNi1.js";import{h as pe,P as me}from"./help-BMgMow4j.js";const ce={style:{"margin-bottom":"8px"}},fe={style:{"margin-top":"12px"}},be={style:{"margin-top":"12px"}},ve={__name:"Inbound",setup(ye){const S=d([]),D=d([]);ie(async()=>{const[o,e]=await Promise.all([z.get("/material/list"),z.get("/zone/list")]);S.value=Array.isArray(o)?o:(o==null?void 0:o.list)||[],D.value=Array.isArray(e)?e:(e==null?void 0:e.list)||[]});const M=d(),U=d(!1),E=d(""),n=H({materialCode:"",batchNo:"",quantity:1,zoneCode:"",productionDate:"",supplier:""}),G={materialCode:[{required:!0,message:"请选择物料",trigger:"change"}],quantity:[{required:!0,message:"请输入数量",trigger:"blur"}]};async function J(){if(await M.value.validate(),!n.quantity||n.quantity<=0){g.warning("数量必须大于 0");return}U.value=!0;try{const o=await z.post("/inbound/create",{inboundType:"purchase",materialCode:n.materialCode,batchNo:n.batchNo.trim(),quantity:n.quantity,zoneCode:n.zoneCode,productionDate:n.productionDate,supplier:n.supplier.trim(),operator:j()});E.value=(o==null?void 0:o.inboundNo)||"",g.success(`入库成功:入库单号 ${(o==null?void 0:o.inboundNo)||""},数量 ${(o==null?void 0:o.quantity)??n.quantity}`),n.batchNo="",n.quantity=1}finally{U.value=!1}}const h=d(""),F=d(!1),r=d([]),b=H({materialCode:"",zoneCode:""});function O(){const o=String(h.value).split(/\s+/);for(let e of o){const p=e.trim();p&&(r.value.includes(p)||r.value.push(p))}h.value=""}function Q(o){r.value.splice(o,1)}async function W(){if(!b.materialCode){g.warning("请选择物料");return}if(!r.value.length){g.warning("请先扫码录入 SN(输入后回车追加)");return}F.value=!0;try{const o=await z.post("/inbound/create",{inboundType:"purchase",materialCode:b.materialCode,zoneCode:b.zoneCode,snList:[...r.value],operator:j()});g.success(`入库成功:入库单号 ${(o==null?void 0:o.inboundNo)||""},SN 共 ${r.value.length} 条`),r.value=[],h.value=""}finally{F.value=!1}}const N=d(),I=d([]),R=d(!1),v=d(null);function X(o,e){I.value=e.slice(-1)}function Z(o){N.value.clearFiles();const e=o[0];e&&N.value.handleStart(e)}async function ee(){var y,i,w;const o=I.value[0]||((i=(y=N.value)==null?void 0:y.uploadFiles)==null?void 0:i[0]),e=o==null?void 0:o.raw;if(!e){g.warning("请先选择 .xlsx 文件");return}const p=new FormData;p.append("file",e),R.value=!0;try{const m=await z.post("/inbound/batch-excel",p);v.value=m||{},g.success(`导入完成:共 ${(m==null?void 0:m.total)??0} 行,成功 ${(m==null?void 0:m.success)??0} 行`),(w=N.value)==null||w.clearFiles(),I.value=[]}finally{R.value=!1}}return(o,e)=>{const p=u("el-option"),y=u("el-select"),i=u("el-form-item"),w=u("el-input"),m=u("el-input-number"),le=u("el-date-picker"),k=u("el-button"),A=u("el-form"),L=u("el-alert"),B=u("el-tab-pane"),f=u("el-table-column"),Y=u("el-table"),te=u("el-upload"),ae=u("el-divider"),K=u("el-tag"),oe=u("el-tabs"),ne=u("el-card");return s(),x(C,null,[t(ne,{shadow:"never"},{default:a(()=>[t(oe,null,{default:a(()=>[t(B,{label:"结构件入库"},{default:a(()=>[t(A,{ref_key:"batchRef",ref:M,model:n,rules:G,"label-width":"110px",style:{"max-width":"560px"}},{default:a(()=>[t(i,{label:"物料",prop:"materialCode"},{default:a(()=>[t(y,{modelValue:n.materialCode,"onUpdate:modelValue":e[0]||(e[0]=l=>n.materialCode=l),filterable:"",placeholder:"选择物料编码",style:{width:"100%"}},{default:a(()=>[(s(!0),x(C,null,q(S.value,l=>(s(),_(p,{key:l.id,value:l.code,label:`${l.code} ${l.name||""}`},null,8,["value","label"]))),128))]),_:1},8,["modelValue"])]),_:1}),t(i,{label:"批次号"},{default:a(()=>[t(w,{modelValue:n.batchNo,"onUpdate:modelValue":e[1]||(e[1]=l=>n.batchNo=l),placeholder:"留空则自动生成",clearable:""},null,8,["modelValue"])]),_:1}),t(i,{label:"数量",prop:"quantity"},{default:a(()=>[t(m,{modelValue:n.quantity,"onUpdate:modelValue":e[2]||(e[2]=l=>n.quantity=l),min:1,step:1,"step-strictly":"",style:{width:"100%"}},null,8,["modelValue"])]),_:1}),t(i,{label:"区域"},{default:a(()=>[t(y,{modelValue:n.zoneCode,"onUpdate:modelValue":e[3]||(e[3]=l=>n.zoneCode=l),placeholder:"选择库区",clearable:"",style:{width:"100%"}},{default:a(()=>[(s(!0),x(C,null,q(D.value,l=>(s(),_(p,{key:l.id,value:l.zoneCode,label:`${l.zoneCode} ${l.zoneName||""}`},null,8,["value","label"]))),128))]),_:1},8,["modelValue"])]),_:1}),t(i,{label:"生产日期"},{default:a(()=>[t(le,{modelValue:n.productionDate,"onUpdate:modelValue":e[4]||(e[4]=l=>n.productionDate=l),type:"date","value-format":"YYYY-MM-DD",placeholder:"选择生产日期",style:{width:"100%"}},null,8,["modelValue"])]),_:1}),t(i,{label:"供应商"},{default:a(()=>[t(w,{modelValue:n.supplier,"onUpdate:modelValue":e[5]||(e[5]=l=>n.supplier=l),placeholder:"供应商名称",clearable:""},null,8,["modelValue"])]),_:1}),t(i,null,{default:a(()=>[t(k,{type:"primary",loading:U.value,onClick:J},{default:a(()=>[...e[10]||(e[10]=[c("提交入库",-1)])]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"]),E.value?(s(),_(L,{key:0,type:"success",closable:!1,title:`最近入库单号:${E.value}`,style:{"max-width":"560px"}},null,8,["title"])):T("",!0)]),_:1}),t(B,{label:`精密件 SN 入库${r.value.length?`(已扫 ${r.value.length})`:""}`},{default:a(()=>[t(A,{"label-width":"110px",style:{"max-width":"680px"}},{default:a(()=>[t(i,{label:"物料"},{default:a(()=>[t(y,{modelValue:b.materialCode,"onUpdate:modelValue":e[6]||(e[6]=l=>b.materialCode=l),filterable:"",placeholder:"选择物料编码",style:{width:"100%"}},{default:a(()=>[(s(!0),x(C,null,q(S.value,l=>(s(),_(p,{key:l.id,value:l.code,label:`${l.code} ${l.name||""}`},null,8,["value","label"]))),128))]),_:1},8,["modelValue"])]),_:1}),t(i,{label:"区域"},{default:a(()=>[t(y,{modelValue:b.zoneCode,"onUpdate:modelValue":e[7]||(e[7]=l=>b.zoneCode=l),placeholder:"选择库区(可空)",clearable:"",style:{width:"100%"}},{default:a(()=>[(s(!0),x(C,null,q(D.value,l=>(s(),_(p,{key:l.id,value:l.zoneCode,label:`${l.zoneCode} ${l.zoneName||""}`},null,8,["value","label"]))),128))]),_:1},8,["modelValue"])]),_:1}),t(i,{label:"扫码录入"},{default:a(()=>[t(w,{modelValue:h.value,"onUpdate:modelValue":e[8]||(e[8]=l=>h.value=l),type:"textarea",rows:4,autofocus:"",placeholder:"扫入或粘贴 SN 后按回车追加一行(支持一次多条,空白分隔)",onKeydown:re(de(O,["prevent"]),["enter"])},null,8,["modelValue","onKeydown"])]),_:1})]),_:1}),V("div",ce,[e[11]||(e[11]=c(" 已录入 ",-1)),V("b",null,$(r.value.length),1),e[12]||(e[12]=c(" 条 SN ",-1))]),t(Y,{data:r.value.map((l,P)=>({i:P,v:l})),size:"small",border:"","max-height":"320","empty-text":"暂无 SN"},{default:a(()=>[t(f,{type:"index",label:"#",width:"56",align:"center"}),t(f,{prop:"v",label:"SN 序列号","min-width":"220"}),t(f,{label:"操作",width:"80",align:"center"},{default:a(({row:l})=>[t(k,{link:"",type:"danger",size:"small",onClick:P=>Q(l.i)},{default:a(()=>[...e[13]||(e[13]=[c("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"]),V("div",fe,[t(k,{type:"primary",loading:F.value,onClick:W},{default:a(()=>[...e[14]||(e[14]=[c("提交入库",-1)])]),_:1},8,["loading"]),t(k,{onClick:e[9]||(e[9]=l=>r.value=[])},{default:a(()=>[...e[15]||(e[15]=[c("清空列表",-1)])]),_:1})])]),_:1},8,["label"]),t(B,{label:"Excel 导入"},{default:a(()=>[t(L,{type:"info",closable:!1,title:"列头顺序(首行忽略):物料编码 | 批次号(可空自动生成) | 数量 | 生产日期 | 供应商 | 区域",style:{"max-width":"760px","margin-bottom":"14px"}}),t(te,{ref_key:"uploadRef",ref:N,drag:"",accept:".xlsx",limit:1,"auto-upload":!1,"on-change":X,"on-exceed":Z},{default:a(()=>[...e[16]||(e[16]=[V("div",{class:"dropzone"},"将 .xlsx 文件拖到此处,或点击选择文件",-1)])]),_:1},512),V("div",be,[t(k,{type:"primary",loading:R.value,onClick:ee},{default:a(()=>[...e[17]||(e[17]=[c("开始导入",-1)])]),_:1},8,["loading"])]),v.value?(s(),x(C,{key:0},[t(ae),V("h4",null,"导入结果:共 "+$(v.value.total)+" 行,成功 "+$(v.value.success)+" 行,失败 "+$(v.value.total-v.value.success)+" 行",1),t(Y,{data:v.value.rows||[],size:"small",border:"","max-height":"360"},{default:a(()=>[t(f,{prop:"row",label:"行号",width:"70",align:"center"}),t(f,{prop:"materialCode",label:"物料编码","min-width":"140"}),t(f,{prop:"batchNo",label:"批次号","min-width":"160"}),t(f,{prop:"quantity",label:"数量",width:"90",align:"center"}),t(f,{label:"结果","min-width":"200"},{default:a(({row:l})=>[l.error?(s(),_(K,{key:1,type:"danger",size:"small"},{default:a(()=>[c($(l.error),1)]),_:2},1024)):(s(),_(K,{key:0,type:"success",size:"small"},{default:a(()=>[...e[18]||(e[18]=[c("成功",-1)])]),_:1}))]),_:1})]),_:1},8,["data"])],64)):T("",!0)]),_:1})]),_:1})]),_:1}),t(me,{data:se(pe)},null,8,["data"])],64)}}},xe=ue(ve,[["__scopeId","data-v-474430a2"]]);export{xe as default}; +import{_ as ue,i as ie,c as x,a as t,w as a,p as se,F as C,h as d,r as u,o as s,k as q,D as _,f as c,l as T,e as re,H as de,d as V,t as $,g as H,E as g,I as j}from"./index-BhhFt5Di.js";import{r as z}from"./request-By4ij0Lz.js";import{h as pe,P as me}from"./help-DfzkTHcJ.js";const ce={style:{"margin-bottom":"8px"}},fe={style:{"margin-top":"12px"}},be={style:{"margin-top":"12px"}},ve={__name:"Inbound",setup(ye){const S=d([]),D=d([]);ie(async()=>{const[o,e]=await Promise.all([z.get("/material/list"),z.get("/zone/list")]);S.value=Array.isArray(o)?o:(o==null?void 0:o.list)||[],D.value=Array.isArray(e)?e:(e==null?void 0:e.list)||[]});const M=d(),U=d(!1),E=d(""),n=H({materialCode:"",batchNo:"",quantity:1,zoneCode:"",productionDate:"",supplier:""}),G={materialCode:[{required:!0,message:"请选择物料",trigger:"change"}],quantity:[{required:!0,message:"请输入数量",trigger:"blur"}]};async function J(){if(await M.value.validate(),!n.quantity||n.quantity<=0){g.warning("数量必须大于 0");return}U.value=!0;try{const o=await z.post("/inbound/create",{inboundType:"purchase",materialCode:n.materialCode,batchNo:n.batchNo.trim(),quantity:n.quantity,zoneCode:n.zoneCode,productionDate:n.productionDate,supplier:n.supplier.trim(),operator:j()});E.value=(o==null?void 0:o.inboundNo)||"",g.success(`入库成功:入库单号 ${(o==null?void 0:o.inboundNo)||""},数量 ${(o==null?void 0:o.quantity)??n.quantity}`),n.batchNo="",n.quantity=1}finally{U.value=!1}}const h=d(""),F=d(!1),r=d([]),b=H({materialCode:"",zoneCode:""});function O(){const o=String(h.value).split(/\s+/);for(let e of o){const p=e.trim();p&&(r.value.includes(p)||r.value.push(p))}h.value=""}function Q(o){r.value.splice(o,1)}async function W(){if(!b.materialCode){g.warning("请选择物料");return}if(!r.value.length){g.warning("请先扫码录入 SN(输入后回车追加)");return}F.value=!0;try{const o=await z.post("/inbound/create",{inboundType:"purchase",materialCode:b.materialCode,zoneCode:b.zoneCode,snList:[...r.value],operator:j()});g.success(`入库成功:入库单号 ${(o==null?void 0:o.inboundNo)||""},SN 共 ${r.value.length} 条`),r.value=[],h.value=""}finally{F.value=!1}}const N=d(),I=d([]),R=d(!1),v=d(null);function X(o,e){I.value=e.slice(-1)}function Z(o){N.value.clearFiles();const e=o[0];e&&N.value.handleStart(e)}async function ee(){var y,i,w;const o=I.value[0]||((i=(y=N.value)==null?void 0:y.uploadFiles)==null?void 0:i[0]),e=o==null?void 0:o.raw;if(!e){g.warning("请先选择 .xlsx 文件");return}const p=new FormData;p.append("file",e),R.value=!0;try{const m=await z.post("/inbound/batch-excel",p);v.value=m||{},g.success(`导入完成:共 ${(m==null?void 0:m.total)??0} 行,成功 ${(m==null?void 0:m.success)??0} 行`),(w=N.value)==null||w.clearFiles(),I.value=[]}finally{R.value=!1}}return(o,e)=>{const p=u("el-option"),y=u("el-select"),i=u("el-form-item"),w=u("el-input"),m=u("el-input-number"),le=u("el-date-picker"),k=u("el-button"),A=u("el-form"),L=u("el-alert"),B=u("el-tab-pane"),f=u("el-table-column"),Y=u("el-table"),te=u("el-upload"),ae=u("el-divider"),K=u("el-tag"),oe=u("el-tabs"),ne=u("el-card");return s(),x(C,null,[t(ne,{shadow:"never"},{default:a(()=>[t(oe,null,{default:a(()=>[t(B,{label:"结构件入库"},{default:a(()=>[t(A,{ref_key:"batchRef",ref:M,model:n,rules:G,"label-width":"110px",style:{"max-width":"560px"}},{default:a(()=>[t(i,{label:"物料",prop:"materialCode"},{default:a(()=>[t(y,{modelValue:n.materialCode,"onUpdate:modelValue":e[0]||(e[0]=l=>n.materialCode=l),filterable:"",placeholder:"选择物料编码",style:{width:"100%"}},{default:a(()=>[(s(!0),x(C,null,q(S.value,l=>(s(),_(p,{key:l.id,value:l.code,label:`${l.code} ${l.name||""}`},null,8,["value","label"]))),128))]),_:1},8,["modelValue"])]),_:1}),t(i,{label:"批次号"},{default:a(()=>[t(w,{modelValue:n.batchNo,"onUpdate:modelValue":e[1]||(e[1]=l=>n.batchNo=l),placeholder:"留空则自动生成",clearable:""},null,8,["modelValue"])]),_:1}),t(i,{label:"数量",prop:"quantity"},{default:a(()=>[t(m,{modelValue:n.quantity,"onUpdate:modelValue":e[2]||(e[2]=l=>n.quantity=l),min:1,step:1,"step-strictly":"",style:{width:"100%"}},null,8,["modelValue"])]),_:1}),t(i,{label:"区域"},{default:a(()=>[t(y,{modelValue:n.zoneCode,"onUpdate:modelValue":e[3]||(e[3]=l=>n.zoneCode=l),placeholder:"选择库区",clearable:"",style:{width:"100%"}},{default:a(()=>[(s(!0),x(C,null,q(D.value,l=>(s(),_(p,{key:l.id,value:l.zoneCode,label:`${l.zoneCode} ${l.zoneName||""}`},null,8,["value","label"]))),128))]),_:1},8,["modelValue"])]),_:1}),t(i,{label:"生产日期"},{default:a(()=>[t(le,{modelValue:n.productionDate,"onUpdate:modelValue":e[4]||(e[4]=l=>n.productionDate=l),type:"date","value-format":"YYYY-MM-DD",placeholder:"选择生产日期",style:{width:"100%"}},null,8,["modelValue"])]),_:1}),t(i,{label:"供应商"},{default:a(()=>[t(w,{modelValue:n.supplier,"onUpdate:modelValue":e[5]||(e[5]=l=>n.supplier=l),placeholder:"供应商名称",clearable:""},null,8,["modelValue"])]),_:1}),t(i,null,{default:a(()=>[t(k,{type:"primary",loading:U.value,onClick:J},{default:a(()=>[...e[10]||(e[10]=[c("提交入库",-1)])]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"]),E.value?(s(),_(L,{key:0,type:"success",closable:!1,title:`最近入库单号:${E.value}`,style:{"max-width":"560px"}},null,8,["title"])):T("",!0)]),_:1}),t(B,{label:`精密件 SN 入库${r.value.length?`(已扫 ${r.value.length})`:""}`},{default:a(()=>[t(A,{"label-width":"110px",style:{"max-width":"680px"}},{default:a(()=>[t(i,{label:"物料"},{default:a(()=>[t(y,{modelValue:b.materialCode,"onUpdate:modelValue":e[6]||(e[6]=l=>b.materialCode=l),filterable:"",placeholder:"选择物料编码",style:{width:"100%"}},{default:a(()=>[(s(!0),x(C,null,q(S.value,l=>(s(),_(p,{key:l.id,value:l.code,label:`${l.code} ${l.name||""}`},null,8,["value","label"]))),128))]),_:1},8,["modelValue"])]),_:1}),t(i,{label:"区域"},{default:a(()=>[t(y,{modelValue:b.zoneCode,"onUpdate:modelValue":e[7]||(e[7]=l=>b.zoneCode=l),placeholder:"选择库区(可空)",clearable:"",style:{width:"100%"}},{default:a(()=>[(s(!0),x(C,null,q(D.value,l=>(s(),_(p,{key:l.id,value:l.zoneCode,label:`${l.zoneCode} ${l.zoneName||""}`},null,8,["value","label"]))),128))]),_:1},8,["modelValue"])]),_:1}),t(i,{label:"扫码录入"},{default:a(()=>[t(w,{modelValue:h.value,"onUpdate:modelValue":e[8]||(e[8]=l=>h.value=l),type:"textarea",rows:4,autofocus:"",placeholder:"扫入或粘贴 SN 后按回车追加一行(支持一次多条,空白分隔)",onKeydown:re(de(O,["prevent"]),["enter"])},null,8,["modelValue","onKeydown"])]),_:1})]),_:1}),V("div",ce,[e[11]||(e[11]=c(" 已录入 ",-1)),V("b",null,$(r.value.length),1),e[12]||(e[12]=c(" 条 SN ",-1))]),t(Y,{data:r.value.map((l,P)=>({i:P,v:l})),size:"small",border:"","max-height":"320","empty-text":"暂无 SN"},{default:a(()=>[t(f,{type:"index",label:"#",width:"56",align:"center"}),t(f,{prop:"v",label:"SN 序列号","min-width":"220"}),t(f,{label:"操作",width:"80",align:"center"},{default:a(({row:l})=>[t(k,{link:"",type:"danger",size:"small",onClick:P=>Q(l.i)},{default:a(()=>[...e[13]||(e[13]=[c("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"]),V("div",fe,[t(k,{type:"primary",loading:F.value,onClick:W},{default:a(()=>[...e[14]||(e[14]=[c("提交入库",-1)])]),_:1},8,["loading"]),t(k,{onClick:e[9]||(e[9]=l=>r.value=[])},{default:a(()=>[...e[15]||(e[15]=[c("清空列表",-1)])]),_:1})])]),_:1},8,["label"]),t(B,{label:"Excel 导入"},{default:a(()=>[t(L,{type:"info",closable:!1,title:"列头顺序(首行忽略):物料编码 | 批次号(可空自动生成) | 数量 | 生产日期 | 供应商 | 区域",style:{"max-width":"760px","margin-bottom":"14px"}}),t(te,{ref_key:"uploadRef",ref:N,drag:"",accept:".xlsx",limit:1,"auto-upload":!1,"on-change":X,"on-exceed":Z},{default:a(()=>[...e[16]||(e[16]=[V("div",{class:"dropzone"},"将 .xlsx 文件拖到此处,或点击选择文件",-1)])]),_:1},512),V("div",be,[t(k,{type:"primary",loading:R.value,onClick:ee},{default:a(()=>[...e[17]||(e[17]=[c("开始导入",-1)])]),_:1},8,["loading"])]),v.value?(s(),x(C,{key:0},[t(ae),V("h4",null,"导入结果:共 "+$(v.value.total)+" 行,成功 "+$(v.value.success)+" 行,失败 "+$(v.value.total-v.value.success)+" 行",1),t(Y,{data:v.value.rows||[],size:"small",border:"","max-height":"360"},{default:a(()=>[t(f,{prop:"row",label:"行号",width:"70",align:"center"}),t(f,{prop:"materialCode",label:"物料编码","min-width":"140"}),t(f,{prop:"batchNo",label:"批次号","min-width":"160"}),t(f,{prop:"quantity",label:"数量",width:"90",align:"center"}),t(f,{label:"结果","min-width":"200"},{default:a(({row:l})=>[l.error?(s(),_(K,{key:1,type:"danger",size:"small"},{default:a(()=>[c($(l.error),1)]),_:2},1024)):(s(),_(K,{key:0,type:"success",size:"small"},{default:a(()=>[...e[18]||(e[18]=[c("成功",-1)])]),_:1}))]),_:1})]),_:1},8,["data"])],64)):T("",!0)]),_:1})]),_:1})]),_:1}),t(me,{data:se(pe)},null,8,["data"])],64)}}},xe=ue(ve,[["__scopeId","data-v-474430a2"]]);export{xe as default}; diff --git a/bj_power_wms_client/web/static/assets/Inspection-Cp7Ilzqc.js b/bj_power_wms_client/web/static/assets/Inspection-DDPsjS2O.js similarity index 96% rename from bj_power_wms_client/web/static/assets/Inspection-Cp7Ilzqc.js rename to bj_power_wms_client/web/static/assets/Inspection-DDPsjS2O.js index b91ddff..f3f13f4 100644 --- a/bj_power_wms_client/web/static/assets/Inspection-Cp7Ilzqc.js +++ b/bj_power_wms_client/web/static/assets/Inspection-DDPsjS2O.js @@ -1 +1 @@ -import{_ as U,h as s,I as $,i as A,N as C,c as E,a as t,w as l,p as R,F,r as n,o as K,f as u,e as M,d as P,t as q,E as p}from"./index-9NS-icag.js";import{r as N}from"./request-DS_8eNi1.js";import{c as D,P as j}from"./help-BMgMow4j.js";const z={class:"tip"},G={__name:"Inspection",setup(J){const i=s("BATCH"),f=s("合格"),d=s($()),_=s(),v=s(""),g=s(!1);A(()=>C(()=>{var a;return(a=_.value)==null?void 0:a.focus()}));async function V(){const a=v.value.trim();if(!a){p.warning("请扫入或输入目标编号");return}if(!d.value.trim()){p.warning("请填写检验员");return}g.value=!0;try{await N.post("/inspection/create",{targetType:i.value,targetId:a,status:f.value,inspector:d.value.trim()}),p.success(`检验已记录:${i.value} ${a} → ${f.value}`),v.value="",C(()=>{var e;return(e=_.value)==null?void 0:e.focus()})}finally{g.value=!1}}const m=s(""),c=s(!1);function I(){return[...new Set(String(m.value).split(/\s+/).map(a=>a.trim()).filter(Boolean))]}async function S(){const a=I();if(!a.length){p.warning("请录入待检编号(每行一个)");return}if(!d.value.trim()){p.warning("请填写检验员");return}c.value=!0;try{const e=await N.post("/inspection/batch-flip",{targetType:i.value,targetIds:a,status:f.value,inspector:d.value.trim()});p.success(`批量检验完成:共处理 ${(e==null?void 0:e.flipped)??a.length} 条`),m.value=""}finally{c.value=!1}}return(a,e)=>{const w=n("el-radio-button"),x=n("el-radio-group"),r=n("el-form-item"),T=n("el-radio"),y=n("el-input"),B=n("el-divider"),b=n("el-button"),k=n("el-form"),H=n("el-card");return K(),E(F,null,[t(H,{shadow:"never",style:{"max-width":"760px",margin:"0 auto"}},{default:l(()=>[t(k,{"label-width":"110px"},{default:l(()=>[t(r,{label:"目标类型"},{default:l(()=>[t(x,{modelValue:i.value,"onUpdate:modelValue":e[0]||(e[0]=o=>i.value=o)},{default:l(()=>[t(w,{value:"BATCH"},{default:l(()=>[...e[6]||(e[6]=[u("批次 BATCH",-1)])]),_:1}),t(w,{value:"SN"},{default:l(()=>[...e[7]||(e[7]=[u("序列号 SN",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),t(r,{label:"检验结论"},{default:l(()=>[t(x,{modelValue:f.value,"onUpdate:modelValue":e[1]||(e[1]=o=>f.value=o)},{default:l(()=>[t(T,{value:"合格"},{default:l(()=>[...e[8]||(e[8]=[u("合格",-1)])]),_:1}),t(T,{value:"不合格"},{default:l(()=>[...e[9]||(e[9]=[u("不合格",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),t(r,{label:"检验员"},{default:l(()=>[t(y,{modelValue:d.value,"onUpdate:modelValue":e[2]||(e[2]=o=>d.value=o),placeholder:"检验员姓名",clearable:"",style:{width:"260px"}},null,8,["modelValue"])]),_:1}),t(B,{"content-position":"left"},{default:l(()=>[...e[10]||(e[10]=[u("单个录入(扫码)",-1)])]),_:1}),t(r,{label:"扫码输入"},{default:l(()=>[t(y,{ref_key:"scanRef",ref:_,modelValue:v.value,"onUpdate:modelValue":e[3]||(e[3]=o=>v.value=o),autofocus:"",clearable:"",placeholder:"扫入批次号或 SN,回车提交",style:{width:"420px"},onKeyup:M(V,["enter"])},null,8,["modelValue"]),P("span",z,"当前目标:"+q(i.value==="BATCH"?"批次号":"SN 序列号"),1)]),_:1}),t(r,null,{default:l(()=>[t(b,{type:"primary",loading:g.value,onClick:V},{default:l(()=>[...e[11]||(e[11]=[u("提交检验",-1)])]),_:1},8,["loading"])]),_:1}),t(B,{"content-position":"left"},{default:l(()=>[...e[12]||(e[12]=[u("批量翻转",-1)])]),_:1}),t(r,{label:"批量编号"},{default:l(()=>[t(y,{modelValue:m.value,"onUpdate:modelValue":e[4]||(e[4]=o=>m.value=o),type:"textarea",rows:6,placeholder:"每行一个编号,支持扫码枪连续录入"},null,8,["modelValue"])]),_:1}),t(r,null,{default:l(()=>[t(b,{type:"primary",loading:c.value,onClick:S},{default:l(()=>[...e[13]||(e[13]=[u("批量提交",-1)])]),_:1},8,["loading"]),t(b,{onClick:e[5]||(e[5]=o=>m.value="")},{default:l(()=>[...e[14]||(e[14]=[u("清空",-1)])]),_:1})]),_:1})]),_:1})]),_:1}),t(j,{data:R(D)},null,8,["data"])],64)}}},W=U(G,[["__scopeId","data-v-c4d8daa0"]]);export{W as default}; +import{_ as U,h as s,I as $,i as A,N as C,c as E,a as t,w as l,p as R,F,r as n,o as K,f as u,e as M,d as P,t as q,E as p}from"./index-BhhFt5Di.js";import{r as N}from"./request-By4ij0Lz.js";import{c as D,P as j}from"./help-DfzkTHcJ.js";const z={class:"tip"},G={__name:"Inspection",setup(J){const i=s("BATCH"),f=s("合格"),d=s($()),_=s(),v=s(""),g=s(!1);A(()=>C(()=>{var a;return(a=_.value)==null?void 0:a.focus()}));async function V(){const a=v.value.trim();if(!a){p.warning("请扫入或输入目标编号");return}if(!d.value.trim()){p.warning("请填写检验员");return}g.value=!0;try{await N.post("/inspection/create",{targetType:i.value,targetId:a,status:f.value,inspector:d.value.trim()}),p.success(`检验已记录:${i.value} ${a} → ${f.value}`),v.value="",C(()=>{var e;return(e=_.value)==null?void 0:e.focus()})}finally{g.value=!1}}const m=s(""),c=s(!1);function I(){return[...new Set(String(m.value).split(/\s+/).map(a=>a.trim()).filter(Boolean))]}async function S(){const a=I();if(!a.length){p.warning("请录入待检编号(每行一个)");return}if(!d.value.trim()){p.warning("请填写检验员");return}c.value=!0;try{const e=await N.post("/inspection/batch-flip",{targetType:i.value,targetIds:a,status:f.value,inspector:d.value.trim()});p.success(`批量检验完成:共处理 ${(e==null?void 0:e.flipped)??a.length} 条`),m.value=""}finally{c.value=!1}}return(a,e)=>{const w=n("el-radio-button"),x=n("el-radio-group"),r=n("el-form-item"),T=n("el-radio"),y=n("el-input"),B=n("el-divider"),b=n("el-button"),k=n("el-form"),H=n("el-card");return K(),E(F,null,[t(H,{shadow:"never",style:{"max-width":"760px",margin:"0 auto"}},{default:l(()=>[t(k,{"label-width":"110px"},{default:l(()=>[t(r,{label:"目标类型"},{default:l(()=>[t(x,{modelValue:i.value,"onUpdate:modelValue":e[0]||(e[0]=o=>i.value=o)},{default:l(()=>[t(w,{value:"BATCH"},{default:l(()=>[...e[6]||(e[6]=[u("批次 BATCH",-1)])]),_:1}),t(w,{value:"SN"},{default:l(()=>[...e[7]||(e[7]=[u("序列号 SN",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),t(r,{label:"检验结论"},{default:l(()=>[t(x,{modelValue:f.value,"onUpdate:modelValue":e[1]||(e[1]=o=>f.value=o)},{default:l(()=>[t(T,{value:"合格"},{default:l(()=>[...e[8]||(e[8]=[u("合格",-1)])]),_:1}),t(T,{value:"不合格"},{default:l(()=>[...e[9]||(e[9]=[u("不合格",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),t(r,{label:"检验员"},{default:l(()=>[t(y,{modelValue:d.value,"onUpdate:modelValue":e[2]||(e[2]=o=>d.value=o),placeholder:"检验员姓名",clearable:"",style:{width:"260px"}},null,8,["modelValue"])]),_:1}),t(B,{"content-position":"left"},{default:l(()=>[...e[10]||(e[10]=[u("单个录入(扫码)",-1)])]),_:1}),t(r,{label:"扫码输入"},{default:l(()=>[t(y,{ref_key:"scanRef",ref:_,modelValue:v.value,"onUpdate:modelValue":e[3]||(e[3]=o=>v.value=o),autofocus:"",clearable:"",placeholder:"扫入批次号或 SN,回车提交",style:{width:"420px"},onKeyup:M(V,["enter"])},null,8,["modelValue"]),P("span",z,"当前目标:"+q(i.value==="BATCH"?"批次号":"SN 序列号"),1)]),_:1}),t(r,null,{default:l(()=>[t(b,{type:"primary",loading:g.value,onClick:V},{default:l(()=>[...e[11]||(e[11]=[u("提交检验",-1)])]),_:1},8,["loading"])]),_:1}),t(B,{"content-position":"left"},{default:l(()=>[...e[12]||(e[12]=[u("批量翻转",-1)])]),_:1}),t(r,{label:"批量编号"},{default:l(()=>[t(y,{modelValue:m.value,"onUpdate:modelValue":e[4]||(e[4]=o=>m.value=o),type:"textarea",rows:6,placeholder:"每行一个编号,支持扫码枪连续录入"},null,8,["modelValue"])]),_:1}),t(r,null,{default:l(()=>[t(b,{type:"primary",loading:c.value,onClick:S},{default:l(()=>[...e[13]||(e[13]=[u("批量提交",-1)])]),_:1},8,["loading"]),t(b,{onClick:e[5]||(e[5]=o=>m.value="")},{default:l(()=>[...e[14]||(e[14]=[u("清空",-1)])]),_:1})]),_:1})]),_:1})]),_:1}),t(j,{data:R(D)},null,8,["data"])],64)}}},W=U(G,[["__scopeId","data-v-c4d8daa0"]]);export{W as default}; diff --git a/bj_power_wms_client/web/static/assets/Inventory-DLOSwwgi.js b/bj_power_wms_client/web/static/assets/Inventory-WA97rYQY.js similarity index 96% rename from bj_power_wms_client/web/static/assets/Inventory-DLOSwwgi.js rename to bj_power_wms_client/web/static/assets/Inventory-WA97rYQY.js index 22c5c89..c893022 100644 --- a/bj_power_wms_client/web/static/assets/Inventory-DLOSwwgi.js +++ b/bj_power_wms_client/web/static/assets/Inventory-WA97rYQY.js @@ -1 +1 @@ -import{_ as L,i as M,c as P,d as x,a as t,w as a,D as y,l as q,p as g,F as T,r as i,g as D,h as b,J as Z,o as c,H as E,e as B,f as o,K as I,t as u}from"./index-9NS-icag.js";import{r as J}from"./request-DS_8eNi1.js";import{a as O,b as K}from"./format-C9Ok6skr.js";import{b as Q,P as j}from"./help-BMgMow4j.js";const G={class:"pager"},R={__name:"Inventory",setup(W){const r=D({materialCode:"",keyword:"",type:""}),p=b(!1),C=b([]),z=b([]),S=b(0),d=D({current:1,size:10});async function _(){p.value=!0;try{const s=await J.get("/stock/query",{params:{materialCode:r.materialCode.trim(),keyword:r.keyword.trim(),type:r.type,page:d.current,pageSize:d.size}});C.value=(s==null?void 0:s.batch)||[],z.value=(s==null?void 0:s.serial)||[],S.value=(s==null?void 0:s.total)||0}finally{p.value=!1}}function m(){d.current=1,_()}return M(_),(s,l)=>{const k=i("el-input"),f=i("el-form-item"),v=i("el-radio-button"),U=i("el-radio-group"),A=i("el-button"),F=i("el-form"),w=i("el-card"),n=i("el-table-column"),h=i("el-tag"),V=i("el-table"),H=i("el-pagination"),N=Z("loading");return c(),P(T,null,[x("div",null,[t(w,{shadow:"never",class:"mb12"},{default:a(()=>[t(F,{inline:"",onSubmit:E(m,["prevent"])},{default:a(()=>[t(f,{label:"物料编码"},{default:a(()=>[t(k,{modelValue:r.materialCode,"onUpdate:modelValue":l[0]||(l[0]=e=>r.materialCode=e),placeholder:"物料编码",clearable:"",style:{width:"200px"},onKeyup:B(m,["enter"])},null,8,["modelValue"])]),_:1}),t(f,{label:"库存类型"},{default:a(()=>[t(U,{modelValue:r.type,"onUpdate:modelValue":l[1]||(l[1]=e=>r.type=e),onChange:m},{default:a(()=>[t(v,{value:""},{default:a(()=>[...l[5]||(l[5]=[o("全部",-1)])]),_:1}),t(v,{value:"batch"},{default:a(()=>[...l[6]||(l[6]=[o("批次",-1)])]),_:1}),t(v,{value:"serial"},{default:a(()=>[...l[7]||(l[7]=[o("SN 序列",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),t(f,{label:"关键字"},{default:a(()=>[t(k,{modelValue:r.keyword,"onUpdate:modelValue":l[2]||(l[2]=e=>r.keyword=e),placeholder:"批次号/物料名称/SN",clearable:"",style:{width:"220px"},onKeyup:B(m,["enter"])},null,8,["modelValue"])]),_:1}),t(f,null,{default:a(()=>[t(A,{type:"primary",loading:p.value,onClick:m},{default:a(()=>[...l[8]||(l[8]=[o("查询",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1}),!r.type||r.type==="batch"?(c(),y(w,{key:0,shadow:"never",class:"mb12",header:"批次库存(结构件)"},{default:a(()=>[I((c(),y(V,{data:C.value,border:"",size:"small","empty-text":"暂无批次数据"},{default:a(()=>[t(n,{prop:"batchNo",label:"批次号","min-width":"170"}),t(n,{prop:"materialCode",label:"物料编码","min-width":"140"}),t(n,{prop:"materialName",label:"物料名称","min-width":"130"},{default:a(({row:e})=>[o(u(e.materialName||"-"),1)]),_:1}),t(n,{prop:"quantity",label:"数量",width:"80",align:"center"}),t(n,{prop:"lockedQty",label:"锁定量",width:"90",align:"center"}),t(n,{prop:"zoneCode",label:"区域",width:"80",align:"center"},{default:a(({row:e})=>[o(u(e.zoneCode||"-"),1)]),_:1}),t(n,{label:"质量状态",width:"100",align:"center"},{default:a(({row:e})=>[t(h,{type:e.qualityStatus==="合格"?"success":e.qualityStatus==="不合格"?"danger":"info",size:"small"},{default:a(()=>[o(u(e.qualityStatus),1)]),_:2},1032,["type"])]),_:1}),t(n,{label:"生产日期",width:"110",align:"center"},{default:a(({row:e})=>[o(u(g(O)(e.productionDate)),1)]),_:1}),t(n,{prop:"supplier",label:"供应商","min-width":"120"},{default:a(({row:e})=>[o(u(e.supplier||"-"),1)]),_:1}),t(n,{label:"入库时间",width:"150",align:"center"},{default:a(({row:e})=>[o(u(g(K)(e.createdAt)),1)]),_:1})]),_:1},8,["data"])),[[N,p.value]])]),_:1})):q("",!0),!r.type||r.type==="serial"?(c(),y(w,{key:1,shadow:"never",header:"SN 库存(精密件)"},{default:a(()=>[I((c(),y(V,{data:z.value,border:"",size:"small","empty-text":"暂无 SN 数据"},{default:a(()=>[t(n,{prop:"snCode",label:"SN 序列号","min-width":"190"}),t(n,{prop:"materialCode",label:"物料编码","min-width":"150"}),t(n,{prop:"status",label:"状态",width:"90",align:"center"},{default:a(({row:e})=>[t(h,{type:e.status==="在库"?"success":e.status==="锁定"?"warning":"info",size:"small"},{default:a(()=>[o(u(e.status),1)]),_:2},1032,["type"])]),_:1}),t(n,{prop:"currentZone",label:"区域",width:"90",align:"center"},{default:a(({row:e})=>[o(u(e.currentZone||"-"),1)]),_:1}),t(n,{label:"质量状态",width:"100",align:"center"},{default:a(({row:e})=>[t(h,{type:e.qualityStatus==="合格"?"success":e.qualityStatus==="不合格"?"danger":"info",size:"small"},{default:a(()=>[o(u(e.qualityStatus||"未检"),1)]),_:2},1032,["type"])]),_:1}),t(n,{label:"入库时间",width:"160",align:"center"},{default:a(({row:e})=>[o(u(g(K)(e.createdAt)),1)]),_:1})]),_:1},8,["data"])),[[N,p.value]])]),_:1})):q("",!0),x("div",G,[t(H,{background:"",layout:"total, sizes, prev, pager, next",total:S.value,"current-page":d.current,"page-size":d.size,"page-sizes":[10,20,50,100],onCurrentChange:l[3]||(l[3]=e=>{d.current=e,_()}),onSizeChange:l[4]||(l[4]=e=>{d.size=e,d.current=1,_()})},null,8,["total","current-page","page-size"])])]),t(j,{data:g(Q)},null,8,["data"])],64)}}},te=L(R,[["__scopeId","data-v-c6dca929"]]);export{te as default}; +import{_ as L,i as M,c as P,d as x,a as t,w as a,D as y,l as q,p as g,F as T,r as i,g as D,h as b,J as Z,o as c,H as E,e as B,f as o,K as I,t as u}from"./index-BhhFt5Di.js";import{r as J}from"./request-By4ij0Lz.js";import{a as O,b as K}from"./format-C9Ok6skr.js";import{b as Q,P as j}from"./help-DfzkTHcJ.js";const G={class:"pager"},R={__name:"Inventory",setup(W){const r=D({materialCode:"",keyword:"",type:""}),p=b(!1),C=b([]),z=b([]),S=b(0),d=D({current:1,size:10});async function _(){p.value=!0;try{const s=await J.get("/stock/query",{params:{materialCode:r.materialCode.trim(),keyword:r.keyword.trim(),type:r.type,page:d.current,pageSize:d.size}});C.value=(s==null?void 0:s.batch)||[],z.value=(s==null?void 0:s.serial)||[],S.value=(s==null?void 0:s.total)||0}finally{p.value=!1}}function m(){d.current=1,_()}return M(_),(s,l)=>{const k=i("el-input"),f=i("el-form-item"),v=i("el-radio-button"),U=i("el-radio-group"),A=i("el-button"),F=i("el-form"),w=i("el-card"),n=i("el-table-column"),h=i("el-tag"),V=i("el-table"),H=i("el-pagination"),N=Z("loading");return c(),P(T,null,[x("div",null,[t(w,{shadow:"never",class:"mb12"},{default:a(()=>[t(F,{inline:"",onSubmit:E(m,["prevent"])},{default:a(()=>[t(f,{label:"物料编码"},{default:a(()=>[t(k,{modelValue:r.materialCode,"onUpdate:modelValue":l[0]||(l[0]=e=>r.materialCode=e),placeholder:"物料编码",clearable:"",style:{width:"200px"},onKeyup:B(m,["enter"])},null,8,["modelValue"])]),_:1}),t(f,{label:"库存类型"},{default:a(()=>[t(U,{modelValue:r.type,"onUpdate:modelValue":l[1]||(l[1]=e=>r.type=e),onChange:m},{default:a(()=>[t(v,{value:""},{default:a(()=>[...l[5]||(l[5]=[o("全部",-1)])]),_:1}),t(v,{value:"batch"},{default:a(()=>[...l[6]||(l[6]=[o("批次",-1)])]),_:1}),t(v,{value:"serial"},{default:a(()=>[...l[7]||(l[7]=[o("SN 序列",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),t(f,{label:"关键字"},{default:a(()=>[t(k,{modelValue:r.keyword,"onUpdate:modelValue":l[2]||(l[2]=e=>r.keyword=e),placeholder:"批次号/物料名称/SN",clearable:"",style:{width:"220px"},onKeyup:B(m,["enter"])},null,8,["modelValue"])]),_:1}),t(f,null,{default:a(()=>[t(A,{type:"primary",loading:p.value,onClick:m},{default:a(()=>[...l[8]||(l[8]=[o("查询",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1}),!r.type||r.type==="batch"?(c(),y(w,{key:0,shadow:"never",class:"mb12",header:"批次库存(结构件)"},{default:a(()=>[I((c(),y(V,{data:C.value,border:"",size:"small","empty-text":"暂无批次数据"},{default:a(()=>[t(n,{prop:"batchNo",label:"批次号","min-width":"170"}),t(n,{prop:"materialCode",label:"物料编码","min-width":"140"}),t(n,{prop:"materialName",label:"物料名称","min-width":"130"},{default:a(({row:e})=>[o(u(e.materialName||"-"),1)]),_:1}),t(n,{prop:"quantity",label:"数量",width:"80",align:"center"}),t(n,{prop:"lockedQty",label:"锁定量",width:"90",align:"center"}),t(n,{prop:"zoneCode",label:"区域",width:"80",align:"center"},{default:a(({row:e})=>[o(u(e.zoneCode||"-"),1)]),_:1}),t(n,{label:"质量状态",width:"100",align:"center"},{default:a(({row:e})=>[t(h,{type:e.qualityStatus==="合格"?"success":e.qualityStatus==="不合格"?"danger":"info",size:"small"},{default:a(()=>[o(u(e.qualityStatus),1)]),_:2},1032,["type"])]),_:1}),t(n,{label:"生产日期",width:"110",align:"center"},{default:a(({row:e})=>[o(u(g(O)(e.productionDate)),1)]),_:1}),t(n,{prop:"supplier",label:"供应商","min-width":"120"},{default:a(({row:e})=>[o(u(e.supplier||"-"),1)]),_:1}),t(n,{label:"入库时间",width:"150",align:"center"},{default:a(({row:e})=>[o(u(g(K)(e.createdAt)),1)]),_:1})]),_:1},8,["data"])),[[N,p.value]])]),_:1})):q("",!0),!r.type||r.type==="serial"?(c(),y(w,{key:1,shadow:"never",header:"SN 库存(精密件)"},{default:a(()=>[I((c(),y(V,{data:z.value,border:"",size:"small","empty-text":"暂无 SN 数据"},{default:a(()=>[t(n,{prop:"snCode",label:"SN 序列号","min-width":"190"}),t(n,{prop:"materialCode",label:"物料编码","min-width":"150"}),t(n,{prop:"status",label:"状态",width:"90",align:"center"},{default:a(({row:e})=>[t(h,{type:e.status==="在库"?"success":e.status==="锁定"?"warning":"info",size:"small"},{default:a(()=>[o(u(e.status),1)]),_:2},1032,["type"])]),_:1}),t(n,{prop:"currentZone",label:"区域",width:"90",align:"center"},{default:a(({row:e})=>[o(u(e.currentZone||"-"),1)]),_:1}),t(n,{label:"质量状态",width:"100",align:"center"},{default:a(({row:e})=>[t(h,{type:e.qualityStatus==="合格"?"success":e.qualityStatus==="不合格"?"danger":"info",size:"small"},{default:a(()=>[o(u(e.qualityStatus||"未检"),1)]),_:2},1032,["type"])]),_:1}),t(n,{label:"入库时间",width:"160",align:"center"},{default:a(({row:e})=>[o(u(g(K)(e.createdAt)),1)]),_:1})]),_:1},8,["data"])),[[N,p.value]])]),_:1})):q("",!0),x("div",G,[t(H,{background:"",layout:"total, sizes, prev, pager, next",total:S.value,"current-page":d.current,"page-size":d.size,"page-sizes":[10,20,50,100],onCurrentChange:l[3]||(l[3]=e=>{d.current=e,_()}),onSizeChange:l[4]||(l[4]=e=>{d.size=e,d.current=1,_()})},null,8,["total","current-page","page-size"])])]),t(j,{data:g(Q)},null,8,["data"])],64)}}},te=L(R,[["__scopeId","data-v-c6dca929"]]);export{te as default}; diff --git a/bj_power_wms_client/web/static/assets/Ledger-Dx4pgeep.js b/bj_power_wms_client/web/static/assets/Ledger-53K6Smgj.js similarity index 95% rename from bj_power_wms_client/web/static/assets/Ledger-Dx4pgeep.js rename to bj_power_wms_client/web/static/assets/Ledger-53K6Smgj.js index 0946dec..f0a4e2c 100644 --- a/bj_power_wms_client/web/static/assets/Ledger-Dx4pgeep.js +++ b/bj_power_wms_client/web/static/assets/Ledger-53K6Smgj.js @@ -1 +1 @@ -import{_ as L,c as S,d as x,a as e,w as a,D as g,p as F,F as H,r as o,h as u,J as M,o as _,H as P,e as T,f as c,K as E,t as p,g as I}from"./index-9NS-icag.js";import{r as J}from"./request-DS_8eNi1.js";import{g as O,P as U}from"./help-BMgMow4j.js";const j={class:"pager"},A={__name:"Ledger",setup(G){const i=u(""),d=u(!1),v=u(!1),y=u([]),m=u(0),r=I({current:1,size:20});function N(t){return Math.max((t.totalQty||0)-(t.outQty||0),0)}async function b(){if(i.value.trim()){d.value=!0;try{const t=await J.get("/ledger/query",{params:{orderNo:i.value.trim(),page:r.current,pageSize:r.size}});y.value=(t==null?void 0:t.list)||[],m.value=(t==null?void 0:t.total)||0,v.value=!0}finally{d.value=!1}}}function f(){r.current=1,b()}function k(t){return t==="领料完结"?"success":t==="进行中"?"primary":"info"}return(t,s)=>{const z=o("el-input"),h=o("el-form-item"),C=o("el-button"),V=o("el-form"),w=o("el-card"),n=o("el-table-column"),B=o("el-tag"),D=o("el-table"),Q=o("el-pagination"),q=o("el-empty"),K=M("loading");return _(),S(H,null,[x("div",null,[e(w,{shadow:"never",class:"mb12"},{default:a(()=>[e(V,{inline:"",onSubmit:P(f,["prevent"])},{default:a(()=>[e(h,{label:"工单号"},{default:a(()=>[e(z,{modelValue:i.value,"onUpdate:modelValue":s[0]||(s[0]=l=>i.value=l),placeholder:"输入工单号查询物料台账",clearable:"",autofocus:"",style:{width:"280px"},onKeyup:T(f,["enter"])},null,8,["modelValue"])]),_:1}),e(h,null,{default:a(()=>[e(C,{type:"primary",loading:d.value,onClick:f},{default:a(()=>[...s[2]||(s[2]=[c("查询",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1}),v.value?(_(),g(w,{key:0,shadow:"never"},{header:a(()=>[c("工单 "+p(i.value)+" 物料台账(共 "+p(m.value)+" 条)",1)]),default:a(()=>[E((_(),g(D,{data:y.value,border:"","empty-text":"暂无台账数据"},{default:a(()=>[e(n,{prop:"orderNo",label:"工单号","min-width":"140"}),e(n,{prop:"materialCode",label:"物料编码","min-width":"150"}),e(n,{prop:"materialName",label:"物料名称","min-width":"150"},{default:a(({row:l})=>[c(p(l.materialName||"-"),1)]),_:1}),e(n,{prop:"totalQty",label:"需求总量",width:"100",align:"center"}),e(n,{prop:"outQty",label:"已出库",width:"90",align:"center"}),e(n,{label:"缺口",width:"90",align:"center"},{default:a(({row:l})=>[c(p(N(l)),1)]),_:1}),e(n,{label:"状态",width:"110",align:"center"},{default:a(({row:l})=>[e(B,{type:k(l.status),size:"small"},{default:a(()=>[c(p(l.status),1)]),_:2},1032,["type"])]),_:1})]),_:1},8,["data"])),[[K,d.value]]),x("div",j,[e(Q,{background:"",layout:"total, prev, pager, next",total:m.value,"current-page":r.current,"page-size":r.size,onCurrentChange:s[1]||(s[1]=l=>{r.current=l,b()})},null,8,["total","current-page","page-size"])])]),_:1})):(_(),g(q,{key:1,description:"请输入工单号查询"}))]),e(U,{data:F(O)},null,8,["data"])],64)}}},Y=L(A,[["__scopeId","data-v-19f1447f"]]);export{Y as default}; +import{_ as L,c as S,d as x,a as e,w as a,D as g,p as F,F as H,r as o,h as u,J as M,o as _,H as P,e as T,f as c,K as E,t as p,g as I}from"./index-BhhFt5Di.js";import{r as J}from"./request-By4ij0Lz.js";import{g as O,P as U}from"./help-DfzkTHcJ.js";const j={class:"pager"},A={__name:"Ledger",setup(G){const i=u(""),d=u(!1),v=u(!1),y=u([]),m=u(0),r=I({current:1,size:20});function N(t){return Math.max((t.totalQty||0)-(t.outQty||0),0)}async function b(){if(i.value.trim()){d.value=!0;try{const t=await J.get("/ledger/query",{params:{orderNo:i.value.trim(),page:r.current,pageSize:r.size}});y.value=(t==null?void 0:t.list)||[],m.value=(t==null?void 0:t.total)||0,v.value=!0}finally{d.value=!1}}}function f(){r.current=1,b()}function k(t){return t==="领料完结"?"success":t==="进行中"?"primary":"info"}return(t,s)=>{const z=o("el-input"),h=o("el-form-item"),C=o("el-button"),V=o("el-form"),w=o("el-card"),n=o("el-table-column"),B=o("el-tag"),D=o("el-table"),Q=o("el-pagination"),q=o("el-empty"),K=M("loading");return _(),S(H,null,[x("div",null,[e(w,{shadow:"never",class:"mb12"},{default:a(()=>[e(V,{inline:"",onSubmit:P(f,["prevent"])},{default:a(()=>[e(h,{label:"工单号"},{default:a(()=>[e(z,{modelValue:i.value,"onUpdate:modelValue":s[0]||(s[0]=l=>i.value=l),placeholder:"输入工单号查询物料台账",clearable:"",autofocus:"",style:{width:"280px"},onKeyup:T(f,["enter"])},null,8,["modelValue"])]),_:1}),e(h,null,{default:a(()=>[e(C,{type:"primary",loading:d.value,onClick:f},{default:a(()=>[...s[2]||(s[2]=[c("查询",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1}),v.value?(_(),g(w,{key:0,shadow:"never"},{header:a(()=>[c("工单 "+p(i.value)+" 物料台账(共 "+p(m.value)+" 条)",1)]),default:a(()=>[E((_(),g(D,{data:y.value,border:"","empty-text":"暂无台账数据"},{default:a(()=>[e(n,{prop:"orderNo",label:"工单号","min-width":"140"}),e(n,{prop:"materialCode",label:"物料编码","min-width":"150"}),e(n,{prop:"materialName",label:"物料名称","min-width":"150"},{default:a(({row:l})=>[c(p(l.materialName||"-"),1)]),_:1}),e(n,{prop:"totalQty",label:"需求总量",width:"100",align:"center"}),e(n,{prop:"outQty",label:"已出库",width:"90",align:"center"}),e(n,{label:"缺口",width:"90",align:"center"},{default:a(({row:l})=>[c(p(N(l)),1)]),_:1}),e(n,{label:"状态",width:"110",align:"center"},{default:a(({row:l})=>[e(B,{type:k(l.status),size:"small"},{default:a(()=>[c(p(l.status),1)]),_:2},1032,["type"])]),_:1})]),_:1},8,["data"])),[[K,d.value]]),x("div",j,[e(Q,{background:"",layout:"total, prev, pager, next",total:m.value,"current-page":r.current,"page-size":r.size,onCurrentChange:s[1]||(s[1]=l=>{r.current=l,b()})},null,8,["total","current-page","page-size"])])]),_:1})):(_(),g(q,{key:1,description:"请输入工单号查询"}))]),e(U,{data:F(O)},null,8,["data"])],64)}}},Y=L(A,[["__scopeId","data-v-19f1447f"]]);export{Y as default}; diff --git a/bj_power_wms_client/web/static/assets/Login-CiXa7TLP.js b/bj_power_wms_client/web/static/assets/Login-BWT5U0wo.js similarity index 92% rename from bj_power_wms_client/web/static/assets/Login-CiXa7TLP.js rename to bj_power_wms_client/web/static/assets/Login-BWT5U0wo.js index ce934a9..2370e8b 100644 --- a/bj_power_wms_client/web/static/assets/Login-CiXa7TLP.js +++ b/bj_power_wms_client/web/static/assets/Login-BWT5U0wo.js @@ -1 +1 @@ -import{_ as v,c as V,a as s,w as a,r,u as k,b as h,o as x,d as u,e as q,f as E,s as R,E as B,g as C,h as c}from"./index-9NS-icag.js";import{r as N}from"./request-DS_8eNi1.js";const S={class:"login-page"},K={__name:"Login",setup(L){const f=k(),_=h(),d=c(),l=c(!1),o=C({username:"",password:""}),g={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]};async function p(){await d.value.validate(),l.value=!0;try{const t=await N.post("/auth/login",{username:o.username,password:o.password});if(!(t!=null&&t.token))throw new Error("登录响应缺少 token");R(t.token,t.user||{}),B.success("登录成功");const e=_.query.redirect;f.push(e&&typeof e=="string"?e:"/")}finally{l.value=!1}}return(t,e)=>{const m=r("el-input"),i=r("el-form-item"),w=r("el-button"),y=r("el-form"),b=r("el-card");return x(),V("div",S,[s(b,{class:"card"},{default:a(()=>[e[3]||(e[3]=u("div",{class:"head"},[u("h2",null,"北自所库房客户端"),u("p",null,"请使用 WMS 账号登录")],-1)),s(y,{ref_key:"formRef",ref:d,model:o,rules:g,"label-position":"top",onKeyup:q(p,["enter"])},{default:a(()=>[s(i,{label:"用户名",prop:"username"},{default:a(()=>[s(m,{modelValue:o.username,"onUpdate:modelValue":e[0]||(e[0]=n=>o.username=n),placeholder:"用户名",autofocus:""},null,8,["modelValue"])]),_:1}),s(i,{label:"密码",prop:"password"},{default:a(()=>[s(m,{modelValue:o.password,"onUpdate:modelValue":e[1]||(e[1]=n=>o.password=n),type:"password","show-password":"",placeholder:"密码"},null,8,["modelValue"])]),_:1}),s(w,{type:"primary",class:"btn",loading:l.value,onClick:p},{default:a(()=>[...e[2]||(e[2]=[E("登 录",-1)])]),_:1},8,["loading"])]),_:1},8,["model"])]),_:1})])}}},I=v(K,[["__scopeId","data-v-86cfca92"]]);export{I as default}; +import{_ as v,c as V,a as s,w as a,r,u as k,b as h,o as x,d as u,e as q,f as E,s as R,E as B,g as C,h as c}from"./index-BhhFt5Di.js";import{r as N}from"./request-By4ij0Lz.js";const S={class:"login-page"},K={__name:"Login",setup(L){const f=k(),_=h(),d=c(),l=c(!1),o=C({username:"",password:""}),g={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]};async function p(){await d.value.validate(),l.value=!0;try{const t=await N.post("/auth/login",{username:o.username,password:o.password});if(!(t!=null&&t.token))throw new Error("登录响应缺少 token");R(t.token,t.user||{}),B.success("登录成功");const e=_.query.redirect;f.push(e&&typeof e=="string"?e:"/")}finally{l.value=!1}}return(t,e)=>{const m=r("el-input"),i=r("el-form-item"),w=r("el-button"),y=r("el-form"),b=r("el-card");return x(),V("div",S,[s(b,{class:"card"},{default:a(()=>[e[3]||(e[3]=u("div",{class:"head"},[u("h2",null,"北自所库房客户端"),u("p",null,"请使用 WMS 账号登录")],-1)),s(y,{ref_key:"formRef",ref:d,model:o,rules:g,"label-position":"top",onKeyup:q(p,["enter"])},{default:a(()=>[s(i,{label:"用户名",prop:"username"},{default:a(()=>[s(m,{modelValue:o.username,"onUpdate:modelValue":e[0]||(e[0]=n=>o.username=n),placeholder:"用户名",autofocus:""},null,8,["modelValue"])]),_:1}),s(i,{label:"密码",prop:"password"},{default:a(()=>[s(m,{modelValue:o.password,"onUpdate:modelValue":e[1]||(e[1]=n=>o.password=n),type:"password","show-password":"",placeholder:"密码"},null,8,["modelValue"])]),_:1}),s(w,{type:"primary",class:"btn",loading:l.value,onClick:p},{default:a(()=>[...e[2]||(e[2]=[E("登 录",-1)])]),_:1},8,["loading"])]),_:1},8,["model"])]),_:1})])}}},I=v(K,[["__scopeId","data-v-86cfca92"]]);export{I as default}; diff --git a/bj_power_wms_client/web/static/assets/Outbound-BGRoJuha.js b/bj_power_wms_client/web/static/assets/Outbound-DvjCYsMG.js similarity index 96% rename from bj_power_wms_client/web/static/assets/Outbound-BGRoJuha.js rename to bj_power_wms_client/web/static/assets/Outbound-DvjCYsMG.js index 08d8015..8d0af2f 100644 --- a/bj_power_wms_client/web/static/assets/Outbound-BGRoJuha.js +++ b/bj_power_wms_client/web/static/assets/Outbound-DvjCYsMG.js @@ -1,4 +1,4 @@ -import{_ as E,I as K,c as B,d as D,a as t,w as n,D as C,p as M,F as T,r as i,h as $,J as I,o as m,H as Z,e as j,f as g,K as A,t as y,L as H,E as h,g as P,M as R,m as U}from"./index-9NS-icag.js";import{r as z}from"./request-DS_8eNi1.js";import{a as J,P as L}from"./help-BMgMow4j.js";const G={key:1,style:{color:"#67c23a"}},W={__name:"Outbound",setup(X){const v=P({orderNo:""}),k=K(),f=$(""),N=$(!1),S=$(!1),_=$([]),O=U(()=>_.value.filter(e=>e.status!=="领料完结"));function x(e){return Math.max((e.totalQty||0)-(e.outQty||0),0)}async function F(e){const l=x(e);if(l<=0)return;const d=await z.get("/stock/query",{params:{type:"batch",materialCode:e.materialCode,page:1,pageSize:200}}),p=((d==null?void 0:d.batch)||[]).filter(a=>a.qualityStatus==="合格"&&a.zoneCode==="Z02").sort((a,r)=>String(a.batchNo).localeCompare(String(r.batchNo))),c=[];let u=l;for(const a of p){if(u<=0)break;const r=(a.quantity||0)-(a.lockedQty||0);if(r<=0)continue;const o=Math.min(r,u);c.push({batchNo:a.batchNo,qty:o,zoneCode:a.zoneCode}),u-=o}if(!c.length){h.warning(`物料 ${e.materialCode} 在合格区(Z02)无可用批次库存`);return}if(u>0){h.error(`可用量不足:缺口 ${l},Z02 仅可凑 ${l-u},还差 ${u}`);return}const w=c.map(a=>`· 批次 ${a.batchNo} 出库 ${a.qty}`).join(` +import{_ as E,I as K,c as B,d as D,a as t,w as n,D as C,p as M,F as T,r as i,h as $,J as I,o as m,H as Z,e as j,f as g,K as A,t as y,L as H,E as h,g as P,M as R,m as U}from"./index-BhhFt5Di.js";import{r as z}from"./request-By4ij0Lz.js";import{a as J,P as L}from"./help-DfzkTHcJ.js";const G={key:1,style:{color:"#67c23a"}},W={__name:"Outbound",setup(X){const v=P({orderNo:""}),k=K(),f=$(""),N=$(!1),S=$(!1),_=$([]),O=U(()=>_.value.filter(e=>e.status!=="领料完结"));function x(e){return Math.max((e.totalQty||0)-(e.outQty||0),0)}async function F(e){const l=x(e);if(l<=0)return;const d=await z.get("/stock/query",{params:{type:"batch",materialCode:e.materialCode,page:1,pageSize:200}}),p=((d==null?void 0:d.batch)||[]).filter(a=>a.qualityStatus==="合格"&&a.zoneCode==="Z02").sort((a,r)=>String(a.batchNo).localeCompare(String(r.batchNo))),c=[];let u=l;for(const a of p){if(u<=0)break;const r=(a.quantity||0)-(a.lockedQty||0);if(r<=0)continue;const o=Math.min(r,u);c.push({batchNo:a.batchNo,qty:o,zoneCode:a.zoneCode}),u-=o}if(!c.length){h.warning(`物料 ${e.materialCode} 在合格区(Z02)无可用批次库存`);return}if(u>0){h.error(`可用量不足:缺口 ${l},Z02 仅可凑 ${l-u},还差 ${u}`);return}const w=c.map(a=>`· 批次 ${a.batchNo} 出库 ${a.qty}`).join(` `);await R.confirm(`工单 ${e.orderNo} 物料 ${e.materialCode} 缺口 ${l},按 FIFO 分配如下: ${w} diff --git a/bj_power_wms_client/web/static/assets/Package-CiuyXcgR.js b/bj_power_wms_client/web/static/assets/Package-J77JJef_.js similarity index 96% rename from bj_power_wms_client/web/static/assets/Package-CiuyXcgR.js rename to bj_power_wms_client/web/static/assets/Package-J77JJef_.js index 4c5ccb1..19df7be 100644 --- a/bj_power_wms_client/web/static/assets/Package-CiuyXcgR.js +++ b/bj_power_wms_client/web/static/assets/Package-J77JJef_.js @@ -1 +1 @@ -import{_ as W,I as X,i as Y,c as U,d as _,a as t,w as o,p as S,F as q,h as d,g as E,r as n,J as Z,o as y,H as k,k as j,D as F,e as I,f as u,t as f,K as ee,E as C}from"./index-9NS-icag.js";import{r as V}from"./request-DS_8eNi1.js";import{b as te}from"./format-C9Ok6skr.js";import{f as le,P as ae}from"./help-BMgMow4j.js";const oe={style:{"margin-bottom":"8px"}},ne={class:"pager"},re={__name:"Package",setup(ie){const z=d([]),K=X();Y(async()=>{try{const a=await V.get("/material/list");z.value=Array.isArray(a)?a:(a==null?void 0:a.list)||[]}catch{}await v()});const r=E({boxNo:"",materialCode:""}),m=d(""),i=d([]),w=d(!1);function M(){for(let a of String(m.value).split(/\s+/)){const e=a.trim();e&&!i.value.includes(e)&&i.value.push(e)}m.value=""}function H(a){i.value.splice(a,1)}async function J(){if(!r.boxNo.trim()){C.warning("请输入箱号");return}if(!i.value.length){C.warning("请扫码录入 SN(回车追加)");return}w.value=!0;try{await V.post("/package/bind",{boxNo:r.boxNo.trim(),materialCode:r.materialCode||void 0,snList:[...i.value],operator:K}),C.success(`绑定成功:箱号 ${r.boxNo.trim()} 共 ${i.value.length} 个 SN`),i.value=[],m.value="",r.boxNo="",p.current=1,await v()}finally{w.value=!1}}const x=d(""),A=d([]),B=d(0),b=d(!1),p=E({current:1,size:10});function T(a){try{const e=JSON.parse(a||"[]");return Array.isArray(e)?e.join(", "):String(a)}catch{return String(a||"-")}}async function v(){b.value=!0;try{const a=await V.get("/package/query",{params:{boxNo:x.value.trim(),page:p.current,pageSize:p.size}});A.value=(a==null?void 0:a.list)||[],B.value=(a==null?void 0:a.total)||0}finally{b.value=!1}}function N(){p.current=1,v()}return(a,e)=>{const g=n("el-input"),c=n("el-form-item"),O=n("el-option"),R=n("el-select"),L=n("el-form"),s=n("el-table-column"),h=n("el-button"),P=n("el-table"),$=n("el-card"),G=n("el-pagination"),Q=Z("loading");return y(),U(q,null,[_("div",null,[t($,{shadow:"never",class:"mb12",header:"箱号绑定(连续扫码 SN)"},{default:o(()=>[t(L,{inline:"","label-width":"90px",onSubmit:e[2]||(e[2]=k(()=>{},["prevent"]))},{default:o(()=>[t(c,{label:"箱号"},{default:o(()=>[t(g,{modelValue:r.boxNo,"onUpdate:modelValue":e[0]||(e[0]=l=>r.boxNo=l),placeholder:"扫描或输入箱号",clearable:"",style:{width:"200px"}},null,8,["modelValue"])]),_:1}),t(c,{label:"物料"},{default:o(()=>[t(R,{modelValue:r.materialCode,"onUpdate:modelValue":e[1]||(e[1]=l=>r.materialCode=l),filterable:"",clearable:"",placeholder:"请选择物料",style:{width:"240px"}},{default:o(()=>[(y(!0),U(q,null,j(z.value,l=>(y(),F(O,{key:l.id,value:l.code,label:`${l.code} ${l.name||""}`},null,8,["value","label"]))),128))]),_:1},8,["modelValue"])]),_:1}),t(c,{label:"操作人"},{default:o(()=>[t(g,{"model-value":S(K),disabled:"",style:{width:"140px"}},null,8,["model-value"])]),_:1})]),_:1}),t(g,{modelValue:m.value,"onUpdate:modelValue":e[3]||(e[3]=l=>m.value=l),type:"textarea",rows:3,autofocus:"",placeholder:"连续扫描 SN,每次回车追加(可一次多条,空白分隔)",style:{"max-width":"560px","margin-bottom":"8px"},onKeydown:I(k(M,["prevent"]),["enter"])},null,8,["modelValue","onKeydown"]),_("div",oe,[e[6]||(e[6]=u("待绑定 SN:",-1)),_("b",null,f(i.value.length),1),e[7]||(e[7]=u(" 条",-1))]),t(P,{data:i.value.map((l,D)=>({i:D,v:l})),size:"small",border:"","max-height":"240","empty-text":"暂无 SN",style:{"max-width":"760px"}},{default:o(()=>[t(s,{type:"index",label:"#",width:"56",align:"center"}),t(s,{prop:"v",label:"SN 序列号","min-width":"200"}),t(s,{label:"操作",width:"80",align:"center"},{default:o(({row:l})=>[t(h,{link:"",type:"danger",size:"small",onClick:D=>H(l.i)},{default:o(()=>[...e[8]||(e[8]=[u("移除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"]),t(h,{type:"primary",class:"mt12",loading:w.value,onClick:J},{default:o(()=>[...e[9]||(e[9]=[u("确认绑定",-1)])]),_:1},8,["loading"])]),_:1}),t($,{shadow:"never",header:"包装查询"},{default:o(()=>[t(L,{inline:"",onSubmit:k(N,["prevent"])},{default:o(()=>[t(c,{label:"箱号"},{default:o(()=>[t(g,{modelValue:x.value,"onUpdate:modelValue":e[4]||(e[4]=l=>x.value=l),placeholder:"按箱号模糊查询",clearable:"",style:{width:"220px"},onKeyup:I(N,["enter"])},null,8,["modelValue"])]),_:1}),t(c,null,{default:o(()=>[t(h,{type:"primary",loading:b.value,onClick:N},{default:o(()=>[...e[10]||(e[10]=[u("查询",-1)])]),_:1},8,["loading"])]),_:1})]),_:1}),ee((y(),F(P,{data:A.value,border:"",size:"small","empty-text":"暂无包装记录"},{default:o(()=>[t(s,{prop:"boxNo",label:"箱号","min-width":"150"}),t(s,{label:"SN 列表","min-width":"300"},{default:o(({row:l})=>[u(f(T(l.snList)),1)]),_:1}),t(s,{prop:"quantity",label:"SN 数量",width:"90",align:"center"}),t(s,{prop:"materialCode",label:"物料编码","min-width":"130"},{default:o(({row:l})=>[u(f(l.materialCode||"-"),1)]),_:1}),t(s,{prop:"operator",label:"操作人",width:"100",align:"center"},{default:o(({row:l})=>[u(f(l.operator||"-"),1)]),_:1}),t(s,{label:"创建时间",width:"160",align:"center"},{default:o(({row:l})=>[u(f(S(te)(l.createdAt)),1)]),_:1})]),_:1},8,["data"])),[[Q,b.value]]),_("div",ne,[t(G,{background:"",layout:"total, prev, pager, next",total:B.value,"current-page":p.current,"page-size":p.size,onCurrentChange:e[5]||(e[5]=l=>{p.current=l,v()})},null,8,["total","current-page","page-size"])])]),_:1})]),t(ae,{data:S(le)},null,8,["data"])],64)}}},me=W(re,[["__scopeId","data-v-cd5c496f"]]);export{me as default}; +import{_ as W,I as X,i as Y,c as U,d as _,a as t,w as o,p as S,F as q,h as d,g as E,r as n,J as Z,o as y,H as k,k as j,D as F,e as I,f as u,t as f,K as ee,E as C}from"./index-BhhFt5Di.js";import{r as V}from"./request-By4ij0Lz.js";import{b as te}from"./format-C9Ok6skr.js";import{f as le,P as ae}from"./help-DfzkTHcJ.js";const oe={style:{"margin-bottom":"8px"}},ne={class:"pager"},re={__name:"Package",setup(ie){const z=d([]),K=X();Y(async()=>{try{const a=await V.get("/material/list");z.value=Array.isArray(a)?a:(a==null?void 0:a.list)||[]}catch{}await v()});const r=E({boxNo:"",materialCode:""}),m=d(""),i=d([]),w=d(!1);function M(){for(let a of String(m.value).split(/\s+/)){const e=a.trim();e&&!i.value.includes(e)&&i.value.push(e)}m.value=""}function H(a){i.value.splice(a,1)}async function J(){if(!r.boxNo.trim()){C.warning("请输入箱号");return}if(!i.value.length){C.warning("请扫码录入 SN(回车追加)");return}w.value=!0;try{await V.post("/package/bind",{boxNo:r.boxNo.trim(),materialCode:r.materialCode||void 0,snList:[...i.value],operator:K}),C.success(`绑定成功:箱号 ${r.boxNo.trim()} 共 ${i.value.length} 个 SN`),i.value=[],m.value="",r.boxNo="",p.current=1,await v()}finally{w.value=!1}}const x=d(""),A=d([]),B=d(0),b=d(!1),p=E({current:1,size:10});function T(a){try{const e=JSON.parse(a||"[]");return Array.isArray(e)?e.join(", "):String(a)}catch{return String(a||"-")}}async function v(){b.value=!0;try{const a=await V.get("/package/query",{params:{boxNo:x.value.trim(),page:p.current,pageSize:p.size}});A.value=(a==null?void 0:a.list)||[],B.value=(a==null?void 0:a.total)||0}finally{b.value=!1}}function N(){p.current=1,v()}return(a,e)=>{const g=n("el-input"),c=n("el-form-item"),O=n("el-option"),R=n("el-select"),L=n("el-form"),s=n("el-table-column"),h=n("el-button"),P=n("el-table"),$=n("el-card"),G=n("el-pagination"),Q=Z("loading");return y(),U(q,null,[_("div",null,[t($,{shadow:"never",class:"mb12",header:"箱号绑定(连续扫码 SN)"},{default:o(()=>[t(L,{inline:"","label-width":"90px",onSubmit:e[2]||(e[2]=k(()=>{},["prevent"]))},{default:o(()=>[t(c,{label:"箱号"},{default:o(()=>[t(g,{modelValue:r.boxNo,"onUpdate:modelValue":e[0]||(e[0]=l=>r.boxNo=l),placeholder:"扫描或输入箱号",clearable:"",style:{width:"200px"}},null,8,["modelValue"])]),_:1}),t(c,{label:"物料"},{default:o(()=>[t(R,{modelValue:r.materialCode,"onUpdate:modelValue":e[1]||(e[1]=l=>r.materialCode=l),filterable:"",clearable:"",placeholder:"请选择物料",style:{width:"240px"}},{default:o(()=>[(y(!0),U(q,null,j(z.value,l=>(y(),F(O,{key:l.id,value:l.code,label:`${l.code} ${l.name||""}`},null,8,["value","label"]))),128))]),_:1},8,["modelValue"])]),_:1}),t(c,{label:"操作人"},{default:o(()=>[t(g,{"model-value":S(K),disabled:"",style:{width:"140px"}},null,8,["model-value"])]),_:1})]),_:1}),t(g,{modelValue:m.value,"onUpdate:modelValue":e[3]||(e[3]=l=>m.value=l),type:"textarea",rows:3,autofocus:"",placeholder:"连续扫描 SN,每次回车追加(可一次多条,空白分隔)",style:{"max-width":"560px","margin-bottom":"8px"},onKeydown:I(k(M,["prevent"]),["enter"])},null,8,["modelValue","onKeydown"]),_("div",oe,[e[6]||(e[6]=u("待绑定 SN:",-1)),_("b",null,f(i.value.length),1),e[7]||(e[7]=u(" 条",-1))]),t(P,{data:i.value.map((l,D)=>({i:D,v:l})),size:"small",border:"","max-height":"240","empty-text":"暂无 SN",style:{"max-width":"760px"}},{default:o(()=>[t(s,{type:"index",label:"#",width:"56",align:"center"}),t(s,{prop:"v",label:"SN 序列号","min-width":"200"}),t(s,{label:"操作",width:"80",align:"center"},{default:o(({row:l})=>[t(h,{link:"",type:"danger",size:"small",onClick:D=>H(l.i)},{default:o(()=>[...e[8]||(e[8]=[u("移除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"]),t(h,{type:"primary",class:"mt12",loading:w.value,onClick:J},{default:o(()=>[...e[9]||(e[9]=[u("确认绑定",-1)])]),_:1},8,["loading"])]),_:1}),t($,{shadow:"never",header:"包装查询"},{default:o(()=>[t(L,{inline:"",onSubmit:k(N,["prevent"])},{default:o(()=>[t(c,{label:"箱号"},{default:o(()=>[t(g,{modelValue:x.value,"onUpdate:modelValue":e[4]||(e[4]=l=>x.value=l),placeholder:"按箱号模糊查询",clearable:"",style:{width:"220px"},onKeyup:I(N,["enter"])},null,8,["modelValue"])]),_:1}),t(c,null,{default:o(()=>[t(h,{type:"primary",loading:b.value,onClick:N},{default:o(()=>[...e[10]||(e[10]=[u("查询",-1)])]),_:1},8,["loading"])]),_:1})]),_:1}),ee((y(),F(P,{data:A.value,border:"",size:"small","empty-text":"暂无包装记录"},{default:o(()=>[t(s,{prop:"boxNo",label:"箱号","min-width":"150"}),t(s,{label:"SN 列表","min-width":"300"},{default:o(({row:l})=>[u(f(T(l.snList)),1)]),_:1}),t(s,{prop:"quantity",label:"SN 数量",width:"90",align:"center"}),t(s,{prop:"materialCode",label:"物料编码","min-width":"130"},{default:o(({row:l})=>[u(f(l.materialCode||"-"),1)]),_:1}),t(s,{prop:"operator",label:"操作人",width:"100",align:"center"},{default:o(({row:l})=>[u(f(l.operator||"-"),1)]),_:1}),t(s,{label:"创建时间",width:"160",align:"center"},{default:o(({row:l})=>[u(f(S(te)(l.createdAt)),1)]),_:1})]),_:1},8,["data"])),[[Q,b.value]]),_("div",ne,[t(G,{background:"",layout:"total, prev, pager, next",total:B.value,"current-page":p.current,"page-size":p.size,onCurrentChange:e[5]||(e[5]=l=>{p.current=l,v()})},null,8,["total","current-page","page-size"])])]),_:1})]),t(ae,{data:S(le)},null,8,["data"])],64)}}},me=W(re,[["__scopeId","data-v-cd5c496f"]]);export{me as default}; diff --git a/bj_power_wms_client/web/static/assets/Semi-Bs9UASrg.js b/bj_power_wms_client/web/static/assets/Semi-BvYUqYU7.js similarity index 97% rename from bj_power_wms_client/web/static/assets/Semi-Bs9UASrg.js rename to bj_power_wms_client/web/static/assets/Semi-BvYUqYU7.js index 73dd851..687f742 100644 --- a/bj_power_wms_client/web/static/assets/Semi-Bs9UASrg.js +++ b/bj_power_wms_client/web/static/assets/Semi-BvYUqYU7.js @@ -1 +1 @@ -import{_ as ee,i as le,I as te,c as H,a as e,w as a,p as V,F as T,h as p,r as s,J as ae,o as x,k as oe,D as J,e as O,H as B,d as N,f as u,t as b,K as ne,g as S,E as g}from"./index-9NS-icag.js";import{r as z}from"./request-DS_8eNi1.js";import{b as se}from"./format-C9Ok6skr.js";import{e as de,P as ue}from"./help-BMgMow4j.js";const re={style:{"margin-bottom":"8px"}},ie={style:{"margin-top":"12px"}},me={class:"pager"},pe={__name:"Semi",setup(ce){const D=p([]);le(async()=>{try{const o=await z.get("/material/list");D.value=Array.isArray(o)?o:(o==null?void 0:o.list)||[]}catch{}});const y=te(),n=S({materialCode:"",zoneCode:"",orderNo:"",completedProcess:""}),_=p(""),r=p([]),k=p(!1);function R(){for(let o of String(_.value).split(/\s+/)){const l=o.trim();l&&!r.value.includes(l)&&r.value.push(l)}_.value=""}function j(o){r.value.splice(o,1)}async function G(){if(!n.materialCode){g.warning("请选择物料");return}if(!r.value.length){g.warning("请扫码录入 SN(回车追加)");return}k.value=!0;let o=0;try{for(const l of r.value)try{await z.post("/semi/inbound",{sn:l,materialCode:n.materialCode,completedProcess:n.completedProcess.trim(),zoneCode:n.zoneCode||void 0,orderNo:n.orderNo.trim()||void 0,operator:y}),o++}catch{}g.success(`半成品入库完成:成功 ${o} / ${r.value.length} 条`),r.value=[],_.value=""}finally{k.value=!1}}const w=S({sn:""}),h=p(!1);async function P(){const o=w.sn.trim();if(!o){g.warning("请输入 SN");return}h.value=!0;try{await z.post("/semi/outbound",{sn:o,operator:y}),g.success(`半成品出库成功:${o}`),w.sn="",await U()}finally{h.value=!1}}const c=S({materialCode:"",status:""}),I=p([]),L=p(0),C=p(!1),f=S({current:1,size:10});async function U(){C.value=!0;try{const o=await z.get("/semi/query",{params:{materialCode:c.materialCode.trim(),status:c.status,page:f.current,pageSize:f.size}});I.value=(o==null?void 0:o.list)||[],L.value=(o==null?void 0:o.total)||0}finally{C.value=!1}}function q(){f.current=1,U()}return(o,l)=>{const $=s("el-option"),A=s("el-select"),d=s("el-form-item"),m=s("el-input"),F=s("el-form"),i=s("el-table-column"),v=s("el-button"),E=s("el-table"),K=s("el-tab-pane"),Q=s("el-tag"),W=s("el-pagination"),X=s("el-tabs"),Y=s("el-card"),Z=ae("loading");return x(),H(T,null,[e(Y,{shadow:"never"},{default:a(()=>[e(X,null,{default:a(()=>[e(K,{label:"半成品/成品入库"},{default:a(()=>[e(F,{"label-width":"110px",style:{"max-width":"680px"}},{default:a(()=>[e(d,{label:"物料"},{default:a(()=>[e(A,{modelValue:n.materialCode,"onUpdate:modelValue":l[0]||(l[0]=t=>n.materialCode=t),filterable:"",placeholder:"选择物料编码",style:{width:"100%"}},{default:a(()=>[(x(!0),H(T,null,oe(D.value,t=>(x(),J($,{key:t.id,value:t.code,label:`${t.code} ${t.name||""}`},null,8,["value","label"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(d,{label:"已完成工序"},{default:a(()=>[e(m,{modelValue:n.completedProcess,"onUpdate:modelValue":l[1]||(l[1]=t=>n.completedProcess=t),placeholder:"如:135(可空)",clearable:""},null,8,["modelValue"])]),_:1}),e(d,{label:"工单号"},{default:a(()=>[e(m,{modelValue:n.orderNo,"onUpdate:modelValue":l[2]||(l[2]=t=>n.orderNo=t),placeholder:"来源工单号(可空)",clearable:""},null,8,["modelValue"])]),_:1}),e(d,{label:"区域"},{default:a(()=>[e(m,{modelValue:n.zoneCode,"onUpdate:modelValue":l[3]||(l[3]=t=>n.zoneCode=t),placeholder:"库区(可空)",clearable:""},null,8,["modelValue"])]),_:1}),e(d,{label:"操作人"},{default:a(()=>[e(m,{"model-value":V(y),disabled:""},null,8,["model-value"])]),_:1}),e(d,{label:"扫码录入"},{default:a(()=>[e(m,{modelValue:_.value,"onUpdate:modelValue":l[4]||(l[4]=t=>_.value=t),type:"textarea",rows:3,autofocus:"",placeholder:"连续扫描 SN,每次回车追加(可一次多条,空白分隔)",onKeydown:O(B(R,["prevent"]),["enter"])},null,8,["modelValue","onKeydown"])]),_:1})]),_:1}),N("div",re,[l[10]||(l[10]=u("待入库 SN:",-1)),N("b",null,b(r.value.length),1),l[11]||(l[11]=u(" 条",-1))]),e(E,{data:r.value.map((t,M)=>({i:M,v:t})),size:"small",border:"","max-height":"260","empty-text":"暂无 SN",style:{"max-width":"760px"}},{default:a(()=>[e(i,{type:"index",label:"#",width:"56",align:"center"}),e(i,{prop:"v",label:"SN 序列号","min-width":"220"}),e(i,{label:"操作",width:"80",align:"center"},{default:a(({row:t})=>[e(v,{link:"",type:"danger",size:"small",onClick:M=>j(t.i)},{default:a(()=>[...l[12]||(l[12]=[u("移除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"]),N("div",ie,[e(v,{type:"primary",loading:k.value,onClick:G},{default:a(()=>[...l[13]||(l[13]=[u("提交入库",-1)])]),_:1},8,["loading"]),e(v,{onClick:l[5]||(l[5]=t=>r.value=[])},{default:a(()=>[...l[14]||(l[14]=[u("清空",-1)])]),_:1})])]),_:1}),e(K,{label:"半成品出库"},{default:a(()=>[e(F,{"label-width":"110px",style:{"max-width":"560px"},onSubmit:B(P,["prevent"])},{default:a(()=>[e(d,{label:"SN"},{default:a(()=>[e(m,{modelValue:w.sn,"onUpdate:modelValue":l[6]||(l[6]=t=>w.sn=t),placeholder:"扫描或输入 SN,回车出库",clearable:"",autofocus:"",onKeyup:O(P,["enter"])},null,8,["modelValue"])]),_:1}),e(d,{label:"操作人"},{default:a(()=>[e(m,{"model-value":V(y),disabled:""},null,8,["model-value"])]),_:1}),e(d,null,{default:a(()=>[e(v,{type:"primary",loading:h.value,onClick:P},{default:a(()=>[...l[15]||(l[15]=[u("出库(重上线)",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1}),e(K,{label:"半成品/成品查询"},{default:a(()=>[e(F,{inline:"",onSubmit:B(q,["prevent"])},{default:a(()=>[e(d,{label:"物料编码"},{default:a(()=>[e(m,{modelValue:c.materialCode,"onUpdate:modelValue":l[7]||(l[7]=t=>c.materialCode=t),placeholder:"物料编码",clearable:"",style:{width:"200px"}},null,8,["modelValue"])]),_:1}),e(d,{label:"状态"},{default:a(()=>[e(A,{modelValue:c.status,"onUpdate:modelValue":l[8]||(l[8]=t=>c.status=t),clearable:"",placeholder:"请选择状态",style:{width:"120px"}},{default:a(()=>[e($,{value:"在库",label:"在库"}),e($,{value:"出库",label:"出库"})]),_:1},8,["modelValue"])]),_:1}),e(d,null,{default:a(()=>[e(v,{type:"primary",loading:C.value,onClick:q},{default:a(()=>[...l[16]||(l[16]=[u("查询",-1)])]),_:1},8,["loading"])]),_:1})]),_:1}),ne((x(),J(E,{data:I.value,border:"",size:"small","empty-text":"暂无记录"},{default:a(()=>[e(i,{prop:"sn",label:"SN","min-width":"200"}),e(i,{prop:"materialCode",label:"物料编码","min-width":"140"}),e(i,{prop:"completedProcess",label:"已完成工序","min-width":"120"},{default:a(({row:t})=>[u(b(t.completedProcess||"-"),1)]),_:1}),e(i,{prop:"zoneCode",label:"区域",width:"90",align:"center"},{default:a(({row:t})=>[u(b(t.zoneCode||"-"),1)]),_:1}),e(i,{prop:"status",label:"状态",width:"90",align:"center"},{default:a(({row:t})=>[e(Q,{type:t.status==="在库"?"success":"info",size:"small"},{default:a(()=>[u(b(t.status),1)]),_:2},1032,["type"])]),_:1}),e(i,{prop:"orderNo",label:"工单号","min-width":"140"},{default:a(({row:t})=>[u(b(t.orderNo||"-"),1)]),_:1}),e(i,{label:"创建时间",width:"160",align:"center"},{default:a(({row:t})=>[u(b(V(se)(t.createdAt)),1)]),_:1})]),_:1},8,["data"])),[[Z,C.value]]),N("div",me,[e(W,{background:"",layout:"total, prev, pager, next",total:L.value,"current-page":f.current,"page-size":f.size,onCurrentChange:l[9]||(l[9]=t=>{f.current=t,U()})},null,8,["total","current-page","page-size"])])]),_:1})]),_:1})]),_:1}),e(ue,{data:V(de)},null,8,["data"])],64)}}},ge=ee(pe,[["__scopeId","data-v-4b96cb2e"]]);export{ge as default}; +import{_ as ee,i as le,I as te,c as H,a as e,w as a,p as V,F as T,h as p,r as s,J as ae,o as x,k as oe,D as J,e as O,H as B,d as N,f as u,t as b,K as ne,g as S,E as g}from"./index-BhhFt5Di.js";import{r as z}from"./request-By4ij0Lz.js";import{b as se}from"./format-C9Ok6skr.js";import{e as de,P as ue}from"./help-DfzkTHcJ.js";const re={style:{"margin-bottom":"8px"}},ie={style:{"margin-top":"12px"}},me={class:"pager"},pe={__name:"Semi",setup(ce){const D=p([]);le(async()=>{try{const o=await z.get("/material/list");D.value=Array.isArray(o)?o:(o==null?void 0:o.list)||[]}catch{}});const y=te(),n=S({materialCode:"",zoneCode:"",orderNo:"",completedProcess:""}),_=p(""),r=p([]),k=p(!1);function R(){for(let o of String(_.value).split(/\s+/)){const l=o.trim();l&&!r.value.includes(l)&&r.value.push(l)}_.value=""}function j(o){r.value.splice(o,1)}async function G(){if(!n.materialCode){g.warning("请选择物料");return}if(!r.value.length){g.warning("请扫码录入 SN(回车追加)");return}k.value=!0;let o=0;try{for(const l of r.value)try{await z.post("/semi/inbound",{sn:l,materialCode:n.materialCode,completedProcess:n.completedProcess.trim(),zoneCode:n.zoneCode||void 0,orderNo:n.orderNo.trim()||void 0,operator:y}),o++}catch{}g.success(`半成品入库完成:成功 ${o} / ${r.value.length} 条`),r.value=[],_.value=""}finally{k.value=!1}}const w=S({sn:""}),h=p(!1);async function P(){const o=w.sn.trim();if(!o){g.warning("请输入 SN");return}h.value=!0;try{await z.post("/semi/outbound",{sn:o,operator:y}),g.success(`半成品出库成功:${o}`),w.sn="",await U()}finally{h.value=!1}}const c=S({materialCode:"",status:""}),I=p([]),L=p(0),C=p(!1),f=S({current:1,size:10});async function U(){C.value=!0;try{const o=await z.get("/semi/query",{params:{materialCode:c.materialCode.trim(),status:c.status,page:f.current,pageSize:f.size}});I.value=(o==null?void 0:o.list)||[],L.value=(o==null?void 0:o.total)||0}finally{C.value=!1}}function q(){f.current=1,U()}return(o,l)=>{const $=s("el-option"),A=s("el-select"),d=s("el-form-item"),m=s("el-input"),F=s("el-form"),i=s("el-table-column"),v=s("el-button"),E=s("el-table"),K=s("el-tab-pane"),Q=s("el-tag"),W=s("el-pagination"),X=s("el-tabs"),Y=s("el-card"),Z=ae("loading");return x(),H(T,null,[e(Y,{shadow:"never"},{default:a(()=>[e(X,null,{default:a(()=>[e(K,{label:"半成品/成品入库"},{default:a(()=>[e(F,{"label-width":"110px",style:{"max-width":"680px"}},{default:a(()=>[e(d,{label:"物料"},{default:a(()=>[e(A,{modelValue:n.materialCode,"onUpdate:modelValue":l[0]||(l[0]=t=>n.materialCode=t),filterable:"",placeholder:"选择物料编码",style:{width:"100%"}},{default:a(()=>[(x(!0),H(T,null,oe(D.value,t=>(x(),J($,{key:t.id,value:t.code,label:`${t.code} ${t.name||""}`},null,8,["value","label"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(d,{label:"已完成工序"},{default:a(()=>[e(m,{modelValue:n.completedProcess,"onUpdate:modelValue":l[1]||(l[1]=t=>n.completedProcess=t),placeholder:"如:135(可空)",clearable:""},null,8,["modelValue"])]),_:1}),e(d,{label:"工单号"},{default:a(()=>[e(m,{modelValue:n.orderNo,"onUpdate:modelValue":l[2]||(l[2]=t=>n.orderNo=t),placeholder:"来源工单号(可空)",clearable:""},null,8,["modelValue"])]),_:1}),e(d,{label:"区域"},{default:a(()=>[e(m,{modelValue:n.zoneCode,"onUpdate:modelValue":l[3]||(l[3]=t=>n.zoneCode=t),placeholder:"库区(可空)",clearable:""},null,8,["modelValue"])]),_:1}),e(d,{label:"操作人"},{default:a(()=>[e(m,{"model-value":V(y),disabled:""},null,8,["model-value"])]),_:1}),e(d,{label:"扫码录入"},{default:a(()=>[e(m,{modelValue:_.value,"onUpdate:modelValue":l[4]||(l[4]=t=>_.value=t),type:"textarea",rows:3,autofocus:"",placeholder:"连续扫描 SN,每次回车追加(可一次多条,空白分隔)",onKeydown:O(B(R,["prevent"]),["enter"])},null,8,["modelValue","onKeydown"])]),_:1})]),_:1}),N("div",re,[l[10]||(l[10]=u("待入库 SN:",-1)),N("b",null,b(r.value.length),1),l[11]||(l[11]=u(" 条",-1))]),e(E,{data:r.value.map((t,M)=>({i:M,v:t})),size:"small",border:"","max-height":"260","empty-text":"暂无 SN",style:{"max-width":"760px"}},{default:a(()=>[e(i,{type:"index",label:"#",width:"56",align:"center"}),e(i,{prop:"v",label:"SN 序列号","min-width":"220"}),e(i,{label:"操作",width:"80",align:"center"},{default:a(({row:t})=>[e(v,{link:"",type:"danger",size:"small",onClick:M=>j(t.i)},{default:a(()=>[...l[12]||(l[12]=[u("移除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"]),N("div",ie,[e(v,{type:"primary",loading:k.value,onClick:G},{default:a(()=>[...l[13]||(l[13]=[u("提交入库",-1)])]),_:1},8,["loading"]),e(v,{onClick:l[5]||(l[5]=t=>r.value=[])},{default:a(()=>[...l[14]||(l[14]=[u("清空",-1)])]),_:1})])]),_:1}),e(K,{label:"半成品出库"},{default:a(()=>[e(F,{"label-width":"110px",style:{"max-width":"560px"},onSubmit:B(P,["prevent"])},{default:a(()=>[e(d,{label:"SN"},{default:a(()=>[e(m,{modelValue:w.sn,"onUpdate:modelValue":l[6]||(l[6]=t=>w.sn=t),placeholder:"扫描或输入 SN,回车出库",clearable:"",autofocus:"",onKeyup:O(P,["enter"])},null,8,["modelValue"])]),_:1}),e(d,{label:"操作人"},{default:a(()=>[e(m,{"model-value":V(y),disabled:""},null,8,["model-value"])]),_:1}),e(d,null,{default:a(()=>[e(v,{type:"primary",loading:h.value,onClick:P},{default:a(()=>[...l[15]||(l[15]=[u("出库(重上线)",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1}),e(K,{label:"半成品/成品查询"},{default:a(()=>[e(F,{inline:"",onSubmit:B(q,["prevent"])},{default:a(()=>[e(d,{label:"物料编码"},{default:a(()=>[e(m,{modelValue:c.materialCode,"onUpdate:modelValue":l[7]||(l[7]=t=>c.materialCode=t),placeholder:"物料编码",clearable:"",style:{width:"200px"}},null,8,["modelValue"])]),_:1}),e(d,{label:"状态"},{default:a(()=>[e(A,{modelValue:c.status,"onUpdate:modelValue":l[8]||(l[8]=t=>c.status=t),clearable:"",placeholder:"请选择状态",style:{width:"120px"}},{default:a(()=>[e($,{value:"在库",label:"在库"}),e($,{value:"出库",label:"出库"})]),_:1},8,["modelValue"])]),_:1}),e(d,null,{default:a(()=>[e(v,{type:"primary",loading:C.value,onClick:q},{default:a(()=>[...l[16]||(l[16]=[u("查询",-1)])]),_:1},8,["loading"])]),_:1})]),_:1}),ne((x(),J(E,{data:I.value,border:"",size:"small","empty-text":"暂无记录"},{default:a(()=>[e(i,{prop:"sn",label:"SN","min-width":"200"}),e(i,{prop:"materialCode",label:"物料编码","min-width":"140"}),e(i,{prop:"completedProcess",label:"已完成工序","min-width":"120"},{default:a(({row:t})=>[u(b(t.completedProcess||"-"),1)]),_:1}),e(i,{prop:"zoneCode",label:"区域",width:"90",align:"center"},{default:a(({row:t})=>[u(b(t.zoneCode||"-"),1)]),_:1}),e(i,{prop:"status",label:"状态",width:"90",align:"center"},{default:a(({row:t})=>[e(Q,{type:t.status==="在库"?"success":"info",size:"small"},{default:a(()=>[u(b(t.status),1)]),_:2},1032,["type"])]),_:1}),e(i,{prop:"orderNo",label:"工单号","min-width":"140"},{default:a(({row:t})=>[u(b(t.orderNo||"-"),1)]),_:1}),e(i,{label:"创建时间",width:"160",align:"center"},{default:a(({row:t})=>[u(b(V(se)(t.createdAt)),1)]),_:1})]),_:1},8,["data"])),[[Z,C.value]]),N("div",me,[e(W,{background:"",layout:"total, prev, pager, next",total:L.value,"current-page":f.current,"page-size":f.size,onCurrentChange:l[9]||(l[9]=t=>{f.current=t,U()})},null,8,["total","current-page","page-size"])])]),_:1})]),_:1})]),_:1}),e(ue,{data:V(de)},null,8,["data"])],64)}}},ge=ee(pe,[["__scopeId","data-v-4b96cb2e"]]);export{ge as default}; diff --git a/bj_power_wms_client/web/static/assets/Stocktake-YjnlyZRF.js b/bj_power_wms_client/web/static/assets/Stocktake-DnVN5m0F.js similarity index 97% rename from bj_power_wms_client/web/static/assets/Stocktake-YjnlyZRF.js rename to bj_power_wms_client/web/static/assets/Stocktake-DnVN5m0F.js index 9189dae..e91bad3 100644 --- a/bj_power_wms_client/web/static/assets/Stocktake-YjnlyZRF.js +++ b/bj_power_wms_client/web/static/assets/Stocktake-DnVN5m0F.js @@ -1 +1 @@ -import{_ as Y,I as Z,c as ee,d as B,a as e,w as t,D as A,l as E,p as Q,F as te,r as i,h as f,o as R,f as d,t as p,H as K,e as D,L as le,g as L,E as g,N as ae}from"./index-9NS-icag.js";import{r as V}from"./request-DS_8eNi1.js";import{b as M}from"./format-C9Ok6skr.js";import{d as oe,P as ne}from"./help-BMgMow4j.js";const se={__name:"Stocktake",setup(re){const U=Z(),I=f(!1),s=L({no:"",totalTargets:0});async function P(){I.value=!0;try{const o=await V.post("/stocktake/start",{operator:U});s.no=(o==null?void 0:o.stocktakeNo)||"",s.totalTargets=(o==null?void 0:o.totalTargets)||0,g.success(`盘点已发起:盘点单号 ${s.no},目标 ${s.totalTargets} 项`),await v()}finally{I.value=!1}}const _=L({targetId:"",scanQty:1}),N=f(!1),F=f(),b=f([]);async function x(){if(!s.no){g.warning("请先发起或填写盘点单号");return}const o=_.targetId.trim();if(!o){g.warning("请扫入目标编号(批次号或 SN)");return}const l=Number(_.scanQty);if(!Number.isInteger(l)||l<0){g.warning("实盘数量需为非负整数");return}N.value=!0;try{const n=await V.post("/stocktake/record",{stocktakeNo:s.no,targetId:o,scanQty:l}),h=b.value.findIndex(c=>c.targetId===(n==null?void 0:n.targetId)),u={targetId:(n==null?void 0:n.targetId)??o,bookQty:(n==null?void 0:n.bookQty)??"-",scannedQty:(n==null?void 0:n.scannedQty)??l,diffQty:(n==null?void 0:n.diffQty)??l-((n==null?void 0:n.bookQty)??0)};h>=0?b.value.splice(h,1,u):b.value.unshift(u),g.success(`已记录 ${u.targetId}:账面 ${u.bookQty},实盘 ${u.scannedQty},差异 ${u.diffQty}`),_.targetId="",ae(()=>{var c;return(c=F.value)==null?void 0:c.focus()})}finally{N.value=!1}}const k=f(!0),$=f(!1),m=f(null);async function G(){if(!s.no){g.warning("请先发起盘点");return}$.value=!0;try{const o=await V.post("/stocktake/finish",{stocktakeNo:s.no,adjust:k.value});m.value=o||{},g.success(`盘点完成:已盘 ${(o==null?void 0:o.counted)??0} 项,未盘 ${(o==null?void 0:o.uncounted)??0} 项`+(k.value?",差异已写回库存":"")),b.value=[],await v()}finally{$.value=!1}}const w=f(""),H=f([]),S=f(!1);async function v(){S.value=!0;try{const o={};w.value.trim()&&(o.stocktakeNo=w.value.trim());const l=await V.get("/stocktake/query",{params:o});H.value=(l==null?void 0:l.list)||[]}finally{S.value=!1}}return(o,l)=>{const n=i("el-descriptions-item"),h=i("el-descriptions"),u=i("el-button"),c=i("el-card"),J=i("el-switch"),y=i("el-form-item"),T=i("el-form"),j=i("el-col"),C=i("el-input"),O=i("el-input-number"),r=i("el-table-column"),z=i("el-table"),W=i("el-row"),X=i("el-alert"),q=i("el-tag");return R(),ee(te,null,[B("div",null,[e(W,{gutter:12},{default:t(()=>[e(j,{span:10},{default:t(()=>[e(c,{shadow:"never",class:"mb12",header:"发起盘点"},{default:t(()=>[e(h,{column:1,border:"",size:"small"},{default:t(()=>[e(n,{label:"操作人"},{default:t(()=>[d(p(Q(U)||"-"),1)]),_:1}),e(n,{label:"盘点单号"},{default:t(()=>[d(p(s.no||"未发起"),1)]),_:1}),e(n,{label:"目标数量"},{default:t(()=>[d(p(s.no?`${s.totalTargets} 项`:"-"),1)]),_:1})]),_:1}),e(u,{type:"primary",class:"mt12",loading:I.value,disabled:!!s.no&&!m.value,onClick:P},{default:t(()=>[...l[5]||(l[5]=[d(" 发起盘点(冻结库存快照) ",-1)])]),_:1},8,["loading","disabled"])]),_:1}),e(c,{shadow:"never",header:"完成盘点"},{default:t(()=>[e(T,{"label-width":"120px"},{default:t(()=>[e(y,{label:"差异写回库存"},{default:t(()=>[e(J,{modelValue:k.value,"onUpdate:modelValue":l[0]||(l[0]=a=>k.value=a)},null,8,["modelValue"]),l[6]||(l[6]=B("span",{class:"tip"},"开启后按实盘差异修正库存",-1))]),_:1}),e(y,null,{default:t(()=>[e(u,{type:"warning",loading:$.value,onClick:G},{default:t(()=>[...l[7]||(l[7]=[d("完成并生成差异",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1})]),_:1}),e(j,{span:14},{default:t(()=>[e(c,{shadow:"never",class:"mb12",header:"扫码快速盘点(回车即提交并清空)"},{default:t(()=>[s.no?E("",!0):(R(),A(C,{key:0,modelValue:s.no,"onUpdate:modelValue":l[1]||(l[1]=a=>s.no=a),placeholder:"也可粘贴已有进行中的盘点单号",clearable:""},{prepend:t(()=>[...l[8]||(l[8]=[d("盘点单号",-1)])]),_:1},8,["modelValue"])),e(T,{inline:"",onSubmit:K(x,["prevent"])},{default:t(()=>[e(y,{label:"目标编号"},{default:t(()=>[e(C,{ref_key:"idRef",ref:F,modelValue:_.targetId,"onUpdate:modelValue":l[2]||(l[2]=a=>_.targetId=a),clearable:"",autofocus:"",placeholder:"批次号 / SN",style:{width:"220px"},onKeyup:D(x,["enter"])},null,8,["modelValue"])]),_:1}),e(y,{label:"实盘数量"},{default:t(()=>[e(O,{modelValue:_.scanQty,"onUpdate:modelValue":l[3]||(l[3]=a=>_.scanQty=a),min:0,step:1,"step-strictly":"",style:{width:"120px"}},null,8,["modelValue"])]),_:1}),e(y,null,{default:t(()=>[e(u,{type:"primary",loading:N.value,onClick:x},{default:t(()=>[...l[9]||(l[9]=[d("提交",-1)])]),_:1},8,["loading"])]),_:1})]),_:1}),e(z,{data:b.value,border:"",size:"small","max-height":"300","empty-text":"尚无扫码记录"},{default:t(()=>[e(r,{prop:"targetId",label:"目标编号","min-width":"170"}),e(r,{prop:"bookQty",label:"账面数",width:"90",align:"center"}),e(r,{prop:"scannedQty",label:"实盘数",width:"90",align:"center"}),e(r,{label:"差异",width:"90",align:"center"},{default:t(({row:a})=>[B("span",{class:le({bad:a.diffQty!==0})},p(a.diffQty),3)]),_:1})]),_:1},8,["data"])]),_:1})]),_:1})]),_:1}),m.value?(R(),A(c,{key:0,shadow:"never",class:"mb12",header:"差异明细(diffs)"},{default:t(()=>[e(X,{type:"info",closable:!1,title:`盘点单 ${m.value.stocktakeNo}:已盘 ${m.value.counted} 项 / 未盘 ${m.value.uncounted} 项${m.value.adjusted?",差异已写回库存":""}`,style:{"margin-bottom":"10px"}},null,8,["title"]),e(z,{data:m.value.diffs||[],border:"",size:"small","empty-text":"无差异,账实相符"},{default:t(()=>[e(r,{prop:"targetId",label:"目标编号","min-width":"190"}),e(r,{prop:"type",label:"类型",width:"100",align:"center"},{default:t(({row:a})=>[d(p(a.type==="BATCH"?"批次":"SN"),1)]),_:1}),e(r,{prop:"bookQty",label:"账面数",width:"100",align:"center"}),e(r,{prop:"scannedQty",label:"实盘数",width:"100",align:"center"}),e(r,{prop:"diffQty",label:"差异",width:"100",align:"center"},{default:t(({row:a})=>[e(q,{type:a.diffQty>0?"success":"danger",size:"small"},{default:t(()=>[d(p(a.diffQty),1)]),_:2},1032,["type"])]),_:1})]),_:1},8,["data"])]),_:1})):E("",!0),e(c,{shadow:"never",header:"历史盘点单查询"},{default:t(()=>[e(T,{inline:"",onSubmit:K(v,["prevent"])},{default:t(()=>[e(y,{label:"盘点单号"},{default:t(()=>[e(C,{modelValue:w.value,"onUpdate:modelValue":l[4]||(l[4]=a=>w.value=a),placeholder:"留空查最近全部",clearable:"",style:{width:"240px"},onKeyup:D(v,["enter"])},null,8,["modelValue"])]),_:1}),e(y,null,{default:t(()=>[e(u,{type:"primary",loading:S.value,onClick:v},{default:t(()=>[...l[10]||(l[10]=[d("查询",-1)])]),_:1},8,["loading"])]),_:1})]),_:1}),e(z,{data:H.value,border:"",size:"small","empty-text":"暂无盘点记录"},{default:t(()=>[e(r,{prop:"stocktakeNo",label:"盘点单号","min-width":"200"}),e(r,{prop:"operator",label:"操作人",width:"110",align:"center"},{default:t(({row:a})=>[d(p(a.operator||"-"),1)]),_:1}),e(r,{prop:"totalTargets",label:"目标数",width:"90",align:"center"}),e(r,{label:"状态",width:"110",align:"center"},{default:t(({row:a})=>[e(q,{type:a.status==="已完成"?"success":"primary",size:"small"},{default:t(()=>[d(p(a.status),1)]),_:2},1032,["type"])]),_:1}),e(r,{label:"发起时间",width:"160",align:"center"},{default:t(({row:a})=>[d(p(Q(M)(a.createdAt)),1)]),_:1}),e(r,{label:"完成时间",width:"160",align:"center"},{default:t(({row:a})=>[d(p(Q(M)(a.finishedAt)),1)]),_:1})]),_:1},8,["data"])]),_:1})]),e(ne,{data:Q(oe)},null,8,["data"])],64)}}},fe=Y(se,[["__scopeId","data-v-bb344ff6"]]);export{fe as default}; +import{_ as Y,I as Z,c as ee,d as B,a as e,w as t,D as A,l as E,p as Q,F as te,r as i,h as f,o as R,f as d,t as p,H as K,e as D,L as le,g as L,E as g,N as ae}from"./index-BhhFt5Di.js";import{r as V}from"./request-By4ij0Lz.js";import{b as M}from"./format-C9Ok6skr.js";import{d as oe,P as ne}from"./help-DfzkTHcJ.js";const se={__name:"Stocktake",setup(re){const U=Z(),I=f(!1),s=L({no:"",totalTargets:0});async function P(){I.value=!0;try{const o=await V.post("/stocktake/start",{operator:U});s.no=(o==null?void 0:o.stocktakeNo)||"",s.totalTargets=(o==null?void 0:o.totalTargets)||0,g.success(`盘点已发起:盘点单号 ${s.no},目标 ${s.totalTargets} 项`),await v()}finally{I.value=!1}}const _=L({targetId:"",scanQty:1}),N=f(!1),F=f(),b=f([]);async function x(){if(!s.no){g.warning("请先发起或填写盘点单号");return}const o=_.targetId.trim();if(!o){g.warning("请扫入目标编号(批次号或 SN)");return}const l=Number(_.scanQty);if(!Number.isInteger(l)||l<0){g.warning("实盘数量需为非负整数");return}N.value=!0;try{const n=await V.post("/stocktake/record",{stocktakeNo:s.no,targetId:o,scanQty:l}),h=b.value.findIndex(c=>c.targetId===(n==null?void 0:n.targetId)),u={targetId:(n==null?void 0:n.targetId)??o,bookQty:(n==null?void 0:n.bookQty)??"-",scannedQty:(n==null?void 0:n.scannedQty)??l,diffQty:(n==null?void 0:n.diffQty)??l-((n==null?void 0:n.bookQty)??0)};h>=0?b.value.splice(h,1,u):b.value.unshift(u),g.success(`已记录 ${u.targetId}:账面 ${u.bookQty},实盘 ${u.scannedQty},差异 ${u.diffQty}`),_.targetId="",ae(()=>{var c;return(c=F.value)==null?void 0:c.focus()})}finally{N.value=!1}}const k=f(!0),$=f(!1),m=f(null);async function G(){if(!s.no){g.warning("请先发起盘点");return}$.value=!0;try{const o=await V.post("/stocktake/finish",{stocktakeNo:s.no,adjust:k.value});m.value=o||{},g.success(`盘点完成:已盘 ${(o==null?void 0:o.counted)??0} 项,未盘 ${(o==null?void 0:o.uncounted)??0} 项`+(k.value?",差异已写回库存":"")),b.value=[],await v()}finally{$.value=!1}}const w=f(""),H=f([]),S=f(!1);async function v(){S.value=!0;try{const o={};w.value.trim()&&(o.stocktakeNo=w.value.trim());const l=await V.get("/stocktake/query",{params:o});H.value=(l==null?void 0:l.list)||[]}finally{S.value=!1}}return(o,l)=>{const n=i("el-descriptions-item"),h=i("el-descriptions"),u=i("el-button"),c=i("el-card"),J=i("el-switch"),y=i("el-form-item"),T=i("el-form"),j=i("el-col"),C=i("el-input"),O=i("el-input-number"),r=i("el-table-column"),z=i("el-table"),W=i("el-row"),X=i("el-alert"),q=i("el-tag");return R(),ee(te,null,[B("div",null,[e(W,{gutter:12},{default:t(()=>[e(j,{span:10},{default:t(()=>[e(c,{shadow:"never",class:"mb12",header:"发起盘点"},{default:t(()=>[e(h,{column:1,border:"",size:"small"},{default:t(()=>[e(n,{label:"操作人"},{default:t(()=>[d(p(Q(U)||"-"),1)]),_:1}),e(n,{label:"盘点单号"},{default:t(()=>[d(p(s.no||"未发起"),1)]),_:1}),e(n,{label:"目标数量"},{default:t(()=>[d(p(s.no?`${s.totalTargets} 项`:"-"),1)]),_:1})]),_:1}),e(u,{type:"primary",class:"mt12",loading:I.value,disabled:!!s.no&&!m.value,onClick:P},{default:t(()=>[...l[5]||(l[5]=[d(" 发起盘点(冻结库存快照) ",-1)])]),_:1},8,["loading","disabled"])]),_:1}),e(c,{shadow:"never",header:"完成盘点"},{default:t(()=>[e(T,{"label-width":"120px"},{default:t(()=>[e(y,{label:"差异写回库存"},{default:t(()=>[e(J,{modelValue:k.value,"onUpdate:modelValue":l[0]||(l[0]=a=>k.value=a)},null,8,["modelValue"]),l[6]||(l[6]=B("span",{class:"tip"},"开启后按实盘差异修正库存",-1))]),_:1}),e(y,null,{default:t(()=>[e(u,{type:"warning",loading:$.value,onClick:G},{default:t(()=>[...l[7]||(l[7]=[d("完成并生成差异",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1})]),_:1}),e(j,{span:14},{default:t(()=>[e(c,{shadow:"never",class:"mb12",header:"扫码快速盘点(回车即提交并清空)"},{default:t(()=>[s.no?E("",!0):(R(),A(C,{key:0,modelValue:s.no,"onUpdate:modelValue":l[1]||(l[1]=a=>s.no=a),placeholder:"也可粘贴已有进行中的盘点单号",clearable:""},{prepend:t(()=>[...l[8]||(l[8]=[d("盘点单号",-1)])]),_:1},8,["modelValue"])),e(T,{inline:"",onSubmit:K(x,["prevent"])},{default:t(()=>[e(y,{label:"目标编号"},{default:t(()=>[e(C,{ref_key:"idRef",ref:F,modelValue:_.targetId,"onUpdate:modelValue":l[2]||(l[2]=a=>_.targetId=a),clearable:"",autofocus:"",placeholder:"批次号 / SN",style:{width:"220px"},onKeyup:D(x,["enter"])},null,8,["modelValue"])]),_:1}),e(y,{label:"实盘数量"},{default:t(()=>[e(O,{modelValue:_.scanQty,"onUpdate:modelValue":l[3]||(l[3]=a=>_.scanQty=a),min:0,step:1,"step-strictly":"",style:{width:"120px"}},null,8,["modelValue"])]),_:1}),e(y,null,{default:t(()=>[e(u,{type:"primary",loading:N.value,onClick:x},{default:t(()=>[...l[9]||(l[9]=[d("提交",-1)])]),_:1},8,["loading"])]),_:1})]),_:1}),e(z,{data:b.value,border:"",size:"small","max-height":"300","empty-text":"尚无扫码记录"},{default:t(()=>[e(r,{prop:"targetId",label:"目标编号","min-width":"170"}),e(r,{prop:"bookQty",label:"账面数",width:"90",align:"center"}),e(r,{prop:"scannedQty",label:"实盘数",width:"90",align:"center"}),e(r,{label:"差异",width:"90",align:"center"},{default:t(({row:a})=>[B("span",{class:le({bad:a.diffQty!==0})},p(a.diffQty),3)]),_:1})]),_:1},8,["data"])]),_:1})]),_:1})]),_:1}),m.value?(R(),A(c,{key:0,shadow:"never",class:"mb12",header:"差异明细(diffs)"},{default:t(()=>[e(X,{type:"info",closable:!1,title:`盘点单 ${m.value.stocktakeNo}:已盘 ${m.value.counted} 项 / 未盘 ${m.value.uncounted} 项${m.value.adjusted?",差异已写回库存":""}`,style:{"margin-bottom":"10px"}},null,8,["title"]),e(z,{data:m.value.diffs||[],border:"",size:"small","empty-text":"无差异,账实相符"},{default:t(()=>[e(r,{prop:"targetId",label:"目标编号","min-width":"190"}),e(r,{prop:"type",label:"类型",width:"100",align:"center"},{default:t(({row:a})=>[d(p(a.type==="BATCH"?"批次":"SN"),1)]),_:1}),e(r,{prop:"bookQty",label:"账面数",width:"100",align:"center"}),e(r,{prop:"scannedQty",label:"实盘数",width:"100",align:"center"}),e(r,{prop:"diffQty",label:"差异",width:"100",align:"center"},{default:t(({row:a})=>[e(q,{type:a.diffQty>0?"success":"danger",size:"small"},{default:t(()=>[d(p(a.diffQty),1)]),_:2},1032,["type"])]),_:1})]),_:1},8,["data"])]),_:1})):E("",!0),e(c,{shadow:"never",header:"历史盘点单查询"},{default:t(()=>[e(T,{inline:"",onSubmit:K(v,["prevent"])},{default:t(()=>[e(y,{label:"盘点单号"},{default:t(()=>[e(C,{modelValue:w.value,"onUpdate:modelValue":l[4]||(l[4]=a=>w.value=a),placeholder:"留空查最近全部",clearable:"",style:{width:"240px"},onKeyup:D(v,["enter"])},null,8,["modelValue"])]),_:1}),e(y,null,{default:t(()=>[e(u,{type:"primary",loading:S.value,onClick:v},{default:t(()=>[...l[10]||(l[10]=[d("查询",-1)])]),_:1},8,["loading"])]),_:1})]),_:1}),e(z,{data:H.value,border:"",size:"small","empty-text":"暂无盘点记录"},{default:t(()=>[e(r,{prop:"stocktakeNo",label:"盘点单号","min-width":"200"}),e(r,{prop:"operator",label:"操作人",width:"110",align:"center"},{default:t(({row:a})=>[d(p(a.operator||"-"),1)]),_:1}),e(r,{prop:"totalTargets",label:"目标数",width:"90",align:"center"}),e(r,{label:"状态",width:"110",align:"center"},{default:t(({row:a})=>[e(q,{type:a.status==="已完成"?"success":"primary",size:"small"},{default:t(()=>[d(p(a.status),1)]),_:2},1032,["type"])]),_:1}),e(r,{label:"发起时间",width:"160",align:"center"},{default:t(({row:a})=>[d(p(Q(M)(a.createdAt)),1)]),_:1}),e(r,{label:"完成时间",width:"160",align:"center"},{default:t(({row:a})=>[d(p(Q(M)(a.finishedAt)),1)]),_:1})]),_:1},8,["data"])]),_:1})]),e(ne,{data:Q(oe)},null,8,["data"])],64)}}},fe=Y(se,[["__scopeId","data-v-bb344ff6"]]);export{fe as default}; diff --git a/bj_power_wms_client/web/static/assets/help-BMgMow4j.js b/bj_power_wms_client/web/static/assets/help-BMgMow4j.js deleted file mode 100644 index ebe1304..0000000 --- a/bj_power_wms_client/web/static/assets/help-BMgMow4j.js +++ /dev/null @@ -1,6 +0,0 @@ -import{_ as y,o as l,c as t,a as d,w as f,f as n,d as e,t as o,l as m,F as v,k as h,D as b,r as p,h as x}from"./index-9NS-icag.js";const C={class:"page-help"},E={class:"ph-inner"},V={class:"ph-banner"},O={class:"ph-banner-title"},B={key:0,class:"ph-overview"},D={key:0,class:"ph-sec-title"},I={key:1,class:"ph-sec-overview"},M={class:"ph-fname"},T={class:"ph-fsource"},F={class:"ph-fpurpose"},P={class:"ph-ffill"},A={key:2,class:"ph-section"},H={class:"ph-fname"},K={class:"ph-fsource"},z={class:"ph-fpurpose"},L={class:"ph-ffill"},W={__name:"PageHelp",props:{data:{type:Object,default:()=>({title:"操作说明",overview:"",fields:[]})}},setup(i){const c=x(!1);function S(){c.value=!0}return(Z,a)=>{const _=p("el-button"),N=p("el-tooltip"),w=p("el-empty"),g=p("el-drawer");return l(),t("div",C,[d(N,{content:"本页操作说明",placement:"left"},{default:f(()=>[d(_,{class:"help-fab",circle:"",onClick:S},{default:f(()=>[...a[1]||(a[1]=[n("?",-1)])]),_:1})]),_:1}),d(g,{modelValue:c.value,"onUpdate:modelValue":a[0]||(a[0]=s=>c.value=s),title:i.data.title||"操作说明",size:"520px","append-to-body":"",class:"ph-drawer"},{default:f(()=>[e("div",E,[e("div",V,[e("div",O,o(i.data.title||"操作说明"),1),a[2]||(a[2]=e("div",{class:"ph-banner-sub"},"页面整体说明",-1))]),i.data.overview?(l(),t("div",B,o(i.data.overview),1)):m("",!0),a[3]||(a[3]=e("div",{class:"ph-legend"},[e("span",{class:"lg"},[e("i",{class:"ic lg-source"}),n("来源:这个字段从哪来、谁填")]),e("span",{class:"lg"},[e("i",{class:"ic lg-purpose"}),n("用途:它起什么作用")]),e("span",{class:"lg"},[e("i",{class:"ic lg-fill"}),n("怎么填:具体填什么")])],-1)),i.data.sections&&i.data.sections.length?(l(!0),t(v,{key:1},h(i.data.sections,(s,u)=>(l(),t("div",{key:u,class:"ph-section"},[s.title?(l(),t("div",D,o(s.title),1)):m("",!0),s.overview?(l(),t("div",I,o(s.overview),1)):m("",!0),(l(!0),t(v,null,h(s.fields,(r,k)=>(l(),t("div",{class:"ph-field",key:k},[e("div",M,[n(o(r.name)+" ",1),e("span",T,o(r.source),1)]),e("div",F,o(r.purpose),1),e("div",P,"👉 "+o(r.fill),1)]))),128))]))),128)):(l(),t("div",A,[i.data.fields&&i.data.fields.length?(l(!0),t(v,{key:0},h(i.data.fields,(s,u)=>(l(),t("div",{class:"ph-field",key:u},[e("div",H,[n(o(s.name)+" ",1),e("span",K,o(s.source),1)]),e("div",z,o(s.purpose),1),e("div",L,"👉 "+o(s.fill),1)]))),128)):(l(),b(w,{key:1,description:"暂无说明","image-size":70}))]))])]),_:1},8,["modelValue","title"])])}}},G=y(W,[["__scopeId","data-v-8a8f9cc9"]]),R={title:"入库",overview:`把来料记入 WMS 库存。按物料类型分两种方式: -· 结构件(螺丝/机加工件)→ 按【批次】入库,一进多件; -· 精密件(芯片/器件)→ 按【SN 序列号】逐件扫码入库,单件可追溯。 -入库先选“物料模板”,否则需要手工填大量信息;支持连续扫码与 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 后选择上传"}]}]},U={title:"出库(按工单领料)",overview:`仓库按工单台账为生产备料出库。系统强约束:单物料累计出库 ≤ 工单需求总量,超发走补料流程。 -可一次出完,也可分多次、分批由 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:"点按钮,系统自动算批次并二次确认"}]},q={title:"库存查询",overview:"查看当前库存:结构件按批次台账(数量/锁定/区域),精密件按 SN 序列号(状态/区域)。",fields:[{name:"物料编码",source:"筛选条件",purpose:"只看某物料",fill:"输入编码,可空=全部"},{name:"库存类型",source:"单选",purpose:"看批次还是看 SN 序列",fill:"全部 / 批次 / SN 序列"},{name:"关键字",source:"筛选条件",purpose:"按批次号/物料名称/SN 模糊过滤",fill:"输入关键字,可空"}]},J={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:"每行一个编号"}]},Q={title:"盘点",overview:`核对账面与实际库存,支持扫码快速盘点,完成时按差异修正库存。 -步骤:发起盘点(冻结快照)→ 扫码录入实盘数(入库)→ 完成并生成差异(可选:差异写回库存)。`,fields:[{name:"操作人",source:"登录账号",purpose:"发起盘点人",fill:"自动"},{name:"发起盘点",source:"按钮",purpose:"冻结当前库存快照,生成盘点单",fill:"点按钮发起"},{name:"差异写回库存",source:"开关",purpose:"完成后是否用实盘差异修正库存",fill:"开启=写回,关闭=仅记录差异"},{name:"目标编号",source:"扫码枪",purpose:"要盘点的批次号或 SN",fill:"扫批次号/SN,回车提交"},{name:"实盘数量",source:"扫码/手输",purpose:"实际数到的数量",fill:"非负整数;0 表示盘亏为零"}]},X={title:"包装绑定(箱号 ↔ SN)",overview:"把若干精密件 SN 绑定到一个箱号,形成包装箱。用于发货/入库整箱追溯。",fields:[{name:"箱号",source:"扫码/手输",purpose:"包装箱唯一号",fill:"扫描或手输箱号"},{name:"物料",source:"下拉选择(可空)",purpose:"箱内物料类型",fill:"可选"},{name:"操作人",source:"登录账号",purpose:"绑定人",fill:"自动"},{name:"SN 录入",source:"扫码枪连续扫码",purpose:"装箱的 SN 序列号清单",fill:"扫入 SN 回车追加"}]},Y={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,回车出库"}]}]},$={title:"工单物料台账",overview:"实时展示每个物料:需求总量、累计已出库、剩余缺口。系统强约束累计出库 ≤ 需求总量,达到即“领料完结”。",fields:[{name:"工单号",source:"输入",purpose:"查看哪个工单的领料台账",fill:"输入工单号查询"}]};export{G as P,U as a,q as b,J as c,Q as d,Y as e,X as f,$ as g,R as h}; diff --git a/bj_power_wms_client/web/static/assets/help-BzPC6_2h.css b/bj_power_wms_client/web/static/assets/help-BzPC6_2h.css new file mode 100644 index 0000000..97075b3 --- /dev/null +++ b/bj_power_wms_client/web/static/assets/help-BzPC6_2h.css @@ -0,0 +1 @@ +.page-help[data-v-e02e7155]{position:fixed;left:18px;bottom:18px;z-index:2050}.help-fab[data-v-e02e7155]{width:42px;height:42px;background:#1668dc;color:#fff;font-weight:700;font-size:20px;box-shadow:0 3px 10px #16324f4d;transition:transform .15s}.help-fab[data-v-e02e7155]:hover{background:#0e57c3;transform:scale(1.06)}.ph-inner[data-v-e02e7155]{padding:0 6px 24px}.ph-banner[data-v-e02e7155]{background:linear-gradient(120deg,#1668dc,#3a98f0);color:#fff;border-radius:10px;padding:16px 18px;margin-bottom:16px}.ph-banner-title[data-v-e02e7155]{font-size:20px;font-weight:700}.ph-banner-sub[data-v-e02e7155]{font-size:12px;opacity:.85;margin-top:4px}.ph-overview[data-v-e02e7155]{color:#3f536e;line-height:1.8;font-size:14px;margin-bottom:16px;background:#f4f7fb;border:1px solid #e4ecf5;border-radius:8px;padding:12px 14px;white-space:pre-line}.ph-legend[data-v-e02e7155]{display:flex;flex-wrap:wrap;gap:12px 16px;margin-bottom:16px;padding:10px 14px;background:#fafbfc;border:1px dashed #d9e0e8;border-radius:8px;font-size:12px;color:#6b7785}.ph-legend .lg[data-v-e02e7155]{display:inline-flex;align-items:center;gap:6px}.ph-legend .ic[data-v-e02e7155]{display:inline-block;width:10px;height:10px;border-radius:3px}.lg-source[data-v-e02e7155]{background:#8fa5f5}.lg-purpose[data-v-e02e7155]{background:#22b07d}.lg-fill[data-v-e02e7155]{background:#f5a623}.ph-section[data-v-e02e7155]{margin-bottom:18px}.ph-sec-title[data-v-e02e7155]{font-size:15px;font-weight:700;color:#1b2a3a;margin:0 0 4px;padding-left:10px;border-left:4px solid #1668dc;line-height:1.4}.ph-sec-overview[data-v-e02e7155]{color:#7a8694;font-size:13px;margin:4px 0 10px;line-height:1.7}.ph-field[data-v-e02e7155]{background:#fff;border:1px solid #eef1f6;border-radius:8px;padding:10px 14px;margin-bottom:8px}.ph-fname[data-v-e02e7155]{display:flex;align-items:center;gap:8px;font-weight:700;color:#1b2a3a;font-size:14px}.ph-fsource[data-v-e02e7155]{font-weight:400;font-size:11px;color:#1668dc;background:#e8f1ff;border-radius:4px;padding:1px 8px}.ph-fpurpose[data-v-e02e7155]{color:#22b07d;font-size:13px;line-height:1.6;margin-top:6px}.ph-fpurpose[data-v-e02e7155]:before{content:"用途:";font-weight:600;color:#1b8d63}.ph-ffill[data-v-e02e7155]{color:#8a5b00;font-size:13px;line-height:1.6;margin-top:4px}.ph-ffill[data-v-e02e7155]:before{content:"怎么填:";font-weight:600;color:#8a5b00} diff --git a/bj_power_wms_client/web/static/assets/help-CwFORLjJ.css b/bj_power_wms_client/web/static/assets/help-CwFORLjJ.css deleted file mode 100644 index 78d82af..0000000 --- a/bj_power_wms_client/web/static/assets/help-CwFORLjJ.css +++ /dev/null @@ -1 +0,0 @@ -.page-help[data-v-8a8f9cc9]{position:fixed;left:18px;bottom:18px;z-index:2050}.help-fab[data-v-8a8f9cc9]{width:42px;height:42px;background:#1668dc;color:#fff;font-weight:700;font-size:20px;box-shadow:0 3px 10px #16324f4d;transition:transform .15s}.help-fab[data-v-8a8f9cc9]:hover{background:#0e57c3;transform:scale(1.06)}.ph-inner[data-v-8a8f9cc9]{padding:0 6px 24px}.ph-banner[data-v-8a8f9cc9]{background:linear-gradient(120deg,#1668dc,#3a98f0);color:#fff;border-radius:10px;padding:16px 18px;margin-bottom:16px}.ph-banner-title[data-v-8a8f9cc9]{font-size:20px;font-weight:700}.ph-banner-sub[data-v-8a8f9cc9]{font-size:12px;opacity:.85;margin-top:4px}.ph-overview[data-v-8a8f9cc9]{color:#3f536e;line-height:1.8;font-size:14px;margin-bottom:16px;background:#f4f7fb;border:1px solid #e4ecf5;border-radius:8px;padding:12px 14px;white-space:pre-line}.ph-legend[data-v-8a8f9cc9]{display:flex;flex-wrap:wrap;gap:12px 16px;margin-bottom:16px;padding:10px 14px;background:#fafbfc;border:1px dashed #d9e0e8;border-radius:8px;font-size:12px;color:#6b7785}.ph-legend .lg[data-v-8a8f9cc9]{display:inline-flex;align-items:center;gap:6px}.ph-legend .ic[data-v-8a8f9cc9]{display:inline-block;width:10px;height:10px;border-radius:3px}.lg-source[data-v-8a8f9cc9]{background:#8fa5f5}.lg-purpose[data-v-8a8f9cc9]{background:#22b07d}.lg-fill[data-v-8a8f9cc9]{background:#f5a623}.ph-section[data-v-8a8f9cc9]{margin-bottom:18px}.ph-sec-title[data-v-8a8f9cc9]{font-size:15px;font-weight:700;color:#1b2a3a;margin:0 0 4px;padding-left:10px;border-left:4px solid #1668dc;line-height:1.4}.ph-sec-overview[data-v-8a8f9cc9]{color:#7a8694;font-size:13px;margin:4px 0 10px;line-height:1.7}.ph-field[data-v-8a8f9cc9]{background:#fff;border:1px solid #eef1f6;border-radius:8px;padding:10px 14px;margin-bottom:8px}.ph-fname[data-v-8a8f9cc9]{display:flex;align-items:center;gap:8px;font-weight:700;color:#1b2a3a;font-size:14px}.ph-fsource[data-v-8a8f9cc9]{font-weight:400;font-size:11px;color:#1668dc;background:#e8f1ff;border-radius:4px;padding:1px 8px}.ph-fpurpose[data-v-8a8f9cc9]{color:#22b07d;font-size:13px;line-height:1.6;margin-top:6px}.ph-fpurpose[data-v-8a8f9cc9]:before{content:"用途:";font-weight:600;color:#1b8d63}.ph-ffill[data-v-8a8f9cc9]{color:#8a5b00;font-size:13px;line-height:1.6;margin-top:4px}.ph-ffill[data-v-8a8f9cc9]:before{content:"怎么填:";font-weight:600;color:#8a5b00} diff --git a/bj_power_wms_client/web/static/assets/help-DfzkTHcJ.js b/bj_power_wms_client/web/static/assets/help-DfzkTHcJ.js new file mode 100644 index 0000000..fc5824c --- /dev/null +++ b/bj_power_wms_client/web/static/assets/help-DfzkTHcJ.js @@ -0,0 +1,19 @@ +import{_ as b,o,c as i,a as f,w as v,f as n,d as e,t,l as r,F as m,k as h,D as y,r as p,h as E}from"./index-BhhFt5Di.js";const M={class:"page-help"},x={class:"ph-inner"},C={class:"ph-banner"},O={class:"ph-banner-title"},V={key:0,class:"ph-overview"},Z={key:1,class:"ph-section"},F={class:"ph-fname"},I={class:"ph-fsource"},B={class:"ph-fpurpose"},D={class:"ph-ffill"},T={key:0,class:"ph-sec-title"},H={key:1,class:"ph-sec-overview"},P={class:"ph-fname"},W={class:"ph-fsource"},A={class:"ph-fpurpose"},K={class:"ph-ffill"},z={__name:"PageHelp",props:{data:{type:Object,default:()=>({title:"操作说明",overview:"",fields:[]})}},setup(s){const u=E(!1);function S(){u.value=!0}return(G,a)=>{const N=p("el-button"),w=p("el-tooltip"),_=p("el-empty"),g=p("el-drawer");return o(),i("div",M,[f(w,{content:"本页操作说明",placement:"left"},{default:v(()=>[f(N,{class:"help-fab",circle:"",onClick:S},{default:v(()=>[...a[1]||(a[1]=[n("?",-1)])]),_:1})]),_:1}),f(g,{modelValue:u.value,"onUpdate:modelValue":a[0]||(a[0]=l=>u.value=l),title:s.data.title||"操作说明",size:"520px","append-to-body":"",class:"ph-drawer"},{default:v(()=>[e("div",x,[e("div",C,[e("div",O,t(s.data.title||"操作说明"),1),a[2]||(a[2]=e("div",{class:"ph-banner-sub"},"页面整体说明",-1))]),s.data.overview?(o(),i("div",V,t(s.data.overview),1)):r("",!0),a[3]||(a[3]=e("div",{class:"ph-legend"},[e("span",{class:"lg"},[e("i",{class:"ic lg-source"}),n("来源:这个字段从哪来、谁填")]),e("span",{class:"lg"},[e("i",{class:"ic lg-purpose"}),n("用途:它起什么作用")]),e("span",{class:"lg"},[e("i",{class:"ic lg-fill"}),n("怎么填:具体填什么")])],-1)),s.data.fields&&s.data.fields.length?(o(),i("div",Z,[(o(!0),i(m,null,h(s.data.fields,(l,d)=>(o(),i("div",{class:"ph-field",key:"top"+d},[e("div",F,[n(t(l.name)+" ",1),e("span",I,t(l.source),1)]),e("div",B,t(l.purpose),1),e("div",D,"👉 "+t(l.fill),1)]))),128))])):r("",!0),s.data.sections&&s.data.sections.length?(o(!0),i(m,{key:2},h(s.data.sections,(l,d)=>(o(),i("div",{key:d,class:"ph-section"},[l.title?(o(),i("div",T,t(l.title),1)):r("",!0),l.overview?(o(),i("div",H,t(l.overview),1)):r("",!0),(o(!0),i(m,null,h(l.fields,(c,k)=>(o(),i("div",{class:"ph-field",key:k},[e("div",P,[n(t(c.name)+" ",1),e("span",W,t(c.source),1)]),e("div",A,t(c.purpose),1),e("div",K,"👉 "+t(c.fill),1)]))),128))]))),128)):r("",!0),!s.data.fields&&!(s.data.sections&&s.data.sections.length)?(o(),y(_,{key:3,description:"暂无说明","image-size":70})):r("",!0)])]),_:1},8,["modelValue","title"])])}}},j=b(z,[["__scopeId","data-v-e02e7155"]]),R={title:"入库(来料入账)",overview:`把到货的来料记入 WMS 库存。按物料类型分两种入库方式: +· 结构件(螺丝/机加工件) → 按【批次】入库,一批多件; +· 精密件(芯片/器件) → 按【SN 序列号】逐件扫码,可单件追溯。 + +物料类型由 WMS 的"物料档案"决定(精密件/结构件),入库方式随之自动给出。 +入库是整个库存链路的第一环:入库(Held) → 质量检验(合格Z02) → 之后才能被出库锁定。`,sections:[{title:"Tab1 结构件入库(按批次)",overview:"适用于螺丝、机加工件等标准件,一次到货入一批。",fields:[{name:"物料",source:'下拉选择。数据来自 WMS"物料档案"里类型为"结构件"的物料。',purpose:"入库的是什么物料;档案里必须存在才能选到",fill:"选择物料编码,如 SCREW-M3;选不到=还没建该物料档案"},{name:"批次号",source:"留空系统自动生成(日期+序号);也可手工填。",purpose:"区别不同到货批次,实现先进先出(FIFO)",fill:"默认留空自动生成;供应商自带批号时可手填"},{name:"数量",source:"手工填写整数。",purpose:"本批到货数量",fill:"整数 ≥1"},{name:"区域",source:"下拉选择。数据来自库区字典。",purpose:"放到哪个库区(待检/合格/不合格…)",fill:'新到货一般先放"待检"区,检验合格后再转"合格"区(Z02)'},{name:"生产日期",source:"手动选择日期。",purpose:"生产时间,用于时效和批次管理",fill:"选择日期"},{name:"供应商",source:"手工填写。",purpose:"来料来源",fill:"供应商名称,可空"}]},{title:"Tab2 精密件 SN 入库(逐件)",overview:"适用于芯片、器件等需要单件追溯的来料,一件一个 SN。",fields:[{name:"物料",source:'下拉选择。来自"物料档案"类型为"精密件"的物料。',purpose:"入库的精密件物料",fill:"选择物料编码"},{name:"区域",source:"下拉选择。来自库区字典。",purpose:"放到哪个库区",fill:"可选,空则默认待检区"},{name:"扫码录入",source:"扫码枪连续扫码。来自每颗器件自带的 SN 条码。",purpose:"逐件登记 SN,实现单件追溯",fill:"扫入/粘贴 SN 后回车追加,可一次连续多条"}]},{title:"Tab3 Excel 批量导入",overview:"用于大批量结构件入库。列头顺序(首行忽略):物料编码 | 批次号(空自动生成) | 数量 | 生产日期 | 供应商 | 区域。",fields:[{name:"文件",source:"选择本地 .xlsx 文件。",purpose:"批量导入的物料清单",fill:"按列头顺序准备好 Excel,选择上传"}]}]},U={title:"出库(按工单领料)",overview:`仓库按工单台账为生产备料出库。系统强约束:单物料累计出库 ≤ 工单需求总量,超发走补料流程。 +可一次出完,也可分多次、分批由 AGV 配送到各 DOCK(配送节奏由仓库决定)。 + +前置条件:必须先有"工单物料台账"(GOMES 工单+物料清单导入),且该物料在【合格区Z02】有足够库存。`,fields:[{name:"工单号",source:"手动输入。数据来自 MES 已建的工单及导入的物料台账。",purpose:"出库挂靠的工单,决定可领料总量与需求缺口",fill:"输入工单号回车,查询该工单的物料台账"},{name:"操作人",source:"登录账号自动带出。",purpose:"本次出库执行人,追溯用",fill:"自动,无需填"},{name:"目标工位",source:"手动填写。",purpose:"本次配送送达的接驳台/DOCK",fill:"如 DOCK-A,可空"},{name:"一键分配出库",source:"系统自动按 FIFO 分配。数据来自合格区Z02的批次库存。",purpose:"从合格区按先进先出凑够缺口并出库",fill:"点按钮,系统自动算批次并二次确认"}]},q={title:"库存查询",overview:`查看当前库存:结构件按批次台账(数量/锁定/区域),精密件按 SN 序列号(状态/区域)。 +数据由入库、出库、盘点等业务实时维护,本页只读查询。`,fields:[{name:"物料编码",source:"筛选条件。",purpose:"只看某物料",fill:"输入编码,可空=全部"},{name:"库存类型",source:"单选。",purpose:"看批次台账还是 SN 序列",fill:"全部 / 批次 / SN 序列"},{name:"关键字",source:"筛选条件。",purpose:"按批次号/物料名称/SN 模糊过滤",fill:"输入关键字,可空"}]},J={title:"质量检验(来料检)",overview:`对入库的未检物料/SN 做检验:把"未检"翻转为【合格】或【不合格】。 +合格后才能被出库锁定(出库自动分配只取合格区Z02)。 + +数据链路:入库(状态=未检) → 本页检验翻转 → 合格Z02 / 不合格隔离。`,fields:[{name:"目标类型",source:"单选。",purpose:"检验对象是批次还是 SN",fill:"批次 BATCH / 序列号 SN"},{name:"检验结论",source:"单选。",purpose:"判定结果",fill:"合格 / 不合格"},{name:"检验员",source:"手动填写(默认当前用户)。",purpose:"谁检验的,追溯用",fill:"检验员姓名"},{name:"扫码输入",source:"扫码枪。来自批次号/SN条码。",purpose:"单个待检目标编号",fill:"扫批次号或 SN,回车提交"},{name:"批量编号",source:"扫码枪连续录入。",purpose:"一次性翻转多个目标的检验状态",fill:"每行一个编号"}]},Q={title:"盘点(库存核对)",overview:`核对账面与实际库存,支持扫码快速盘点,完成时按差异修正库存。 +流程:发起盘点(冻结快照) → 扫码录入实盘数(入库) → 完成并生成差异(可选:差异写回库存)。`,fields:[{name:"操作人",source:"登录账号自动带出。",purpose:"发起盘点人",fill:"自动"},{name:"发起盘点",source:"按钮操作。",purpose:"冻结当前库存快照,生成盘点单",fill:"点按钮发起"},{name:"差异写回库存",source:"开关。",purpose:"完成后是否用实盘差异修正账面库存",fill:"开=写回;关=仅记录差异"},{name:"目标编号",source:"扫码枪。来自批次号/SN条码。",purpose:"要盘点的批次号或 SN",fill:"扫批次号/SN,回车提交"},{name:"实盘数量",source:"扫码/手输。",purpose:"实际数到数量",fill:"非负整数;0=盘亏为零"}]},X={title:"包装绑定(箱号 ↔ SN)",overview:`把若干精密件 SN 绑定到一个箱号,形成包装箱,用于发货/入库整箱追溯。 +数据链路:拣选出的 SN → 绑到箱号 → 一个箱号代表一箱货。`,fields:[{name:"箱号",source:"扫码/手输。",purpose:"包装箱唯一号",fill:"扫描或手输箱号"},{name:"物料",source:"下拉选择(可空)。来自物料档案。",purpose:"箱内物料类型",fill:"可选"},{name:"操作人",source:"登录账号自动带出。",purpose:"绑定人",fill:"自动"},{name:"SN 录入",source:"扫码枪连续扫码。来自器件 SN 条码。",purpose:"装箱的 SN 清单",fill:"扫入 SN 回车追加"}]},Y={title:"半成品/成品(流转)",overview:`产线工位"暂存/退回"的半成品或完工成品可在此入库(记录已完成工序),需要时再出库(重上线),MES 从下一工序继续。 + +半成品生命周期:工位暂存退库 → 本页入库(记已完成工序) → 需要时本页出库→ MES 下发下一工序 → 工位继续装配。`,sections:[{title:"半成品/成品入库",overview:"把产线退回的半成品或成品收进库房。",fields:[{name:"物料",source:"下拉选择。来自物料档案。",purpose:"入库物料",fill:"选择物料编码"},{name:"已完成工序",source:'自动带出/手工填写。数据来自工位终端的"已完成工序"上报。',purpose:"该件做到第几道工序,重上线时 MES 从这里继续",fill:"如 135,可空"},{name:"工单号",source:"自动带出/手工填写。来自工单。",purpose:"来源工单",fill:"输入工单号"},{name:"区域",source:"手动填写(可空)。",purpose:"存放库区",fill:"如 Z05"},{name:"扫码录入",source:"扫码枪连续扫码。来自工件 SN 条码。",purpose:"半成品 SN 清单",fill:"扫入 SN 回车追加"}]},{title:"半成品出库(重上线)",overview:"把半成品重新送上线,MES 会从记录的下一个工序继续。",fields:[{name:"SN",source:"扫码枪/手输。来自工件 SN 条码。",purpose:"要重上线的半成品 SN",fill:"扫描或输入 SN,回车出库"}]}]},$={title:"工单物料台账",overview:`实时展示每个物料:需求总量、累计已出库、剩余缺口。 +系统强约束累计出库 ≤ 需求总量,达到即"领料完结"。 +数据链路:MES 工单+物料清单 → 导入本台账 → 出库时自动扣减累计,形成缺口/完结。`,fields:[{name:"工单号",source:"手动输入。来自 MES 工单。",purpose:"查看哪个工单的领料台账",fill:"输入工单号查询"}]};export{j as P,U as a,q as b,J as c,Q as d,Y as e,X as f,$ as g,R as h}; diff --git a/bj_power_wms_client/web/static/assets/index-9NS-icag.js b/bj_power_wms_client/web/static/assets/index-BhhFt5Di.js similarity index 99% rename from bj_power_wms_client/web/static/assets/index-9NS-icag.js rename to bj_power_wms_client/web/static/assets/index-BhhFt5Di.js index 1c0326c..0e6c210 100644 --- a/bj_power_wms_client/web/static/assets/index-9NS-icag.js +++ b/bj_power_wms_client/web/static/assets/index-BhhFt5Di.js @@ -1,4 +1,4 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Login-CiXa7TLP.js","assets/request-DS_8eNi1.js","assets/Login-D0W7JLqT.css","assets/Display-6wuJI2Dp.js","assets/format-C9Ok6skr.js","assets/Display-ccz4Kw-A.css","assets/Dashboard-DneNlEpi.js","assets/Dashboard-CJqrDwvu.css","assets/Inbound-BOLxl4Lt.js","assets/help-BMgMow4j.js","assets/help-CwFORLjJ.css","assets/Inbound-9MdMdmX-.css","assets/Outbound-BGRoJuha.js","assets/Outbound-Bcbt3L9J.css","assets/Inventory-DLOSwwgi.js","assets/Inventory-BtjZn9Ke.css","assets/Inspection-Cp7Ilzqc.js","assets/Inspection-WwcR1XJI.css","assets/Stocktake-YjnlyZRF.js","assets/Stocktake-BJLe-mKx.css","assets/Semi-Bs9UASrg.js","assets/Semi-BcICmEje.css","assets/Package-CiuyXcgR.js","assets/Package-CmQHPCYe.css","assets/Ledger-Dx4pgeep.js","assets/Ledger-CEwxB9t_.css"])))=>i.map(i=>d[i]); +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Login-BWT5U0wo.js","assets/request-By4ij0Lz.js","assets/Login-D0W7JLqT.css","assets/Display-BLVWdPLV.js","assets/format-C9Ok6skr.js","assets/Display-ccz4Kw-A.css","assets/Dashboard-DlINI6qy.js","assets/Dashboard-CJqrDwvu.css","assets/Inbound-DGRjaxp8.js","assets/help-DfzkTHcJ.js","assets/help-BzPC6_2h.css","assets/Inbound-9MdMdmX-.css","assets/Outbound-DvjCYsMG.js","assets/Outbound-Bcbt3L9J.css","assets/Inventory-WA97rYQY.js","assets/Inventory-BtjZn9Ke.css","assets/Inspection-DDPsjS2O.js","assets/Inspection-WwcR1XJI.css","assets/Stocktake-DnVN5m0F.js","assets/Stocktake-BJLe-mKx.css","assets/Semi-BvYUqYU7.js","assets/Semi-BcICmEje.css","assets/Package-J77JJef_.js","assets/Package-CmQHPCYe.css","assets/Ledger-53K6Smgj.js","assets/Ledger-CEwxB9t_.css"])))=>i.map(i=>d[i]); (function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))a(l);new MutationObserver(l=>{for(const o of l)if(o.type==="childList")for(const s of o.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&a(s)}).observe(document,{childList:!0,subtree:!0});function n(l){const o={};return l.integrity&&(o.integrity=l.integrity),l.referrerPolicy&&(o.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?o.credentials="include":l.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function a(l){if(l.ep)return;l.ep=!0;const o=n(l);fetch(l.href,o)}})();/** * @vue/shared v3.5.42 * (c) 2018-present Yuxi (Evan) You and Vue contributors @@ -86,4 +86,4 @@ usage: app.provide(ZINDEX_INJECTION_KEY, { current: 0 })`),{initialZIndex:a,curr * vue-router v4.6.4 * (c) 2025 Eduardo San Martin Morote * @license MIT - */let DQ=()=>location.protocol+"//"+location.host;function lx(e,t){const{pathname:n,search:a,hash:l}=t,o=e.indexOf("#");if(o>-1){let s=l.includes(e.slice(o))?e.slice(o).length:1,r=l.slice(s);return r[0]!=="/"&&(r="/"+r),F0(r,"")}return F0(n,e)+a+l}function VQ(e,t,n,a){let l=[],o=[],s=null;const r=({state:p})=>{const m=lx(e,location),h=n.value,v=t.value;let g=0;if(p){if(n.value=m,t.value=p,s&&s===h){s=null;return}g=v?p.position-v.position:0}else a(m);l.forEach(y=>{y(n.value,h,{delta:g,type:Lv.pop,direction:g?g>0?hp.forward:hp.back:hp.unknown})})};function u(){s=n.value}function c(p){l.push(p);const m=()=>{const h=l.indexOf(p);h>-1&&l.splice(h,1)};return o.push(m),m}function d(){if(document.visibilityState==="hidden"){const{history:p}=window;if(!p.state)return;p.replaceState(rn({},p.state,{scroll:mf()}),"")}}function f(){for(const p of o)p();o=[],window.removeEventListener("popstate",r),window.removeEventListener("pagehide",d),document.removeEventListener("visibilitychange",d)}return window.addEventListener("popstate",r),window.addEventListener("pagehide",d),document.addEventListener("visibilitychange",d),{pauseListeners:u,listen:c,destroy:f}}function j0(e,t,n,a=!1,l=!1){return{back:e,current:t,forward:n,replaced:a,position:window.history.length,scroll:l?mf():null}}function BQ(e){const{history:t,location:n}=window,a={value:lx(e,n)},l={value:t.state};l.value||o(a.value,{back:null,current:a.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function o(u,c,d){const f=e.indexOf("#"),p=f>-1?(n.host&&document.querySelector("base")?e:e.slice(f))+u:DQ()+e+u;try{t[d?"replaceState":"pushState"](c,"",p),l.value=c}catch(m){console.error(m),n[d?"replace":"assign"](p)}}function s(u,c){o(u,rn({},t.state,j0(l.value.back,u,l.value.forward,!0),c,{position:l.value.position}),!0),a.value=u}function r(u,c){const d=rn({},l.value,t.state,{forward:u,scroll:mf()});o(d.current,d,!0),o(u,rn({},j0(a.value,u,null),{position:d.position+1},c),!1),a.value=u}return{location:a,state:l,push:r,replace:s}}function FQ(e){e=kQ(e);const t=BQ(e),n=VQ(e,t.state,t.location,t.replace);function a(o,s=!0){s||n.pauseListeners(),history.go(o)}const l=rn({location:"",base:e,go:a,createHref:xQ.bind(null,e)},t,n);return Object.defineProperty(l,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(l,"state",{enumerable:!0,get:()=>t.state.value}),l}let ps=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({});var Hn=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(Hn||{});const zQ={type:ps.Static,value:""},HQ=/[a-zA-Z0-9_]/;function KQ(e){if(!e)return[[]];if(e==="/")return[[zQ]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(m){throw new Error(`ERR (${n})/"${c}": ${m}`)}let n=Hn.Static,a=n;const l=[];let o;function s(){o&&l.push(o),o=[]}let r=0,u,c="",d="";function f(){c&&(n===Hn.Static?o.push({type:ps.Static,value:c}):n===Hn.Param||n===Hn.ParamRegExp||n===Hn.ParamRegExpEnd?(o.length>1&&(u==="*"||u==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),o.push({type:ps.Param,value:c,regexp:d,repeatable:u==="*"||u==="+",optional:u==="*"||u==="?"})):t("Invalid state to consume buffer"),c="")}function p(){c+=u}for(;rt.length?t.length===1&&t[0]===pa.Static+pa.Segment?1:-1:0}function ox(e,t){let n=0;const a=e.score,l=t.score;for(;n0&&t[t.length-1]<0}const UQ={strict:!1,end:!0,sensitive:!1};function GQ(e,t,n){const a=qQ(KQ(e.path),n),l=rn(a,{record:e,parent:t,children:[],alias:[]});return t&&!l.record.aliasOf==!t.record.aliasOf&&t.children.push(l),l}function XQ(e,t){const n=[],a=new Map;t=B0(UQ,t);function l(f){return a.get(f)}function o(f,p,m){const h=!m,v=G0(f);v.aliasOf=m&&m.record;const g=B0(t,f),y=[v];if("alias"in f){const w=typeof f.alias=="string"?[f.alias]:f.alias;for(const k of w)y.push(G0(rn({},v,{components:m?m.record.components:v.components,path:k,aliasOf:m?m.record:v})))}let b,C;for(const w of y){const{path:k}=w;if(p&&k[0]!=="/"){const E=p.record.path,O=E[E.length-1]==="/"?"":"/";w.path=p.record.path+(k&&O+k)}if(b=GQ(w,p,g),m?m.alias.push(b):(C=C||b,C!==b&&C.alias.push(b),h&&f.name&&!X0(b)&&s(f.name)),sx(b)&&u(b),v.children){const E=v.children;for(let O=0;O{s(C)}:ki}function s(f){if(nx(f)){const p=a.get(f);p&&(a.delete(f),n.splice(n.indexOf(p),1),p.children.forEach(s),p.alias.forEach(s))}else{const p=n.indexOf(f);p>-1&&(n.splice(p,1),f.record.name&&a.delete(f.record.name),f.children.forEach(s),f.alias.forEach(s))}}function r(){return n}function u(f){const p=QQ(f,n);n.splice(p,0,f),f.record.name&&!X0(f)&&a.set(f.record.name,f)}function c(f,p){let m,h={},v,g;if("name"in f&&f.name){if(m=a.get(f.name),!m)throw Ir(Rn.MATCHER_NOT_FOUND,{location:f});g=m.record.name,h=rn(U0(p.params,m.keys.filter(C=>!C.optional).concat(m.parent?m.parent.keys.filter(C=>C.optional):[]).map(C=>C.name)),f.params&&U0(f.params,m.keys.map(C=>C.name))),v=m.stringify(h)}else if(f.path!=null)v=f.path,m=n.find(C=>C.re.test(v)),m&&(h=m.parse(v),g=m.record.name);else{if(m=p.name?a.get(p.name):n.find(C=>C.re.test(p.path)),!m)throw Ir(Rn.MATCHER_NOT_FOUND,{location:f,currentLocation:p});g=m.record.name,h=rn({},p.params,f.params),v=m.stringify(h)}const y=[];let b=m;for(;b;)y.unshift(b.record),b=b.parent;return{name:g,path:v,params:h,matched:y,meta:ZQ(y)}}e.forEach(f=>o(f));function d(){n.length=0,a.clear()}return{addRoute:o,resolve:c,removeRoute:s,clearRoutes:d,getRoutes:r,getRecordMatcher:l}}function U0(e,t){const n={};for(const a of t)a in e&&(n[a]=e[a]);return n}function G0(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:JQ(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function JQ(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const a in e.components)t[a]=typeof n=="object"?n[a]:n;return t}function X0(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function ZQ(e){return e.reduce((t,n)=>rn(t,n.meta),{})}function QQ(e,t){let n=0,a=t.length;for(;n!==a;){const o=n+a>>1;ox(e,t[o])<0?a=o:n=o+1}const l=eee(e);return l&&(a=t.lastIndexOf(l,a-1)),a}function eee(e){let t=e;for(;t=t.parent;)if(sx(t)&&ox(e,t)===0)return t}function sx({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function J0(e){const t=Ae(gf),n=Ae(jm),a=S(()=>{const u=i(e.to);return t.resolve(u)}),l=S(()=>{const{matched:u}=a.value,{length:c}=u,d=u[c-1],f=n.matched;if(!d||!f.length)return-1;const p=f.findIndex(Rr.bind(null,d));if(p>-1)return p;const m=Z0(u[c-2]);return c>1&&Z0(d)===m&&f[f.length-1].path!==m?f.findIndex(Rr.bind(null,u[c-2])):p}),o=S(()=>l.value>-1&&oee(n.params,a.value.params)),s=S(()=>l.value>-1&&l.value===n.matched.length-1&&tx(n.params,a.value.params));function r(u={}){if(lee(u)){const c=t[i(e.replace)?"replace":"push"](i(e.to)).catch(ki);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>c),c}return Promise.resolve()}return{route:a,href:S(()=>a.value.href),isActive:o,isExactActive:s,navigate:r}}function tee(e){return e.length===1?e[0]:e}const nee=de({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:J0,setup(e,{slots:t}){const n=Bt(J0(e)),{options:a}=Ae(gf),l=S(()=>({[Q0(e.activeClass,a.linkActiveClass,"router-link-active")]:n.isActive,[Q0(e.exactActiveClass,a.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const o=t.default&&tee(t.default(n));return e.custom?o:Xe("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:l.value},o)}}}),aee=nee;function lee(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function oee(e,t){for(const n in t){const a=t[n],l=e[n];if(typeof a=="string"){if(a!==l)return!1}else if(!il(l)||l.length!==a.length||a.some((o,s)=>o.valueOf()!==l[s].valueOf()))return!1}return!0}function Z0(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Q0=(e,t,n)=>e??t??n,see=de({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const a=Ae(Vv),l=S(()=>e.route||a.value),o=Ae(W0,0),s=S(()=>{let c=i(o);const{matched:d}=l.value;let f;for(;(f=d[c])&&!f.components;)c++;return c}),r=S(()=>l.value.matched[s.value]);xt(W0,S(()=>s.value+1)),xt(AQ,r),xt(Vv,l);const u=L();return fe(()=>[u.value,r.value,e.name],([c,d,f],[p,m,h])=>{d&&(d.instances[f]=c,m&&m!==d&&c&&c===p&&(d.leaveGuards.size||(d.leaveGuards=m.leaveGuards),d.updateGuards.size||(d.updateGuards=m.updateGuards))),c&&d&&(!m||!Rr(d,m)||!p)&&(d.enterCallbacks[f]||[]).forEach(v=>v(c))},{flush:"post"}),()=>{const c=l.value,d=e.name,f=r.value,p=f&&f.components[d];if(!p)return ew(n.default,{Component:p,route:c});const m=f.props[d],h=m?m===!0?c.params:typeof m=="function"?m(c):m:null,g=Xe(p,rn({},h,t,{onVnodeUnmounted:y=>{y.component.isUnmounted&&(f.instances[d]=null)},ref:u}));return ew(n.default,{Component:g,route:c})||g}}});function ew(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const ree=see;function iee(e){const t=XQ(e.routes,e),n=e.parseQuery||PQ,a=e.stringifyQuery||K0,l=e.history,o=ni(),s=ni(),r=ni(),u=Tt(ko);let c=ko;Qs&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const d=pp.bind(null,Z=>""+Z),f=pp.bind(null,mQ),p=pp.bind(null,eu);function m(Z,ie){let ue,U;return nx(Z)?(ue=t.getRecordMatcher(Z),U=ie):U=Z,t.addRoute(U,ue)}function h(Z){const ie=t.getRecordMatcher(Z);ie&&t.removeRoute(ie)}function v(){return t.getRoutes().map(Z=>Z.record)}function g(Z){return!!t.getRecordMatcher(Z)}function y(Z,ie){if(ie=rn({},ie||u.value),typeof Z=="string"){const ae=vp(n,Z,ie.path),ce=t.resolve({path:ae.path},ie),ve=l.createHref(ae.fullPath);return rn(ae,ce,{params:p(ce.params),hash:eu(ae.hash),redirectedFrom:void 0,href:ve})}let ue;if(Z.path!=null)ue=rn({},Z,{path:vp(n,Z.path,ie.path).path});else{const ae=rn({},Z.params);for(const ce in ae)ae[ce]==null&&delete ae[ce];ue=rn({},Z,{params:f(ae)}),ie.params=f(ie.params)}const U=t.resolve(ue,ie),J=Z.hash||"";U.params=d(p(U.params));const D=bQ(a,rn({},Z,{hash:pQ(J),path:U.path})),Y=l.createHref(D);return rn({fullPath:D,hash:J,query:a===K0?_Q(Z.query):Z.query||{}},U,{redirectedFrom:void 0,href:Y})}function b(Z){return typeof Z=="string"?vp(n,Z,u.value.path):rn({},Z)}function C(Z,ie){if(c!==Z)return Ir(Rn.NAVIGATION_CANCELLED,{from:ie,to:Z})}function w(Z){return O(Z)}function k(Z){return w(rn(b(Z),{replace:!0}))}function E(Z,ie){const ue=Z.matched[Z.matched.length-1];if(ue&&ue.redirect){const{redirect:U}=ue;let J=typeof U=="function"?U(Z,ie):U;return typeof J=="string"&&(J=J.includes("?")||J.includes("#")?J=b(J):{path:J},J.params={}),rn({query:Z.query,hash:Z.hash,params:J.path!=null?{}:Z.params},J)}}function O(Z,ie){const ue=c=y(Z),U=u.value,J=Z.state,D=Z.force,Y=Z.replace===!0,ae=E(ue,U);if(ae)return O(rn(b(ae),{state:typeof ae=="object"?rn({},J,ae.state):J,force:D,replace:Y}),ie||ue);const ce=ue;ce.redirectedFrom=ie;let ve;return!D&&wQ(a,U,ue)&&(ve=Ir(Rn.NAVIGATION_DUPLICATED,{to:ce,from:U}),W(U,U,!0,!1)),(ve?Promise.resolve(ve):N(ce,U)).catch(he=>jl(he)?jl(he,Rn.NAVIGATION_GUARD_REDIRECT)?he:V(he):A(he,ce,U)).then(he=>{if(he){if(jl(he,Rn.NAVIGATION_GUARD_REDIRECT))return O(rn({replace:Y},b(he.to),{state:typeof he.to=="object"?rn({},J,he.to.state):J,force:D}),ie||ce)}else he=M(ce,U,!0,Y,J);return I(ce,U,he),he})}function x(Z,ie){const ue=C(Z,ie);return ue?Promise.reject(ue):Promise.resolve()}function T(Z){const ie=Q.values().next().value;return ie&&typeof ie.runWithContext=="function"?ie.runWithContext(Z):Z()}function N(Z,ie){let ue;const[U,J,D]=LQ(Z,ie);ue=mp(U.reverse(),"beforeRouteLeave",Z,ie);for(const ae of U)ae.leaveGuards.forEach(ce=>{ue.push(Ro(ce,Z,ie))});const Y=x.bind(null,Z,ie);return ue.push(Y),le(ue).then(()=>{ue=[];for(const ae of o.list())ue.push(Ro(ae,Z,ie));return ue.push(Y),le(ue)}).then(()=>{ue=mp(J,"beforeRouteUpdate",Z,ie);for(const ae of J)ae.updateGuards.forEach(ce=>{ue.push(Ro(ce,Z,ie))});return ue.push(Y),le(ue)}).then(()=>{ue=[];for(const ae of D)if(ae.beforeEnter)if(il(ae.beforeEnter))for(const ce of ae.beforeEnter)ue.push(Ro(ce,Z,ie));else ue.push(Ro(ae.beforeEnter,Z,ie));return ue.push(Y),le(ue)}).then(()=>(Z.matched.forEach(ae=>ae.enterCallbacks={}),ue=mp(D,"beforeRouteEnter",Z,ie,T),ue.push(Y),le(ue))).then(()=>{ue=[];for(const ae of s.list())ue.push(Ro(ae,Z,ie));return ue.push(Y),le(ue)}).catch(ae=>jl(ae,Rn.NAVIGATION_CANCELLED)?ae:Promise.reject(ae))}function I(Z,ie,ue){r.list().forEach(U=>T(()=>U(Z,ie,ue)))}function M(Z,ie,ue,U,J){const D=C(Z,ie);if(D)return D;const Y=ie===ko,ae=Qs?history.state:{};ue&&(U||Y?l.replace(Z.fullPath,rn({scroll:Y&&ae&&ae.scroll},J)):l.push(Z.fullPath,J)),u.value=Z,W(Z,ie,ue,Y),V()}let P;function K(){P||(P=l.listen((Z,ie,ue)=>{if(!ne.listening)return;const U=y(Z),J=E(U,ne.currentRoute.value);if(J){O(rn(J,{replace:!0,force:!0}),U).catch(ki);return}c=U;const D=u.value;Qs&&$Q(H0(D.fullPath,ue.delta),mf()),N(U,D).catch(Y=>jl(Y,Rn.NAVIGATION_ABORTED|Rn.NAVIGATION_CANCELLED)?Y:jl(Y,Rn.NAVIGATION_GUARD_REDIRECT)?(O(rn(b(Y.to),{force:!0}),U).then(ae=>{jl(ae,Rn.NAVIGATION_ABORTED|Rn.NAVIGATION_DUPLICATED)&&!ue.delta&&ue.type===Lv.pop&&l.go(-1,!1)}).catch(ki),Promise.reject()):(ue.delta&&l.go(-ue.delta,!1),A(Y,U,D))).then(Y=>{Y=Y||M(U,D,!1),Y&&(ue.delta&&!jl(Y,Rn.NAVIGATION_CANCELLED)?l.go(-ue.delta,!1):ue.type===Lv.pop&&jl(Y,Rn.NAVIGATION_ABORTED|Rn.NAVIGATION_DUPLICATED)&&l.go(-1,!1)),I(U,D,Y)}).catch(ki)}))}let H=ni(),B=ni(),_;function A(Z,ie,ue){V(Z);const U=B.list();return U.length?U.forEach(J=>J(Z,ie,ue)):console.error(Z),Promise.reject(Z)}function F(){return _&&u.value!==ko?Promise.resolve():new Promise((Z,ie)=>{H.add([Z,ie])})}function V(Z){return _||(_=!Z,K(),H.list().forEach(([ie,ue])=>Z?ue(Z):ie()),H.reset()),Z}function W(Z,ie,ue,U){const{scrollBehavior:J}=e;if(!Qs||!J)return Promise.resolve();const D=!ue&&NQ(H0(Z.fullPath,0))||(U||!ue)&&history.state&&history.state.scroll||null;return Pe().then(()=>J(Z,ie,D)).then(Y=>Y&&OQ(Y)).catch(Y=>A(Y,Z,ie))}const q=Z=>l.go(Z);let ee;const Q=new Set,ne={currentRoute:u,listening:!0,addRoute:m,removeRoute:h,clearRoutes:t.clearRoutes,hasRoute:g,getRoutes:v,resolve:y,options:e,push:w,replace:k,go:q,back:()=>q(-1),forward:()=>q(1),beforeEach:o.add,beforeResolve:s.add,afterEach:r.add,onError:B.add,isReady:F,install(Z){Z.component("RouterLink",aee),Z.component("RouterView",ree),Z.config.globalProperties.$router=ne,Object.defineProperty(Z.config.globalProperties,"$route",{enumerable:!0,get:()=>i(u)}),Qs&&!ee&&u.value===ko&&(ee=!0,w(l.location).catch(U=>{}));const ie={};for(const U in ko)Object.defineProperty(ie,U,{get:()=>u.value[U],enumerable:!0});Z.provide(gf,ne),Z.provide(jm,Sd(ie)),Z.provide(Vv,u);const ue=Z.unmount;Q.add(Z),Z.unmount=function(){Q.delete(Z),Q.size<1&&(c=ko,P&&P(),P=null,u.value=ko,ee=!1,_=!1),ue()}}};function le(Z){return Z.reduce((ie,ue)=>ie.then(()=>T(ue)),Promise.resolve())}return ne}function uee(){return Ae(gf)}function cee(e){return Ae(jm)}function gee(){return localStorage.getItem("token")||""}function rx(){try{return JSON.parse(localStorage.getItem("user"))||null}catch{return null}}function yee(e=""){const t=rx();return t&&(t.realName||t.username)||e}function bee(e,t){localStorage.setItem("token",e),localStorage.setItem("user",JSON.stringify(t))}function dee(){localStorage.removeItem("token"),localStorage.removeItem("user")}const fee={class:"brand"},pee={class:"title"},vee={__name:"MainLayout",setup(e){const t=cee(),n=uee(),a=rx(),l=S(()=>{var r;return((r=t.meta)==null?void 0:r.title)||""}),o=[{path:"/",title:"工作台",icon:JA},{path:"/inbound",title:"入库管理",icon:jA},{path:"/outbound",title:"备料出库",icon:I3},{path:"/inventory",title:"库存查询",icon:xC},{path:"/inspection",title:"质量检验",icon:ef},{path:"/stocktake",title:"库存盘点",icon:e3},{path:"/semi",title:"半成品/成品",icon:Ff},{path:"/package",title:"包装绑定",icon:Ff},{path:"/ledger",title:"物料台账",icon:M3}];function s(){dee(),qE.success("已退出登录"),n.push("/login")}return(r,u)=>{const c=It("el-icon"),d=It("el-menu-item"),f=It("el-menu"),p=It("el-aside"),m=It("el-button"),h=It("el-tag"),v=It("el-header"),g=It("router-view"),y=It("el-main"),b=It("el-container");return $(),re(b,{class:"layout"},{default:te(()=>[G(p,{width:"210px",class:"aside"},{default:te(()=>[j("div",fee,[G(c,{size:22},{default:te(()=>[G(i(Ff))]),_:1}),u[1]||(u[1]=j("span",null,"北自所库房客户端",-1))]),G(f,{"default-active":i(t).path,class:"menu","background-color":"#001529","text-color":"#c2cad8","active-text-color":"#ffffff",router:""},{default:te(()=>[($(),z(He,null,wt(o,C=>G(d,{key:C.path,index:C.path},{default:te(()=>[G(c,null,{default:te(()=>[($(),re(ct(C.icon)))]),_:2},1024),j("span",null,Ee(C.title),1)]),_:2},1032,["index"])),64))]),_:1},8,["default-active"])]),_:1}),G(b,null,{default:te(()=>[G(v,{height:"56px",class:"header"},{default:te(()=>[j("span",pee,Ee(l.value),1),u[4]||(u[4]=j("div",{class:"spacer"},null,-1)),G(m,{text:"",type:"primary",onClick:u[0]||(u[0]=C=>i(n).push("/display"))},{default:te(()=>[G(c,{style:{"margin-right":"4px"}},{default:te(()=>[G(i(o3))]),_:1}),u[2]||(u[2]=yt("免登录大屏 ",-1))]),_:1}),G(h,{effect:"plain"},{default:te(()=>{var C,w;return[yt(Ee(((C=i(a))==null?void 0:C.realName)||((w=i(a))==null?void 0:w.username)||"未登录"),1)]}),_:1}),G(m,{text:"",type:"danger",onClick:s},{default:te(()=>[...u[3]||(u[3]=[yt("退出登录",-1)])]),_:1})]),_:1}),G(y,{class:"main"},{default:te(()=>[G(g)]),_:1})]),_:1})]),_:1})}}},hee=UE(vee,[["__scopeId","data-v-5c5c88e7"]]),mee=[{path:"/login",name:"Login",component:()=>Xa(()=>import("./Login-CiXa7TLP.js"),__vite__mapDeps([0,1,2])),meta:{title:"登录"}},{path:"/display",name:"Display",component:()=>Xa(()=>import("./Display-6wuJI2Dp.js"),__vite__mapDeps([3,1,4,5])),meta:{title:"库存大屏"}},{path:"/",component:hee,children:[{path:"",name:"Dashboard",component:()=>Xa(()=>import("./Dashboard-DneNlEpi.js"),__vite__mapDeps([6,1,4,7])),meta:{title:"工作台"}},{path:"inbound",name:"Inbound",component:()=>Xa(()=>import("./Inbound-BOLxl4Lt.js"),__vite__mapDeps([8,1,9,10,11])),meta:{title:"入库管理"}},{path:"outbound",name:"Outbound",component:()=>Xa(()=>import("./Outbound-BGRoJuha.js"),__vite__mapDeps([12,1,9,10,13])),meta:{title:"备料出库"}},{path:"inventory",name:"Inventory",component:()=>Xa(()=>import("./Inventory-DLOSwwgi.js"),__vite__mapDeps([14,1,4,9,10,15])),meta:{title:"库存查询"}},{path:"inspection",name:"Inspection",component:()=>Xa(()=>import("./Inspection-Cp7Ilzqc.js"),__vite__mapDeps([16,1,9,10,17])),meta:{title:"质量检验"}},{path:"stocktake",name:"Stocktake",component:()=>Xa(()=>import("./Stocktake-YjnlyZRF.js"),__vite__mapDeps([18,1,4,9,10,19])),meta:{title:"库存盘点"}},{path:"semi",name:"Semi",component:()=>Xa(()=>import("./Semi-Bs9UASrg.js"),__vite__mapDeps([20,1,4,9,10,21])),meta:{title:"半成品/成品"}},{path:"package",name:"Package",component:()=>Xa(()=>import("./Package-CiuyXcgR.js"),__vite__mapDeps([22,1,4,9,10,23])),meta:{title:"包装绑定"}},{path:"ledger",name:"Ledger",component:()=>Xa(()=>import("./Ledger-Dx4pgeep.js"),__vite__mapDeps([24,1,9,10,25])),meta:{title:"物料台账"}}]},{path:"/:pathMatch(.*)*",redirect:"/"}],qm=iee({history:FQ(),routes:mee});qm.beforeEach(e=>{if(e.path!=="/login"&&e.path!=="/display"&&!e.path.startsWith("/display")&&!localStorage.getItem("token"))return{path:"/login",query:e.fullPath?{redirect:e.fullPath}:{}}});qm.afterEach(e=>{var t;document.title=(t=e.meta)!=null&&t.title?`${e.meta.title} - 北自所库房客户端`:"北自所库房客户端"});M1(eQ).use(qm).use(XZ,{locale:JZ}).mount("#app");export{Ff as A,M3 as B,o3 as C,re as D,qE as E,He as F,ct as G,Je as H,yee as I,jw as J,pt as K,R as L,_Z as M,Pe as N,gee as O,UE as _,G as a,cee as b,z as c,j as d,on as e,yt as f,Bt as g,L as h,mt as i,Ht as j,wt as k,se as l,S as m,Ye as n,$ as o,i as p,jA as q,It as r,bee as s,Ee as t,uee as u,I3 as v,te as w,xC as x,ef as y,e3 as z}; + */let DQ=()=>location.protocol+"//"+location.host;function lx(e,t){const{pathname:n,search:a,hash:l}=t,o=e.indexOf("#");if(o>-1){let s=l.includes(e.slice(o))?e.slice(o).length:1,r=l.slice(s);return r[0]!=="/"&&(r="/"+r),F0(r,"")}return F0(n,e)+a+l}function VQ(e,t,n,a){let l=[],o=[],s=null;const r=({state:p})=>{const m=lx(e,location),h=n.value,v=t.value;let g=0;if(p){if(n.value=m,t.value=p,s&&s===h){s=null;return}g=v?p.position-v.position:0}else a(m);l.forEach(y=>{y(n.value,h,{delta:g,type:Lv.pop,direction:g?g>0?hp.forward:hp.back:hp.unknown})})};function u(){s=n.value}function c(p){l.push(p);const m=()=>{const h=l.indexOf(p);h>-1&&l.splice(h,1)};return o.push(m),m}function d(){if(document.visibilityState==="hidden"){const{history:p}=window;if(!p.state)return;p.replaceState(rn({},p.state,{scroll:mf()}),"")}}function f(){for(const p of o)p();o=[],window.removeEventListener("popstate",r),window.removeEventListener("pagehide",d),document.removeEventListener("visibilitychange",d)}return window.addEventListener("popstate",r),window.addEventListener("pagehide",d),document.addEventListener("visibilitychange",d),{pauseListeners:u,listen:c,destroy:f}}function j0(e,t,n,a=!1,l=!1){return{back:e,current:t,forward:n,replaced:a,position:window.history.length,scroll:l?mf():null}}function BQ(e){const{history:t,location:n}=window,a={value:lx(e,n)},l={value:t.state};l.value||o(a.value,{back:null,current:a.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function o(u,c,d){const f=e.indexOf("#"),p=f>-1?(n.host&&document.querySelector("base")?e:e.slice(f))+u:DQ()+e+u;try{t[d?"replaceState":"pushState"](c,"",p),l.value=c}catch(m){console.error(m),n[d?"replace":"assign"](p)}}function s(u,c){o(u,rn({},t.state,j0(l.value.back,u,l.value.forward,!0),c,{position:l.value.position}),!0),a.value=u}function r(u,c){const d=rn({},l.value,t.state,{forward:u,scroll:mf()});o(d.current,d,!0),o(u,rn({},j0(a.value,u,null),{position:d.position+1},c),!1),a.value=u}return{location:a,state:l,push:r,replace:s}}function FQ(e){e=kQ(e);const t=BQ(e),n=VQ(e,t.state,t.location,t.replace);function a(o,s=!0){s||n.pauseListeners(),history.go(o)}const l=rn({location:"",base:e,go:a,createHref:xQ.bind(null,e)},t,n);return Object.defineProperty(l,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(l,"state",{enumerable:!0,get:()=>t.state.value}),l}let ps=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({});var Hn=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(Hn||{});const zQ={type:ps.Static,value:""},HQ=/[a-zA-Z0-9_]/;function KQ(e){if(!e)return[[]];if(e==="/")return[[zQ]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(m){throw new Error(`ERR (${n})/"${c}": ${m}`)}let n=Hn.Static,a=n;const l=[];let o;function s(){o&&l.push(o),o=[]}let r=0,u,c="",d="";function f(){c&&(n===Hn.Static?o.push({type:ps.Static,value:c}):n===Hn.Param||n===Hn.ParamRegExp||n===Hn.ParamRegExpEnd?(o.length>1&&(u==="*"||u==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),o.push({type:ps.Param,value:c,regexp:d,repeatable:u==="*"||u==="+",optional:u==="*"||u==="?"})):t("Invalid state to consume buffer"),c="")}function p(){c+=u}for(;rt.length?t.length===1&&t[0]===pa.Static+pa.Segment?1:-1:0}function ox(e,t){let n=0;const a=e.score,l=t.score;for(;n0&&t[t.length-1]<0}const UQ={strict:!1,end:!0,sensitive:!1};function GQ(e,t,n){const a=qQ(KQ(e.path),n),l=rn(a,{record:e,parent:t,children:[],alias:[]});return t&&!l.record.aliasOf==!t.record.aliasOf&&t.children.push(l),l}function XQ(e,t){const n=[],a=new Map;t=B0(UQ,t);function l(f){return a.get(f)}function o(f,p,m){const h=!m,v=G0(f);v.aliasOf=m&&m.record;const g=B0(t,f),y=[v];if("alias"in f){const w=typeof f.alias=="string"?[f.alias]:f.alias;for(const k of w)y.push(G0(rn({},v,{components:m?m.record.components:v.components,path:k,aliasOf:m?m.record:v})))}let b,C;for(const w of y){const{path:k}=w;if(p&&k[0]!=="/"){const E=p.record.path,O=E[E.length-1]==="/"?"":"/";w.path=p.record.path+(k&&O+k)}if(b=GQ(w,p,g),m?m.alias.push(b):(C=C||b,C!==b&&C.alias.push(b),h&&f.name&&!X0(b)&&s(f.name)),sx(b)&&u(b),v.children){const E=v.children;for(let O=0;O{s(C)}:ki}function s(f){if(nx(f)){const p=a.get(f);p&&(a.delete(f),n.splice(n.indexOf(p),1),p.children.forEach(s),p.alias.forEach(s))}else{const p=n.indexOf(f);p>-1&&(n.splice(p,1),f.record.name&&a.delete(f.record.name),f.children.forEach(s),f.alias.forEach(s))}}function r(){return n}function u(f){const p=QQ(f,n);n.splice(p,0,f),f.record.name&&!X0(f)&&a.set(f.record.name,f)}function c(f,p){let m,h={},v,g;if("name"in f&&f.name){if(m=a.get(f.name),!m)throw Ir(Rn.MATCHER_NOT_FOUND,{location:f});g=m.record.name,h=rn(U0(p.params,m.keys.filter(C=>!C.optional).concat(m.parent?m.parent.keys.filter(C=>C.optional):[]).map(C=>C.name)),f.params&&U0(f.params,m.keys.map(C=>C.name))),v=m.stringify(h)}else if(f.path!=null)v=f.path,m=n.find(C=>C.re.test(v)),m&&(h=m.parse(v),g=m.record.name);else{if(m=p.name?a.get(p.name):n.find(C=>C.re.test(p.path)),!m)throw Ir(Rn.MATCHER_NOT_FOUND,{location:f,currentLocation:p});g=m.record.name,h=rn({},p.params,f.params),v=m.stringify(h)}const y=[];let b=m;for(;b;)y.unshift(b.record),b=b.parent;return{name:g,path:v,params:h,matched:y,meta:ZQ(y)}}e.forEach(f=>o(f));function d(){n.length=0,a.clear()}return{addRoute:o,resolve:c,removeRoute:s,clearRoutes:d,getRoutes:r,getRecordMatcher:l}}function U0(e,t){const n={};for(const a of t)a in e&&(n[a]=e[a]);return n}function G0(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:JQ(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function JQ(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const a in e.components)t[a]=typeof n=="object"?n[a]:n;return t}function X0(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function ZQ(e){return e.reduce((t,n)=>rn(t,n.meta),{})}function QQ(e,t){let n=0,a=t.length;for(;n!==a;){const o=n+a>>1;ox(e,t[o])<0?a=o:n=o+1}const l=eee(e);return l&&(a=t.lastIndexOf(l,a-1)),a}function eee(e){let t=e;for(;t=t.parent;)if(sx(t)&&ox(e,t)===0)return t}function sx({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function J0(e){const t=Ae(gf),n=Ae(jm),a=S(()=>{const u=i(e.to);return t.resolve(u)}),l=S(()=>{const{matched:u}=a.value,{length:c}=u,d=u[c-1],f=n.matched;if(!d||!f.length)return-1;const p=f.findIndex(Rr.bind(null,d));if(p>-1)return p;const m=Z0(u[c-2]);return c>1&&Z0(d)===m&&f[f.length-1].path!==m?f.findIndex(Rr.bind(null,u[c-2])):p}),o=S(()=>l.value>-1&&oee(n.params,a.value.params)),s=S(()=>l.value>-1&&l.value===n.matched.length-1&&tx(n.params,a.value.params));function r(u={}){if(lee(u)){const c=t[i(e.replace)?"replace":"push"](i(e.to)).catch(ki);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>c),c}return Promise.resolve()}return{route:a,href:S(()=>a.value.href),isActive:o,isExactActive:s,navigate:r}}function tee(e){return e.length===1?e[0]:e}const nee=de({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:J0,setup(e,{slots:t}){const n=Bt(J0(e)),{options:a}=Ae(gf),l=S(()=>({[Q0(e.activeClass,a.linkActiveClass,"router-link-active")]:n.isActive,[Q0(e.exactActiveClass,a.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const o=t.default&&tee(t.default(n));return e.custom?o:Xe("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:l.value},o)}}}),aee=nee;function lee(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function oee(e,t){for(const n in t){const a=t[n],l=e[n];if(typeof a=="string"){if(a!==l)return!1}else if(!il(l)||l.length!==a.length||a.some((o,s)=>o.valueOf()!==l[s].valueOf()))return!1}return!0}function Z0(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Q0=(e,t,n)=>e??t??n,see=de({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const a=Ae(Vv),l=S(()=>e.route||a.value),o=Ae(W0,0),s=S(()=>{let c=i(o);const{matched:d}=l.value;let f;for(;(f=d[c])&&!f.components;)c++;return c}),r=S(()=>l.value.matched[s.value]);xt(W0,S(()=>s.value+1)),xt(AQ,r),xt(Vv,l);const u=L();return fe(()=>[u.value,r.value,e.name],([c,d,f],[p,m,h])=>{d&&(d.instances[f]=c,m&&m!==d&&c&&c===p&&(d.leaveGuards.size||(d.leaveGuards=m.leaveGuards),d.updateGuards.size||(d.updateGuards=m.updateGuards))),c&&d&&(!m||!Rr(d,m)||!p)&&(d.enterCallbacks[f]||[]).forEach(v=>v(c))},{flush:"post"}),()=>{const c=l.value,d=e.name,f=r.value,p=f&&f.components[d];if(!p)return ew(n.default,{Component:p,route:c});const m=f.props[d],h=m?m===!0?c.params:typeof m=="function"?m(c):m:null,g=Xe(p,rn({},h,t,{onVnodeUnmounted:y=>{y.component.isUnmounted&&(f.instances[d]=null)},ref:u}));return ew(n.default,{Component:g,route:c})||g}}});function ew(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const ree=see;function iee(e){const t=XQ(e.routes,e),n=e.parseQuery||PQ,a=e.stringifyQuery||K0,l=e.history,o=ni(),s=ni(),r=ni(),u=Tt(ko);let c=ko;Qs&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const d=pp.bind(null,Z=>""+Z),f=pp.bind(null,mQ),p=pp.bind(null,eu);function m(Z,ie){let ue,U;return nx(Z)?(ue=t.getRecordMatcher(Z),U=ie):U=Z,t.addRoute(U,ue)}function h(Z){const ie=t.getRecordMatcher(Z);ie&&t.removeRoute(ie)}function v(){return t.getRoutes().map(Z=>Z.record)}function g(Z){return!!t.getRecordMatcher(Z)}function y(Z,ie){if(ie=rn({},ie||u.value),typeof Z=="string"){const ae=vp(n,Z,ie.path),ce=t.resolve({path:ae.path},ie),ve=l.createHref(ae.fullPath);return rn(ae,ce,{params:p(ce.params),hash:eu(ae.hash),redirectedFrom:void 0,href:ve})}let ue;if(Z.path!=null)ue=rn({},Z,{path:vp(n,Z.path,ie.path).path});else{const ae=rn({},Z.params);for(const ce in ae)ae[ce]==null&&delete ae[ce];ue=rn({},Z,{params:f(ae)}),ie.params=f(ie.params)}const U=t.resolve(ue,ie),J=Z.hash||"";U.params=d(p(U.params));const D=bQ(a,rn({},Z,{hash:pQ(J),path:U.path})),Y=l.createHref(D);return rn({fullPath:D,hash:J,query:a===K0?_Q(Z.query):Z.query||{}},U,{redirectedFrom:void 0,href:Y})}function b(Z){return typeof Z=="string"?vp(n,Z,u.value.path):rn({},Z)}function C(Z,ie){if(c!==Z)return Ir(Rn.NAVIGATION_CANCELLED,{from:ie,to:Z})}function w(Z){return O(Z)}function k(Z){return w(rn(b(Z),{replace:!0}))}function E(Z,ie){const ue=Z.matched[Z.matched.length-1];if(ue&&ue.redirect){const{redirect:U}=ue;let J=typeof U=="function"?U(Z,ie):U;return typeof J=="string"&&(J=J.includes("?")||J.includes("#")?J=b(J):{path:J},J.params={}),rn({query:Z.query,hash:Z.hash,params:J.path!=null?{}:Z.params},J)}}function O(Z,ie){const ue=c=y(Z),U=u.value,J=Z.state,D=Z.force,Y=Z.replace===!0,ae=E(ue,U);if(ae)return O(rn(b(ae),{state:typeof ae=="object"?rn({},J,ae.state):J,force:D,replace:Y}),ie||ue);const ce=ue;ce.redirectedFrom=ie;let ve;return!D&&wQ(a,U,ue)&&(ve=Ir(Rn.NAVIGATION_DUPLICATED,{to:ce,from:U}),W(U,U,!0,!1)),(ve?Promise.resolve(ve):N(ce,U)).catch(he=>jl(he)?jl(he,Rn.NAVIGATION_GUARD_REDIRECT)?he:V(he):A(he,ce,U)).then(he=>{if(he){if(jl(he,Rn.NAVIGATION_GUARD_REDIRECT))return O(rn({replace:Y},b(he.to),{state:typeof he.to=="object"?rn({},J,he.to.state):J,force:D}),ie||ce)}else he=M(ce,U,!0,Y,J);return I(ce,U,he),he})}function x(Z,ie){const ue=C(Z,ie);return ue?Promise.reject(ue):Promise.resolve()}function T(Z){const ie=Q.values().next().value;return ie&&typeof ie.runWithContext=="function"?ie.runWithContext(Z):Z()}function N(Z,ie){let ue;const[U,J,D]=LQ(Z,ie);ue=mp(U.reverse(),"beforeRouteLeave",Z,ie);for(const ae of U)ae.leaveGuards.forEach(ce=>{ue.push(Ro(ce,Z,ie))});const Y=x.bind(null,Z,ie);return ue.push(Y),le(ue).then(()=>{ue=[];for(const ae of o.list())ue.push(Ro(ae,Z,ie));return ue.push(Y),le(ue)}).then(()=>{ue=mp(J,"beforeRouteUpdate",Z,ie);for(const ae of J)ae.updateGuards.forEach(ce=>{ue.push(Ro(ce,Z,ie))});return ue.push(Y),le(ue)}).then(()=>{ue=[];for(const ae of D)if(ae.beforeEnter)if(il(ae.beforeEnter))for(const ce of ae.beforeEnter)ue.push(Ro(ce,Z,ie));else ue.push(Ro(ae.beforeEnter,Z,ie));return ue.push(Y),le(ue)}).then(()=>(Z.matched.forEach(ae=>ae.enterCallbacks={}),ue=mp(D,"beforeRouteEnter",Z,ie,T),ue.push(Y),le(ue))).then(()=>{ue=[];for(const ae of s.list())ue.push(Ro(ae,Z,ie));return ue.push(Y),le(ue)}).catch(ae=>jl(ae,Rn.NAVIGATION_CANCELLED)?ae:Promise.reject(ae))}function I(Z,ie,ue){r.list().forEach(U=>T(()=>U(Z,ie,ue)))}function M(Z,ie,ue,U,J){const D=C(Z,ie);if(D)return D;const Y=ie===ko,ae=Qs?history.state:{};ue&&(U||Y?l.replace(Z.fullPath,rn({scroll:Y&&ae&&ae.scroll},J)):l.push(Z.fullPath,J)),u.value=Z,W(Z,ie,ue,Y),V()}let P;function K(){P||(P=l.listen((Z,ie,ue)=>{if(!ne.listening)return;const U=y(Z),J=E(U,ne.currentRoute.value);if(J){O(rn(J,{replace:!0,force:!0}),U).catch(ki);return}c=U;const D=u.value;Qs&&$Q(H0(D.fullPath,ue.delta),mf()),N(U,D).catch(Y=>jl(Y,Rn.NAVIGATION_ABORTED|Rn.NAVIGATION_CANCELLED)?Y:jl(Y,Rn.NAVIGATION_GUARD_REDIRECT)?(O(rn(b(Y.to),{force:!0}),U).then(ae=>{jl(ae,Rn.NAVIGATION_ABORTED|Rn.NAVIGATION_DUPLICATED)&&!ue.delta&&ue.type===Lv.pop&&l.go(-1,!1)}).catch(ki),Promise.reject()):(ue.delta&&l.go(-ue.delta,!1),A(Y,U,D))).then(Y=>{Y=Y||M(U,D,!1),Y&&(ue.delta&&!jl(Y,Rn.NAVIGATION_CANCELLED)?l.go(-ue.delta,!1):ue.type===Lv.pop&&jl(Y,Rn.NAVIGATION_ABORTED|Rn.NAVIGATION_DUPLICATED)&&l.go(-1,!1)),I(U,D,Y)}).catch(ki)}))}let H=ni(),B=ni(),_;function A(Z,ie,ue){V(Z);const U=B.list();return U.length?U.forEach(J=>J(Z,ie,ue)):console.error(Z),Promise.reject(Z)}function F(){return _&&u.value!==ko?Promise.resolve():new Promise((Z,ie)=>{H.add([Z,ie])})}function V(Z){return _||(_=!Z,K(),H.list().forEach(([ie,ue])=>Z?ue(Z):ie()),H.reset()),Z}function W(Z,ie,ue,U){const{scrollBehavior:J}=e;if(!Qs||!J)return Promise.resolve();const D=!ue&&NQ(H0(Z.fullPath,0))||(U||!ue)&&history.state&&history.state.scroll||null;return Pe().then(()=>J(Z,ie,D)).then(Y=>Y&&OQ(Y)).catch(Y=>A(Y,Z,ie))}const q=Z=>l.go(Z);let ee;const Q=new Set,ne={currentRoute:u,listening:!0,addRoute:m,removeRoute:h,clearRoutes:t.clearRoutes,hasRoute:g,getRoutes:v,resolve:y,options:e,push:w,replace:k,go:q,back:()=>q(-1),forward:()=>q(1),beforeEach:o.add,beforeResolve:s.add,afterEach:r.add,onError:B.add,isReady:F,install(Z){Z.component("RouterLink",aee),Z.component("RouterView",ree),Z.config.globalProperties.$router=ne,Object.defineProperty(Z.config.globalProperties,"$route",{enumerable:!0,get:()=>i(u)}),Qs&&!ee&&u.value===ko&&(ee=!0,w(l.location).catch(U=>{}));const ie={};for(const U in ko)Object.defineProperty(ie,U,{get:()=>u.value[U],enumerable:!0});Z.provide(gf,ne),Z.provide(jm,Sd(ie)),Z.provide(Vv,u);const ue=Z.unmount;Q.add(Z),Z.unmount=function(){Q.delete(Z),Q.size<1&&(c=ko,P&&P(),P=null,u.value=ko,ee=!1,_=!1),ue()}}};function le(Z){return Z.reduce((ie,ue)=>ie.then(()=>T(ue)),Promise.resolve())}return ne}function uee(){return Ae(gf)}function cee(e){return Ae(jm)}function gee(){return localStorage.getItem("token")||""}function rx(){try{return JSON.parse(localStorage.getItem("user"))||null}catch{return null}}function yee(e=""){const t=rx();return t&&(t.realName||t.username)||e}function bee(e,t){localStorage.setItem("token",e),localStorage.setItem("user",JSON.stringify(t))}function dee(){localStorage.removeItem("token"),localStorage.removeItem("user")}const fee={class:"brand"},pee={class:"title"},vee={__name:"MainLayout",setup(e){const t=cee(),n=uee(),a=rx(),l=S(()=>{var r;return((r=t.meta)==null?void 0:r.title)||""}),o=[{path:"/",title:"工作台",icon:JA},{path:"/inbound",title:"入库管理",icon:jA},{path:"/outbound",title:"备料出库",icon:I3},{path:"/inventory",title:"库存查询",icon:xC},{path:"/inspection",title:"质量检验",icon:ef},{path:"/stocktake",title:"库存盘点",icon:e3},{path:"/semi",title:"半成品/成品",icon:Ff},{path:"/package",title:"包装绑定",icon:Ff},{path:"/ledger",title:"物料台账",icon:M3}];function s(){dee(),qE.success("已退出登录"),n.push("/login")}return(r,u)=>{const c=It("el-icon"),d=It("el-menu-item"),f=It("el-menu"),p=It("el-aside"),m=It("el-button"),h=It("el-tag"),v=It("el-header"),g=It("router-view"),y=It("el-main"),b=It("el-container");return $(),re(b,{class:"layout"},{default:te(()=>[G(p,{width:"210px",class:"aside"},{default:te(()=>[j("div",fee,[G(c,{size:22},{default:te(()=>[G(i(Ff))]),_:1}),u[1]||(u[1]=j("span",null,"北自所库房客户端",-1))]),G(f,{"default-active":i(t).path,class:"menu","background-color":"#001529","text-color":"#c2cad8","active-text-color":"#ffffff",router:""},{default:te(()=>[($(),z(He,null,wt(o,C=>G(d,{key:C.path,index:C.path},{default:te(()=>[G(c,null,{default:te(()=>[($(),re(ct(C.icon)))]),_:2},1024),j("span",null,Ee(C.title),1)]),_:2},1032,["index"])),64))]),_:1},8,["default-active"])]),_:1}),G(b,null,{default:te(()=>[G(v,{height:"56px",class:"header"},{default:te(()=>[j("span",pee,Ee(l.value),1),u[4]||(u[4]=j("div",{class:"spacer"},null,-1)),G(m,{text:"",type:"primary",onClick:u[0]||(u[0]=C=>i(n).push("/display"))},{default:te(()=>[G(c,{style:{"margin-right":"4px"}},{default:te(()=>[G(i(o3))]),_:1}),u[2]||(u[2]=yt("免登录大屏 ",-1))]),_:1}),G(h,{effect:"plain"},{default:te(()=>{var C,w;return[yt(Ee(((C=i(a))==null?void 0:C.realName)||((w=i(a))==null?void 0:w.username)||"未登录"),1)]}),_:1}),G(m,{text:"",type:"danger",onClick:s},{default:te(()=>[...u[3]||(u[3]=[yt("退出登录",-1)])]),_:1})]),_:1}),G(y,{class:"main"},{default:te(()=>[G(g)]),_:1})]),_:1})]),_:1})}}},hee=UE(vee,[["__scopeId","data-v-5c5c88e7"]]),mee=[{path:"/login",name:"Login",component:()=>Xa(()=>import("./Login-BWT5U0wo.js"),__vite__mapDeps([0,1,2])),meta:{title:"登录"}},{path:"/display",name:"Display",component:()=>Xa(()=>import("./Display-BLVWdPLV.js"),__vite__mapDeps([3,1,4,5])),meta:{title:"库存大屏"}},{path:"/",component:hee,children:[{path:"",name:"Dashboard",component:()=>Xa(()=>import("./Dashboard-DlINI6qy.js"),__vite__mapDeps([6,1,4,7])),meta:{title:"工作台"}},{path:"inbound",name:"Inbound",component:()=>Xa(()=>import("./Inbound-DGRjaxp8.js"),__vite__mapDeps([8,1,9,10,11])),meta:{title:"入库管理"}},{path:"outbound",name:"Outbound",component:()=>Xa(()=>import("./Outbound-DvjCYsMG.js"),__vite__mapDeps([12,1,9,10,13])),meta:{title:"备料出库"}},{path:"inventory",name:"Inventory",component:()=>Xa(()=>import("./Inventory-WA97rYQY.js"),__vite__mapDeps([14,1,4,9,10,15])),meta:{title:"库存查询"}},{path:"inspection",name:"Inspection",component:()=>Xa(()=>import("./Inspection-DDPsjS2O.js"),__vite__mapDeps([16,1,9,10,17])),meta:{title:"质量检验"}},{path:"stocktake",name:"Stocktake",component:()=>Xa(()=>import("./Stocktake-DnVN5m0F.js"),__vite__mapDeps([18,1,4,9,10,19])),meta:{title:"库存盘点"}},{path:"semi",name:"Semi",component:()=>Xa(()=>import("./Semi-BvYUqYU7.js"),__vite__mapDeps([20,1,4,9,10,21])),meta:{title:"半成品/成品"}},{path:"package",name:"Package",component:()=>Xa(()=>import("./Package-J77JJef_.js"),__vite__mapDeps([22,1,4,9,10,23])),meta:{title:"包装绑定"}},{path:"ledger",name:"Ledger",component:()=>Xa(()=>import("./Ledger-53K6Smgj.js"),__vite__mapDeps([24,1,9,10,25])),meta:{title:"物料台账"}}]},{path:"/:pathMatch(.*)*",redirect:"/"}],qm=iee({history:FQ(),routes:mee});qm.beforeEach(e=>{if(e.path!=="/login"&&e.path!=="/display"&&!e.path.startsWith("/display")&&!localStorage.getItem("token"))return{path:"/login",query:e.fullPath?{redirect:e.fullPath}:{}}});qm.afterEach(e=>{var t;document.title=(t=e.meta)!=null&&t.title?`${e.meta.title} - 北自所库房客户端`:"北自所库房客户端"});M1(eQ).use(qm).use(XZ,{locale:JZ}).mount("#app");export{Ff as A,M3 as B,o3 as C,re as D,qE as E,He as F,ct as G,Je as H,yee as I,jw as J,pt as K,R as L,_Z as M,Pe as N,gee as O,UE as _,G as a,cee as b,z as c,j as d,on as e,yt as f,Bt as g,L as h,mt as i,Ht as j,wt as k,se as l,S as m,Ye as n,$ as o,i as p,jA as q,It as r,bee as s,Ee as t,uee as u,I3 as v,te as w,xC as x,ef as y,e3 as z}; diff --git a/bj_power_wms_client/web/static/assets/request-DS_8eNi1.js b/bj_power_wms_client/web/static/assets/request-By4ij0Lz.js similarity index 99% rename from bj_power_wms_client/web/static/assets/request-DS_8eNi1.js rename to bj_power_wms_client/web/static/assets/request-By4ij0Lz.js index 91c26a0..5562501 100644 --- a/bj_power_wms_client/web/static/assets/request-DS_8eNi1.js +++ b/bj_power_wms_client/web/static/assets/request-By4ij0Lz.js @@ -1,4 +1,4 @@ -import{O as on,E as Fe}from"./index-9NS-icag.js";function St(e,t){return function(){return e.apply(t,arguments)}}const{toString:an}=Object.prototype,{getPrototypeOf:J}=Object,{iterator:he,toStringTag:_t}=Symbol,de=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),At=e=>typeof e=="string"&&(e==="__proto__"||e==="constructor"||e==="prototype"),Pt=(e,t,n)=>e===Object.prototype||!n&&t===null,cn=e=>{if(!Object.isExtensible(e))return!1;const t=Object.getOwnPropertyNames(e);return Object.getOwnPropertySymbols&&t.push(...Object.getOwnPropertySymbols(e)),t.every(n=>{if(At(n))return!1;const r=Object.getOwnPropertyDescriptor(e,n);return!!r&&r.configurable&&r.writable===!0})},pe=(e,t)=>{let n=e;const r=[];for(;n!=null;){if(r.indexOf(n)!==-1)return!1;r.push(n);const s=J(n);if(Pt(n,s,n===e))return!1;if(de(n,t))return!0;n=s}return!1},ln=(e,t)=>e!=null&&pe(e,t)?e[t]:void 0,un=e=>{if(e==null||typeof e!="object"&&typeof e!="function")return e;const t=J(e);if(t===null&&cn(e))return e;const n=Object.create(null),r=Object.create(null),s=[];let o=e;for(;o!=null&&s.indexOf(o)===-1;){s.push(o);const i=o===e?t:J(o);if(Pt(o,i,o===e))break;const c=Object.getOwnPropertyNames(o);Object.getOwnPropertySymbols&&c.push(...Object.getOwnPropertySymbols(o));for(const l of c)At(l)||de(r,l)||(n[l]=e[l],r[l]=!0);o=i}return n},Ve=(e=>t=>{const n=an.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),j=e=>(e=e.toLowerCase(),t=>Ve(t)===e),xe=e=>t=>typeof t===e,{isArray:Y}=Array,ee=xe("undefined");function se(e){return e!==null&&!ee(e)&&e.constructor!==null&&!ee(e.constructor)&&F(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Tt=j("ArrayBuffer");function fn(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&Tt(e.buffer),t}const dn=xe("string"),F=xe("function"),xt=xe("number"),oe=e=>e!==null&&typeof e=="object",pn=e=>e===!0||e===!1,Oe=e=>{if(!oe(e))return!1;const t=J(e);return(t===null||t===Object.prototype||J(t)===null)&&!pe(e,_t)&&!pe(e,he)},hn=e=>{if(!oe(e)||se(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},mn=j("Date"),yn=j("File"),bn=e=>!!(e&&typeof e.uri<"u"),wn=e=>e&&typeof e.getParts<"u",gn=j("Blob"),En=j("FileList"),Rn=j("Set"),On=e=>oe(e)&&F(e.pipe);function Sn(){return typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}}const rt=Sn(),st=typeof rt.FormData<"u"?rt.FormData:void 0,_n=e=>{if(!e)return!1;if(st&&e instanceof st)return!0;const t=J(e);if(!t||t===Object.prototype||!F(e.append))return!1;const n=Ve(e);return n==="formdata"||n==="object"&&F(e.toString)&&e.toString()==="[object FormData]"},An=j("URLSearchParams"),[Pn,Tn,xn,Cn]=["ReadableStream","Request","Response","Headers"].map(j),Nn=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function me(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let r,s;if(typeof e!="object"&&(e=[e]),Y(e))for(r=0,s=e.length;r0;)if(s=n[r],t===s.toLowerCase())return s;return null}const Q=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,Nt=e=>!ee(e)&&e!==Q;function $e(...e){const{caseless:t,skipUndefined:n}=Nt(this)&&this||{},r={},s=(o,i)=>{if(i==="__proto__"||i==="constructor"||i==="prototype")return;const c=t&&typeof i=="string"&&Ct(r,i)||i,l=de(r,c)?r[c]:void 0;Oe(l)&&Oe(o)?r[c]=$e(l,o):Oe(o)?r[c]=$e({},o):Y(o)?r[c]=o.slice():(!n||!ee(o))&&(r[c]=o)};for(let o=0,i=e.length;o(me(t,(s,o)=>{n&&F(s)?Object.defineProperty(e,o,{__proto__:null,value:St(s,n),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,o,{__proto__:null,value:s,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:r}),e),Ln=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),Un=(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),Object.defineProperty(e.prototype,"constructor",{__proto__:null,value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,"super",{__proto__:null,value:t.prototype}),n&&Object.assign(e.prototype,n)},Fn=(e,t,n,r)=>{let s,o,i;const c={};if(t=t||{},e==null)return t;do{for(s=Object.getOwnPropertyNames(e),o=s.length;o-- >0;)i=s[o],(!r||r(i,e,t))&&!c[i]&&(t[i]=e[i],c[i]=!0);e=n!==!1&&J(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},Bn=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return r!==-1&&r===n},jn=e=>{if(!e)return null;if(Y(e))return e;let t=e.length;if(!xt(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},kn=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&J(Uint8Array)),In=(e,t)=>{const r=(e&&e[he]).call(e);let s;for(;(s=r.next())&&!s.done;){const o=s.value;t.call(e,o[0],o[1])}},qn=(e,t)=>{let n;const r=[];for(;(n=e.exec(t))!==null;)r.push(n);return r},Hn=j("HTMLFormElement"),Mn=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,r,s){return r.toUpperCase()+s}),{propertyIsEnumerable:$n}=Object.prototype,zn=j("RegExp"),Dt=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};me(n,(s,o)=>{let i;(i=t(s,o,e))!==!1&&(r[o]=i||s)}),Object.defineProperties(e,r)},Wn=e=>{Dt(e,(t,n)=>{if(F(e)&&["arguments","caller","callee"].includes(n))return!1;const r=e[n];if(F(r)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},Vn=(e,t)=>{const n={},r=s=>{s.forEach(o=>{n[o]=!0})};return Y(e)?r(e):r(String(e).split(t)),n},vn=()=>{},Jn=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t;function Kn(e){return!!(e&&F(e.append)&&e[_t]==="FormData"&&e[he])}const Xn=e=>{const t=new WeakSet,n=r=>{if(oe(r)){if(t.has(r))return;if(se(r))return r;if(!("toJSON"in r)){t.add(r);let s;if(Rn(r)){s=[];for(const o of r){const i=n(o);!ee(i)&&s.push(i)}}else s=Y(r)?[]:{},me(r,(o,i)=>{const c=n(o);!ee(c)&&(s[i]=c)});return t.delete(r),s}}return r};return n(e)},Gn=j("AsyncFunction"),Qn=e=>e&&(oe(e)||F(e))&&F(e.then)&&F(e.catch),Lt=((e,t)=>e?setImmediate:t?((n,r)=>(Q.addEventListener("message",({source:s,data:o})=>{s===Q&&o===n&&r.length&&r.shift()()},!1),s=>{r.push(s),Q.postMessage(n,"*")}))(`axios@${Math.random()}`,[]):n=>setTimeout(n))(typeof setImmediate=="function",F(Q.postMessage)),Zn=typeof queueMicrotask<"u"?queueMicrotask.bind(Q):typeof process<"u"&&process.nextTick||Lt,Ut=e=>e!=null&&F(e[he]),Yn=e=>e!=null&&pe(e,he)&&Ut(e),a={isArray:Y,isArrayBuffer:Tt,isBuffer:se,isFormData:_n,isArrayBufferView:fn,isString:dn,isNumber:xt,isBoolean:pn,isObject:oe,isPlainObject:Oe,isEmptyObject:hn,isReadableStream:Pn,isRequest:Tn,isResponse:xn,isHeaders:Cn,isUndefined:ee,isDate:mn,isFile:yn,isReactNativeBlob:bn,isReactNative:wn,isBlob:gn,isRegExp:zn,isFunction:F,isStream:On,isURLSearchParams:An,isTypedArray:kn,isFileList:En,forEach:me,merge:$e,extend:Dn,trim:Nn,stripBOM:Ln,inherits:Un,toFlatObject:Fn,kindOf:Ve,kindOfTest:j,endsWith:Bn,toArray:jn,forEachEntry:In,matchAll:qn,isHTMLForm:Hn,hasOwnProperty:de,hasOwnProp:de,hasOwnInPrototypeChain:pe,getSafeProp:ln,toSafeFlatObject:un,reduceDescriptors:Dt,freezeMethods:Wn,toObjectSet:Vn,toCamelCase:Mn,noop:vn,toFiniteNumber:Jn,findKey:Ct,global:Q,isContextDefined:Nt,isSpecCompliantForm:Kn,toJSONObject:Xn,isAsyncFn:Gn,isThenable:Qn,setImmediate:Lt,asap:Zn,isIterable:Ut,isSafeIterable:Yn},er=a.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),tr=e=>{const t={};let n,r,s;return e&&e.split(` +import{O as on,E as Fe}from"./index-BhhFt5Di.js";function St(e,t){return function(){return e.apply(t,arguments)}}const{toString:an}=Object.prototype,{getPrototypeOf:J}=Object,{iterator:he,toStringTag:_t}=Symbol,de=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),At=e=>typeof e=="string"&&(e==="__proto__"||e==="constructor"||e==="prototype"),Pt=(e,t,n)=>e===Object.prototype||!n&&t===null,cn=e=>{if(!Object.isExtensible(e))return!1;const t=Object.getOwnPropertyNames(e);return Object.getOwnPropertySymbols&&t.push(...Object.getOwnPropertySymbols(e)),t.every(n=>{if(At(n))return!1;const r=Object.getOwnPropertyDescriptor(e,n);return!!r&&r.configurable&&r.writable===!0})},pe=(e,t)=>{let n=e;const r=[];for(;n!=null;){if(r.indexOf(n)!==-1)return!1;r.push(n);const s=J(n);if(Pt(n,s,n===e))return!1;if(de(n,t))return!0;n=s}return!1},ln=(e,t)=>e!=null&&pe(e,t)?e[t]:void 0,un=e=>{if(e==null||typeof e!="object"&&typeof e!="function")return e;const t=J(e);if(t===null&&cn(e))return e;const n=Object.create(null),r=Object.create(null),s=[];let o=e;for(;o!=null&&s.indexOf(o)===-1;){s.push(o);const i=o===e?t:J(o);if(Pt(o,i,o===e))break;const c=Object.getOwnPropertyNames(o);Object.getOwnPropertySymbols&&c.push(...Object.getOwnPropertySymbols(o));for(const l of c)At(l)||de(r,l)||(n[l]=e[l],r[l]=!0);o=i}return n},Ve=(e=>t=>{const n=an.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),j=e=>(e=e.toLowerCase(),t=>Ve(t)===e),xe=e=>t=>typeof t===e,{isArray:Y}=Array,ee=xe("undefined");function se(e){return e!==null&&!ee(e)&&e.constructor!==null&&!ee(e.constructor)&&F(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Tt=j("ArrayBuffer");function fn(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&Tt(e.buffer),t}const dn=xe("string"),F=xe("function"),xt=xe("number"),oe=e=>e!==null&&typeof e=="object",pn=e=>e===!0||e===!1,Oe=e=>{if(!oe(e))return!1;const t=J(e);return(t===null||t===Object.prototype||J(t)===null)&&!pe(e,_t)&&!pe(e,he)},hn=e=>{if(!oe(e)||se(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},mn=j("Date"),yn=j("File"),bn=e=>!!(e&&typeof e.uri<"u"),wn=e=>e&&typeof e.getParts<"u",gn=j("Blob"),En=j("FileList"),Rn=j("Set"),On=e=>oe(e)&&F(e.pipe);function Sn(){return typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}}const rt=Sn(),st=typeof rt.FormData<"u"?rt.FormData:void 0,_n=e=>{if(!e)return!1;if(st&&e instanceof st)return!0;const t=J(e);if(!t||t===Object.prototype||!F(e.append))return!1;const n=Ve(e);return n==="formdata"||n==="object"&&F(e.toString)&&e.toString()==="[object FormData]"},An=j("URLSearchParams"),[Pn,Tn,xn,Cn]=["ReadableStream","Request","Response","Headers"].map(j),Nn=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function me(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let r,s;if(typeof e!="object"&&(e=[e]),Y(e))for(r=0,s=e.length;r0;)if(s=n[r],t===s.toLowerCase())return s;return null}const Q=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,Nt=e=>!ee(e)&&e!==Q;function $e(...e){const{caseless:t,skipUndefined:n}=Nt(this)&&this||{},r={},s=(o,i)=>{if(i==="__proto__"||i==="constructor"||i==="prototype")return;const c=t&&typeof i=="string"&&Ct(r,i)||i,l=de(r,c)?r[c]:void 0;Oe(l)&&Oe(o)?r[c]=$e(l,o):Oe(o)?r[c]=$e({},o):Y(o)?r[c]=o.slice():(!n||!ee(o))&&(r[c]=o)};for(let o=0,i=e.length;o(me(t,(s,o)=>{n&&F(s)?Object.defineProperty(e,o,{__proto__:null,value:St(s,n),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,o,{__proto__:null,value:s,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:r}),e),Ln=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),Un=(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),Object.defineProperty(e.prototype,"constructor",{__proto__:null,value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,"super",{__proto__:null,value:t.prototype}),n&&Object.assign(e.prototype,n)},Fn=(e,t,n,r)=>{let s,o,i;const c={};if(t=t||{},e==null)return t;do{for(s=Object.getOwnPropertyNames(e),o=s.length;o-- >0;)i=s[o],(!r||r(i,e,t))&&!c[i]&&(t[i]=e[i],c[i]=!0);e=n!==!1&&J(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},Bn=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return r!==-1&&r===n},jn=e=>{if(!e)return null;if(Y(e))return e;let t=e.length;if(!xt(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},kn=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&J(Uint8Array)),In=(e,t)=>{const r=(e&&e[he]).call(e);let s;for(;(s=r.next())&&!s.done;){const o=s.value;t.call(e,o[0],o[1])}},qn=(e,t)=>{let n;const r=[];for(;(n=e.exec(t))!==null;)r.push(n);return r},Hn=j("HTMLFormElement"),Mn=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,r,s){return r.toUpperCase()+s}),{propertyIsEnumerable:$n}=Object.prototype,zn=j("RegExp"),Dt=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};me(n,(s,o)=>{let i;(i=t(s,o,e))!==!1&&(r[o]=i||s)}),Object.defineProperties(e,r)},Wn=e=>{Dt(e,(t,n)=>{if(F(e)&&["arguments","caller","callee"].includes(n))return!1;const r=e[n];if(F(r)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},Vn=(e,t)=>{const n={},r=s=>{s.forEach(o=>{n[o]=!0})};return Y(e)?r(e):r(String(e).split(t)),n},vn=()=>{},Jn=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t;function Kn(e){return!!(e&&F(e.append)&&e[_t]==="FormData"&&e[he])}const Xn=e=>{const t=new WeakSet,n=r=>{if(oe(r)){if(t.has(r))return;if(se(r))return r;if(!("toJSON"in r)){t.add(r);let s;if(Rn(r)){s=[];for(const o of r){const i=n(o);!ee(i)&&s.push(i)}}else s=Y(r)?[]:{},me(r,(o,i)=>{const c=n(o);!ee(c)&&(s[i]=c)});return t.delete(r),s}}return r};return n(e)},Gn=j("AsyncFunction"),Qn=e=>e&&(oe(e)||F(e))&&F(e.then)&&F(e.catch),Lt=((e,t)=>e?setImmediate:t?((n,r)=>(Q.addEventListener("message",({source:s,data:o})=>{s===Q&&o===n&&r.length&&r.shift()()},!1),s=>{r.push(s),Q.postMessage(n,"*")}))(`axios@${Math.random()}`,[]):n=>setTimeout(n))(typeof setImmediate=="function",F(Q.postMessage)),Zn=typeof queueMicrotask<"u"?queueMicrotask.bind(Q):typeof process<"u"&&process.nextTick||Lt,Ut=e=>e!=null&&F(e[he]),Yn=e=>e!=null&&pe(e,he)&&Ut(e),a={isArray:Y,isArrayBuffer:Tt,isBuffer:se,isFormData:_n,isArrayBufferView:fn,isString:dn,isNumber:xt,isBoolean:pn,isObject:oe,isPlainObject:Oe,isEmptyObject:hn,isReadableStream:Pn,isRequest:Tn,isResponse:xn,isHeaders:Cn,isUndefined:ee,isDate:mn,isFile:yn,isReactNativeBlob:bn,isReactNative:wn,isBlob:gn,isRegExp:zn,isFunction:F,isStream:On,isURLSearchParams:An,isTypedArray:kn,isFileList:En,forEach:me,merge:$e,extend:Dn,trim:Nn,stripBOM:Ln,inherits:Un,toFlatObject:Fn,kindOf:Ve,kindOfTest:j,endsWith:Bn,toArray:jn,forEachEntry:In,matchAll:qn,isHTMLForm:Hn,hasOwnProperty:de,hasOwnProp:de,hasOwnInPrototypeChain:pe,getSafeProp:ln,toSafeFlatObject:un,reduceDescriptors:Dt,freezeMethods:Wn,toObjectSet:Vn,toCamelCase:Mn,noop:vn,toFiniteNumber:Jn,findKey:Ct,global:Q,isContextDefined:Nt,isSpecCompliantForm:Kn,toJSONObject:Xn,isAsyncFn:Gn,isThenable:Qn,setImmediate:Lt,asap:Zn,isIterable:Ut,isSafeIterable:Yn},er=a.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),tr=e=>{const t={};let n,r,s;return e&&e.split(` `).forEach(function(i){s=i.indexOf(":"),n=i.substring(0,s).trim().toLowerCase(),r=i.substring(s+1).trim();const c=a.hasOwnProp(t,n);!n||c&&a.hasOwnProp(er,n)||(n==="set-cookie"?c?t[n].push(r):t[n]=[r]:t[n]=c?t[n]+", "+r:r)}),t};function nr(e){let t=0,n=e.length;for(;tt;){const r=e.charCodeAt(n-1);if(r!==9&&r!==32)break;n-=1}return t===0&&n===e.length?e:e.slice(t,n)}const rr=new RegExp("[\\u0000-\\u0008\\u000a-\\u001f\\u007f]+","g"),sr=new RegExp("[^\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+","g");function ve(e,t){return a.isArray(e)?e.map(n=>ve(n,t)):nr(String(e).replace(t,""))}const or=e=>ve(e,rr),ir=e=>ve(e,sr);function Ft(e){const t=Object.create(null);return a.forEach(e.toJSON(),(n,r)=>{t[r]=ir(n)}),t}const ot=Symbol("internals");function le(e){return e&&String(e).trim().toLowerCase()}function Se(e){return e===!1||e==null?e:a.isArray(e)?e.map(Se):or(String(e))}function ar(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}const cr=/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/;function Be(e){let t=0,n=e.length;for(;tt;){const r=e.charCodeAt(n-1);if(r!==9&&r!==32)break;n-=1}return t===0&&n===e.length?e:e.slice(t,n)}function lr(e){const t=e.length-1;if(t<1||e.charCodeAt(0)!==34||e.charCodeAt(t)!==34)return e;let n="";for(let r=1;r=t))return e;n+=e[r]}return n}function ur(e){const t=Object.create(null),n=String(e);let r=0,s=!1,o=!1;function i(c){const l=Be(n.slice(r,c)),d=l.indexOf("=");if(d<1)return;const f=Be(l.slice(0,d));if(!cr.test(f))return;const p=f.toLowerCase();if(p==="__proto__"||p==="constructor"||p==="prototype")return;const y=Be(l.slice(d+1));t[p]=lr(y)}for(let c=0;c/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function je(e,t,n,r,s){if(a.isFunction(r))return r.call(this,t,n);if(s&&(t=n),!!a.isString(t)){if(a.isString(r))return t.indexOf(r)!==-1;if(a.isRegExp(r))return r.test(t)}}function dr(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,r)=>n.toUpperCase()+r)}function pr(e,t){const n=a.toCamelCase(" "+t);["get","set","has"].forEach(r=>{Object.defineProperty(e,r+n,{__proto__:null,value:function(s,o,i){return this[r].call(this,t,s,o,i)},configurable:!0})})}let U=class{constructor(t){t&&this.set(t)}set(t,n,r){const s=this;function o(c,l,d){const f=le(l);if(!f)return;const p=a.findKey(s,f);(!p||s[p]===void 0||d===!0||d===void 0&&s[p]!==!1)&&(s[p||l]=Se(c))}const i=(c,l)=>a.forEach(c,(d,f)=>o(d,f,l));if(a.isPlainObject(t)||t instanceof this.constructor)i(t,n);else if(a.isString(t)&&(t=t.trim())&&!fr(t))i(tr(t),n);else if(a.isObject(t)&&a.isSafeIterable(t)){let c=Object.create(null),l,d;for(const f of t){if(!a.isArray(f))throw new TypeError("Object iterator must return a key-value pair");d=f[0],a.hasOwnProp(c,d)?(l=c[d],c[d]=a.isArray(l)?[...l,f[1]]:[l,f[1]]):c[d]=f[1]}i(c,n)}else t!=null&&o(n,t,r);return this}get(t,n){if(t=le(t),t){const r=a.findKey(this,t);if(r){const s=this[r];if(!n)return s;if(n===!0)return ar(s);if(a.isFunction(n))return n.call(this,s,r);if(a.isRegExp(n))return n.exec(s);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=le(t),t){const r=a.findKey(this,t);return!!(r&&this[r]!==void 0&&(!n||je(this,this[r],r,n)))}return!1}delete(t,n){const r=this;let s=!1;function o(i){if(i=le(i),i){const c=a.findKey(r,i);c&&(!n||je(r,r[c],c,n))&&(delete r[c],s=!0)}}return a.isArray(t)?t.forEach(o):o(t),s}clear(t){const n=Object.keys(this);let r=n.length,s=!1;for(;r--;){const o=n[r];(!t||je(this,this[o],o,t,!0))&&(delete this[o],s=!0)}return s}normalize(t){const n=this,r={};return a.forEach(this,(s,o)=>{const i=a.findKey(r,o);if(i){n[i]=Se(s),delete n[o];return}const c=t?dr(o):String(o).trim();c!==o&&delete n[o],n[c]=Se(s),r[c]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return a.forEach(this,(r,s)=>{r!=null&&r!==!1&&(n[s]=t&&a.isArray(r)?r.join(", "):r)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` `)}getSetCookie(){const t=this.get("set-cookie");return a.isArray(t)?t:t==null||t===!1?[]:[t]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static parseParameters(t){return ur(t)}static concat(t,...n){const r=new this(t);return n.forEach(s=>r.set(s)),r}static accessor(t){const r=(this[ot]=this[ot]={accessors:{}}).accessors,s=this.prototype;function o(i){const c=le(i);r[c]||(pr(s,i),r[c]=!0)}return a.isArray(t)?t.forEach(o):o(t),this}};U.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);a.reduceDescriptors(U.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(r){this[n]=r}}});a.freezeMethods(U);const Pe="[REDACTED ****]";function hr(e){if(a.hasOwnProp(e,"toJSON"))return!0;let t=Object.getPrototypeOf(e);for(;t&&t!==Object.prototype;){if(a.hasOwnProp(t,"toJSON"))return!0;t=Object.getPrototypeOf(t)}return!1}function mr(e,t){const n=new Set(t.map(o=>String(o).toLowerCase())),r=[],s=o=>{if(o===null||typeof o!="object"||a.isBuffer(o))return o;if(r.indexOf(o)!==-1)return;o instanceof U&&(o=o.toJSON()),r.push(o);let i;if(a.isArray(o))i=[],o.forEach((c,l)=>{const d=s(c);a.isUndefined(d)||(i[l]=d)});else{if(!a.isPlainObject(o)&&hr(o))return r.pop(),o;i=Object.create(null);for(const[c,l]of Object.entries(o)){const d=n.has(c.toLowerCase())?Pe:s(l);a.isUndefined(d)||(i[c]=d)}}return r.pop(),i};return s(e)}function it(e){try{return String(e)}catch{return""}}function yr(e){return e.errors.map(n=>{try{return n&&n.message?it(n.message):it(n)}catch{return""}}).filter(Boolean).join("; ")||e.name||"AggregateError"}let h=class Bt extends Error{static from(t,n,r,s,o,i){let c=t.message;!c&&a.isArray(t.errors)&&t.errors.length&&(c=yr(t));const l=new Bt(c,n||t.code,r,s,o);return Object.defineProperty(l,"cause",{__proto__:null,value:t,writable:!0,enumerable:!1,configurable:!0}),l.name=t.name,t.status!=null&&l.status==null&&(l.status=t.status),i&&Object.assign(l,i),l}constructor(t,n,r,s,o){super(t),Object.defineProperty(this,"message",{__proto__:null,value:t,enumerable:!0,writable:!0,configurable:!0}),this.name="AxiosError",this.isAxiosError=!0,n&&(this.code=n),r&&(this.config=r),s&&(this.request=s),o&&(this.response=o,this.status=o.status)}toJSON(){const t=this.config,n=t&&a.hasOwnProp(t,"redact")?t.redact:void 0,r=a.isArray(n)&&n.length>0?mr(t,n):a.toJSONObject(t);return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:r,code:this.code,status:this.status}}};h.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE";h.ERR_BAD_OPTION="ERR_BAD_OPTION";h.ECONNABORTED="ECONNABORTED";h.ETIMEDOUT="ETIMEDOUT";h.ECONNREFUSED="ECONNREFUSED";h.ERR_NETWORK="ERR_NETWORK";h.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS";h.ERR_DEPRECATED="ERR_DEPRECATED";h.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE";h.ERR_BAD_REQUEST="ERR_BAD_REQUEST";h.ERR_CANCELED="ERR_CANCELED";h.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT";h.ERR_INVALID_URL="ERR_INVALID_URL";h.ERR_FORM_DATA_DEPTH_EXCEEDED="ERR_FORM_DATA_DEPTH_EXCEEDED";const br=null,jt=100;function ze(e){return a.isPlainObject(e)||a.isArray(e)}function kt(e){return a.endsWith(e,"[]")?e.slice(0,-2):e}function ke(e,t,n){return e?e.concat(t).map(function(s,o){return s=kt(s),!n&&o?"["+s+"]":s}).join(n?".":""):t}function wr(e){return a.isArray(e)&&!e.some(ze)}const gr=a.toFlatObject(a,{},null,function(t){return/^is[A-Z]/.test(t)});function Ce(e,t,n){if(!a.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const r=(m,g)=>{const b=a.getSafeProp(n,m);return a.isUndefined(b)?g:b},s=r("metaTokens",!0),o=r("visitor")||S,i=r("dots",!1),c=r("indexes",!1),l=r("Blob")||typeof Blob<"u"&&Blob,d=r("maxDepth",jt),f=l&&a.isSpecCompliantForm(t),p=[];if(!a.isFunction(o))throw new TypeError("visitor must be a function");function y(m){if(m===null)return"";if(a.isDate(m))return m.toISOString();if(a.isBoolean(m))return m.toString();if(!f&&a.isBlob(m))throw new h("Blob is not supported. Use a Buffer instead.");if(a.isArrayBuffer(m)||a.isTypedArray(m)){if(f&&typeof l=="function")return new l([m]);throw new h("Blob is not supported. Use a Buffer instead.",h.ERR_NOT_SUPPORT)}return m}function E(m){if(m>d)throw new h("Object is too deeply nested ("+m+" levels). Max depth: "+d,h.ERR_FORM_DATA_DEPTH_EXCEEDED)}function R(m,g){if(d===1/0)return JSON.stringify(m);const b=[];return JSON.stringify(m,function(N,_){if(!a.isObject(_))return _;for(;b.length&&b[b.length-1]!==this;)b.pop();return b.push(_),E(g+b.length-1),_})}function S(m,g,b){let T=m;if(a.isReactNative(t)&&a.isReactNativeBlob(m))return t.append(ke(b,g,i),y(m)),!1;if(m&&!b&&typeof m=="object"){if(a.endsWith(g,"{}"))g=s?g:g.slice(0,-2),m=R(m,1);else if(a.isArray(m)&&wr(m)||(a.isFileList(m)||a.endsWith(g,"[]"))&&(T=a.toArray(m)))return g=kt(g),T.forEach(function(_,I){!(a.isUndefined(_)||_===null)&&t.append(c===!0?ke([g],I,i):c===null?g:g+"[]",y(_))}),!1}return ze(m)?!0:(t.append(ke(b,g,i),y(m)),!1)}const P=Object.assign(gr,{defaultVisitor:S,convertValue:y,isVisitable:ze});function u(m,g,b=0){if(!a.isUndefined(m)){if(E(b),p.indexOf(m)!==-1)throw new Error("Circular reference detected in "+g.join("."));p.push(m),a.forEach(m,function(N,_){(!(a.isUndefined(N)||N===null)&&o.call(t,N,a.isString(_)?_.trim():_,g,P))===!0&&u(N,g?g.concat(_):[_],b+1)}),p.pop()}}if(!a.isObject(e))throw new TypeError("data must be an object");return u(e),t}function at(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"};return encodeURIComponent(e).replace(/[!'()~]|%20/g,function(r){return t[r]})}function Je(e,t){this._pairs=[],e&&Ce(e,this,t)}const It=Je.prototype;It.append=function(t,n){this._pairs.push([t,n])};It.toString=function(t){const n=t?r=>t.call(this,r,at):at;return this._pairs.map(function(s){return n(s[0])+"="+n(s[1])},"").join("&")};function Er(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function qt(e,t,n){if(!t)return e;e=e||"";const r=a.isFunction(n)?{serialize:n}:n,s=a.getSafeProp(r,"encode")||Er,o=a.getSafeProp(r,"serialize");let i;if(o?i=o(t,r):i=a.isURLSearchParams(t)?t.toString():new Je(t,r).toString(s),i){const c=e.indexOf("#");c!==-1&&(e=e.slice(0,c)),e+=(e.indexOf("?")===-1?"?":"&")+i}return e}const ue=Symbol("internals");function Ht(e){return e?e.length:0}function ct(e){if(e)for(;e.length&&e[e.length-1]===null;)e.pop()}function fe(e,t){const n=e.handlers,r=Ht(n);n!==t.handlersRef?(t.handlersRef=n,t.handlerEntries.clear()):r!==t.handlersLength&&(r?t.handlerEntries.forEach(function(o,i){n[o.index]!==o.handler&&t.handlerEntries.delete(i)}):t.handlerEntries.clear()),t.handlersLength=r}class lt{constructor(){this.handlers=[],this[ue]={handlersRef:this.handlers,handlersLength:this.handlers.length,handlerEntries:new Map,iterationDepth:0,nextId:0}}use(t,n,r){const s={fulfilled:t,rejected:n,synchronous:r?r.synchronous:!1,runWhen:r?r.runWhen:null},o=this[ue];this.handlers==null&&(this.handlers=[]),fe(this,o);const i=o.nextId++;return this.handlers.push(s),o.handlerEntries.set(i,{handler:s,index:this.handlers.length-1}),o.handlersLength=this.handlers.length,i}eject(t){const n=this[ue];fe(this,n);const r=n.handlerEntries.get(t);if(r){if(n.handlerEntries.delete(t),this.handlers[r.index]!==r.handler)return;this.handlers[r.index]=null,n.iterationDepth||(ct(this.handlers),n.handlersLength=this.handlers.length)}}clear(){this.handlers&&(this.handlers=[],fe(this,this[ue]))}forEach(t){const n=this[ue];fe(this,n),n.iterationDepth++;try{a.forEach(this.handlers,function(s){s!==null&&t(s)})}finally{--n.iterationDepth||(fe(this,n),ct(this.handlers),n.handlersLength=Ht(this.handlers))}}}const Ke={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0,advertiseZstdAcceptEncoding:!1,validateStatusUndefinedResolves:!0},Rr=typeof URLSearchParams<"u"?URLSearchParams:Je,Or=typeof FormData<"u"?FormData:null,Sr=typeof Blob<"u"?Blob:null,_r={isBrowser:!0,classes:{URLSearchParams:Rr,FormData:Or,Blob:Sr},protocols:["http","https","file","blob","url","data"]},Xe=typeof window<"u"&&typeof document<"u",We=typeof navigator=="object"&&navigator||void 0,Ar=Xe&&(!We||["ReactNative","NativeScript","NS"].indexOf(We.product)<0),Pr=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",Tr=Xe&&window.location.href||"http://localhost",xr=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:Xe,hasStandardBrowserEnv:Ar,hasStandardBrowserWebWorkerEnv:Pr,navigator:We,origin:Tr},Symbol.toStringTag,{value:"Module"})),x={...xr,..._r};function Cr(e,t){return Ce(e,new x.classes.URLSearchParams,{visitor:function(n,r,s,o){return x.isNode&&a.isBuffer(n)?(this.append(r,n.toString("base64")),!1):o.defaultVisitor.apply(this,arguments)},...t})}const ut=jt;function Mt(e){if(e>ut)throw new h("FormData field is too deeply nested ("+e+" levels). Max depth: "+ut,h.ERR_FORM_DATA_DEPTH_EXCEEDED)}function Nr(e){const t=[],n=/[^.[\]]+|\[([^.[\]]*)]/g;let r;for(;(r=n.exec(e))!==null;)Mt(t.length),t.push(r[0]==="[]"?"":r[1]||r[0]);return t}function Dr(e){const t={},n=Object.keys(e);let r;const s=n.length;let o;for(r=0;r=n.length;return i=!i&&a.isArray(s)?s.length:i,l?(a.hasOwnProp(s,i)?s[i]=a.isArray(s[i])?s[i].concat(r):[s[i],r]:s[i]=r,!c):((!a.hasOwnProp(s,i)||!a.isObject(s[i]))&&(s[i]=[]),t(n,r,s[i],o)&&a.isArray(s[i])&&(s[i]=Dr(s[i])),!c)}if(a.isFormData(e)&&a.isFunction(e.entries)){const n={};return a.forEachEntry(e,(r,s)=>{t(Nr(r),s,n,0)}),n}return null}const zt=Object.freeze(["get","delete","head","options","post","put","patch","purge","link","unlink","query"]),re=(e,t)=>e!=null&&a.hasOwnProp(e,t)?e[t]:void 0;function Lr(e,t,n){if(a.isString(e))try{return(t||JSON.parse)(e),a.trim(e)}catch(r){if(r.name!=="SyntaxError")throw r}return(n||JSON.stringify)(e)}const ye={transitional:Ke,adapter:["xhr","http","fetch"],transformRequest:[function(t,n){const r=n.getContentType()||"",s=r.indexOf("application/json")>-1,o=a.isObject(t);if(o&&a.isHTMLForm(t)&&(t=new FormData(t)),a.isFormData(t))return s?JSON.stringify($t(t)):t;if(a.isArrayBuffer(t)||a.isBuffer(t)||a.isStream(t)||a.isFile(t)||a.isBlob(t)||a.isReadableStream(t))return t;if(a.isArrayBufferView(t))return t.buffer;if(a.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let c;if(o){const l=re(this,"formSerializer");if(r.indexOf("application/x-www-form-urlencoded")>-1)return Cr(t,l).toString();if((c=a.isFileList(t))||r.indexOf("multipart/form-data")>-1){const d=re(this,"env"),f=d&&d.FormData;return Ce(c?{"files[]":t}:t,f&&new f,l)}}return o||s?(n.setContentType("application/json",!1),Lr(t)):t}],transformResponse:[function(t){const n=re(this,"transitional")||ye.transitional,r=n&&n.forcedJSONParsing,s=re(this,"responseType"),o=s==="json";if(a.isResponse(t)||a.isReadableStream(t))return t;if(t&&a.isString(t)&&(r&&!s||o)){const c=!(n&&n.silentJSONParsing)&&o;try{return JSON.parse(t,re(this,"parseReviver"))}catch(l){if(c)throw l.name==="SyntaxError"?h.from(l,h.ERR_BAD_RESPONSE,this,null,re(this,"response")):l}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:x.classes.FormData,Blob:x.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};a.forEach(zt,e=>{ye.headers[e]={}});function Ie(e,t){const n=this||ye,r=t||n,s=U.from(r.headers);let o=r.data;return a.forEach(e,function(c){o=c.call(n,o,s.normalize(),t?t.status:void 0)}),s.normalize(),o}function Wt(e){return!!(e&&e.__CANCEL__)}let be=class extends h{constructor(t,n,r){super(t??"canceled",h.ERR_CANCELED,n,r),this.name="CanceledError",this.__CANCEL__=!0}};function Vt(e,t,n){const r=n.config.validateStatus;!n.status||!r||r(n.status)?e(n):t(new h("Request failed with status code "+n.status,n.status>=400&&n.status<500?h.ERR_BAD_REQUEST:h.ERR_BAD_RESPONSE,n.config,n.request,n))}const Ur=/[\t\n\r]/g;function vt(e){if(typeof e!="string")return e;let t=0;for(;t{n=p,s=null,o&&(clearTimeout(o),o=null),e(...f)};return[(...f)=>{const p=Date.now(),y=p-n;y>=r?i(f,p):(s=f,o||(o=setTimeout(()=>{o=null,i(s)},r-y)))},()=>s&&i(s),(...f)=>i(f)]}const Te=(e,t,n=3)=>{let r=0;const s=Fr(50,250);return Br(o=>{if(!o||!a.isNumber(o.loaded))return;const i=o.loaded,c=o.lengthComputable?o.total:void 0,l=Math.max(0,c!=null?Math.min(i,c):i),d=Math.max(0,l-r),f=s(d);r=Math.max(r,l);const p={loaded:l,total:c,progress:c?l/c:void 0,bytes:d,rate:f||void 0,estimated:f&&c?(c-l)/f:void 0,event:o,lengthComputable:c!=null,[t?"download":"upload"]:!0};e(p)},n)},ft=(e,t)=>{const n=e!=null;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},dt=(e,t=a.asap)=>(...n)=>t(()=>e(...n)),jr=x.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,x.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(x.origin),x.navigator&&/(msie|trident)/i.test(x.navigator.userAgent)):()=>!0,kr=x.hasStandardBrowserEnv?{write(e,t,n,r,s,o,i){if(typeof document>"u")return;const c=[`${e}=${encodeURIComponent(t)}`];a.isNumber(n)&&c.push(`expires=${new Date(n).toUTCString()}`),a.isString(r)&&c.push(`path=${r}`),a.isString(s)&&c.push(`domain=${s}`),o===!0&&c.push("secure"),a.isString(i)&&c.push(`SameSite=${i}`),document.cookie=c.join("; ")},read(e){if(typeof document>"u")return null;const t=document.cookie.split(";");for(let n=0;n0&&e.charCodeAt(n-1)===47;)n--;return e.slice(0,n)+"/"+t.replace(/^\/+/,"")}const Hr=/^https?:(?!\/\/)/i;function Mr(e){return e&&e.replace(/(^|&)([^=&]*=)?[^&]+/g,(t,n,r="")=>`${n}${r}${Pe}`)}function $r(e){const t=e.replace(/^(https?:\/{0,2})[^/?#]*@/i,`$1${Pe}@`),n=t.indexOf("#"),s=(n===-1?t:t.slice(0,n)).replace(/([?&][^=&#]*=)[^&#]*/g,`$1${Pe}`);return n===-1?s:`${s}#${Mr(t.slice(n+1))}`}function pt(e,t){if(typeof e=="string"){const n=vt(e);if(Hr.test(n))throw new h(`Invalid URL ${JSON.stringify($r(n))}: missing "//" after protocol`,h.ERR_INVALID_URL,t)}}function Jt(e,t,n,r){pt(t,r);let s=!Ir(t);return e&&(s||n===!1)?(pt(e,r),qr(e,t)):t}const ht=e=>e instanceof U?{...e}:e,zr=e=>Object.getOwnPropertySymbols&&Object.getOwnPropertyDescriptor?Object.keys(e).concat(Object.getOwnPropertySymbols(e).filter(t=>Object.getOwnPropertyDescriptor(e,t).enumerable)):Object.keys(e);function te(e,t){e=e||{},t=t||{};const n=Object.create(null);Object.defineProperty(n,"hasOwnProperty",{__proto__:null,value:Object.prototype.hasOwnProperty,enumerable:!1,writable:!0,configurable:!0});function r(f,p,y,E){return a.isPlainObject(f)&&a.isPlainObject(p)?a.merge.call({caseless:E},f,p):a.isPlainObject(p)?a.merge({},p):a.isArray(p)?p.slice():p}function s(f,p,y,E){if(a.isUndefined(p)){if(!a.isUndefined(f))return r(void 0,f,y,E)}else return r(f,p,y,E)}function o(f,p){if(!a.isUndefined(p))return r(void 0,p)}function i(f,p){if(a.isUndefined(p)){if(!a.isUndefined(f))return r(void 0,f)}else return r(void 0,p)}function c(f){const p=a.hasOwnProp(t,"transitional")?t.transitional:void 0;if(!a.isUndefined(p))if(a.isPlainObject(p)){if(a.hasOwnProp(p,f))return p[f]}else return;const y=a.hasOwnProp(e,"transitional")?e.transitional:void 0;if(a.isPlainObject(y)&&a.hasOwnProp(y,f))return y[f]}function l(f,p,y){if(a.hasOwnProp(t,y))return r(f,p);if(a.hasOwnProp(e,y))return r(void 0,f)}const d={url:o,method:o,data:o,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutErrorMessage:i,withCredentials:i,withXSRFToken:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,allowedSocketPaths:i,responseEncoding:i,validateStatus:l,headers:(f,p,y)=>s(ht(f),ht(p),y,!0)};return a.forEach(zr({...e,...t}),function(p){if(p==="__proto__"||p==="constructor"||p==="prototype")return;const y=a.hasOwnProp(d,p)?d[p]:s,E=a.hasOwnProp(e,p)?e[p]:void 0,R=a.hasOwnProp(t,p)?t[p]:void 0,S=y(E,R,p);a.isUndefined(S)&&y!==l||(n[p]=S)}),a.hasOwnProp(t,"validateStatus")&&a.isUndefined(t.validateStatus)&&c("validateStatusUndefinedResolves")===!1&&(a.hasOwnProp(e,"validateStatus")?n.validateStatus=r(void 0,e.validateStatus):delete n.validateStatus),n}const Wr=["content-type","content-length"];function Vr(e,t,n){if(n!=="content-only"){e.set(t);return}Object.entries(t||{}).forEach(([r,s])=>{Wr.includes(r.toLowerCase())&&e.set(r,s)})}const vr=e=>encodeURIComponent(e).replace(/%([0-9A-F]{2})/gi,(t,n)=>String.fromCharCode(parseInt(n,16)));function Kt(e){const t=te({},e),n=y=>a.hasOwnProp(t,y)?t[y]:void 0,r=n("data");let s=n("withXSRFToken");const o=n("xsrfHeaderName"),i=n("xsrfCookieName");let c=n("headers");const l=n("auth"),d=n("baseURL"),f=n("allowAbsoluteUrls"),p=n("url");if(t.headers=c=U.from(c),t.url=qt(Jt(d,p,f,t),n("params"),n("paramsSerializer")),l){const y=a.getSafeProp(l,"username")||"",E=a.getSafeProp(l,"password")||"";try{c.set("Authorization","Basic "+btoa(y+":"+(E?vr(E):"")))}catch(R){throw h.from(R,h.ERR_BAD_OPTION_VALUE,e)}}if(a.isFormData(r)){const y=a.getSafeProp(r,"getHeaders");x.hasStandardBrowserEnv||x.hasStandardBrowserWebWorkerEnv||a.isReactNative(r)?c.setContentType(void 0):a.isFunction(y)&&Vr(c,y.call(r),n("formDataHeaderPolicy"))}if(x.hasStandardBrowserEnv&&(a.isFunction(s)&&(s=s(t)),s===!0||s==null&&jr(t.url))){const E=o&&i&&kr.read(i);E&&c.set(o,E)}return t}const Jr=typeof XMLHttpRequest<"u",Kr=Jr&&function(e){return new Promise(function(n,r){const s=Kt(e);let o=s.data;const i=U.from(s.headers).normalize();let{responseType:c,onUploadProgress:l,onDownloadProgress:d}=s,f,p,y,E,R,S;function P(){E&&E(),R&&R(),s.cancelToken&&s.cancelToken.unsubscribe(f),s.signal&&s.signal.removeEventListener("abort",f)}let u=new XMLHttpRequest;u.open(s.method.toUpperCase(),s.url,!0),u.timeout=s.timeout;function m(b){if(!u)return;if(u.status===0&&(qe(vt(s.url))||qe(x.origin))!=="file"&&!(u.responseURL&&u.responseURL.startsWith("file:"))){r(new h("Request aborted",h.ECONNABORTED,e,u)),P(),u=null;return}try{b?S&&S(b):R&&R()}catch(I){setTimeout(()=>{throw I})}if(!u)return;const T=U.from("getAllResponseHeaders"in u&&u.getAllResponseHeaders()),_={data:!c||c==="text"||c==="json"?u.responseText:u.response,status:u.status,statusText:u.statusText,headers:T,config:e,request:u};Vt(function(K){n(K),P()},function(K){r(K),P()},_),u=null}"onloadend"in u?u.onloadend=m:u.onreadystatechange=function(){!u||u.readyState!==4||u.status===0&&!(u.responseURL&&u.responseURL.startsWith("file:"))||setTimeout(m)},u.onabort=function(){u&&(r(new h("Request aborted",h.ECONNABORTED,e,u)),P(),u=null)},u.onerror=function(T){const N=T&&T.message?T.message:"Network Error",_=new h(N,h.ERR_NETWORK,e,u);_.event=T||null,r(_),P(),u=null},u.ontimeout=function(){let T=s.timeout?"timeout of "+s.timeout+"ms exceeded":"timeout exceeded";const N=s.transitional||Ke;s.timeoutErrorMessage&&(T=s.timeoutErrorMessage),r(new h(T,N.clarifyTimeoutError?h.ETIMEDOUT:h.ECONNABORTED,e,u)),P(),u=null},o===void 0&&i.setContentType(null),"setRequestHeader"in u&&a.forEach(Ft(i),function(T,N){u.setRequestHeader(N,T)}),a.isUndefined(s.withCredentials)||(u.withCredentials=!!s.withCredentials),c&&c!=="json"&&(u.responseType=s.responseType),d&&([y,R,S]=Te(d,!0),u.addEventListener("progress",y)),l&&u.upload&&([p,E]=Te(l),u.upload.addEventListener("progress",p),u.upload.addEventListener("loadend",E)),(s.cancelToken||s.signal)&&(f=b=>{u&&(r(!b||b.type?new be(null,e,u):b),u.abort(),P(),u=null)},s.cancelToken&&s.cancelToken.subscribe(f),s.signal&&(s.signal.aborted?f():s.signal.addEventListener("abort",f)));const g=qe(s.url);if(g&&!x.protocols.includes(g)){r(new h("Unsupported protocol "+g+":",h.ERR_BAD_REQUEST,e)),P();return}u.send(o||null)})},Xr=(e,t)=>{if(e=e?e.filter(Boolean):[],!t&&!e.length)return;const n=new AbortController;let r=!1;const s=function(l){if(!r){r=!0,i();const d=l instanceof Error?l:this.reason;n.abort(d instanceof h?d:new be(d instanceof Error?d.message:d))}};let o=t&&setTimeout(()=>{o=null,s(new h(`timeout of ${t}ms exceeded`,h.ETIMEDOUT))},t);const i=()=>{e&&(o&&clearTimeout(o),o=null,e.forEach(l=>{l.unsubscribe?l.unsubscribe(s):l.removeEventListener("abort",s)}),e=null)};e.forEach(l=>{if(!r){if(l.aborted){s.call(l);return}l.addEventListener("abort",s,{once:!0})}});const{signal:c}=n;return c.unsubscribe=()=>a.asap(i),c},Gr=function*(e,t){let n=e.byteLength;if(n{const s=Qr(e,t);let o=0,i,c=l=>{i||(i=!0,r&&r(l))};return new ReadableStream({async pull(l){try{const{done:d,value:f}=await s.next();if(d){c(),l.close();return}let p=f.byteLength;if(n){let y=o+=p;n(y)}l.enqueue(new Uint8Array(f))}catch(d){throw c(d),d}},cancel(l){return c(l),s.return()}},{highWaterMark:2})},yt=e=>e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102,Xt=(e,t,n)=>t+2e<=57?e-48:(e&223)-55,Yr=e=>e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||e===43||e===47||e===45||e===95,es=e=>e===9||e===10||e===12||e===13||e===32,ts=e=>{const t=Math.floor(e/4),n=e%4;return t*3+(n===2?1:n===3?2:0)},ns=e=>{const t=e.length;let n=0;return t>0&&e.charCodeAt(t-1)===61&&(n++,t>1&&e.charCodeAt(t-2)===61&&n++),Math.floor((t-n)*3/4)},rs=e=>{const t=e.length;let n=0,r=0,s=!1;for(let o=0;o0){s=!0;continue}n++}}return s||r>2||r>0&&(n+r)%4!==0||n%4===1?ns(e):ts(n)},ss=(e,t)=>{if(!e||typeof e!="string"||!e.startsWith("data:"))return 0;const n=e.indexOf(",");if(n<0)return 0;const r=e.slice(5,n),s=e.slice(n+1);if(/;base64/i.test(r))return t(s);let i=0;for(let c=0,l=s.length;c=55296&&d<=56319&&c+1=56320&&f<=57343?(i+=4,c++):i+=3}else i+=3}return i};function os(e){const t=typeof e=="string"?e.indexOf("#"):-1;return ss(t===-1?e:e.slice(0,t),rs)}const Ge="1.20.0",wt=64*1024,is={cache:"default",redirect:"follow",referrer:"about:client",referrerPolicy:"",mode:"cors",integrity:"",keepalive:!1,priority:"auto",window:null},{isFunction:Re}=a,as=e=>encodeURIComponent(e).replace(/%([0-9A-F]{2})/gi,(t,n)=>String.fromCharCode(parseInt(n,16))),gt=e=>{if(!a.isString(e))return e;try{return decodeURIComponent(e)}catch{return e}},Et=(e,...t)=>{try{return!!e(...t)}catch{return!1}},cs=e=>{const t=e.indexOf("://");let n=e;return t!==-1&&(n=n.slice(t+3)),n.includes("@")||n.includes(":")},ls=e=>{const t=a.global!==void 0&&a.global!==null?a.global:globalThis,{ReadableStream:n,TextEncoder:r}=t;e=a.merge.call({skipUndefined:!0},{Request:t.Request,Response:t.Response},e);const{fetch:s,Request:o,Response:i}=e,c=s?Re(s):typeof fetch=="function",l=Re(o),d=Re(i);if(!c)return!1;const f=c&&Re(n),p=c&&(typeof r=="function"?(u=>m=>u.encode(m))(new r):async u=>new Uint8Array(await new o(u).arrayBuffer())),y=l&&f&&Et(()=>{let u=!1;const m=new o(x.origin,{body:new n,method:"POST",get duplex(){return u=!0,"half"}}),g=m.headers.has("Content-Type");return m.body!=null&&m.body.cancel(),u&&!g}),E=d&&f&&Et(()=>a.isReadableStream(new i("").body)),R={stream:E&&(u=>u.body)};c&&["text","arrayBuffer","blob","formData","stream"].forEach(u=>{!R[u]&&(R[u]=(m,g)=>{let b=m&&m[u];if(b)return b.call(m);throw new h(`Response type '${u}' is not supported`,h.ERR_NOT_SUPPORT,g)})});const S=async u=>{if(u==null)return 0;if(a.isBlob(u))return u.size;if(a.isSpecCompliantForm(u))return(await new o(x.origin,{method:"POST",body:u}).arrayBuffer()).byteLength;if(a.isArrayBufferView(u)||a.isArrayBuffer(u))return u.byteLength;if(a.isURLSearchParams(u)&&(u=u+""),a.isString(u))return(await p(u)).byteLength},P=async(u,m)=>{const g=a.toFiniteNumber(u.getContentLength());return g??S(m)};return async u=>{let{url:m,method:g,data:b,signal:T,cancelToken:N,timeout:_,onDownloadProgress:I,onUploadProgress:K,responseType:z,headers:W,withCredentials:we="same-origin",fetchOptions:De,maxContentLength:q,maxBodyLength:ge,maxRedirects:tn}=Kt(u);const ie=a.isNumber(q)&&q>-1,Le=a.isNumber(ge)&&ge>-1,nn=O=>a.hasOwnProp(u,O)?u[O]:void 0;let Ze=s||fetch;z=z?(z+"").toLowerCase():"text";let V=Xr([T,N&&N.toAbortSignal()],_),C=null;const X=V&&V.unsubscribe&&(()=>{V.unsubscribe()});let ne,ae=null;const Ye=()=>new h("Request body larger than maxBodyLength limit",h.ERR_BAD_REQUEST,u,C);try{let O;const B=nn("auth");if(B){const w=a.getSafeProp(B,"username")||"",D=a.getSafeProp(B,"password")||"";O={username:w,password:D}}if(cs(m)){const w=new URL(m,x.origin);if(!O&&(w.username||w.password)){const D=gt(w.username),v=gt(w.password);O={username:D,password:v}}(w.username||w.password)&&(w.username="",w.password="",m=w.href)}if(O&&(W.delete("authorization"),W.set("Authorization","Basic "+btoa(as((O.username||"")+":"+(O.password||""))))),ie&&typeof m=="string"&&m.startsWith("data:")&&os(m)>q)throw new h("maxContentLength size of "+q+" exceeded",h.ERR_BAD_RESPONSE,u,C);if(Le&&g!=="get"&&g!=="head"){const w=await S(b);if(typeof w=="number"&&isFinite(w)&&(ne=w,w>ge))throw Ye()}const Ee=Le&&(a.isReadableStream(b)||a.isStream(b)),et=(w,D,v)=>mt(w,wt,G=>{if(Le&&G>ge)throw ae=Ye();D&&D(G)},v);if(y&&g!=="get"&&g!=="head"&&(K||Ee)){if(ne=ne??await P(W,b),ne!==0||Ee){let w=new o(m,{method:"POST",body:b,duplex:"half"}),D;if(a.isFormData(b)&&(D=w.headers.get("content-type"))&&W.setContentType(D),w.body){const[v,G]=K&&ft(ne,Te(dt(K)))||[];b=et(w.body,v,G)}}}else if(Ee&&!l&&f&&g!=="get"&&g!=="head")b=et(b);else if(Ee&&l&&!y&&g!=="get"&&g!=="head")throw new h("Stream request bodies are not supported by the current fetch implementation",h.ERR_NOT_SUPPORT,u,C);a.isString(we)||(we=we?"include":"omit");const rn=l&&"credentials"in o.prototype;if(a.isFormData(b)){const w=W.getContentType();w&&/^multipart\/form-data/i.test(w)&&!/boundary=/i.test(w)&&W.delete("content-type")}W.set("User-Agent","axios/"+Ge,!1);const k=De==null?De:Object.assign(Object.create(null),De);k&&(delete k.body,delete k.headers,delete k.method,delete k.signal,delete k.duplex,delete k.credentials);const H=Object.assign(Object.create(null),k,{signal:V,method:g.toUpperCase(),headers:Ft(W.normalize()),body:b,duplex:"half",credentials:rn?we:void 0});l&&(a.forEach(is,(w,D)=>{H[D]===void 0&&(H[D]=w)}),H.signal===void 0&&(H.signal=null),H.body===void 0&&(H.body=null)),tn===0&&(H.redirect="manual",k&&(k.redirect="manual")),C=l&&new o(m,H);let M=await(l?Ze(C,k):Ze(m,H));const tt=U.from(M.headers);if(ie){const w=a.toFiniteNumber(tt.getContentLength());if(w!=null&&w>q)throw new h("maxContentLength size of "+q+" exceeded",h.ERR_BAD_RESPONSE,u,C)}const Ue=E&&(z==="stream"||z==="response");if(E&&M.body&&(I||ie||Ue&&X)){const w={};["status","statusText","headers"].forEach(ce=>{w[ce]=M[ce]});const D=a.toFiniteNumber(tt.getContentLength()),[v,G]=I&&ft(D,Te(dt(I),!0))||[];let nt=0;const sn=ce=>{if(ie&&(nt=ce,nt>q))throw new h("maxContentLength size of "+q+" exceeded",h.ERR_BAD_RESPONSE,u,C);v&&v(ce)};M=new i(mt(M.body,wt,sn,()=>{G&&G(),X&&X()}),w)}z=z||"text";let $=await R[a.findKey(R,z)||"text"](M,u);if(ie&&!E&&!Ue){let w;if($!=null&&(typeof $.byteLength=="number"?w=$.byteLength:typeof $.size=="number"?w=$.size:typeof $=="string"&&(w=typeof r=="function"?new r().encode($).byteLength:$.length)),typeof w=="number"&&w>q)throw new h("maxContentLength size of "+q+" exceeded",h.ERR_BAD_RESPONSE,u,C)}return!Ue&&X&&X(),await new Promise((w,D)=>{Vt(w,D,{data:$,headers:U.from(M.headers),status:M.status,statusText:M.statusText,config:u,request:C})})}catch(O){if(X&&X(),V&&V.aborted&&V.reason instanceof h){const B=V.reason;throw B.config=u,C&&(B.request=C),O!==B&&Object.defineProperty(B,"cause",{__proto__:null,value:O,writable:!0,enumerable:!1,configurable:!0}),B}if(ae)throw C&&!ae.request&&(ae.request=C),ae;if(O instanceof h)throw C&&!O.request&&(O.request=C),O;if(O&&O.name==="TypeError"&&/Load failed|fetch/i.test(O.message)){const B=new h("Network Error",h.ERR_NETWORK,u,C,O&&O.response);throw Object.defineProperty(B,"cause",{__proto__:null,value:O.cause||O,writable:!0,enumerable:!1,configurable:!0}),B}throw h.from(O,O&&O.code,u,C,O&&O.response)}}},us=new Map,Gt=e=>{let t=e&&e.env||{};const{fetch:n,Request:r,Response:s}=t,o=[r,s,n];let i=o.length,c=i,l,d,f=us;for(;c--;)l=o[c],d=f.get(l),d===void 0&&f.set(l,d=c?new Map:ls(t)),f=d;return d};Gt();const Qe={http:br,xhr:Kr,fetch:{get:Gt}};a.forEach(Qe,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{__proto__:null,value:t})}catch{}Object.defineProperty(e,"adapterName",{__proto__:null,value:t})}});const Rt=e=>`- ${e}`,fs=e=>a.isFunction(e)||e===null||e===!1;function ds(e,t){e=a.isArray(e)?e:[e];const{length:n}=e;let r,s;const o={};for(let i=0;i`adapter ${l} `+(d===!1?"is not supported by the environment":"is not available in the build"));let c=n?i.length>1?`since : `+i.map(Rt).join(` diff --git a/bj_power_wms_client/web/static/index.html b/bj_power_wms_client/web/static/index.html index 3c4181d..b94985a 100644 --- a/bj_power_wms_client/web/static/index.html +++ b/bj_power_wms_client/web/static/index.html @@ -4,7 +4,7 @@ 北自所库房客户端 - + diff --git a/bj_power_workstation/frontend/src/help.js b/bj_power_workstation/frontend/src/help.js index 1e878bb..5ff080f 100644 --- a/bj_power_workstation/frontend/src/help.js +++ b/bj_power_workstation/frontend/src/help.js @@ -1,52 +1,53 @@ // 工位终端(bj_power_workstation)操作帮助数据 -// 结构:title=界面名称,overview=整体说明,sections=按功能分组的字段/操作说明 +// 结构:title=界面名称,overview=整体说明(含数据链路),sections=分组的字段/操作说明 +// 说明:这里的"来源"特指数据由谁产生、从哪个系统来,帮助操作员理解并按真实流程操作。 export const helpWorkstation = { title: '工位终端 使用说明', overview: - '工位终端运行在 DOCK01~21 各工序工位的触屏设备上。操作员负责扫码、拧紧、上报工序完成或暂存退库。\n\n标准流程:①选择本工位号 → ②扫描工件SN → ③照工艺图纸用拧紧枪打螺丝 → ④看拧紧结果是否全部OK → ⑤该工序做完点「工序完成上报」→ 工件流转到下一工序。', + '工位终端运行在 DOCK01~21 各工序工位的触屏设备上,是产线最一线的执行入口。\n\n标准流程:①确认本工位号 → ②扫描工件 SN → ③照工艺图纸用拧紧枪打螺丝 → ④看拧紧结果是否全部 OK → ⑤点「工序完成上报」→ 工件流转到下一工序。\n\n数据链路:下发任务(MES) → 扫码(MES工位任务) → 拧紧结果(丹尼科尔拧紧枪采集,本地SQLite缓存) → 工序完成上报(MES) → 拧紧/追溯数据回到 MES 管理后台。', sections: [ { title: '顶部与工位', overview: '顶部显示当前工位号、登录人、离线同步状态。', fields: [ - { name: '工位号', source: '下拉/固定', purpose: '当前所在工位 DOCK01~21,决定读哪道工序的任务', fill: '固定工位由配置锁定不可改;否则选择与实物一致的编号' }, - { name: '待同步 N 条', source: '系统统计', purpose: '标记有拧紧/工序数据尚未上报MES(离线缓存)', fill: '点击「重试同步」立即补传,消红为正常' }, - { name: '登录人', source: '登录信息', purpose: '当前操作员账号,上报记录会带此名字溯源', fill: '开机登入本人账号,勿共用' } + { name: '工位号', source: '下拉选择/固定。数据来自本机配置或固定的 DOCK01~21。', purpose: '当前所在工位,决定读取哪道工序的任务', fill: '固定工位由配置锁定不可改;否则选与实际工位一致编号' }, + { name: '待同步 N 条', source: '系统统计。数据来自本地 SQLite 中尚未上传的记录数。', purpose: '标记有拧紧/工序数据没上报 MES(离线缓存)', fill: '点「重试同步」立即补传;消红为正常' }, + { name: '登录人', source: '登录账号。来自工位终端登录时输入。', purpose: '当前操作员,上报记录会带此名字溯源', fill: '开机登入本人账号,勿共用' } ] }, { title: '扫码区', - overview: '扫码枪扫工件SN条码,作为本次操作的追踪依据。', + overview: '扫码枪扫工件 SN 条码,作为本次操作的追踪依据。', fields: [ - { name: '当前工件 SN', source: '扫码枪扫描', purpose: '唯一识别正在加工的工件,拧紧结果和上报都挂在此SN下', fill: '用扫码枪扫条码自动填入;没枪可手输回车' }, - { name: '进度 N/M颗', source: '拧紧结果统计', purpose: '已打的螺丝数/应打总颗数', fill: '每打一颗自动+1,无需手工维护' } + { name: '当前工件 SN', source: '扫码枪扫描。来自工件自带的 SN 条码。', 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: '点「放大查看」全屏看图,照图示点位顺序拧' } + { name: '工单号', source: 'MES 派发。数据来自 MES 下发给本工位的当前任务。', purpose: '正在装配的生产工单,工序/工艺都按它来', fill: '不可改,随任务自动带出' }, + { name: '工序清单', source: 'MES 工艺配置。数据来自工单的工序组合(MES下发)。', purpose: '12 道工序任务,✔=已完成,高亮=当前应做工序', fill: '照高亮工序执行,不用手工勾选' }, + { name: '工艺图纸', source: 'MES 下发 PDF。工单配置的工艺文件。', purpose: '当前工序的工艺图/拧紧点位,指导怎么打螺丝', fill: '点「放大查看」全屏看图,照图示点位顺序拧' } ] }, { title: '拧紧结果', - overview: '实时列出当前SN每一颗螺丝拧紧的扭矩/角度/结果,任何NG会红色闪烁告警。', + overview: '实时列出当前 SN 每一颗螺丝拧紧的扭矩/角度/结果,任何 NG 会红色闪烁告警。', fields: [ - { name: '扭矩 Nm', source: '拧紧枪采集', purpose: '每颗螺丝达到的拧紧扭矩,判断是否合格', fill: '自动上传,与工艺标准不符标NG' }, - { name: '角度 °', source: '拧紧枪采集', purpose: '拧紧过程中的角度,判断屈服形变/滑牙', fill: '自动上传,无需填写' }, - { name: '结果 OK/NG', source: '系统判定', purpose: '该颗螺丝是否合格;有NG则必须复检', fill: 'NG时按告警横幅提示优先复检该工件' } + { 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时点一下即可' } + { name: '工序完成上报', source: '按钮操作 + 确认框。数据上报到 MES。', purpose: '本工位这道工序做完,通知 MES 流转到下一工序', fill: '点后输入当前工序号(如 OP10)确认;联网失败自动离线缓存' }, + { name: '暂存退库', source: '按钮操作 + 确认框。数据上报到 MES(记录已完成工序)。', purpose: '工件本工序不做完,退回库房暂存', fill: '点击并二次确认;系统记录已完成工序,重上线从下一工序继续' }, + { name: '重试同步', source: '按钮操作。数据从本地 SQLite 补传到 MES。', purpose: '把离线缓存的数据立即补传给 MES', fill: '看到「待同步」非 0 时点一下即可' } ] } ] diff --git a/bj_power_workstation/web/static/index.html b/bj_power_workstation/web/static/index.html index 2aa052b..df8c4cb 100644 --- a/bj_power_workstation/web/static/index.html +++ b/bj_power_workstation/web/static/index.html @@ -4,7 +4,7 @@ 北京动力 · 工位终端 - +