登录后的菜单与业务按钮权限取该账号全部启用角色权限的并集。
Warehouse Motion Control Suite

WMCS 智能仓储控制中心

{{ executorLabel }} / {{ backendLabel }} {{ status.connected ? '在线' : '离线' }} {{ stateLabel }} {{ status.axis_ready && status.allow_control ? '允许执行任务' : '等待联锁就绪' }} 控制器异常 {{ auth.authenticated ? `${auth.user?.display_name || auth.user?.username || '-'} / ${roleNames(auth.user)}` : '未登录' }} 退出 登录 {{clockStr}}
{{monitorShelfStats.utilization}}%
货架利用率
{{activeTaskCount}}
活动任务
{{monitorShelfStats.source === 'micro' ? monitorShelfStats.loaded : monitorShelfStats.occupied}}
{{monitorShelfStats.source === 'micro' ? '满框位' : '已占用'}}
{{monitorShelfStats.empty || 0}}
{{monitorShelfStats.source === 'micro' ? '空货位' : '空位'}}
{{ backendLabel }}{{ status.connected ? '在线' : '离线' }} {{stateLabel}} {{status.axis_ready ? '轴就绪' : '轴未就绪'}} {{status.allow_control ? '允许控制' : '控制等待'}} 异常
{{side === 'L' ? '左侧货架' : '右侧货架'}}
{{layer}}层
{{cellMarkerText(getCellLocation(side, layer, c))}}
{{selectedCellDisplayLabel(selectedCell)}} {{locationDisplayStatusLabel(selectedCell)}} X {{selectedCell.pos_x ?? '-'}} / Y {{selectedCell.pos_y ?? '-'}} {{frontStorageSlotForLocation(selectedCell).slot_code}} / {{frontStorageSlotStatusLabel(frontStorageSlotForLocation(selectedCell).status)}} {{runtimeCargoIdForLocation(selectedCell)}} / {{runtimeSkuForLocation(selectedCell) || '-'}}
{{card.name}}
{{getAxisStateLabel(card.axis)}}
{{card.axis.act_pos !== undefined ? card.axis.act_pos.toFixed(1) : '--'}} mm
速度 {{card.axis.act_vel !== undefined ? card.axis.act_vel.toFixed(1) : '--'}} mm/s / 力矩 {{card.axis.act_tor !== undefined ? card.axis.act_tor.toFixed(1) : '--'}} %
主从误差 {{gantryPlcError(card.gantry_group).toFixed(3)}} mm
{{microStoreOperatorJobs.length}}
待处理
{{microStoreActiveJobs.length}}
活跃作业
{{microStoreSlotCounts.empty_frame}}
空框位
{{microStoreState.alerts.length}}
告警
{{status.executor_id || selectedDebugExecutorId}} {{status.connected ? '在线' : '离线'}} {{backendLabel}}
紧急停止 清除急停 使能 去使能 全部复位 点动
{{stateLabel}} {{status.axis_ready ? '轴就绪' : '轴未就绪'}} {{status.allow_control ? '允许控制' : '等待允许'}}
{{ax}}
{{getAxis(ax).power_status ? 'ON' : 'OFF'}}
位置 {{getAxis(ax).act_pos !== undefined ? getAxis(ax).act_pos.toFixed(2) : '--'}} mm / 速度 {{getAxis(ax).act_vel !== undefined ? getAxis(ax).act_vel.toFixed(2) : '--'}} mm/s
正向 停止 反向
X 当前位置
{{getAxisStateLabel(getAxis('X主轴'))}}
{{formatAxisMetric('X主轴', 'act_pos', 2, 'mm')}}
目标 {{formatNumberWithUnit(manXY.pos_x, 2, 'mm')}} / 偏差 {{axisTargetDelta('X主轴', manXY.pos_x)}}
Y 当前位置
{{getAxisStateLabel(getAxis('Y主轴'))}}
{{formatAxisMetric('Y主轴', 'act_pos', 2, 'mm')}}
目标 {{formatNumberWithUnit(manXY.pos_y, 2, 'mm')}} / 偏差 {{axisTargetDelta('Y主轴', manXY.pos_y)}}
Z 当前位置
{{getAxisStateLabel(getAxis('Z轴'))}}
{{formatAxisMetric('Z轴', 'act_pos', 2, 'mm')}}
目标 {{formatNumberWithUnit(manZ.pos_z, 2, 'mm')}} / 偏差 {{axisTargetDelta('Z轴', manZ.pos_z)}}
执行 XY 定位
执行 Z 定位
{{microStoreOperatorJobs.length}}
现场待处理
{{microStoreActiveJobs.length}}
活跃作业
{{microStoreSlotCounts.empty_slot}}
空货位
{{microStoreSlotCounts.loaded_frame}}
满框位
创建入库作业
创建出库作业
#{{job.id}} {{microJobTypeLabel(job.job_type)}}
{{microJobStateLabel(job.state)}}
{{microStoreOperatorJobHint(job)}}
货物 {{job.requested_cargo_id || '-'}} / 口位 {{job.entry_id || job.exit_id || '-'}}
确认装货 取货并还框 稍后还框 确认还框 恢复重试
#{{job.id}} {{microJobTypeLabel(job.job_type)}}
{{microJobStateLabel(job.state)}}
货物 {{job.requested_cargo_id || '-'}} / 步骤 {{job.current_step || '-'}}
入口 {{job.entry_id || '-'}} / 出口 {{job.exit_id || '-'}} / 任务 {{job.active_task_id || '-'}}
确认装货 确认取货 确认还框 重试 取消
#{{event.id}} {{event.event_type || '-'}}
作业 #{{event.job_id || '-'}}
{{event.message || '-'}}
{{event.created_at || '-'}}
货架利用率
{{monitorShelfStats.utilization}}%
EMPTY_SLOT {{monitorShelfStats.empty}} / EMPTY_FRAME {{monitorShelfStats.empty_frame}} / LOADED_FRAME {{monitorShelfStats.loaded}} / ERROR {{monitorShelfStats.error}}
已占用 {{locStats.occupied}} / 可用库位 {{locStats.total}},空位 {{locStats.empty}},锁定 {{locStats.locked}}
系统状态
{{stateLabel}}
{{ backendLabel }}{{ status.connected ? '在线' : '离线' }} {{ status.axis_ready ? '轴就绪' : '轴未就绪' }}
{{status.axis_ready ? '轴状态已就绪,可执行动作' : '等待联锁与轴状态就绪'}}
任务队列
{{activeTaskCount}}
活动任务 {{activeTaskCount}},总任务 {{taskPagination.total || taskList.length}}
执行中 {{runningTaskCount}} 待执行 {{pendingTaskCount}} 失败 {{failedTaskCount}}
入库 / 出库 / 移库
{{recentInboundTasks.length}} / {{recentOutboundTasks.length}} / {{recentTransferTasks.length}}
当前任务队列中的近期作业统计
入库 {{recentInboundTasks.length}} 出库 {{recentOutboundTasks.length}} 移库 {{transferTaskCount}}
左侧货架 (L)
{{layer}}层
C{{c}}
{{cellMarkerText(getCellLocation('L', layer, c))}}
右侧货架 (R)
{{layer}}层
C{{c}}
{{cellMarkerText(getCellLocation('R', layer, c))}}
{{card.name}} 实时位置
{{card.axis.act_pos !== undefined ? card.axis.act_pos.toFixed(1) : '--'}}
速度 {{card.axis.act_vel !== undefined ? card.axis.act_vel.toFixed(1) : '--'}} mm/s / 力矩 {{card.axis.act_tor !== undefined ? card.axis.act_tor.toFixed(1) : '--'}} %
主从误差
{{gantryPlcError(card.gantry_group).toFixed(3)}} mm
控制状态
{{stateLabel}}
{{status.axis_ready && status.allow_control ? '允许控制,轴状态就绪' : '等待联锁与控制允许'}}
{{selectedCellDisplayLabel(selectedCell)}} {{selectedCell.location_id}} {{selectedCell.side==='L' ? '左' : '右'}} / {{selectedCell.layer}}层 / {{selectedCell.col}}列 {{locationDisplayStatusLabel(selectedCell)}} {{microSlotStatusLabel(microSlotForLocation(selectedCell)?.slot_status)}} {{locationStatusLabel(selectedCell.status)}} {{locationStatusLabel(selectedCell.status)}} {{locationStatusLabel(selectedCell.status)}} {{frontStorageSlotForLocation(selectedCell).slot_code}} {{frontStorageSlotStatusLabel(frontStorageSlotForLocation(selectedCell).status)}} {{frontStorageSlotForLocation(selectedCell).sku}} 当前 {{frontStorageSlotForLocation(selectedCell).quantity ?? 0}} / 目标 {{frontStorageSlotForLocation(selectedCell).target_qty ?? '-'}} / 上限 {{frontStorageSlotForLocation(selectedCell).max_qty ?? '-'}} X: {{selectedCell.pos_x ?? '-'}} / Y: {{selectedCell.pos_y ?? '-'}} {{microSlotForLocation(selectedCell)?.frame_code}} {{microSlotForLocation(selectedCell)?.frame_id}} {{microStoreZoneCodesForLocation(selectedCell.location_id).join(', ')}} {{runtimeCargoIdForLocation(selectedCell)}} {{runtimeSkuForLocation(selectedCell)}} {{runtimeQuantityForLocation(selectedCell)}} {{selectedCell.inbound_time||'-'}}
{{monitorShelfStats.total||0}}
{{monitorShelfStats.source === 'micro' ? '槽位总数' : '可用库位'}}
{{monitorShelfStats.source === 'micro' ? monitorShelfStats.loaded : monitorShelfStats.occupied}}
{{monitorShelfStats.source === 'micro' ? '满框位' : '已占用'}}
{{monitorShelfStats.empty||0}}
{{monitorShelfStats.source === 'micro' ? 'EMPTY_SLOT' : '空位'}}
{{monitorShelfStats.source === 'micro' ? monitorShelfStats.empty_frame : monitorShelfStats.locked}}
{{monitorShelfStats.source === 'micro' ? 'EMPTY_FRAME' : '锁定'}}
使用率 {{monitorShelfStats.utilization}}%
当前统计按微仓实时槽位快照展示;底账库位状态仅作为兼容参考。
{{runningTaskCount}}
执行中
{{pendingTaskCount}}
待执行
{{failedTaskCount}}
失败
入库 {{recentInboundTasks.length}} 出库 {{recentOutboundTasks.length}} 移库 {{transferTaskCount}}
{{microStoreConfig.enabled ? '已启用' : '未启用'}} {{microStoreState.available ? '调度快照在线' : (microStoreState.message || '未加载快照')}}
刷新微仓
{{microStoreSlotCounts.empty_slot}}
EMPTY_SLOT
{{microStoreSlotCounts.empty_frame}}
EMPTY_FRAME
{{microStoreSlotCounts.loaded_frame}}
LOADED_FRAME
{{microStoreSlotCounts.error}}
ERROR
活跃作业 {{microStoreJobs.length}} 告警 {{microStoreState.alerts.length}} 锁定调度包 {{microStoreState.locked_execution_bundles.length}} 窗口记录 {{microStoreState.dispatch_window_records.length}} 窗口仲裁 {{microStoreState.dispatch_window_arbitration.length}} 窗口协调 {{microStoreState.dispatch_window_coordination.length}} 窗口会话 {{microStoreState.dispatch_window_sessions.length}} 执行请求 {{microStoreState.execution_dispatch_requests.length}} 执行适配 {{microStoreState.dispatch_adapter.length}} 派发协调 {{microStoreState.dispatch_coordinator.length}} 双工位候选 {{microStoreState.dual_side_execution_bundles.length}} 口位恢复 {{microStoreState.port_recovery_recommendations.length}} 重平衡建议 {{microStoreState.rebalance_recommendations.length}} 空框 {{microStoreFrameCounts.empty}} 满框 {{microStoreFrameCounts.loaded}}
系统参数中启用智能微仓后,这里会展示空框池告警、空货位阈值告警和补位建议。
{{status.executor_id || selectedDebugExecutorId}} {{status.connected ? '在线' : '离线'}} {{backendLabel}} {{stateLabel}} 新建方案 编辑 复制 删除 刷新 {{motionDemoSelectedProfile.gantry_executor_id}} {{motionDemoSelectedProfile.shipping_executor_id}} {{motionDemoSelectedProfile.material_routes?.length || 0}} {{motionDemoSelectedProfile.dwell_seconds}} 秒 已确认两台堆垛机运行区域无人、无障碍物 已确认订单框和全部物料框实物位置与方案完全一致 一键开始演示 安全取消并原位回框 继续安全恢复 确认实物已恢复并释放锁 {{motionDemoStatusLabel}} {{motionDemo.status.message}} {{executorId}} 演示安全范围 订单框路线 获取当前位置 获取当前位置 物料框路线 当前位置 当前位置 增加物料框路线
紧急停止 清除急停 使能 去使能 全部复位
空闲 点动 工艺 回原 当前状态 {{stateLabel}} 轴就绪 {{status.axis_ready ? '是' : '否'}} 允许控制 {{status.allow_control ? '是' : '否'}} {{status.executor_id || '-'}} {{backendLabel}} {{status.allow_control ? '允许' : (motionInterlock?.reason || '等待')}} {{gantrySyncDiagnostics.enabled ? '已启用' : '未启用'}} / 验证 {{gantrySyncDiagnostics.verified ? '是' : '否'}} {{leadshineControllerError || status.error_message || '-'}} {{lastCommand.function || '-'}} {{lastCommand.ok ? '成功' : '失败'}} - {{lastCommand.error || '-'}} {{pair.main_pos.toFixed(3)}} mm {{pair.slave_pos.toFixed(3)}} mm {{gantryPlcError(pair.axis_group).toFixed(3)}} mm {{pair.diff.toFixed(3)}} mm {{gantryAlarm(pair.axis_group) ? '预警' : '正常'}} {{gantryTrip(pair.axis_group) ? '停机' : '正常'}} {{gantryPhaseErrorId(pair.axis_group) || 0}} {{pair.main_vel.toFixed(2)}} / {{pair.slave_vel.toFixed(2)}} mm/s 同步支持 {{gantryCorrection.supported ? '已确认' : '未确认'}} 卡侧龙门同步 {{gantryCorrection.enabled ? '已恢复' : '未恢复'}} 配置请求 {{gantrySyncRequested ? '启用' : '关闭'}} X轴0位对齐 Y轴0位对齐 XY零位对齐 {{gantryCorrection.enabled ? '取消龙门同步' : '恢复龙门同步'}}
参考点(每轮先移动到这里)
使用当前位置作为参考点
目标点(采样点)
开始测试 当前动作到位后停止 导出CSV {{repeatStatusLabel}} {{repeatTest.status.message}}
{{item.max_abs.toFixed(4)}}
{{item.label}}最大绝对误差 mm
{{repeatTest.status.stats.sample_count || 0}}
采样次数
测试记录
测试结束后自动保存为一条记录,可查看明细或导出CSV。 刷新记录
{{repeatRecordDetail.data.id}} {{repeatModeLabel(repeatRecordDetail.data.mode)}} {{repeatStatusText(repeatRecordDetail.data.status)}} {{repeatRecordDetail.data.pass_result ? '合格' : '不合格'}} -- {{repeatRecordDetail.data.cycles}} {{repeatRecordDetail.data.sample_count}} {{repeatRecordDetail.data.tolerance}} mm {{repeatRecordDetail.data.session_id}} {{repeatRecordDetail.data.started_at}} {{repeatRecordDetail.data.finished_at}} {{repeatRecordDetail.data.message}}
{{item.max_abs.toFixed(4)}}
{{item.label}}最大绝对误差 mm
{{manualStackerSelectedTarget.target_label}} {{manualStackerSelectedTarget.code}} {{manualStackerSelectedTarget.parent_code}} {{manualStackerSelectedTarget.status}}(仅展示,不参与过滤) {{manualStackerSelectedTarget.side}} / {{manualStackerSelectedTarget.pos_z}} X {{manualStackerSelectedTarget.pos_x}} / Y {{manualStackerSelectedTarget.pick_y}} X {{manualStackerSelectedTarget.pos_x}} / Y {{manualStackerSelectedTarget.place_y}} 已确认巷道、货叉和目标周边无人、无障碍物 已人工核对货叉与目标实物,确认可忽略系统库存、空/有货和格口占用状态 单独取货 单独放货 确认货叉为空并释放测试锁 刷新目标 {{manualStackerStatusLabel}} 执行器测试锁已保持 货物可能在货叉上 {{manualStackerTest.status.message}} 已确认巷道、货叉和所选货位/格口周边无人、无障碍物 已确认每个目标均为取货后立即原位放回,测试不修改库存账 开始取放测试 当前目标原位放回后停止 刷新货位/格口 {{stackerTestStatusLabel}} 货物可能在货叉上 {{stackerTest.status.message}} {{stackerTest.status.executor_id || selectedDebugExecutorId || '-'}} {{stackerTest.status.current_cycle || 0}} / {{stackerTest.status.total_cycles || stackerTest.form.cycles}} {{stackerTest.status.completed_locations || 0}} / {{stackerTest.status.total_locations || stackerTestPlannedCount}} {{stackerTest.status.current_location?.code || '-'}}
{{ax}}
{{getAxis(ax).act_pos !== undefined ? getAxis(ax).act_pos.toFixed(2) : '--'}} mm {{getAxis(ax).act_vel !== undefined ? getAxis(ax).act_vel.toFixed(2) : '--'}} mm/s {{getAxis(ax).power_status ? 'ON' : 'OFF'}}
正向 停止 反向
Z 当前位置
{{formatAxisMetric('Z轴', 'act_pos', 2, 'mm')}}
速度 {{formatAxisMetric('Z轴', 'act_vel', 2, 'mm/s')}}
Z 目标位置
{{formatNumberWithUnit(manZ.pos_z, 2, 'mm')}}
偏差 {{axisTargetDelta('Z轴', manZ.pos_z)}}
Z 轴状态
{{getAxisStateLabel(getAxis('Z轴'))}}
伺服 {{getAxis('Z轴').power_status ? 'ON' : 'OFF'}}
定位状态
{{status.move_busy ? '定位中' : '待命'}}
控制 {{status.allow_control ? '允许' : '未就绪'}}
执行 Z 轴绝对定位
{{getAxis('X主轴').act_pos !== undefined ? getAxis('X主轴').act_pos.toFixed(2) : '--'}} mm {{getAxis('X主轴').act_vel !== undefined ? getAxis('X主轴').act_vel.toFixed(2) : '--'}} mm/s {{getAxis('X主轴').act_tor !== undefined ? getAxis('X主轴').act_tor.toFixed(1) : '--'}} %
正向 停止 反向
{{getAxis('X从轴').act_pos !== undefined ? getAxis('X从轴').act_pos.toFixed(2) : '--'}} mm {{getAxis('X从轴').act_vel !== undefined ? getAxis('X从轴').act_vel.toFixed(2) : '--'}} mm/s {{getAxis('X从轴').act_tor !== undefined ? getAxis('X从轴').act_tor.toFixed(1) : '--'}} %
{{getAxis('Y主轴').act_pos !== undefined ? getAxis('Y主轴').act_pos.toFixed(2) : '--'}} mm {{getAxis('Y主轴').act_vel !== undefined ? getAxis('Y主轴').act_vel.toFixed(2) : '--'}} mm/s {{getAxis('Y主轴').act_tor !== undefined ? getAxis('Y主轴').act_tor.toFixed(1) : '--'}} %
正向 停止 反向
{{getAxis('Y从轴').act_pos !== undefined ? getAxis('Y从轴').act_pos.toFixed(2) : '--'}} mm {{getAxis('Y从轴').act_vel !== undefined ? getAxis('Y从轴').act_vel.toFixed(2) : '--'}} mm/s {{getAxis('Y从轴').act_tor !== undefined ? getAxis('Y从轴').act_tor.toFixed(1) : '--'}} %
执行移动
Z 当前位置
{{formatAxisMetric('Z轴', 'act_pos', 2, 'mm')}}
目标 {{formatNumberWithUnit(manPickPlace.pos_z, 2, 'mm')}}
Z 偏差
{{axisTargetDelta('Z轴', manPickPlace.pos_z)}}
速度 {{formatAxisMetric('Z轴', 'act_vel', 2, 'mm/s')}}
Y 当前位置
{{formatAxisMetric('Y主轴', 'act_pos', 2, 'mm')}}
速度 {{formatAxisMetric('Y主轴', 'act_vel', 2, 'mm/s')}}
动作状态
{{status.pick_busy || status.place_busy ? '执行中' : '待命'}}
Y 偏移 {{formatNumberWithUnit(manPickPlace.y_offset, 2, 'mm')}}
取货 放货
动作前要求仿真开启 仅仿真调试 允许实机调试 保存机械臂配置 {{robotArmStatus.backend || robotArmConfig.backend || '-'}} {{robotArmStatus.robot_model || robotArmConfig.model || '-'}} {{robotArmStatus.connected ? '已连接' : '未连接'}} {{robotArmStatus.logged_in ? '已登录' : '未登录'}} {{robotArmStatus.simulation_enabled ? '开启' : '关闭'}} {{robotArmConfig.allow_real_motion_debug ? '允许' : '关闭'}} {{robotArmStatus.steady ? 'steady' : 'moving'}} {{robotArmSoftwareInterlock.allowed ? '允许' : '阻止'}} {{robotArmSoftwareInterlock.block_reason || '-'}} {{formatRobotArmTcpMmDegrees(robotArmStatus.tcp_pose)}} {{formatRobotArmJointDegrees(robotArmStatus.joint_positions)}} {{robotArmLastCommand.name || '-'}} {{robotArmStatus.last_error || '-'}} 刷新状态 连接 断开 开启仿真 关闭仿真 上电 poweron 启动 startup 下电 poweroff 离线自检 采当前关节/TCP 为目标 关节步长 ° 直线步长 mm 姿态步长 ° - 小步 + 小步 执行关节运动 move_joint TCP 直线运动 - 小步 + 小步 我已人工确认机械臂调试动作风险 执行直线运动 move_line
校验条码
{{inbound.validateResult.auto_location}} 系统暂无建议位置,请手动选择
可用暂存位 {{availableStagingCount}} / {{stagingLocations.length}}; 勾选后会先生成高优先级入库到暂存区,完成后自动生成低优先级移库到最终库位。
已在库,仍强制入库 {{inbound.useStaging ? '执行快速暂存入库' : '执行入库'}}
查找货物 {{outbound.cargoInfo.name||'-'}} {{outbound.cargoInfo.sku||'-'}} {{outbound.cargoInfo.location||'-'}} {{outbound.cargoInfo.quantity||0}} 全部出库 部分领用 {{outbound.mode==='full' ? '执行全部出库' : '执行部分领用'}} 查找货物 {{transfer.cargoInfo.name||'-'}} {{transfer.cargoInfo.sku||'-'}} {{transfer.cargoInfo.location_code||transfer.cargoInfo.location||'-'}} {{transfer.cargoInfo.quantity||0}} 创建移库任务
{{microStoreConfig.enabled ? '智能微仓已启用' : '智能微仓未启用'}} {{microStoreState.available ? '快照已加载' : (microStoreState.message || '等待加载')}}
刷新快照 处理超时
{{microStoreOperatorJobs.length}}
待人工处理
{{microStoreActiveJobs.length}}
活跃作业
{{microStoreSlotCounts.empty_slot}}
真实空货位
{{microStoreSlotCounts.empty_frame}}
空框位
{{microStoreSlotCounts.loaded_frame}}
满框位
{{microStoreState.alerts.length}}
异常 / 告警
口位恢复 {{microStoreState.port_recovery_recommendations.length}} 重平衡 {{microStoreState.rebalance_recommendations.length}} 空框 {{microStoreFrameCounts.empty}} 满框 {{microStoreFrameCounts.loaded}} 高级诊断 {{microStoreDiagnosticCount}}
工位 {{microFulfillment.packing_stations.length}} 订单 {{microFulfillment.orders.length}} 待取货 {{microFulfillmentWaitingPickupCount}} 命令 {{microFulfillment.commands.length}} 异常 {{microFulfillment.exceptions.length}}
打开工控机工作台 刷新履约
{{microFulfillmentWorkbenchOrder?.order_no || '暂无待打包订单'}} {{microFulfillmentOrderStatusLabel(microFulfillmentWorkbenchOrder.status)}}
工位 {{microFulfillment.workbench.station?.station_code || '-'}} / {{microFulfillmentPackingStationStatusLabel(microFulfillment.workbench.station?.status)}} / 货位 {{microFulfillment.workbench.station?.location_id || '-'}}
{{microFulfillment.orderPreflight.resources?.available_order_totes || 0}} / {{microFulfillment.orderPreflight.resources?.required_order_totes || 1}} {{microFulfillment.orderPreflight.resources?.available_packing_stations || 0}} / {{microFulfillment.orderPreflight.resources?.required_packing_stations || 1}} {{microFulfillment.orderPreflight.resources?.available_pick_area_slots || 0}} / {{microFulfillment.orderPreflight.resources?.required_pick_area_slots || 0}} 资源预检 创建人工打包订单 获取当前位置 登记打包工位 登记出货格口 批量出货格口
新增格口 批量登记格口
创建智能微仓入库作业 创建智能微仓出库作业
{{item.label}}
重置 检查证据
{{microStoreDualDebug.running ? '执行中' : (microStoreDualDebug.phase === 'error' ? '异常' : '就绪')}} 场景 {{microStoreDualDebugCurrentScenarioLabel}} 作业 {{microStoreDualDebug.created_job_ids.length}} 货物 {{microStoreDualDebug.created_cargo_ids.length}}
口位与参数
自动确认装货 自动确认取货 取货后还框
场景输入
开始场景 确认装货 确认取货 确认还框
最近异常
{{microStoreDualDebug.last_error}}
#{{job.id}} {{microJobTypeLabel(job.job_type)}} {{microJobStateLabel(job.state)}}
货物 {{job.requested_cargo_id || '-'}} / 口位 {{job.entry_id || job.exit_id || '-'}} / 任务 {{job.active_task_id || '-'}}
{{job.current_step || '-'}}
{{item.at}}
{{item.message}}
{{JSON.stringify(item.data)}}
{{microJobStateLabel(job.state)}} #{{job.id}} {{microJobTypeLabel(job.job_type)}}
{{microStoreOperatorJobHint(job)}}
货物:{{job.requested_cargo_id || '-'}} / 口位:{{job.entry_id || job.exit_id || '-'}} / 任务:{{job.active_task_id || '-'}}
确认装货 确认取货 确认还框 恢复重试
执行口位恢复 执行重平衡 执行适配入口
锁定 {{microStoreState.locked_execution_bundles.length}} 双工位 {{microStoreState.dual_side_execution_bundles.length}} 口位恢复 {{microStoreState.port_recovery_recommendations.length}} 重平衡 {{microStoreState.rebalance_recommendations.length}} 诊断 {{microStoreDiagnosticCount}}
前置派发动作 {{index + 1}} · {{microPreDispatchActionStatusLabel(item.action_status)}}
{{item.summary || '--'}}
主侧:{{microActivationSelectionSideLabel(item.owner_side)}} #{{item.owner_job_id || '--'}} / 搭档:{{microActivationSelectionSideLabel(item.partner_side)}} #{{item.partner_job_id || '--'}}
动作目标:{{item.action_job_id ? `#${item.action_job_id}` : '--'}}
处理器:{{microPreDispatchActionHandlerLabel(item.action_handler)}} / 目标管道:{{microPreDispatchActionPipelineLabel(item.target_pipeline)}}
执行交接:{{microPreDispatchActionMotionHandoffLabel(item.motion_handoff)}} / {{item.ready_for_dispatch ? '可立即进入前置派发' : '当前仅保留等待/观察动作'}} / {{item.keeps_locked_bundle ? '保持当前锁定包' : '释放锁定包'}}
{{item.reason}}
观察作业:{{item.watch_job_ids.map((value) => `#${value}`).join(' / ')}}
阻塞:{{item.blocked_by_bundle_key || '--'}} / #{{item.blocked_by_job_id || '--'}}
回退:{{item.fallback_action}}
前置适配调用 {{index + 1}} · {{microPreDispatchAdapterCallStatusLabel(item.call_status)}}
{{item.summary || '--'}}
主侧:{{microActivationSelectionSideLabel(item.owner_side)}} #{{item.owner_job_id || '--'}} / 搭档:{{microActivationSelectionSideLabel(item.partner_side)}} #{{item.partner_job_id || '--'}}
调用目标:{{item.call_job_id ? `#${item.call_job_id}` : '--'}}
处理器:{{microPreDispatchAdapterCallHandlerLabel(item.call_handler)}} / 执行入口:{{microPreDispatchAdapterExecutionEntryLabel(item.execution_entry)}}
范围:{{microPreDispatchAdapterScopeLabel(item.adapter_scope)}} / {{item.adapter_ready ? '可立即调用' : '当前仅保留适配语义'}} / {{item.invokes_motion_stage ? '后续会进入执行流水线' : '当前不会进入执行层'}}
{{item.reason}}
观察作业:{{item.watch_job_ids.map((value) => `#${value}`).join(' / ')}}
阻塞:{{item.blocked_by_bundle_key || '--'}} / #{{item.blocked_by_job_id || '--'}}
回退:{{item.fallback_action}}
执行适配动作 {{index + 1}} · {{microExecutionAdapterActionStatusLabel(item.runtime_status)}}
{{item.summary || '--'}}
主侧:{{microActivationSelectionSideLabel(item.owner_side)}} #{{item.owner_job_id || '--'}} / 搭档:{{microActivationSelectionSideLabel(item.partner_side)}} #{{item.partner_job_id || '--'}}
动作目标:{{item.runtime_job_id ? `#${item.runtime_job_id}` : '--'}}
处理器:{{microExecutionAdapterActionHandlerLabel(item.runtime_handler)}} / 入口:{{microPreDispatchAdapterExecutionEntryLabel(item.runtime_entry)}}
范围:{{microExecutionAdapterActionScopeLabel(item.runtime_scope)}} / {{item.runtime_ready ? '可直接交给执行前适配器' : '当前仅保留执行前语义'}} / {{item.enters_task_pipeline ? '后续会进入既有任务流水线' : '当前不会进入执行流水线'}}
{{item.reason}}
观察作业:{{item.watch_job_ids.map((value) => `#${value}`).join(' / ')}}
阻塞:{{item.blocked_by_bundle_key || '--'}} / #{{item.blocked_by_job_id || '--'}}
回退:{{item.fallback_action}}
执行前桥接输入 {{index + 1}} · {{microExecutionPreBridgeInputStatusLabel(item.input_status)}}
{{item.summary || '--'}}
主侧:{{microActivationSelectionSideLabel(item.owner_side)}} #{{item.owner_job_id || '--'}} / 搭档:{{microActivationSelectionSideLabel(item.partner_side)}} #{{item.partner_job_id || '--'}}
交接作业:{{item.job_id ? `#${item.job_id}` : '--'}}
处理器:{{microExecutionAdapterActionHandlerLabel(item.input_handler)}} / 入口:{{microPreDispatchAdapterExecutionEntryLabel(item.input_entry)}}
范围:{{microExecutionAdapterActionScopeLabel(item.input_scope)}} / 桥接:{{microExecutionDispatchBridgeHandlerLabel(item.bridge_handler)}} / {{item.ready_for_bridge ? '可直接作为桥接器输入' : '当前仅记录交接上下文'}}
模式:{{microExecutionCommandHandoffModeLabel(item.handoff_mode)}} / {{item.keeps_locked_bundle ? '保持当前锁定包' : '释放锁定包'}} / {{item.enters_task_pipeline ? '已进入既有任务流水线' : '尚未进入任务流水线'}}
{{item.reason}}
观察作业:{{item.watch_job_ids.map((value) => `#${value}`).join(' / ')}}
回退:{{item.fallback_action}}
执行命令 {{index + 1}} · {{microExecutionCommandStatusLabel(item.command_status)}}
{{item.summary || '--'}}
主侧:{{microActivationSelectionSideLabel(item.owner_side)}} #{{item.owner_job_id || '--'}} / 搭档:{{microActivationSelectionSideLabel(item.partner_side)}} #{{item.partner_job_id || '--'}}
命令目标:{{item.command_job_id ? `#${item.command_job_id}` : '--'}}
命令:{{microExecutionCommandActionLabel(item.command_action)}} / 作用域:{{microExecutionCommandScopeLabel(item.execution_scope)}}
交接:{{microExecutionCommandHandoffModeLabel(item.handoff_mode)}} / {{item.consumes_dispatch_slot ? '占用本轮派发窗口' : '不占用新的派发窗口'}} / {{item.keeps_locked_bundle ? '保持当前锁定包' : '释放锁定包'}}
{{item.reason}}
观察作业:{{item.watch_job_ids.map((value) => `#${value}`).join(' / ')}}
阻塞:{{item.blocked_by_bundle_key || '--'}} / #{{item.blocked_by_job_id || '--'}}
回退:{{item.fallback_action}}
执行请求 {{index + 1}} · {{microExecutionDispatchRequestStatusLabel(item.request_status)}}
{{item.summary || '--'}}
主侧:{{microActivationSelectionSideLabel(item.owner_side)}} #{{item.owner_job_id || '--'}} / 搭档:{{microActivationSelectionSideLabel(item.partner_side)}} #{{item.partner_job_id || '--'}}
请求目标:{{item.request_job_id ? `#${item.request_job_id}` : '--'}}
请求命令:{{microExecutionDispatchRequestCommandLabel(item.request_command)}}
桥接:{{microExecutionDispatchBridgeScopeLabel(item.bridge_scope)}} / {{microExecutionDispatchBridgeHandlerLabel(item.bridge_handler)}} / {{item.bridge_ready ? '可直接交给前置派发器' : '当前只保留桥接语义'}}
{{item.reason}}
观察作业:{{item.watch_job_ids.map((value) => `#${value}`).join(' / ')}}
阻塞:{{item.blocked_by_bundle_key || '--'}} / #{{item.blocked_by_job_id || '--'}}
回退:{{item.fallback_action}}
执行适配 {{index + 1}} · {{microDispatchAdapterStatusLabel(item.adapter_status)}}
{{item.summary || '--'}}
持窗方:{{microActivationSelectionSideLabel(item.owner_side)}} #{{item.owner_job_id || '--'}} / 搭档方:{{microActivationSelectionSideLabel(item.partner_side)}} #{{item.partner_job_id || '--'}}
执行目标:{{item.target_job_id ? `#${item.target_job_id}` : '--'}}
命令:{{microDispatchAdapterCommandLabel(item.adapter_command)}}
{{item.reason}}
观察作业:{{item.watch_job_ids.map((value) => `#${value}`).join(' / ')}}
阻塞:{{item.blocked_by_bundle_key || '--'}} / #{{item.blocked_by_job_id || '--'}}
回退:{{item.fallback_action}}
派发协调 {{index + 1}} · {{microDispatchCoordinatorStatusLabel(item.coordinator_status)}}
{{item.summary || '--'}}
持窗方:{{microActivationSelectionSideLabel(item.owner_side)}} #{{item.owner_job_id || '--'}}
派发目标:{{item.dispatch_job_id ? `#${item.dispatch_job_id}` : '--'}}
动作:{{microDispatchCoordinatorActionLabel(item.coordinator_action)}} / {{item.ready_to_dispatch ? '可立即派发' : '当前不派发'}}
{{item.reason}}
观察作业:{{item.watch_job_ids.map((value) => `#${value}`).join(' / ')}}
阻塞:{{item.blocked_by_bundle_key || '--'}} / #{{item.blocked_by_job_id || '--'}}
回退:{{item.fallback_action}}
窗口协调 {{index + 1}} · {{microWindowCoordinationStatusLabel(item.coordination_status)}}
{{item.summary || '--'}}
持有方:{{microActivationSelectionSideLabel(item.owner_side)}} #{{item.owner_job_id || '--'}} / 搭档方:{{microActivationSelectionSideLabel(item.partner_side)}} #{{item.partner_job_id || '--'}}
动作:{{microWindowCoordinationActionLabel(item.coordination_action)}}
{{item.reason}}
阻塞:{{item.blocked_by_bundle_key || '--'}} / #{{item.blocked_by_job_id || '--'}}
说明:当前需要在窗口释放后重新校验或重规划。
回退:{{item.fallback_action}}
窗口会话 {{index + 1}} · {{microWindowSessionStatusLabel(item.session_status)}}
{{item.summary || '--'}}
持窗方:{{microActivationSelectionSideLabel(item.owner_side)}} #{{item.owner_job_id || '--'}} / 下一跳:#{{item.activation_job_id || '--'}}
释放策略:{{microWindowSessionReleaseStrategyLabel(item.release_strategy)}}
{{item.reason}}
观察作业:{{item.release_watch_job_ids.map((value) => `#${value}`).join(' / ')}}
阻塞:{{item.blocked_by_bundle_key || '--'}} / #{{item.blocked_by_job_id || '--'}}
回退:{{item.fallback_action}}
窗口记录 {{index + 1}} · {{microWindowRecordStatusLabel(item.record_status)}}
{{item.summary || '--'}}
持有方:{{microActivationSelectionSideLabel(item.owner_side)}} #{{item.owner_job_id || '--'}} / 搭档方:{{microActivationSelectionSideLabel(item.partner_side)}} #{{item.partner_job_id || '--'}}
动作:{{microWindowRecordNextActionLabel(item.next_action)}} / 申请:{{item.grant_condition || '--'}}
释放:{{item.release_condition}}
回退:{{item.fallback_action}}
窗口仲裁 {{index + 1}} · {{microWindowArbitrationStatusLabel(item.arbitration_status)}}
{{item.summary || '--'}}
{{item.reason}}
回退:{{item.fallback_action}}
锁定调度包 {{index + 1}} · {{microLockedBundlePhaseLabel(bundle.phase)}} · {{Number(bundle.bundle_score || 0).toFixed(1)}}
{{microActivationSelectionSourceLabel(bundle.source)}} / {{bundle.reason || '等待对侧续接'}}
左侧:{{microLockedBundleTaskSummary(bundle.left)}}
右侧:{{microLockedBundleTaskSummary(bundle.right)}}
执行预案:{{microLockedBundleExecutionModeLabel(bundle.execution_mode)}} / {{bundle.execution_summary}}
时序草案:{{microLockedBundleExecutionDraftSummary(bundle)}}
派发草案:{{microLockedBundleDispatchStateLabel(bundle.dispatch_window_state)}} / {{bundle.dispatch_window_ready ? '可预占下一次激活窗口' : '当前仅观察不预占'}} / {{bundle.dispatch_window_summary}}
释放条件 {{hintIndex + 1}}. {{microLockedBundleDispatchHintSummary(hint)}}
窗口契约:{{microLockedBundleDispatchContractSummary(bundle.dispatch_window_contract)}}
{{stepIndex + 1}}. {{microLockedBundleExecutionStepSummary(step)}}
主调度双工位候选 {{index + 1}} · {{Number(bundle.bundle_score || 0).toFixed(1)}}
{{bundle.reason}}
左侧:{{bundle.left ? `${microDualSideTaskKindLabel(bundle.left.kind)} / ${microDualSideTaskActionLabel(bundle.left)} / ${(bundle.left.cargo_id || bundle.left.entry_id || bundle.left.exit_id || '-')}` : '无'}}
右侧:{{bundle.right ? `${microDualSideTaskKindLabel(bundle.right.kind)} / ${microDualSideTaskActionLabel(bundle.right)} / ${(bundle.right.cargo_id || bundle.right.entry_id || bundle.right.exit_id || '-')}` : '无'}}
{{microPortRecoveryActionLabel(item.action_type)}}
{{item.reason}}
双工位候选 {{index + 1}}
{{bundle.reason}}
{{microRebalanceActionLabel(item.action_type)}}
{{item.reason}}
当前没有双工位候选、口位恢复、重平衡建议或高级诊断信息。
注册货框用于初始化、账实恢复,以及把已离线的同框号重新上架到现有货位。
注册货框
手工下架货框
当你把货架上的货框直接拿下时,在这里同步下架。若该框当前带货,会同时移除该货位上的在架库存记录。
{{microFrameStatusLabel(selectedMicroStoreManualFrame.status)}} {{microStoreLocationLabel(selectedMicroStoreManualFrame.location_id)}} {{selectedMicroStoreManualFrame.cargo_id || '-'}} {{selectedMicroStoreManualFrame.sku || '-'}} 我已确认该操作会同步下架该货框上的在架库存 手工下架货框
搜索 重置
左侧货架 (L)
{{layer}}层
右侧货架 (R)
{{layer}}层
{{selectedCellDisplayLabel(selectedCell)}} {{selectedCell.location_id}} {{locationDisplayStatusLabel(selectedCell)}} {{locationStatusLabel(selectedCell.status)}} {{locationStatusLabel(selectedCell.status)}} {{selectedCell.cargo_id}} {{selectedCell.quantity}}
{{taskTypeLabel(selectedTask.task_type)}} {{taskStatusLabel(selectedTask.status)}} 微仓 #{{taskMicroStoreJob(selectedTask).id}} / {{microJobTypeLabel(taskMicroStoreJob(selectedTask).job_type)}} / {{microJobStateLabel(taskMicroStoreJob(selectedTask).state)}} {{selectedTask.cargo_id}} {{selectedTask.source_location||'-'}} {{selectedTask.target_location||'-'}} {{selectedTask.quantity||'-'}} {{selectedTask.batch_no||'-'}} {{selectedTask.created_at||'-'}} {{selectedTask.started_at||'-'}} {{selectedTask.completed_at||'-'}} {{selectedTask.execution_duration_label||'-'}} 取消关联微仓作业 取消当前任务 工程师异常收口并解锁
执行日志
{{log.message}}
搜索 重置 新增货物
保存暂存区 已选 {{config.staging_location_ids.length}} 个 可用 {{availableStagingCount}} 占用 {{locStats.staging_occupied || 0}} 锁定 {{locStats.staging_locked || 0}} {{pickAreaSlotForm.isNew ? '新增待拣位' : '保存待拣位'}} 取消编辑 刷新 已登记 {{microFulfillment.pick_area_slots.length}} 个 {{frontStorageSlotForm.isNew ? '新增前置仓位' : '保存前置仓位'}} 取消编辑 刷新
{{locationCoordForm.executor_name || locationCoordForm.executor_id || '未识别执行器'}} 获取当前堆垛机位置
维护货物主数据。货物 ID 会作为入库条码和库存检索的主键。
任务空闲待命位置 获取当前堆垛机位置 {{config.motion_profile_standby_configured ? '待命位已配置' : '待命位未配置'}} 保存有权配置 立即重连运动设备 运动后端选择 汇川 PLC 雷赛 EMC 入库 出库 移库 运动执行器列表
保存时会提交完整列表;`shipping-stacker` 只作为出货履约执行器,不设为主调度。
添加出货堆垛机
出入口配置
支持多出入口。新增时会自动生成内部标识,优先区域和执行器可直接从现有配置里选择。
新增出入口
出口配置
入口和出口可以分开配置。出口常态应保持空位,后续左右双工位调度会基于这里的口位清单做侧向约束和同侧回收。
新增出口
区域配置
先定义“哪一片货位是什么区域”,再决定它是否允许入库落位。基础模式只展示当前强生效字段,高级模式再展开预留字段。
展示模式 基础模式 高级模式
新增区域
当前拓扑配置未发现明显冲突。建议继续核对:高优先级空框区不要混进普通存储位,关键缓冲位默认应避开入库落位。
{{ row.name || row.code || `区域${index + 1}` }}
{{ row.code || '未设置编码' }} · {{ microStoreZoneCategoryLabel(row.category) }} · 已选 {{ microStoreZoneLocationCount(row) }} 个货位
{{ microStoreZoneCategoryLabel(row.category) }} 入口 {{ microStoreZoneEntryCount(row) || '全局共享' }} 出口 {{ microStoreZoneExitCount(row) || '全局共享' }} 删除
当前强生效:区域类型 当前强生效:货位集合 当前强生效:允许落位 / 避开落位 高级字段含部分预留能力
用于出入口引用和调度识别,建议稳定命名,不要频繁改。当前强生效。
给现场人员看的名称,不影响调度行为,但会影响页面可读性。
{{ microStoreZoneCategoryDesc(row.category) }} 当前强生效。
决定哪些出入口会优先使用这块区域;留空表示全局共享。当前强生效。
后续左右双工位出库与回收会按这里约束出口可用区域;留空表示全局共享。当前为结构化配置,后续调度会接入。
数值越大越优先。普通存储区会参与入库打分,高优空框区会影响补位顺序。当前强生效。
低于这个值时系统会建议或触发补位。当前主要对“高优先级空框区”强生效。
决定满框入库时能不能落到这里。对空框池和关键缓冲位通常应关闭。当前强生效。
开启后,常规入库会主动避开这块区域。关键缓冲位建议开启。当前强生效。
货位拓扑选择
直接点选现有货位即可,不需要手输 ID。蓝色表示已选;支持先粗选再用搜索微调。
已选 {{ microStoreZoneLocationCount(row) }} 个 清空本区域
{{ group.label }}
暂无可选货位,请先检查货位数据是否已加载。
这里和上面的拓扑点选共用同一组数据,适合做少量微调。当前强生效。
高级字段
下面这些字段主要用于兼容后续策略扩展;当前版本只有部分场景会参考它们。
预留字段,当前版本不作为核心规划硬约束。
业务语义字段,当前版本不是硬约束,先按业务含义配置即可。
预留能力;当前核心调度优先看出入口级 `keep_empty_frame`。
模式
“高密度空框周转”模式当前已接入单次入库与出库回源位;批量暂存和中心点换位会在后续阶段继续完善。
双工位实机调试
开启“入/出库先入队”后,单个作业不会绕过双边候选评估直接派发;左右两侧都有可执行候选时,才会进入双工位激活链路。
评分权重 阈值与超时 重平衡 执行器
新增执行器时会自动生成默认标识;能力直接多选,当前核心流程默认复用 `transfer`。
新增执行器
保存智能微仓配置 放弃未保存修改
创建用户
保存角色