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) },