修改G30二级内容
This commit is contained in:
@@ -3,35 +3,41 @@
|
||||
<el-row :gutter="20">
|
||||
<!-- 左侧:设备列表 -->
|
||||
<el-col :span="16">
|
||||
<!-- 加载状态 -->
|
||||
<!-- Loading Status / 加载状态 -->
|
||||
<div v-if="isLoading" class="loading-container">
|
||||
<el-icon class="is-loading"><i class="el-icon-loading"></i></el-icon>
|
||||
<span>加载中...</span>
|
||||
<span>Loading...</span>
|
||||
<!-- 加载中... -->
|
||||
</div>
|
||||
|
||||
<!-- WebSocket 连接状态指示 -->
|
||||
<!-- WebSocket Connection Status Indicator / WebSocket 连接状态指示 -->
|
||||
<div v-if="!isLoading" class="ws-status-bar">
|
||||
<el-tooltip content="测量数据" placement="top">
|
||||
<el-tooltip content="Measurement Data" placement="top">
|
||||
<!-- 测量数据 -->
|
||||
<el-badge :is-dot="true" :type="socketStatus.measure ? 'success' : 'danger'">
|
||||
<i class="el-icon-data-analysis"></i>
|
||||
</el-badge>
|
||||
</el-tooltip>
|
||||
<el-tooltip content="位置追踪" placement="top">
|
||||
<el-tooltip content="Position Tracking" placement="top">
|
||||
<!-- 位置追踪 -->
|
||||
<el-badge :is-dot="true" :type="socketStatus.position ? 'success' : 'danger'">
|
||||
<i class="el-icon-location"></i>
|
||||
</el-badge>
|
||||
</el-tooltip>
|
||||
<el-tooltip content="操作信号" placement="top">
|
||||
<el-tooltip content="Operation Signal" placement="top">
|
||||
<!-- 操作信号 -->
|
||||
<el-badge :is-dot="true" :type="socketStatus.signal ? 'success' : 'danger'">
|
||||
<i class="el-icon-bell"></i>
|
||||
</el-badge>
|
||||
</el-tooltip>
|
||||
<el-tooltip content="物料映射" placement="top">
|
||||
<el-tooltip content="Material Mapping" placement="top">
|
||||
<!-- 物料映射 -->
|
||||
<el-badge :is-dot="true" :type="socketStatus.matmap ? 'success' : 'danger'">
|
||||
<i class="el-icon-map-location"></i>
|
||||
</el-badge>
|
||||
</el-tooltip>
|
||||
<el-tooltip content="计算结果" placement="top">
|
||||
<el-tooltip content="Calculation Result" placement="top">
|
||||
<!-- 计算结果 -->
|
||||
<el-badge :is-dot="true" :type="socketStatus.calcSetup ? 'success' : 'danger'">
|
||||
<i class="el-icon-s-marketing"></i>
|
||||
</el-badge>
|
||||
@@ -39,11 +45,13 @@
|
||||
</div>
|
||||
|
||||
<div v-if="!isLoading" class="device-layout">
|
||||
<!-- 入口段区域 -->
|
||||
<!-- Entry Section / 入口段区域 -->
|
||||
<div class="section-area entry-area">
|
||||
<div class="section-header">
|
||||
入口段
|
||||
<span class="section-info" v-if="positionData.entrySpeed">速度: {{ positionData.entrySpeed.toFixed(1) }} m/min</span>
|
||||
Entry Section
|
||||
<!-- 入口段 -->
|
||||
<span class="section-info" v-if="positionData.entrySpeed">Speed: {{ positionData.entrySpeed.toFixed(1) }} m/min</span>
|
||||
<!-- 速度 -->
|
||||
</div>
|
||||
<div class="section-summary" v-if="entrySectionMetrics.length">
|
||||
<div class="summary-item" v-for="item in entrySectionMetrics" :key="item.label">
|
||||
@@ -67,11 +75,13 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 熔炉段区域 -->
|
||||
<!-- Furnace Section / 熔炉段区域 -->
|
||||
<div class="section-area furnace-area">
|
||||
<div class="section-header">
|
||||
熔炉段
|
||||
<span class="section-info" v-if="positionData.technologySpeed">速度: {{ positionData.technologySpeed.toFixed(1) }} m/min</span>
|
||||
Furnace Section
|
||||
<!-- 熔炉段 -->
|
||||
<span class="section-info" v-if="positionData.technologySpeed">Speed: {{ positionData.technologySpeed.toFixed(1) }} m/min</span>
|
||||
<!-- 速度 -->
|
||||
</div>
|
||||
<div class="section-summary" v-if="furnaceSectionMetrics.length">
|
||||
<div class="summary-item" v-for="item in furnaceSectionMetrics" :key="item.label">
|
||||
@@ -95,9 +105,10 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 涂层段区域 -->
|
||||
<!-- Coating Section / 涂层段区域 -->
|
||||
<div class="section-area coat-area">
|
||||
<div class="section-header">涂层段</div>
|
||||
<div class="section-header">Coating Section</div>
|
||||
<!-- 涂层段 -->
|
||||
<div class="section-summary" v-if="coatSectionMetrics.length">
|
||||
<div class="summary-item" v-for="item in coatSectionMetrics" :key="item.label">
|
||||
<span class="summary-label">{{ item.label }}:</span>
|
||||
@@ -120,11 +131,13 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 出口段区域 -->
|
||||
<!-- Exit Section / 出口段区域 -->
|
||||
<div class="section-area exit-area">
|
||||
<div class="section-header">
|
||||
出口段
|
||||
<span class="section-info" v-if="positionData.exitSpeed">速度: {{ positionData.exitSpeed.toFixed(1) }} m/min</span>
|
||||
Exit Section
|
||||
<!-- 出口段 -->
|
||||
<span class="section-info" v-if="positionData.exitSpeed">Speed: {{ positionData.exitSpeed.toFixed(1) }} m/min</span>
|
||||
<!-- 速度 -->
|
||||
</div>
|
||||
<div class="section-summary" v-if="exitSectionMetrics.length">
|
||||
<div class="summary-item" v-for="item in exitSectionMetrics" :key="item.label">
|
||||
@@ -148,9 +161,10 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 其他段区域 -->
|
||||
<!-- Other Section / 其他段区域 -->
|
||||
<div class="section-area" v-if="exitOtherDevicesList.length">
|
||||
<div class="section-header">其他段</div>
|
||||
<div class="section-header">Other Section</div>
|
||||
<!-- 其他段 -->
|
||||
<div class="device-grid other-exit-grid">
|
||||
<div v-for="device in exitOtherDevicesList" :key="device.positionNameEn" class="device-card" :class="{
|
||||
active: selectedCard && selectedCard.positionNameEn === device.positionNameEn,
|
||||
@@ -172,13 +186,15 @@
|
||||
<!-- 右侧:信息面板 -->
|
||||
<el-col :span="8">
|
||||
<div class="info-panels">
|
||||
<!-- 生产计划列表 -->
|
||||
<!-- Production Plan List / 生产计划列表 -->
|
||||
<div class="panel">
|
||||
<div class="panel-title">
|
||||
<i class="el-icon-s-order"></i> 生产计划
|
||||
<i class="el-icon-s-order"></i> Production Plan
|
||||
<!-- 生产计划 -->
|
||||
</div>
|
||||
<div class="plan-list-vertical">
|
||||
<el-empty v-if="planQueue.length === 0" description="暂无生产计划" :image-size="80" />
|
||||
<el-empty v-if="planQueue.length === 0" description="No production plan" :image-size="80" />
|
||||
<!-- 暂无生产计划 -->
|
||||
<div
|
||||
v-else
|
||||
v-for="(plan, index) in planQueue"
|
||||
@@ -190,76 +206,98 @@
|
||||
<div class="plan-item-top">
|
||||
<div class="plan-order-dot" :class="getPlanOrderClass(plan.status)">{{ index + 1 }}</div>
|
||||
<div class="plan-title-text">
|
||||
<div class="plan-id">计划ID:{{ plan.planid || '-' }}</div>
|
||||
<div class="plan-coil">钢卷号:{{ plan.coilid || '-' }}</div>
|
||||
<div class="plan-id">Plan ID: {{ plan.planid || '-' }}</div>
|
||||
<!-- 计划ID -->
|
||||
<div class="plan-coil">Coil ID: {{ plan.coilid || '-' }}</div>
|
||||
<!-- 钢卷号 -->
|
||||
</div>
|
||||
<el-tag :type="getPlanStatusTagType(plan.status)" size="mini">{{ getPlanStatusText(plan.status) }}</el-tag>
|
||||
</div>
|
||||
<div class="plan-item-bottom">
|
||||
<span>钢种:{{ plan.steelGrade || '-' }}</span>
|
||||
<span>顺序:{{ plan.seqid || '-' }}</span>
|
||||
<span>Steel Grade: {{ plan.steelGrade || '-' }}</span>
|
||||
<!-- 钢种 -->
|
||||
<span>Sequence: {{ plan.seqid || '-' }}</span>
|
||||
<!-- 顺序 -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 生产计划详情 -->
|
||||
<!-- Production Plan Detail / 生产计划详情 -->
|
||||
<div class="panel" v-if="selectedPlan">
|
||||
<div class="panel-title">
|
||||
<i class="el-icon-document"></i> 生产计划详情
|
||||
<i class="el-icon-document"></i> Plan Detail
|
||||
<!-- 生产计划详情 -->
|
||||
<el-button size="mini" type="text" icon="el-icon-close" @click="selectedPlan = null"></el-button>
|
||||
</div>
|
||||
<div class="plan-detail-content">
|
||||
<!-- 位置信息(如果在产线上) -->
|
||||
<!-- Position Info (if on production line) / 位置信息(如果在产线上) -->
|
||||
<div v-if="selectedPlanPosition" class="position-alert">
|
||||
<div class="position-icon">
|
||||
<i class="el-icon-location"></i>
|
||||
</div>
|
||||
<div class="position-info">
|
||||
<div class="position-label">当前位置</div>
|
||||
<div class="position-label">Current Position</div>
|
||||
<!-- 当前位置 -->
|
||||
<div class="position-name">{{ selectedPlanPosition.positionNameCn }}</div>
|
||||
<div class="position-code">{{ selectedPlanPosition.positionNameEn }}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<el-descriptions :column="1" border size="small">
|
||||
<el-descriptions-item label="计划ID">{{ selectedPlan.planid || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="钢卷号">{{ selectedPlan.coilid || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="顺序号">{{ selectedPlan.seqid || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="状态">
|
||||
<el-descriptions-item label="Plan ID">{{ selectedPlan.planid || '-' }}</el-descriptions-item>
|
||||
<!-- 计划ID -->
|
||||
<el-descriptions-item label="Coil ID">{{ selectedPlan.coilid || '-' }}</el-descriptions-item>
|
||||
<!-- 钢卷号 -->
|
||||
<el-descriptions-item label="Sequence">{{ selectedPlan.seqid || '-' }}</el-descriptions-item>
|
||||
<!-- 顺序号 -->
|
||||
<el-descriptions-item label="Status">
|
||||
<!-- 状态 -->
|
||||
<el-tag :type="getPlanStatusTagType(selectedPlan.status)" size="small" effect="dark">
|
||||
{{ getPlanStatusText(selectedPlan.status) }}
|
||||
</el-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="钢种">{{ selectedPlan.steelGrade || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="入口厚度">
|
||||
<el-descriptions-item label="Steel Grade">{{ selectedPlan.steelGrade || '-' }}</el-descriptions-item>
|
||||
<!-- 钢种 -->
|
||||
<el-descriptions-item label="Entry Thickness">
|
||||
<!-- 入口厚度 -->
|
||||
{{ selectedPlan.entryThick ? selectedPlan.entryThick + ' mm' : '-' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="入口宽度">
|
||||
<el-descriptions-item label="Entry Width">
|
||||
<!-- 入口宽度 -->
|
||||
{{ selectedPlan.entryWidth ? selectedPlan.entryWidth + ' mm' : '-' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="入口重量">
|
||||
<el-descriptions-item label="Entry Weight">
|
||||
<!-- 入口重量 -->
|
||||
{{ selectedPlan.entryWeight ? selectedPlan.entryWeight + ' t' : '-' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="入口长度">
|
||||
<el-descriptions-item label="Entry Length">
|
||||
<!-- 入口长度 -->
|
||||
{{ selectedPlan.entryLength ? selectedPlan.entryLength + ' mm' : '-' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="订单号">{{ selectedPlan.orderNo || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="机组号">{{ selectedPlan.unitCode || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="计划类型">{{ selectedPlan.planType || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="Order No">{{ selectedPlan.orderNo || '-' }}</el-descriptions-item>
|
||||
<!-- 订单号 -->
|
||||
<el-descriptions-item label="Unit Code">{{ selectedPlan.unitCode || '-' }}</el-descriptions-item>
|
||||
<!-- 机组号 -->
|
||||
<el-descriptions-item label="Plan Type">{{ selectedPlan.planType || '-' }}</el-descriptions-item>
|
||||
<!-- 计划类型 -->
|
||||
</el-descriptions>
|
||||
|
||||
<!-- 时间信息 -->
|
||||
<!-- Time Information / 时间信息 -->
|
||||
<div class="plan-time-info" v-if="selectedPlan.onlineDate || selectedPlan.startDate || selectedPlan.endDate">
|
||||
<div class="info-subtitle">时间信息</div>
|
||||
<div class="info-subtitle">Time Information</div>
|
||||
<!-- 时间信息 -->
|
||||
<el-descriptions :column="1" border size="small">
|
||||
<el-descriptions-item label="上线时间" v-if="selectedPlan.onlineDate">
|
||||
<el-descriptions-item label="Online Time" v-if="selectedPlan.onlineDate">
|
||||
<!-- 上线时间 -->
|
||||
{{ formatDateTime(selectedPlan.onlineDate) }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="开始时间" v-if="selectedPlan.startDate">
|
||||
<el-descriptions-item label="Start Time" v-if="selectedPlan.startDate">
|
||||
<!-- 开始时间 -->
|
||||
{{ formatDateTime(selectedPlan.startDate) }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="结束时间" v-if="selectedPlan.endDate">
|
||||
<el-descriptions-item label="End Time" v-if="selectedPlan.endDate">
|
||||
<!-- 结束时间 -->
|
||||
{{ formatDateTime(selectedPlan.endDate) }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
@@ -267,10 +305,11 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 最近操作信号 -->
|
||||
<!-- Recent Operation Signal / 最近操作信号 -->
|
||||
<div class="panel" v-if="signalData">
|
||||
<div class="panel-title">
|
||||
<i class="el-icon-bell"></i> 最近操作
|
||||
<i class="el-icon-bell"></i> Recent Operation
|
||||
<!-- 最近操作 -->
|
||||
<el-tag
|
||||
:type="getOperationTagType(signalData.operation)"
|
||||
size="mini"
|
||||
@@ -280,63 +319,82 @@
|
||||
</div>
|
||||
<div class="signal-info" :class="getSignalPanelClass(signalData.operation)">
|
||||
<el-tag :type="signalData.autoFlag === 1 ? 'warning' : 'info'" size="small">
|
||||
{{ signalData.autoFlag === 1 ? '手动操作' : '自动操作' }}
|
||||
{{ signalData.autoFlag === 1 ? 'Manual' : 'Auto' }}
|
||||
<!-- {{ signalData.autoFlag === 1 ? '手动操作' : '自动操作' }} -->
|
||||
</el-tag>
|
||||
<div class="signal-detail">
|
||||
<div><strong>操作类型:</strong>
|
||||
<div><strong>Operation Type:</strong>
|
||||
<!-- 操作类型 -->
|
||||
<span :class="getOperationTextClass(signalData.operation)">
|
||||
{{ getOperationText(signalData.operation) }}
|
||||
</span>
|
||||
</div>
|
||||
<div><strong>钢卷号:</strong> {{ producingCoilId || signalData.entryMatId || '-' }}</div>
|
||||
<div><strong>计划ID:</strong> {{ signalData.planId || '-' }}</div>
|
||||
<div><strong>Coil ID:</strong> {{ producingCoilId || signalData.entryMatId || '-' }}</div>
|
||||
<!-- 钢卷号 -->
|
||||
<div><strong>Plan ID:</strong> {{ signalData.planId || '-' }}</div>
|
||||
<!-- 计划ID -->
|
||||
<div v-if="signalData.porIdx !== null && signalData.porIdx !== undefined">
|
||||
<strong>开卷机:</strong> {{ signalData.porIdx }}
|
||||
<strong>Pay-off Reel:</strong> {{ signalData.porIdx }}
|
||||
<!-- 开卷机 -->
|
||||
</div>
|
||||
<div v-if="signalData.trIdx !== null && signalData.trIdx !== undefined">
|
||||
<strong>卷取机:</strong> {{ signalData.trIdx }}
|
||||
<strong>Take-up Reel:</strong> {{ signalData.trIdx }}
|
||||
<!-- 卷取机 -->
|
||||
</div>
|
||||
<div v-if="signalData.virtualPlanFlag">
|
||||
<el-tag type="danger" size="mini">虚拟卷</el-tag>
|
||||
<el-tag type="danger" size="mini">Virtual Coil</el-tag>
|
||||
<!-- 虚拟卷 -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 操作按钮 -->
|
||||
<!-- Operation Buttons / 操作按钮 -->
|
||||
<div class="panel">
|
||||
<div class="panel-title">操作</div>
|
||||
<div class="panel-title">Operations</div>
|
||||
<!-- 操作 -->
|
||||
<div class="btn-list">
|
||||
<el-button class="action-btn" size="small" @click="handleOperate(selectedCard, 'ONLINE')">钢卷上线</el-button>
|
||||
<el-button class="action-btn" size="small" @click="handleOperate(selectedCard, 'UNLOAD')">手动卸卷</el-button>
|
||||
<el-button class="action-btn" size="small" @click="handleOperate(selectedCard, 'ONLINE')">Coil Online</el-button>
|
||||
<!-- 钢卷上线 -->
|
||||
<el-button class="action-btn" size="small" @click="handleOperate(selectedCard, 'UNLOAD')">Manual Unload</el-button>
|
||||
<!-- 手动卸卷 -->
|
||||
<el-button class="action-btn" size="small"
|
||||
@click="handleOperate(selectedCard, 'ALL_RETURN')">整卷回退</el-button>
|
||||
@click="handleOperate(selectedCard, 'ALL_RETURN')">Full Return</el-button>
|
||||
<!-- 整卷回退 -->
|
||||
<el-button class="action-btn" size="small"
|
||||
@click="handleOperate(selectedCard, 'HALF_RETURN')">半卷回退</el-button>
|
||||
<el-button class="action-btn" size="small" @click="handleOperate(selectedCard, 'BLOCK')">卸卷并封闭</el-button>
|
||||
@click="handleOperate(selectedCard, 'HALF_RETURN')">Half Return</el-button>
|
||||
<!-- 半卷回退 -->
|
||||
<el-button class="action-btn" size="small" @click="handleOperate(selectedCard, 'BLOCK')">Unload & Block</el-button>
|
||||
<!-- 卸卷并封闭 -->
|
||||
</div>
|
||||
</div>
|
||||
<!-- 设备基本信息 -->
|
||||
<!-- Device Basic Info / 设备基本信息 -->
|
||||
<div class="panel" v-if="selectedCard">
|
||||
<div class="panel-title">基本信息</div>
|
||||
<div class="panel-title">Basic Info</div>
|
||||
<!-- 基本信息 -->
|
||||
<table class="info-table">
|
||||
<tr>
|
||||
<td>位置名称</td>
|
||||
<td>Position Name</td>
|
||||
<!-- 位置名称 -->
|
||||
<td>{{ selectedCard.positionNameCn || '-' }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>位置代号</td>
|
||||
<td>Position Code</td>
|
||||
<!-- 位置代号 -->
|
||||
<td>{{ selectedCard.positionNameEn || '-' }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>钢卷号</td>
|
||||
<td>Coil ID</td>
|
||||
<!-- 钢卷号 -->
|
||||
<td>{{ selectedCard.matId || '-' }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>计划ID</td>
|
||||
<td>Plan ID</td>
|
||||
<!-- 计划ID -->
|
||||
<td>{{ selectedCard.planId || '-' }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>计划号</td>
|
||||
<td>Plan No</td>
|
||||
<!-- 计划号 -->
|
||||
<td>{{ selectedCard.planNo || '-' }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
@@ -346,39 +404,45 @@
|
||||
|
||||
<div class="panel">
|
||||
|
||||
<!-- 调整工具,选择两个位置,两个下拉选,分别双向绑定 -->
|
||||
<!-- Adjustment Tool: Select two positions with two dropdowns / 调整工具,选择两个位置,两个下拉选,分别双向绑定 -->
|
||||
<el-form :model="adjustForm" ref="adjustForm" label-width="80px">
|
||||
<el-form-item label="当前位置" prop="current">
|
||||
<el-select v-model="adjustForm.current" placeholder="请选择当前位置">
|
||||
<el-form-item label="Current Position" prop="current">
|
||||
<!-- 当前位置 -->
|
||||
<el-select v-model="adjustForm.current" placeholder="Please select current position">
|
||||
<!-- 请选择当前位置 -->
|
||||
<el-option v-for="item in matMapList" :key="item.positionNameEn" :label="item.positionNameCn"
|
||||
:value="item.positionNameEn"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="目标位置" prop="target">
|
||||
<el-select v-model="adjustForm.target" placeholder="请选择目标位置">
|
||||
<el-form-item label="Target Position" prop="target">
|
||||
<!-- 目标位置 -->
|
||||
<el-select v-model="adjustForm.target" placeholder="Please select target position">
|
||||
<!-- 请选择目标位置 -->
|
||||
<el-option v-for="item in matMapList" :key="item.positionNameEn" :label="item.positionNameCn"
|
||||
:value="item.positionNameEn"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-button type="primary" :disabled="!adjustForm.current || !adjustForm.target"
|
||||
@click="handleConfirmAdjust">确认调整</el-button>
|
||||
@click="handleConfirmAdjust">Confirm Adjustment</el-button>
|
||||
<!-- 确认调整 -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<!-- 计算结果对话框 -->
|
||||
<!-- Calculation Setup Result Dialog / 计算结果对话框 -->
|
||||
<el-dialog
|
||||
title="计算设定结果"
|
||||
title="Calculation Setup Result"
|
||||
:visible.sync="showCalcResultDialog"
|
||||
width="80%"
|
||||
v-if="calcSetupResult"
|
||||
>
|
||||
<div class="calc-result-header">
|
||||
<el-tag :type="calcSetupResult.flag ? 'success' : 'danger'">
|
||||
{{ calcSetupResult.flag ? '计算成功' : '计算失败' }}
|
||||
{{ calcSetupResult.flag ? 'Calculation Success' : 'Calculation Failed' }}
|
||||
<!-- {{ calcSetupResult.flag ? '计算成功' : '计算失败' }} -->
|
||||
</el-tag>
|
||||
<span>Key: {{ calcSetupResult.key }}</span>
|
||||
</div>
|
||||
@@ -389,69 +453,95 @@
|
||||
stripe
|
||||
max-height="500"
|
||||
>
|
||||
<el-table-column prop="passno" label="道次号" width="80" fixed></el-table-column>
|
||||
<el-table-column prop="entryThick" label="入口厚度(mm)" width="120"></el-table-column>
|
||||
<el-table-column prop="exitThick" label="出口厚度(mm)" width="120"></el-table-column>
|
||||
<el-table-column prop="reduction" label="压下率(%)" width="100"></el-table-column>
|
||||
<el-table-column prop="rollSpeed" label="轧制速度" width="120"></el-table-column>
|
||||
<el-table-column prop="rollForce" label="轧制力(kN)" width="120"></el-table-column>
|
||||
<el-table-column prop="entryTension" label="入口张力" width="120"></el-table-column>
|
||||
<el-table-column prop="exitTension" label="出口张力" width="120"></el-table-column>
|
||||
<el-table-column prop="passno" label="Pass No" width="80" fixed></el-table-column>
|
||||
<!-- 道次号 -->
|
||||
<el-table-column prop="entryThick" label="Entry Thickness (mm)" width="120"></el-table-column>
|
||||
<!-- 入口厚度 -->
|
||||
<el-table-column prop="exitThick" label="Exit Thickness (mm)" width="120"></el-table-column>
|
||||
<!-- 出口厚度 -->
|
||||
<el-table-column prop="reduction" label="Reduction (%)" width="100"></el-table-column>
|
||||
<!-- 压下率 -->
|
||||
<el-table-column prop="rollSpeed" label="Roll Speed" width="120"></el-table-column>
|
||||
<!-- 轧制速度 -->
|
||||
<el-table-column prop="rollForce" label="Roll Force (kN)" width="120"></el-table-column>
|
||||
<!-- 轧制力 -->
|
||||
<el-table-column prop="entryTension" label="Entry Tension" width="120"></el-table-column>
|
||||
<!-- 入口张力 -->
|
||||
<el-table-column prop="exitTension" label="Exit Tension" width="120"></el-table-column>
|
||||
<!-- 出口张力 -->
|
||||
</el-table>
|
||||
<div v-else class="empty-msg">无计算结果数据</div>
|
||||
<div v-else class="empty-msg">No calculation result data</div>
|
||||
<!-- 无计算结果数据 -->
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :visible.sync="operateMatStatus" :title="getOperateTitle" width="50%">
|
||||
<el-form :model="operateMatForm" :rules="operateRules" ref="operateForm" label-width="120px">
|
||||
<el-form-item label="开卷机编号" prop="porIdx">
|
||||
<el-form-item label="Pay-off Reel No" prop="porIdx">
|
||||
<!-- 开卷机编号 -->
|
||||
<el-input v-model="operateMatForm.porIdx"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="卷取机编号" prop="trIdx">
|
||||
<el-form-item label="Take-up Reel No" prop="trIdx">
|
||||
<!-- 卷取机编号 -->
|
||||
<el-input v-model="operateMatForm.trIdx"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="计划id" prop="planId">
|
||||
<el-input v-model="operateMatForm.planId" placeholder="请输入计划ID"></el-input>
|
||||
<el-form-item label="Plan ID" prop="planId">
|
||||
<!-- 计划id -->
|
||||
<el-input v-model="operateMatForm.planId" placeholder="Please enter Plan ID"></el-input>
|
||||
<!-- 请输入计划ID -->
|
||||
</el-form-item>
|
||||
<el-form-item label="钢卷号" prop="entryMatId">
|
||||
<el-input v-model="operateMatForm.entryMatId" placeholder="请输入钢卷号"></el-input>
|
||||
<el-form-item label="Coil ID" prop="entryMatId">
|
||||
<!-- 钢卷号 -->
|
||||
<el-input v-model="operateMatForm.entryMatId" placeholder="Please enter Coil ID"></el-input>
|
||||
<!-- 请输入钢卷号 -->
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="计划号" prop="planNo">
|
||||
<el-input v-model="operateMatForm.planNo" placeholder="请输入计划号"></el-input>
|
||||
</el-form-item> -->
|
||||
<el-form-item label="操作类型" prop="operation">
|
||||
<el-form-item label="Operation Type" prop="operation">
|
||||
<!-- 操作类型 -->
|
||||
<el-select v-model="operateMatForm.operation" disabled>
|
||||
<el-option label="钢卷上线" value="ONLINE"></el-option>
|
||||
<el-option label="手动卸卷" value="UNLOAD"></el-option>
|
||||
<el-option label="整卷回退" value="ALL_RETURN"></el-option>
|
||||
<el-option label="半卷回退" value="HALF_RETURN"></el-option>
|
||||
<el-option label="卸卷并封闭" value="BLOCK"></el-option>
|
||||
<!-- <el-option label="甩尾" value="THROW_TAIL"></el-option> -->
|
||||
<el-option label="Coil Online" value="ONLINE"></el-option>
|
||||
<!-- 钢卷上线 -->
|
||||
<el-option label="Manual Unload" value="UNLOAD"></el-option>
|
||||
<!-- 手动卸卷 -->
|
||||
<el-option label="Full Return" value="ALL_RETURN"></el-option>
|
||||
<!-- 整卷回退 -->
|
||||
<el-option label="Half Return" value="HALF_RETURN"></el-option>
|
||||
<!-- 半卷回退 -->
|
||||
<el-option label="Unload & Block" value="BLOCK"></el-option>
|
||||
<!-- 卸卷并封闭 -->
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<!-- 回退相关字段 -->
|
||||
<!-- Return Related Fields / 回退相关字段 -->
|
||||
<template v-if="['ALL_RETURN', 'HALF_RETURN'].includes(operateMatForm.operation)">
|
||||
<el-form-item label="回退卷号" prop="returnMatId">
|
||||
<el-input v-model="operateMatForm.returnMatId" placeholder="请输入回退卷号"></el-input>
|
||||
<el-form-item label="Return Coil ID" prop="returnMatId">
|
||||
<!-- 回退卷号 -->
|
||||
<el-input v-model="operateMatForm.returnMatId" placeholder="Please enter Return Coil ID"></el-input>
|
||||
<!-- 请输入回退卷号 -->
|
||||
</el-form-item>
|
||||
<el-form-item label="回退重量" prop="returnWeight">
|
||||
<el-input v-model="operateMatForm.returnWeight" placeholder="请输入回退重量"></el-input>
|
||||
<el-form-item label="Return Weight" prop="returnWeight">
|
||||
<!-- 回退重量 -->
|
||||
<el-input v-model="operateMatForm.returnWeight" placeholder="Please enter Return Weight"></el-input>
|
||||
<!-- 请输入回退重量 -->
|
||||
</el-form-item>
|
||||
<el-form-item label="回退备注" prop="returnRemark">
|
||||
<el-form-item label="Return Remark" prop="returnRemark">
|
||||
<!-- 回退备注 -->
|
||||
<el-input v-model="operateMatForm.returnRemark" rows="3"></el-input>
|
||||
</el-form-item>
|
||||
</template>
|
||||
|
||||
<!-- 产出长度字段 -->
|
||||
<!-- Output Length Fields / 产出长度字段 -->
|
||||
<template v-if="['PRODUCING', 'PRODUCT'].includes(operateMatForm.operation)">
|
||||
<el-form-item label="产出钢卷长度" prop="coilLength">
|
||||
<el-input v-model="operateMatForm.coilLength" type="number" placeholder="请输入产出钢卷长度"></el-input>
|
||||
<el-form-item label="Output Coil Length" prop="coilLength">
|
||||
<!-- 产出钢卷长度 -->
|
||||
<el-input v-model="operateMatForm.coilLength" type="number" placeholder="Please enter Output Coil Length"></el-input>
|
||||
<!-- 请输入产出钢卷长度 -->
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="operateMatStatus = false">取消</el-button>
|
||||
<el-button type="primary" @click="submitOperateForm">确定</el-button>
|
||||
<el-button @click="operateMatStatus = false">Cancel</el-button>
|
||||
<!-- 取消 -->
|
||||
<el-button type="primary" @click="submitOperateForm">Confirm</el-button>
|
||||
<!-- 确定 -->
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
@@ -461,13 +551,15 @@
|
||||
import { adjustPosition, getTrackMatPosition, operateMat, getBackData, getPlanQueue } from '@/api/l2/track'
|
||||
import wsManager from '@/utils/websocketManager'
|
||||
|
||||
// Device metadata mapping based on backend DeviceEnum (section, source, parameter fields)
|
||||
// 基于后端 DeviceEnum 的前端映射(区域、来源、参数字段)
|
||||
const DEVICE_META = {
|
||||
POR1: { sectionType: 'ENTRY', sourceType: 'ENTRY', paramFields: ['tensionPorBr1', 'stripSpeed'] },
|
||||
POR2: { sectionType: 'ENTRY', sourceType: 'ENTRY', paramFields: ['tensionPorBr2', 'stripSpeed'] },
|
||||
WELDER: { sectionType: 'ENTRY', sourceType: 'ENTRY', paramFields: ['weldStatus'] },
|
||||
ENL1: { sectionType: 'PROCESS', sourceType: 'ENTRY', paramFields: ['celLength', 'celCapacity', 'tensionCel'] },
|
||||
ENL2: { sectionType: 'PROCESS', sourceType: 'ENTRY', paramFields: ['celLength', 'celCapacity', 'tensionCel'] },
|
||||
ENL1: { sectionType: 'PROCESS', sourceType: 'ENTRY', paramFields: ['celLength', 'celCapacity', 'tensionCel', 'celLengthMax', 'celLengthMin', 'bR4or5toBR6Tension'] },
|
||||
ENL2: { sectionType: 'PROCESS', sourceType: 'ENTRY', paramFields: ['celLength', 'celCapacity', 'tensionCel', 'celLengthMax', 'celLengthMin', 'bR4or5toBR6Tension'] },
|
||||
ENL3: { sectionType: 'PROCESS', sourceType: 'ENTRY', paramFields: ['celLength', 'celCapacity', 'tensionCel', 'celLengthMax', 'celLengthMin', 'bR4or5toBR6Tension'] },
|
||||
|
||||
CLEAN: { sectionType: 'PROCESS', sourceType: 'FURNACE', paramFields: ['cleaningVoltage', 'cleaningCurrent', 'alkaliConcentration', 'alkaliTemperature'] },
|
||||
FUR1: { sectionType: 'PROCESS', sourceType: 'FURNACE', paramFields: ['phfExitStripTemp', 'potTemperature', 'gasConsumption'] },
|
||||
@@ -481,56 +573,86 @@ const DEVICE_META = {
|
||||
COAT: { sectionType: 'PROCESS', sourceType: 'COAT', paramFields: [
|
||||
'avrCoatingWeightTop','stdCoatingWeightTop','maxCoatingWeightTop','minCoatingWeightTop',
|
||||
'avrCoatingWeightBottom','stdCoatingWeightBottom','maxCoatingWeightBottom','minCoatingWeightBottom',
|
||||
'airKnifePressure','airKnifeFlow','airKnifeGap','stripSpeedTmExit','tensionBr5Tm',
|
||||
'tensionTmBr6','tensionBr5Br6','tmMask','tmElongation','rollForceOperator','rollForceDrive',
|
||||
'airKnifePressure','airKnifeFlow','airKnifeGap','stripSpeedTmExit','tensionBr8Tm',
|
||||
'tensionTmBr9','tensionBr8Br9','tmMask','tmElongation','rollForceOperator','rollForceDrive',
|
||||
'motorTorque','bendingForce','antiCrimpingRollMesh','billyRollMesh',
|
||||
'tensionTlBr7','tensionBr6Br7','tlFlag','tlElongation','levelingUnit1Mesh','levelingUnit2Mesh',
|
||||
'antiCrossBowUnitMesh','tensionBr7Br8','stripSpeedAfp','stripTempAfp'
|
||||
'tensionTlBr10Br11','tensionBr9toBr10Br11','tlFlag','tlElongation','levelingUnit1Mesh','levelingUnit2Mesh',
|
||||
'antiCrossBowUnitMesh','tensionBr10Br11toBr12','stripSpeedAfp','stripTempAfp'
|
||||
] },
|
||||
|
||||
CXL1: { sectionType: 'EXIT', sourceType: 'EXIT', paramFields: ['cxlLength', 'cxlCapacity', 'tensionCxl'] },
|
||||
CXL2: { sectionType: 'EXIT', sourceType: 'EXIT', paramFields: ['cxlLength', 'cxlCapacity', 'tensionCxl'] },
|
||||
INS: { sectionType: 'EXIT', sourceType: 'EXIT', paramFields: ['inspectionStatus'] },
|
||||
TR: { sectionType: 'EXIT', sourceType: 'EXIT', paramFields: ['coilLength', 'speedExitSection', 'tensionBr9Tr'] },
|
||||
EXC: { sectionType: 'EXIT', sourceType: 'EXIT', paramFields: [] },
|
||||
WEIGHT: { sectionType: 'EXIT', sourceType: 'EXIT', paramFields: [] },
|
||||
WEIT: { sectionType: 'EXIT', sourceType: 'EXIT', paramFields: ['coilLength', 'speedExitSection'] }
|
||||
WEIGHT: { sectionType: 'EXIT', sourceType: 'EXIT', paramFields: [] }
|
||||
}
|
||||
|
||||
// Parameter field labels (English with Chinese comments)
|
||||
// 参数字段标签(英文显示,中文注释)
|
||||
const PARAM_LABELS = {
|
||||
tensionPorBr1: '开卷张力1#',
|
||||
tensionPorBr2: '开卷张力2#',
|
||||
stripSpeed: '带钢速度',
|
||||
weldStatus: '焊机状态',
|
||||
celLength: '入口活套位置',
|
||||
celCapacity: '入口活套套量',
|
||||
tensionCel: '入口活套张力',
|
||||
cleaningVoltage: '清洗电压',
|
||||
cleaningCurrent: '清洗电流',
|
||||
alkaliConcentration: '碱液浓度',
|
||||
alkaliTemperature: '碱液温度',
|
||||
phfExitStripTemp: 'PH炉出口温度',
|
||||
potTemperature: '锌锅温度',
|
||||
gasConsumption: '燃气消耗',
|
||||
rtfExitStripTemp: '加热段出口温度',
|
||||
zincPotPower: '锌锅功率',
|
||||
jcsExitStripTemp: '冷却段出口温度',
|
||||
coolingTowerStripTemp: '冷却塔温度',
|
||||
scsExitStripTemp: '均衡段出口温度',
|
||||
tensionBr5Tm: 'BR5-TM张力',
|
||||
stripSpeedTmExit: 'TM出口速度',
|
||||
tmElongation: '光整延伸率',
|
||||
tensionTlBr7: 'TL-BR7张力',
|
||||
tlElongation: '拉矫延伸率',
|
||||
cxlLength: '出口活套位置',
|
||||
cxlCapacity: '出口活套套量',
|
||||
tensionCxl: '出口活套张力',
|
||||
inspectionStatus: '检查状态',
|
||||
coilLength: '钢卷长度',
|
||||
speedExitSection: '出口段速度',
|
||||
tensionBr9Tr: 'BR9-TR张力',
|
||||
avrCoatingWeightTop: '顶部涂重',
|
||||
avrCoatingWeightBottom: '底部涂重'
|
||||
tensionPorBr1: 'Tension POR-BR1', // 开卷张力1#
|
||||
tensionPorBr2: 'Tension POR-BR2', // 开卷张力2#
|
||||
stripSpeed: 'Strip Speed', // 带钢速度
|
||||
weldStatus: 'Weld Status', // 焊机状态
|
||||
celLength: 'Entry Loop Length', // 入口活套位置
|
||||
celCapacity: 'Entry Loop Capacity', // 入口活套套量
|
||||
tensionCel: 'Entry Loop Tension', // 入口活套张力
|
||||
celLengthMax: 'Entry Loop Max Length', // 入口活套最大长度
|
||||
celLengthMin: 'Entry Loop Min Length', // 入口活套最小长度
|
||||
bR4or5toBR6Tension: 'Tension BR4/5-BR6', // BR4/5到BR6张力
|
||||
cleaningVoltage: 'Cleaning Voltage', // 清洗电压
|
||||
cleaningCurrent: 'Cleaning Current', // 清洗电流
|
||||
alkaliConcentration: 'Alkali Concentration', // 碱液浓度
|
||||
alkaliTemperature: 'Alkali Temperature', // 碱液温度
|
||||
phfExitStripTemp: 'PH Exit Strip Temp', // PH炉出口温度
|
||||
potTemperature: 'Pot Temperature', // 锌锅温度
|
||||
gasConsumption: 'Gas Consumption', // 燃气消耗
|
||||
rtfExitStripTemp: 'RTF Exit Strip Temp', // RTF炉出口温度
|
||||
zincPotPower: 'Zinc Pot Power', // 锌锅功率
|
||||
jcsExitStripTemp: 'JCS Exit Strip Temp', // 冷却段出口温度
|
||||
coolingTowerStripTemp: 'Cooling Tower Temp', // 冷却塔温度
|
||||
scsExitStripTemp: 'SCS Exit Strip Temp', // 均衡段出口温度
|
||||
tensionBr5Tm: 'Tension BR5-TM', // BR5-TM张力
|
||||
stripSpeedTmExit: 'TM Exit Speed', // TM出口速度
|
||||
tmElongation: 'TM Elongation', // 光整延伸率
|
||||
tensionTlBr7: 'Tension TL-BR7', // TL-BR7张力
|
||||
tensionTlBr10Br11: 'Tension TL-BR10/11', // TL-BR10/11张力
|
||||
tlElongation: 'TL Elongation', // 拉矫延伸率
|
||||
tlFlag: 'TL Flag', // 拉矫机投用标志
|
||||
cxlLength: 'Exit Loop Length', // 出口活套位置
|
||||
cxlCapacity: 'Exit Loop Capacity', // 出口活套套量
|
||||
tensionCxl: 'Exit Loop Tension', // 出口活套张力
|
||||
coilLength: 'Coil Length', // 钢卷长度
|
||||
speedExitSection: 'Exit Section Speed', // 出口段速度
|
||||
tensionBr9Tr: 'Tension BR9-TR', // BR9-TR张力
|
||||
tensionBr8Tm: 'Tension BR8-TM', // BR8-TM张力
|
||||
tensionTmBr9: 'Tension TM-BR9', // TM-BR9张力
|
||||
tensionBr8Br9: 'Tension BR8-BR9', // BR8-BR9张力
|
||||
tensionBr9toBr10Br11: 'Tension BR9-BR10/11', // BR9到BR10/11张力
|
||||
tensionBr10Br11toBr12: 'Tension BR10/11-BR12', // BR10/11到BR12张力
|
||||
avrCoatingWeightTop: 'Avg Coating Weight Top', // 顶部平均涂层重量
|
||||
stdCoatingWeightTop: 'Std Coating Weight Top', // 顶部标准涂层重量
|
||||
maxCoatingWeightTop: 'Max Coating Weight Top', // 顶部最大涂层重量
|
||||
minCoatingWeightTop: 'Min Coating Weight Top', // 顶部最小涂层重量
|
||||
avrCoatingWeightBottom: 'Avg Coating Weight Bottom', // 底部平均涂层重量
|
||||
stdCoatingWeightBottom: 'Std Coating Weight Bottom', // 底部标准涂层重量
|
||||
maxCoatingWeightBottom: 'Max Coating Weight Bottom', // 底部最大涂层重量
|
||||
minCoatingWeightBottom: 'Min Coating Weight Bottom', // 底部最小涂层重量
|
||||
airKnifePressure: 'Air Knife Pressure', // 气刀压力
|
||||
airKnifeFlow: 'Air Knife Flow', // 气刀流量
|
||||
airKnifeGap: 'Air Knife Gap', // 气刀间隙
|
||||
tmMask: 'TM Mask', // TM掩码
|
||||
rollForceOperator: 'Roll Force Operator', // 操作侧辊压力
|
||||
rollForceDrive: 'Roll Force Drive', // 驱动侧辊压力
|
||||
motorTorque: 'Motor Torque', // 电机扭矩
|
||||
bendingForce: 'Bending Force', // 总弯曲力
|
||||
antiCrimpingRollMesh: 'Anti-Crimping Roll Mesh', // 防卷翘辊网距
|
||||
billyRollMesh: 'Billy Roll Mesh', // Billy Roll网距
|
||||
levelingUnit1Mesh: 'Leveling Unit 1 Mesh', // 矫直单元1网距
|
||||
levelingUnit2Mesh: 'Leveling Unit 2 Mesh', // 矫直单元2网距
|
||||
antiCrossBowUnitMesh: 'Anti Cross-Bow Unit Mesh', // 防横弯单元网距
|
||||
stripSpeedAfp: 'AFP Strip Speed', // AFP段钢带速度
|
||||
stripTempAfp: 'AFP Strip Temp' // AFP段钢带温度
|
||||
}
|
||||
|
||||
const FIELD_ALIASES = {
|
||||
@@ -708,16 +830,18 @@ export default {
|
||||
return position
|
||||
},
|
||||
|
||||
// Get operation title (English with Chinese comments)
|
||||
// 获取操作标题(英文显示,中文注释)
|
||||
getOperateTitle() {
|
||||
const titleMap = {
|
||||
'ONLINE': '钢卷上线',
|
||||
'UNLOAD': '手动卸卷',
|
||||
'ALL_RETURN': '整卷回退',
|
||||
'HALF_RETURN': '半卷回退',
|
||||
'BLOCK': '卸卷并封闭',
|
||||
'THROW_TAIL': '甩尾'
|
||||
'ONLINE': 'Coil Online', // 钢卷上线
|
||||
'UNLOAD': 'Manual Unload', // 手动卸卷
|
||||
'ALL_RETURN': 'Full Return', // 整卷回退
|
||||
'HALF_RETURN': 'Half Return', // 半卷回退
|
||||
'BLOCK': 'Unload & Block', // 卸卷并封闭
|
||||
'THROW_TAIL': 'Throw Tail' // 甩尾
|
||||
}
|
||||
return titleMap[this.operateMatForm.operation] || '钢卷操作'
|
||||
return titleMap[this.operateMatForm.operation] || 'Coil Operation' // 钢卷操作
|
||||
},
|
||||
// 分段汇总数据
|
||||
entrySectionMetrics() {
|
||||
@@ -1057,17 +1181,19 @@ export default {
|
||||
|
||||
// ============ 辅助方法 ============
|
||||
|
||||
// Get operation text (English with Chinese comments)
|
||||
// 获取操作文本(英文显示,中文注释)
|
||||
getOperationText(operation) {
|
||||
const operationMap = {
|
||||
ONLINE: '钢卷上线',
|
||||
UNLOAD: '卸卷',
|
||||
PRODUCING: '生产中',
|
||||
PRODUCT: '生产完成',
|
||||
PAY_OVER: '甩尾',
|
||||
THROW_TAIL: '甩尾',
|
||||
ALL_RETURN: '整卷回退',
|
||||
HALF_RETURN: '半卷回退',
|
||||
BLOCK: '卸卷并封闭'
|
||||
ONLINE: 'Coil Online', // 钢卷上线
|
||||
UNLOAD: 'Unload', // 卸卷
|
||||
PRODUCING: 'Producing', // 生产中
|
||||
PRODUCT: 'Completed', // 生产完成
|
||||
PAY_OVER: 'Pay Over', // 甩尾
|
||||
THROW_TAIL: 'Throw Tail', // 甩尾
|
||||
ALL_RETURN: 'Full Return', // 整卷回退
|
||||
HALF_RETURN: 'Half Return', // 半卷回退
|
||||
BLOCK: 'Unload & Block' // 卸卷并封闭
|
||||
}
|
||||
return operationMap[operation] || operation
|
||||
},
|
||||
@@ -1256,20 +1382,21 @@ export default {
|
||||
return plansFromMap.slice(0, 5) // 最多显示5个计划
|
||||
},
|
||||
|
||||
// 获取计划状态文本
|
||||
// Get plan status text (English with Chinese comments)
|
||||
// 获取计划状态文本(英文显示,中文注释)
|
||||
getPlanStatusText(status) {
|
||||
const statusMap = {
|
||||
NEW: '新建',
|
||||
READY: '就绪',
|
||||
ONLINE: '上线',
|
||||
PRODUCING: '生产中',
|
||||
PRODUCT: '生产完成',
|
||||
PAY_OVER: '甩尾',
|
||||
UNLOAD: '卸卷',
|
||||
COMPLETED: '已完成',
|
||||
CANCELLED: '已取消'
|
||||
NEW: 'New', // 新建
|
||||
READY: 'Ready', // 就绪
|
||||
ONLINE: 'Online', // 上线
|
||||
PRODUCING: 'Producing', // 生产中
|
||||
PRODUCT: 'Completed', // 生产完成
|
||||
PAY_OVER: 'Pay Over', // 甩尾
|
||||
UNLOAD: 'Unload', // 卸卷
|
||||
COMPLETED: 'Completed', // 已完成
|
||||
CANCELLED: 'Cancelled' // 已取消
|
||||
}
|
||||
return statusMap[status] || status || '未知'
|
||||
return statusMap[status] || status || 'Unknown' // 未知
|
||||
},
|
||||
|
||||
// 获取计划状态标签类型
|
||||
@@ -1453,21 +1580,24 @@ export default {
|
||||
})
|
||||
},
|
||||
|
||||
// 获取设备状态文本
|
||||
// Get device status text (English with Chinese comments)
|
||||
// 获取设备状态文本(英文显示,中文注释)
|
||||
getDeviceStatus(deviceId) {
|
||||
const deviceInfo = this.getDeviceInfo(deviceId)
|
||||
|
||||
// If there is material mapping coil ID, display coil ID
|
||||
// 如果有物料映射的钢卷号,显示钢卷号
|
||||
if (deviceInfo?.matId) {
|
||||
return deviceInfo.matId
|
||||
}
|
||||
|
||||
// Determine working status based on real-time data
|
||||
// 根据实时数据判断工作状态
|
||||
if (this.isDeviceWorking(deviceId)) {
|
||||
return '工作中'
|
||||
return 'Working' // 工作中
|
||||
}
|
||||
|
||||
return '空闲'
|
||||
return 'Idle' // 空闲
|
||||
},
|
||||
|
||||
|
||||
@@ -1520,7 +1650,7 @@ export default {
|
||||
const { current, target } = this.adjustForm
|
||||
|
||||
if (!current || !target) {
|
||||
this.$message.warning('请选择当前位置和目标位置')
|
||||
this.$message.warning('Please select current and target positions') // 请选择当前位置和目标位置
|
||||
return
|
||||
}
|
||||
|
||||
@@ -1529,20 +1659,21 @@ export default {
|
||||
targetPos: target,
|
||||
}
|
||||
|
||||
this.$confirm(`确定将 ${current} 的钢卷调整到 ${target}?`, '确认调整', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
this.$confirm(`Confirm to adjust coil from ${current} to ${target}?`, 'Confirm Adjustment', {
|
||||
// 确定将 ${current} 的钢卷调整到 ${target}?, 确认调整
|
||||
confirmButtonText: 'Confirm', // 确定
|
||||
cancelButtonText: 'Cancel', // 取消
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
adjustPosition(params).then(() => {
|
||||
this.$message.success('调整成功')
|
||||
this.$message.success('Adjustment successful') // 调整成功
|
||||
this.fetchData()
|
||||
}).catch(err => {
|
||||
console.error('调整失败:', err)
|
||||
this.$message.error('调整失败,请重试')
|
||||
console.error('Adjustment failed:', err) // 调整失败
|
||||
this.$message.error('Adjustment failed, please retry') // 调整失败,请重试
|
||||
})
|
||||
}).catch(() => {
|
||||
this.$message.info('已取消调整')
|
||||
this.$message.info('Adjustment cancelled') // 已取消调整
|
||||
})
|
||||
},
|
||||
|
||||
@@ -1570,15 +1701,15 @@ export default {
|
||||
this.$refs.operateForm.validate(valid => {
|
||||
if (valid) {
|
||||
operateMat(this.operateMatForm).then(() => {
|
||||
this.$message.success('操作成功')
|
||||
this.$message.success('Operation successful') // 操作成功
|
||||
this.operateMatStatus = false
|
||||
this.fetchData()
|
||||
}).catch(err => {
|
||||
console.error('操作失败:', err)
|
||||
this.$message.error('操作失败,请重试')
|
||||
console.error('Operation failed:', err) // 操作失败
|
||||
this.$message.error('Operation failed, please retry') // 操作失败,请重试
|
||||
})
|
||||
} else {
|
||||
this.$message.warning('请完善表单信息')
|
||||
this.$message.warning('Please complete the form') // 请完善表单信息
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user