From 3957f04eee6e6b2de92747b92a59ffc63b899324 Mon Sep 17 00:00:00 2001
From: 86156 <823267011@qq.com>
Date: Wed, 21 Jan 2026 19:28:27 +0800
Subject: [PATCH] =?UTF-8?q?=E6=97=A5=E5=BF=97=E4=BC=98=E5=8C=96+PRODUCING?=
=?UTF-8?q?=E5=88=B0PRODUCT=E7=8A=B6=E6=80=81=E8=BD=AC=E5=8C=96=E4=BC=98?=
=?UTF-8?q?=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/views/l2/log/index.vue | 38 ++++++++++++++-----------
src/views/l2/track/rect.vue | 57 ++++++++++++++++++++++++++++---------
2 files changed, 65 insertions(+), 30 deletions(-)
diff --git a/src/views/l2/log/index.vue b/src/views/l2/log/index.vue
index f1998ee..6555f27 100644
--- a/src/views/l2/log/index.vue
+++ b/src/views/l2/log/index.vue
@@ -20,14 +20,13 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
@@ -35,16 +34,21 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/l2/track/rect.vue b/src/views/l2/track/rect.vue
index ae5f7ac..134151d 100644
--- a/src/views/l2/track/rect.vue
+++ b/src/views/l2/track/rect.vue
@@ -524,11 +524,13 @@ import FurCurrent from './components/FurCurrent.vue'
// 基于后端 DeviceEnum 的前端映射(区域、来源、参数字段)
const DEVICE_META = {
POR1: { sectionType: 'ENTRY', sourceType: 'ENTRY', paramFields: ['tensionPorBr1', 'stripSpeed'] },
- POR2: { sectionType: 'ENTRY', sourceType: 'ENTRY', paramFields: ['tensionPorBr2', 'stripSpeed'] },
+ POR2: { sectionType: 'ENTRY', sourceType: 'ENTRY', paramFields: ['stripSpeed'] },
WELDER: { sectionType: 'ENTRY', sourceType: 'ENTRY', paramFields: ['weldStatus'] },
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'] },
+ // UI 合并显示用:入口活套(逻辑合并 ENL1/2/3)
+ ENL: { sectionType: 'ENTRY', sourceType: 'ENTRY', paramFields: ['celLength', 'celCapacity', 'tensionCel', 'celLengthMax', 'celLengthMin', 'bR4or5toBR6Tension'] },
CLEAN: { sectionType: 'PROCESS', sourceType: 'FURNACE', paramFields: ['cleaningVoltage', 'cleaningCurrent'] },
FUR1: { sectionType: 'PROCESS', sourceType: 'FURNACE', paramFields: ['phfExitStripTemp'] },
@@ -551,6 +553,8 @@ const DEVICE_META = {
CXL1: { sectionType: 'EXIT', sourceType: 'EXIT', paramFields: ['cxlLength', 'cxlCapacity', 'tensionCxl'] },
CXL2: { sectionType: 'EXIT', sourceType: 'EXIT', paramFields: ['cxlLength', 'cxlCapacity', 'tensionCxl'] },
+ // UI 合并显示用:出口活套(逻辑合并 CXL1/2)
+ CXL: { sectionType: 'EXIT', sourceType: 'EXIT', paramFields: ['cxlLength', 'cxlCapacity', 'tensionCxl'] },
TR: { sectionType: 'EXIT', sourceType: 'EXIT', paramFields: ['coilLength', 'speedExitSection', 'tensionBr9Tr'] },
EXC: { sectionType: 'EXIT', sourceType: 'EXIT', paramFields: [] },
WEIGHT: { sectionType: 'EXIT', sourceType: 'EXIT', paramFields: [] }
@@ -559,8 +563,7 @@ const DEVICE_META = {
// Parameter field labels (English with Chinese comments)
// 参数字段标签(英文显示,中文注释)
const PARAM_LABELS = {
- tensionPorBr1: 'Pay-off Tension 1#', // 开卷张力1#
- tensionPorBr2: 'Pay-off Tension 2#', // 开卷张力2#
+ tensionPorBr1: 'Pay-off Tension', // 开卷张力1#
stripSpeed: 'Strip Speed', // 带钢速度
weldStatus: 'Welder Status', // 焊机状态
celLength: 'Entry Loop Position', // 入口活套位置
@@ -568,7 +571,12 @@ const PARAM_LABELS = {
tensionCel: 'Entry Loop Tension', // 入口活套张力
celLengthMax: 'Entry Loop Max Length', // 入口活套最大长度
celLengthMin: 'Entry Loop Min Length', // 入口活套最小长度
- bR4or5toBR6Tension: 'BR4/5 to BR6 Tension', // BR4/5到BR6张力
+ bR4or5toBR6Tension: 'Annealing Furnace Tension', // 退火炉张力
+ tensionBr1Br2: 'Entry Loop Tension', // 入口活套张力
+ tensionBr2Br3: 'Cleaning Section Tension', // 清洗段张力
+ tensionBr6toBr7Br8: 'Post-coating Cooling Tension', // 镀后冷却张力
+ tensionBr8Tm: 'Temper Mill Entry Tension', // 光整机入口张力
+ tensionTmBr9: 'Temper Mill Exit Tension', // 光整机出口张力
cleaningVoltage: 'Cleaning Voltage', // 清洗电压
cleaningCurrent: 'Cleaning Current', // 清洗电流
// 别名字段(用于前端逻辑)
@@ -598,9 +606,7 @@ const PARAM_LABELS = {
tensionCxl: 'Exit Loop Tension', // 出口活套张力
coilLength: 'Coil Length', // 钢卷长度
speedExitSection: 'Exit Section Speed', // 出口段速度
- tensionBr9Tr: 'BR9-TR Tension', // BR9-TR张力
- tensionBr8Tm: 'BR8-TM Tension', // BR8-TM张力
- tensionTmBr9: 'TM-BR9 Tension', // TM-BR9张力
+ tensionBr9Tr: 'Recoiler Tension', // 卷取机张力
tensionBr8Br9: 'BR8-BR9 Tension', // BR8-BR9张力
tensionBr9toBr10Br11: 'BR9-BR10/11 Tension', // BR9到BR10/11张力
tensionBr10Br11toBr12: 'BR10/11-BR12 Tension', // BR10/11到BR12张力
@@ -853,9 +859,10 @@ export default {
},
furnaceSectionMetrics() {
return this.buildSectionMetrics('FURNACE', [
- // 'cleaningVoltage', 'cleaningCurrent',
+ 'bR4or5toBR6Tension',
+ // 'cleaningVoltage', 'cleaningCurrent',
'phfExitStripTemp', 'rtfExitStripTemp', 'jcsExitStripTemp', 'scsExitStripTemp'
-
+
])
},
coatSectionMetrics() {
@@ -869,7 +876,12 @@ export default {
},
// 入口段设备列表(依据 DeviceEnum.sectionType)
entryDevicesList() {
- return this.getDevicesBySection('ENTRY')
+ const devices = this.getDevicesBySection('ENTRY')
+ const looper = this.matMapList.find(d => ['ENL1', 'ENL2', 'ENL3'].includes(d.positionNameEn))
+ if (!looper) return devices
+ return devices
+ .filter(d => !['ENL1', 'ENL2', 'ENL3'].includes(d.positionNameEn))
+ .concat([{ ...looper, positionNameEn: 'ENL', positionNameCn: 'Entry Looper' }])
},
// 熔炉段设备列表(PROCESS 且来源 FURNACE)
furnaceDevicesList() {
@@ -882,7 +894,17 @@ export default {
// 出口段设备列表(EXIT,常规设备)
exitDevicesList() {
const exitDevices = this.getDevicesBySection('EXIT')
- return exitDevices.filter(d => !['INS', 'EXC', 'WEIGHT'].includes(d.positionNameEn))
+ const looper = this.matMapList.find(d => ['CXL1', 'CXL2'].includes(d.positionNameEn))
+
+ const base = exitDevices.filter(d => !['INS', 'EXC', 'WEIGHT', 'CXL1', 'CXL2'].includes(d.positionNameEn))
+ if (!looper) return base
+ const tr = this.matMapList.find(d => d.positionNameEn === 'TR')
+ if (!tr) return base.concat([{ ...looper, positionNameEn: 'CXL', positionNameCn: 'Exit Looper' }])
+
+ const idx = base.findIndex(d => d.positionNameEn === 'TR')
+ const cxlDevice = { ...looper, positionNameEn: 'CXL', positionNameCn: 'Exit Looper' }
+ if (idx < 0) return base.concat([cxlDevice])
+ return base.slice(0, idx).concat([cxlDevice]).concat(base.slice(idx))
},
// 出口其他设备列表
exitOtherDevicesList() {
@@ -988,7 +1010,6 @@ export default {
celCapacity: '%',
cxlCapacity: '%',
tensionPorBr1: 'daN',
- tensionPorBr2: 'daN',
tensionBr5Tm: 'daN',
tensionTlBr7: 'daN',
tensionCxl: 'daN',
@@ -1029,8 +1050,10 @@ export default {
return null
},
buildSectionMetrics(sectionType, fields) {
- const source = this.getSectionSource(sectionType)
+ const sectionSource = this.getSectionSource(sectionType)
return fields.map(f => {
+ // bR4or5toBR6Tension 在 entry 测量对象里,但需要展示在退火炉段
+ const source = f === 'bR4or5toBR6Tension' ? this.realtimeData.entry : sectionSource
const raw = source ? this.getFieldValueWithAlias(source, f) : null
const unit = this.getFieldUnit(f)
return {
@@ -1040,6 +1063,8 @@ export default {
})
},
matchReel(deviceId) {
+ if (deviceId === 'ENL') deviceId = 'ENL1'
+ if (deviceId === 'CXL') deviceId = 'CXL1'
if (!['POR1', 'POR2', 'ENL1', 'ENL2', 'CXL1', 'CXL2'].includes(deviceId)) return true
if (!this.realtimeData.entry) return false
const reel = this.realtimeData.entry.payOffReelNumber
@@ -1542,6 +1567,12 @@ export default {
// 根据设备ID获取设备信息
getDeviceInfo(deviceId) {
+ if (deviceId === 'ENL') {
+ return this.matMapList.find(item => ['ENL1', 'ENL2', 'ENL3'].includes(item.positionNameEn))
+ }
+ if (deviceId === 'CXL') {
+ return this.matMapList.find(item => ['CXL1', 'CXL2'].includes(item.positionNameEn))
+ }
return this.matMapList.find(item => item.positionNameEn === deviceId)
},