35 lines
19 KiB
JavaScript
35 lines
19 KiB
JavaScript
import{_ as O,o,c as i,a as d,w as m,f as a,d as e,t as r,q as t,F as v,m as h,n as P,r as u,i as k}from"./index-DtJUIYo6.js";const g={class:"page-help"},C={class:"ph-inner"},y={class:"ph-banner"},L={class:"ph-banner-title"},R={key:0,class:"ph-overview"},V={key:1,class:"ph-section"},T={class:"ph-fname"},W={class:"ph-fsource"},b={class:"ph-fpurpose"},A={class:"ph-ffill"},B={key:0,class:"ph-sec-title"},G={key:1,class:"ph-sec-overview"},D={class:"ph-fname"},U={class:"ph-fsource"},x={class:"ph-fpurpose"},K={class:"ph-ffill"},I={__name:"PageHelp",props:{data:{type:Object,default:()=>({title:"操作说明",overview:"",fields:[]})}},setup(s){const c=k(!1);function w(){c.value=!0}return(Y,n)=>{const N=u("el-button"),M=u("el-tooltip"),S=u("el-empty"),_=u("el-drawer");return o(),i("div",g,[d(M,{content:"本页操作说明",placement:"left"},{default:m(()=>[d(N,{class:"help-fab",circle:"",onClick:w},{default:m(()=>[...n[1]||(n[1]=[a("?",-1)])]),_:1})]),_:1}),d(_,{modelValue:c.value,"onUpdate:modelValue":n[0]||(n[0]=l=>c.value=l),title:s.data.title||"操作说明",size:"520px","append-to-body":"",class:"ph-drawer"},{default:m(()=>[e("div",C,[e("div",y,[e("div",L,r(s.data.title||"操作说明"),1),n[2]||(n[2]=e("div",{class:"ph-banner-sub"},"页面整体说明",-1))]),s.data.overview?(o(),i("div",R,r(s.data.overview),1)):t("",!0),n[3]||(n[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,f)=>(o(),i("div",{class:"ph-field",key:"top"+f},[e("div",T,[a(r(l.name)+" ",1),e("span",W,r(l.source),1)]),e("div",b,r(l.purpose),1),e("div",A,"👉 "+r(l.fill),1)]))),128))])):t("",!0),s.data.sections&&s.data.sections.length?(o(!0),i(v,{key:2},h(s.data.sections,(l,f)=>(o(),i("div",{key:f,class:"ph-section"},[l.title?(o(),i("div",B,r(l.title),1)):t("",!0),l.overview?(o(),i("div",G,r(l.overview),1)):t("",!0),(o(!0),i(v,null,h(l.fields,(p,E)=>(o(),i("div",{class:"ph-field",key:E},[e("div",D,[a(r(p.name)+" ",1),e("span",U,r(p.source),1)]),e("div",x,r(p.purpose),1),e("div",K,"👉 "+r(p.fill),1)]))),128))]))),128)):t("",!0),!s.data.fields&&!(s.data.sections&&s.data.sections.length)?(o(),P(S,{key:3,description:"暂无说明","image-size":70})):t("",!0)])]),_:1},8,["modelValue","title"])])}}},q=O(I,[["__scopeId","data-v-75d9d55f"]]),z={title:"产品类型(档案维护)",overview:`产品类型是"生产什么产品"的分类档案,是整条产线的源头基础数据。
|
||||
|
|
|
|||
|
|
生产主数据链条:产品类型 → 建工单(选产品类型) → 配物料清单(BOM) → 日排产 → 备料 → PLC/AGV 配送 → 工位装配。
|
|||
|
|
必须先在这里维护好产品类型,后面所有环节(工单/BOM/备料/拧紧/追溯)才有可选对象。`,fields:[{name:"名称",source:"手工填写。用户自定义,无上游来源。",purpose:"产品类型的中文名,用于识别与下拉展示",fill:"如:智能电表、断路器、配电柜"},{name:"编码",source:"系统自动生成 + 可手动修改。新建时会自动带出(格式 PROD-YYYYMMDD-序号),你可直接使用或改为自定义编码;编辑时保留已存值。一个产品编码可对应多个工单(同一型号今天做一批、明天做一批,工单号不同,产品编码相同)。",purpose:"产品唯一编码。它是 MES 内部识别该产品的标识,决定该产品的物料清单(BOM)内容,也是工单、备料、拧紧、追溯的挂靠键。",fill:'建议用有意义的编码,如 METER-01。要点:①本编码与 WMS 是两套系统、互相解耦,MES 这边独立维护,WMS 那边各自单独录入;②成品入库时,由操作人员把本编码**手动录入 WMS**,两系统靠人工对齐;③如产品编码就是"产品类型",则直接沿用该类型编码即可;④建好后不要随意改,否则下游工单/追溯的关联会断。'},{name:"类别",source:"手工填写。可选,无上游来源。",purpose:"产品所属大类,便于分类统计",fill:"如:计量表 / 开关柜;可空"},{name:"启用",source:"开关选择。默认开启。",purpose:"启用后才允许在新建工单/备料的下拉里被选到",fill:"默认开启;暂时停产的可关闭(不删除,保留档案)"},{name:"备注",source:"手工填写。可选。",purpose:"补充说明",fill:"可不填"}]},F={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 台"}]},{title:'行内"工序组合"弹窗',overview:`对当前这行工单快速维护要执行的工序组合,PLC 按此组合下发到工位。
|
|||
|
|
可自由拆组合、补工序(半成品再上线):如本应做第3/5序却做成了半成品,可在此把该件的组合改成只做漏掉的第2序,重上线完成闭环。`,fields:[{name:"工序组合",source:"人工自由维护。",purpose:"本工单在产线执行的工序集合,PLC 组合下发",fill:"只做第1/3/5序填 135;全序填 123456789101112;半成品补做第2序填 2"}]}]},H={title:"日排产(生产计划)",overview:`日排产 = 安排"哪个工单、在哪天、生产多少",是备料和出库的触发依据。
|
|||
|
|
|
|||
|
|
数据链路:工单(总数) → 日排产(按天拆分量,合计不得超过工单总数) → 仓库按日排产备料出库 → 产线按日生产。
|
|||
|
|
可以按 工单号 / 排产日期 两个维度查询,也可直接新增/编辑/删除排产。`,fields:[{name:"工单号",source:'下拉选择。来自"工单管理"已建的工单。',purpose:"该排产对应哪个生产工单",fill:"选择工单号;也可手动输入未列出的工单号"},{name:"排产日期",source:"日历选择。",purpose:"计划在哪一天生产",fill:"选具体日期,如 2026-08-29"},{name:"计划数量",source:"手工填写整数。",purpose:"这一天计划生产多少件",fill:"整数≥1;注意:该工单所有日排产的数量合计不能超过工单总数量"},{name:"已完成",source:"系统自动累计。只读。",purpose:"该排产已实际完成多少件",fill:"无需填写"},{name:"状态",source:"系统维护。只读。",purpose:"排产执行状态(待排产/已确认)",fill:"无需填写"}]},Q={title:"物料清单(产品 BOM)",overview:`物料清单 = 生产 1 台该产品需要哪些物料、各用多少。
|
|||
|
|
按产品编码维护:同型号产品今天做一批、明天做一批,工单号不同、产品编码相同,共用这一份 BOM。
|
|||
|
|
仓库(库房)按工单取其产品的 BOM 计算备料/出库需求量,并强约束累计出库 ≤ 需求总量。
|
|||
|
|
|
|||
|
|
职责分工:本页(MES)只维护「产品由哪几种料、各用几个」;每种物料叫什么、规格、是批次件还是 SN 件、库存有多少,统一在 WMS(库房)的「物料档案」里维护,两套系统互相解耦。
|
|||
|
|
|
|||
|
|
数据链路:先建「产品类型」→ 到本页选产品编码,为它逐条添加物料(编码要与 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"}]},Z={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:"默认当前登录用户,可改"}]},$={title:"手动报工(工位工序完成上报)",overview:`每个工位装配/检测相对工序完成后,在【手动报工】页选择工位、扫入工件SN、选工序号,系统按该工序已维护的【工艺参数】模板动态展开需要采集的参数,人工录入并提交。
|
|||
|
|
提交后写工序实绩 + 步骤数据,系统按步骤考核标准自动判定 OK/NG。
|
|||
|
|
|
|||
|
|
数据链路:工艺参数(维护每道工序要收集哪些参数、判定标准) → 手动报工页扫SN逐参数录入 → 判 OK/NG → 工件追溯可见。`,fields:[{name:"工位",source:"下拉选择(1~12)。",purpose:"哪个工位在报工",fill:"选择工位 1~12"},{name:"工件SN",source:"扫码枪扫描。来自工件条码。",purpose:"工件的唯一序列号,报工对象",fill:"扫码枪扫入,触发载入参数模板"},{name:"工序号",source:"手动选择(1~12)。",purpose:"本次完成的工序,展开该工序的参数模板",fill:"选择 1~12"},{name:"各步骤采集值",source:"手工填写 或 拧紧枪自动带出(视采集方式)。字段由【工艺参数】维护页人为定义,可增加/删除/改采集方式与判定标准。",purpose:"收集该工序的扭矩/角度/尺寸等参数,按标准判定合格与否",fill:"逐条填采集值,未维护标准的步骤仅记录"}]},ee={title:"工艺参数(工序步骤与考核标准维护)",overview:`人为维护【每道工序要收集哪些参数】及【合格判定标准】,是手动报工的基础——报工页按这里的模板动态渲染参数输入框。
|
|||
|
|
· 一道工序可有多个步骤(参数);
|
|||
|
|
· 每步可选择采集方式:拧紧枪自动 / 手填 / 仅记录;
|
|||
|
|
· 每步可设考核标准(如扭矩在 [35,45] N·m 为合格),报工时系统自动判 OK/NG。`,fields:[{name:"工序号",source:"手动选择(1~12)。",purpose:"给哪道工序配置步骤",fill:"选择工序号,加载该工序现有步骤"},{name:"步骤名称",source:"人为定义。",purpose:"该参数叫什么(如 装配完成/拧紧扭矩)",fill:"输入中文名称"},{name:"采集方式",source:"人为选择。",purpose:"该参数怎么来:拧紧枪自动/手填/仅记录",fill:"AUTO=拧紧枪自动;MANUAL=手填;NONE=仅记录"},{name:"是否为拧紧",source:"开关。",purpose:"标识是否属于拧紧采集",fill:"拧紧扭矩/角度步骤打开"},{name:"判定标准",source:"人为定义。可为一条或多条。",purpose:"报工时自动判定 OK/NG 的依据",fill:"如 扭矩 RANGE [35,45];角度 GE 90 等"}]},se={title:"工件追溯",overview:`输入工件 SN,查它的完整履历:进线/完工时间、各工序时间线、步骤考核数据(扭矩/角度)、拧紧记录、以及它用了哪些批次/精密件。
|
|||
|
|
|
|||
|
|
数据来源:全部由前端各环节自动写入(扫码报工、拧紧采集、PLC下发、工序完成),本页只读查询。`,fields:[{name:"工件SN",source:"扫码枪/手输。来自工件条码。",purpose:"要追溯的工件唯一序列号",fill:"扫 SN 或手动输入后点查询"}]},le={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:"数字,越小越靠前"}]}]},oe={title:"操作日志",overview:`记录所有关键业务操作(建工单、物料清单维护、备料、PLC下发、拧紧、扫码报工等),按工单号、操作人、实体可追溯。
|
|||
|
|
数据由系统在各操作发生时自动写入,本页只读查询。`,fields:[{name:"工单号",source:"筛选条件。数据来自日志中的 workOrderNo 字段。",purpose:"按工单号过滤该工单的所有操作",fill:"输入工单号,可空=全部"},{name:"操作人",source:"筛选条件。数据来自日志中的 operator 字段。",purpose:"按操作人过滤",fill:"输入姓名/账号,可空=全部"},{name:"类型",source:"筛选条件。数据来自日志中的事件类型字段。",purpose:"按事件类型过滤",fill:"如 EVENT_WORK_ORDER / EVENT_TORQUE,可空"}]};export{q as P,H as a,Q as b,J as c,X as d,Z as e,ee as f,$ as g,F as h,se as i,z as j,oe as k,le as l};
|