当前检索订单总数
{{ erpData.total || 0
}} 单
需紧急处理
(超期/红警)
{{ erpData.list.filter(o => o.alert_status === 'OVERDUE' || o.alert_status ===
'RED').length }} 单
查询订单
包含的生产工单明细
{{ scope.row.wo_no
}}
{{ scope.row.status }}
该订单暂未生成任何生产工单。
{{ scope.row.erp_so_no }}
{{ scope.row.model_code }}
{{
scope.row.remaining_qty }}
{{ scope.row.total_input || 0 }} /
{{ scope.row.total_boxed || 0 }}
已超期
{{ Math.abs(scope.row.days_left) }} 天
仅剩 {{
scope.row.days_left }} 天
剩 {{
scope.row.days_left }} 天
剩 {{
scope.row.days_left }} 天
未设置
+ 一键建单
已全部拆单
打印出库单
删除
{{ scope.row.wo_no }}
{{ scope.row.new_qty }}
{{ formatTime(scope.row.created_at) }}
待审批
已通过
已驳回
同意
驳回
已处理
{{ scope.row.wo_no }}
已装箱: {{ scope.row.boxed_qty || 0 }} / {{ scope.row.plan_qty || 0 }}
{{ scope.row.plan_start_time === '-' ? '-' :
formatTime(scope.row.plan_start_time) }}
{{ scope.row.plan_finish_time === '-' ? '-' : formatTime(scope.row.plan_finish_time) }}
🔴 交期红警
🟡
交期黄警
⏸️ 工单停滞
❌
报废超标
🔄 ERP订单变更
{{ formatTime(scope.row.created_at) }}
{{ scope.row.confirm_user }}
-
确认处理
已处理
{{ scope.row.push_serial_no }}
{{ scope.row.wo_no }}
待审核
待推送
推送成功
推送失败
{{ formatTime(scope.row.created_at) }}
{{ formatTime(scope.row.push_time) }}
{{ scope.row.error_msg }}
查看推送报文
审核并推送
手动重发
撤回
已完成
{{ formattedPayload }}
关 闭
吊牌码生成与打印
{{ wo.wo_no }}
{{ wo.product_model }}
立即生成
打印标签
导出数据
导出为 TXT (镭雕机用)
导出为 Excel
提示:打印前请确保已连接二维码打印机,并在浏览器打印设置中调整好页边距和标签纸尺寸。
库位主数据配置
表格视图
✨ 3D沙盘视图
打印库位二维码
批量生成
新增库位
仓库总容量:
(已用 {{ locationData.current_capacity_total }} / 共计 {{ locationData.total_capacity }})
查询
📦 待放置库位
点击下方库位,再点击右侧地图空格放置
{{ loc.location_code }}
✅ 所有库位已放置完毕
{{ cell.location_code }}
{{ cell.current_capacity }}/{{ cell.max_capacity }}
+
{{ getWarehouseName(scope.row.warehouse_code) }}
{{ scope.row.current_capacity }}
{{ scope.row.is_enabled ?
'启用' : '停用' }}
查库存
编辑
删除
当前总在库箱数
{{ stockAlertData.summary.total_stock_boxes }} 箱
当前在库产品总数
{{ stockAlertData.summary.total_stock_qty }} Pcs
临期/过期预警箱数
{{ stockAlertData.summary.expire_alert_boxes }} 箱
库位饱和预警数
{{ stockAlertData.summary.location_alert_count }} 处
查询
{{ scope.row.location_code || '未分配' }}
正常
剩 {{ scope.row.days_left }} 天
临期
仅剩 {{ scope.row.days_left }} 天
已过期
已过 {{ Math.abs(scope.row.days_left) }} 天
{{ scope.row.current_capacity }} / {{ scope.row.max_capacity }}
{{ scope.row.warning_threshold }}%
已爆仓
即将满载
逆向物流对账单 (返工/退货)
查询
导出 Excel
返工入库
退货入库
已入库
待入库
{{ scope.row.status }}
{{ scope.row.create_time ? scope.row.create_time.replace('T', ' ').substring(0, 19) : '-' }}
待返工任务追踪清单
查询
导出 Excel
{{ scope.row.create_time ? scope.row.create_time.replace('T', ' ').substring(0, 19) : '-' }}
返工中
已回库
{{ scope.row.finish_time ? scope.row.finish_time.replace('T', ' ').substring(0, 19) : '-' }}
出入库流水明细看板
累计入库箱数
+ {{ ledgerData.summary.total_in }}
累计出库箱数
- {{ ledgerData.summary.total_out }}
当前在库结存
= {{ ledgerData.summary.current_stock }}
查询
重置
入库
出库
{{ scope.row.action_type === 'IN' ? '+' : '-' }}{{ scope.row.qty }}
{{ scope.row.location_code }}
-
{{ scope.row.remark }}
成品入库台账
明细台账
数据汇总
查询
返工入库
退货入库
正常入库
已入库
已入库(已出库)
已入库(待返工)
已作废
待入库
{{ scope.row.create_time ? scope.row.create_time.replace('T', ' ').substring(0, 19) : '-' }}
{{ scope.row.confirm_time ? scope.row.confirm_time.replace('T', ' ').substring(0, 19) : '-' }}
{{ scope.row.confirm_user || '-' }}
{{ scope.row.location_code }}
未分配
确认入库
打印汇总
导出汇总 Excel
返工入库
退货入库
正常入库
{{ scope.row.erp_so_no || '-' }}
{{ scope.row.box_count }}
{{ scope.row.erp_status }}
查询
{{ scope.row.pickup_time ? scope.row.pickup_time.replace('T', ' ').substring(0, 16) : '-' }}
{{ scope.row.total_actual }}
{{ scope.row.status === 'COMPLETED' ? '已完成' : (scope.row.status === 'PARTIAL'
? '部分出库' : '待出库') }}
{{ scope.row.create_time ? scope.row.create_time.replace('T', ' ').substring(0, 19) : '-' }}
查看明细
出库流水
打印
删除
导出汇总 Excel
{{ scope.row.erp_so_no || '-' }}
{{ scope.row.box_count }}
{{ scope.row.erp_status }}
强审
正常
报废明细台账
查询
一键上传 ERP (已选: {{ selectedScrapList.length }})
{{ scope.row.source_process }}
{{ scope.row.scrap_reason }}
{{ scope.row.wo_no }}
已装箱: {{ scope.row.boxed_qty || 0 }}
(报废: {{ scope.row.scrap_qty }})
-
{{ formatTime(scope.row.plan_start_time) }}
{{ formatTime(scope.row.plan_finish_time) }}
草稿
已下发
已暂停
已关闭
已完工
下发工单
变更数量
暂停
关闭
恢复
已关闭
已作废
已完工
取消
确定创建
取消
提交申请
查询追溯
导出履历 Excel
📊 产品全景聚合数据
所属订单号
{{ traceData.summary.erp_so_no || '-' }}
生产工单号
{{ traceData.summary.work_order_no || '-' }}
生产班别
{{ traceData.summary.shift || '未知' }}
工单计划数
{{ traceData.summary.plan_qty }} 件
已生产入库
{{ traceData.summary.boxed_qty }} 件
已出库发货
{{ traceData.summary.outbound_qty }} 件
当前厂内剩余
{{ traceData.summary.stock_qty }} 件
匹配到 {{ boxListData.length }} 个关联箱体,请点击查看详情:
{{ scope.row.qty }} 个
查看箱内产品
📦 箱体:{{ searchCode }}
封箱时间:
{{ boxInnerTime || '-' }}
箱内总数:
{{ innerListData.length }} 个产品
{{ scope.row.work_order_no }}
{{ scope.row.status }}
查看全流程履历
产品:{{ traceData.product_code }}
所属工单:{{ traceData.wo_no }}
型号:{{ traceData.product_model }}
共 {{ traceData.total }} 条记录
[{{ item.time || '未知时间' }}]
{{
getTypeName(item.type) }}
{{ getTraceProcessName(item.process_code) }}
操作人: {{ item.oper_user || 'SYSTEM' }}
不合格
(NG)
合格
(OK)
告警记录
{{ formatDetail(item.detail) }}
无详细业务数据
氦检解绑
确认解绑
工序解锁
确认解锁
待处理孤儿文件数量:{{ orphanTotal }} 个
{{ scope.row.auto_code }}
无 (需手工填写)
{{ scope.row.reason || '未知原因' }}
{{
scope.row.judge_result }}
预览
绑定
废弃
查询
导出数据
{{ scope.row.helium_raw_code }}
{{
scope.row.bind_result }}
{{
scope.row.is_unbound?'已解绑':'有效' }}
ID:{{ scope.row.helium_template_id }} (v{{ scope.row.helium_template_version }})
-
{{ formatTime(scope.row.oper_time) }}
查询
导出当前数据
{{ formatWorkMode(scope.row.work_mode)
}}
{{
scope.row.judge_result }}
{{ scope.row.actual_refrigerant ?
Number(scope.row.actual_refrigerant).toFixed(2) : '-' }}
{{ scope.row.remaining_refrigerant ?
Number(scope.row.remaining_refrigerant).toFixed(2) : '-' }}
{{ formatTime(scope.row.oper_time) }}
查询
导出当前数据
{{
scope.row.judge_result }}
{{ formatTime(scope.row.oper_time) }}
查询
导出当前数据
{{ scope.row.color_value || '-' }}
{{
scope.row.color_result }}
{{ scope.row.weight_value || '-' }}
{{
scope.row.weight_result }}
{{
img.item_name }}
无照片
{{ formatTime(scope.row.pc_submit_time) }}
{{
scope.row.is_force?'强制尾数箱':'正常满箱' }}
{{ formatTime(scope.row.package_time) }}
查询
导出 Excel
{{ formatTime(scope.row.created_at) }}
{{ scope.row.wo_no || '-' }}
{{ getTraceProcessName(scope.row.process_code)
}}
{{ scope.row.alert_message }}
未处理
已处理
已忽略
去处置
查看履历
查询
图片丢失
{{ item.image_item_name || '未命名' }}
产品码: {{
item.product_code }}
拍摄人: {{ item.oper_user }}
时间: {{
formatTime(item.capture_time) }}
总投产数
{{
yieldKpi.total_products || 0 }}
最终完工数
{{
yieldKpi.finished_products || 0 }}
综合直通率 (FPY)
{{ yieldKpi.fpy || 0
}}%
查询
导出 Excel
{{ scope.row.ok_count }}
{{ scope.row.ng_count }}
{{ scope.row.in_progress }}
无数据
综合良率每日趋势
查询
导出 Excel
综合不良数 (件)
{{
scrapData.kpi.total_ng || 0 }}
综合不良率
{{
scrapData.kpi.ng_rate || 0 }}%
综合报废数 (件)
{{
scrapData.kpi.total_scrap || 0 }}
综合报废率
{{
scrapData.kpi.scrap_rate || 0 }}%
不良明细清单
{{ scrapFilterMsg }}
清除筛选
{{ scope.row.product_code }}
{{ getScrapProcessName(scope.row.process_code) }}
{{ scope.row.result }}
查询
导出 Excel
当前在制品总数 (WIP)
{{
capacityData.kpi.total_wip || 0 }}
平均单工序流转节拍
{{
capacityData.kpi.avg_pacing || 0 }} 分钟
区间内最终完工量
{{
capacityData.kpi.daily_output || 0 }}
产能计划达成率
{{
capacityData.kpi.attainment_rate || 0 }}%
在制卡点明细清单
{{ capacityFilterMsg }}
清除筛选
{{ scope.row.product_code }}
{{ scope.row.stay_hours }}
查询
导出 Excel
参与统计人数
{{
perfData.kpi.total_staff || 0 }} 人
总过站操作数
{{
perfData.kpi.total_ops || 0 }} 次
全员平均综合良率
{{
perfData.kpi.avg_rate || 0 }}%
人均班产 (件/12h)
{{
perfData.kpi.avg_shift_output || 0 }} 件
人员绩效全量明细
{{ scope.row.name }}
{{ scope.row.ok_count }}
{{ scope.row.shift_output
}}
导出当前数据
{{ formatTime(scope.row.created_at) }}
{{ formatActionType(scope.row.action_type) }}
查看快照
Before:
{{ JSON.stringify(scope.row.before_json, null, 2) }}
After:
{{ JSON.stringify(scope.row.after_json, null, 2) }}
导出当前数据
{{ formatTime(scope.row?.unlock_time) }}
{{
getTraceProcessName(scope.row?.process_code) }}
{{ scope.row?.is_relocked ? '是' : '否' }}
导出当前数据
产品档案列表
新增产品
{{
scope.row.is_enabled?'启用':'停用' }}
配置
{{
scope.row.is_enabled?'停用':'启用' }}
工艺阈值配置
大于等于合格
小于等于合格
~
~
~
提示:该工位同时能放进老化设备中的最大产品数量。
~
~
~
提示:修改此项将决定手机端需要拍摄的照片数量及名称。
×
×
当前单箱总数:{{ (prodForm.process_thresholds.PACKAGE.tray_rows || 0) *
(prodForm.process_thresholds.PACKAGE.tray_cols || 0) *
(prodForm.process_thresholds.PACKAGE.tray_layers || 0) }} 个
外箱标贴打印配置
打印客户标贴(GS1)
打印内部码标贴
注:批次(1T, YYWW)、数量(Q)、生产日期(16D, YYYYMMDD) 由系统封箱时自动生成,无需手动填写。
工序流转配置
添加工序
{{ index + 1 }}
{{ getProcessName(item.process_code) }}
启用上一道工序校验
移除
保存全量配置
解析模板列表 (仅显示最新版本)
新增模板
{{
scope.row.template_type }}
分隔符: {{ scope.row.field_extract_rule.separator }}
正则: {{ scope.row.field_extract_rule.regex }}
无规则
启用中
已停用
编辑(升版本)
{{ scope.row.status === 1 ? '停用' : '启用' }}
氦检码
吊牌唯一码
外箱码
第
到
位
总长度等于 位
分隔符切分
标识符提取
高级正则
段位含义配置
第 {{ index + 1 }} 段:
添加段位
🟢
场景一:简单分隔符(最常用)
假设条码长这样:
MODEL-A-SN123-1.25
提取目标: 型号为
MODEL-A,流水码为 SN123,检测值为
1.25。
请复制此正则:
^(?P<model>[^-]+)-(?P<serial>[^-]+)-(?P<test_value>[^-]+)$
人话解释:
• ^ 代表开头。
• (?P<model>[^-]+)
意思是:抓取直到遇到横杠 -
为止的所有字符,作为型号。
• (?P<serial>[^-]+)
意思是:抓取中间那一段作为流水码。
• (?P<test_value>[^-]+)
意思是:抓取最后一段作为检测值。
• $ 代表结尾。
🔴
场景二:带字母前缀与科学计数法(氦检极常用)
假设条码长这样:
pff3#t2610080000041#v666666#3.8e-7pA.M3/S
提取目标: 型号为
FF3,流水码为
2610080000041,检测值为
3.8E-7。
请复制此正则:
^.*(?P<model>FF3)#T?(?P<serial>[0-9]+)#.*#(?P<test_value>[0-9\.Ee+\-]+)PA\.M3\/S$
人话解释(逐段拆解):
• ^.* :最开头的字母 p
是废字符,不管它。
• (?P<model>FF3) :死死盯住,抓到
FF3 当作型号。
• #T? :遇到井号和字母
T(t可能出现也可能没有),作为分割,扔掉。
• (?P<serial>[0-9]+) :抓取一串纯数字
2610080000041 作为流水码。
• #.*# :中间的 v666666
是废字符,直接忽略。
•
(?P<test_value>[0-9\.Ee+\-]+)
:抓取科学计数法 3.8e-7
作为检测值。
• PA\.M3\/S :遇到结尾的单位,确认提取结束,扔掉单位。
⚠️ 注意:使用此正则时,必须在左侧【1.
预处理规则】中开启【强制转大写】,否则小写 pff3
会识别失败!
🧪 规则在线验证
把现场真实的条码粘贴到下方,验证规则是否正确。
测试解析结果
✅
解析成功
{{
testForm.result.parsed_model }}
{{
testForm.result.parsed_serial }}
{{
testForm.result.parsed_test_value }}
❌
解析失败
{{ testForm.error }}
取消
确认无误,保存并升版本
{ if(name === 'bom') fetchBomItemList(); }">
查询
新增物料
{{ scope.row.item_type === 'RAW' ? '原材料' : (scope.row.item_type === 'SEMI' ? '半成品' : '成品') }}
{{ scope.row.is_enabled ? '启用' : '停用' }}
编辑
选择目标成品/半成品:
添加子物料
发布 BOM 生效
当前 BOM 版本:{{ bomHeaderStatus }}
{{ getTraceProcessName(scope.row.process_code) }}
不限定
{{ scope.row.require_scan ? '需扫码' : '免扫码' }}
编辑
删除
取消
保存
开启后,工位必须扫该物料的码才能继续作业
取消
保存
大屏看板参数配置
保存大屏配置
告警推送配置 (微信 / 钉钉)
企业微信机器人
测试
钉钉机器人
测试
保存告警配置
用户账号管理
新增用户
{{ scope.row.role_code }}
{{ fc }}
全部/未分配
{{
scope.row.is_enabled?'启用':'停用' }}
编辑
{{
scope.row.is_enabled?'停用':'启用' }}
取消
保存
工位列表
新增工位
在线
离线
{{ scope.row.workstation_type }}
编辑
取消
保存
取消
保存
查询
{{ scope.row.actual_end_time || '未结束' }}
{{ Math.floor(scope.row.duration_config_seconds / 60) }}
分钟
{{ scope.row.end_type }}
计时中
查询
{{
scope.row.is_rework ? '返工件' : '正常件' }}
系统全局参数配置
当前配置的任务:
保存当前配置
立即拉取一次
支持变量:{today}, {today_start},
{today_end}
GET
POST
左边为 MES 字段(如 erp_so_no),右边为
ERP 返回的字段名
MES 报工回传 ERP (出向)
(上线初期建议关闭)
人工审核推送
自动推送
编号规则
交期预警
提示:修改此路径后,必须重启后端才能生效!
超宽图片将等比例缩放
(默认 1920)
JPEG 压缩比
(1-100,默认 85)
老化到期语音提醒配置
默认 60
秒提醒一次
支持变量:{workstation} 会自动替换为工位号,{count} 替换为到期产品数。
吊牌码生成与校验配置
开启后,工位扫码必须校验该码是否由系统生成且未使用(默认关闭)。
不足位数将自动补0。
SMTP 发件服务器配置
测试发信
告警收件人配置 (多个邮箱用英文逗号隔开)
保存全局参数
系统健康监控大盘
刷新状态
数据库 (PostgreSQL)
{{ healthData.infra.db_status === 'UP' ? '连接正常' : '连接断开' }}
缓存 (Redis)
{{ healthData.infra.redis_status === 'UP' ? '运行正常' : '服务宕机' }}
孤儿文件积压
{{ healthData.business.pending_orphans || 0 }} 条待处理
车间终端在线率
{{ healthData.hardware.online_count || 0 }} / {{ healthData.hardware.total || 0 }}
CPU 使用率
{{ (healthData.server_resources && healthData.server_resources.cpu_percent) || 0 }}%
内存使用率
{{ (healthData.server_resources && healthData.server_resources.mem_percent) || 0 }}%
磁盘使用率
{{ (healthData.server_resources && healthData.server_resources.disk_percent) || 0 }}%
工位在线心跳监测
{{
st.factory_name }}
{{ st.code }} - {{ st.name }}
已停用
● 在线
● 离线
心跳: {{
st.last_heartbeat }}
最近系统异常日志 (Top 5)
{{ err.time
}}
{{
err.message }}
运行非常健康,暂无报错日志。
取消
保存
当前可用库存:{{ currentStock }} 件
取消
确认建立
保存后将自动生成:{{ locationForm.warehouse_code.replace(/-/g, '') }}-{{ locationForm.location_code || 'XXX' }}
占用达到此比例时预警
取消
保存
取消
生成