PRODUCING到PRODUCT状态转化bug修复,计划更改,辊缝追踪加入动态追踪,修复退火炉张力读写问题

This commit is contained in:
2026-01-22 17:20:10 +08:00
parent 3957f04eee
commit b8220cf070
6 changed files with 60 additions and 49 deletions

View File

@@ -48,10 +48,10 @@ export function addPdo(data) {
* @param {number} operid 工序ID * @param {number} operid 工序ID
* @returns {Promise} * @returns {Promise}
*/ */
export function getPdo(excoilid, operid) { export function getPdo(excoilid) {
return l2Request({ return l2Request({
method: 'get', method: 'get',
url: `/l2-api/api/pdo/get/${excoilid}/${operid}` url: `/api/pdo/get/${excoilid}`
}) })
} }
@@ -64,7 +64,7 @@ export function getPdo(excoilid, operid) {
export function deletePdo(excoilid, planId) { export function deletePdo(excoilid, planId) {
return l2Request({ return l2Request({
method: 'delete', method: 'delete',
url: `/l2-api/api/pdo/delete/${excoilid}/${planId}` url: `/api/pdo/delete/${excoilid}/${planId}`
}) })
} }

View File

@@ -37,15 +37,17 @@
<!-- 请选择报警模块 --> <!-- 请选择报警模块 -->
<el-option label="TRACK Alarm" value="TRACK"></el-option> <el-option label="TRACK" value="TRACK"></el-option>
<!-- 焊机报警 --> <!-- 焊机报警 -->
<el-option label="WELDER Alarm" value="WELDER"></el-option> <el-option label="WELDER" value="WELDER"></el-option>
<!-- 物料保存报警 --> <!-- 物料保存报警 -->
<el-option label="MATMAP-SAVE Alarm" value="MATMAP-SAVE"></el-option> <el-option label="MATMAP-SAVE" value="MATMAP-SAVE"></el-option>
<!-- 物料映射报警 --> <!-- 物料映射报警 -->
<el-option label="MATMAP-TRACK Alarm" value="MATMAP-TRACK"></el-option> <el-option label="MATMAP-TRACK" value="MATMAP-TRACK"></el-option>
<!-- 位置时间报警 --> <!-- 位置时间报警 -->
<el-option label="POSITIME Alarm" value="POSITIME"></el-option> <el-option label="POSITIME" value="POSITIME"></el-option>
<el-option label="PLAN" value="PLAN"></el-option>
</el-select> </el-select>

View File

@@ -45,7 +45,8 @@ export default {
props: { props: {
enCoilID: { enCoilID: {
type: String, type: String,
required: true, required: false,
default: ''
} }
}, },
data() { data() {

View File

@@ -50,22 +50,16 @@
<!-- 卡片网格布局 Card Grid Layout --> <!-- 卡片网格布局 Card Grid Layout -->
<div v-loading="tableLoading"> <div v-loading="tableLoading">
<el-table :data="tableData" style="width: 100%" border stripe @row-click="handleRowClick" highlight-current-row height="300px"> <el-table :data="tableData" style="width: 100%" border stripe @row-click="handleRowClick" highlight-current-row >
<el-table-column prop="exitMatId" label="Exit Coil ID"></el-table-column> <el-table-column prop="exitMatId" label="Exit Coil ID"></el-table-column>
<!-- 成品卷号 --> <!-- 成品卷号 -->
<el-table-column prop="entryMatId" label="Entry Coil ID"></el-table-column> <el-table-column prop="entryMatId" label="Entry Coil ID"></el-table-column>
<!-- 来料卷号 -->
<el-table-column prop="planNo" label="Plan No."></el-table-column>
<!-- 计划单号 --> <!-- 计划单号 -->
<el-table-column prop="status" label="Status"></el-table-column> <el-table-column prop="status" label="Status"></el-table-column>
<!-- 状态 --> <!-- 状态 -->
<el-table-column prop="steelGrade" label="Steel Grade"></el-table-column> <el-table-column prop="steelGrade" label="Steel Grade"></el-table-column>
<!-- 钢种 -->
<el-table-column prop="prodCode" label="Product Type"></el-table-column>
<!-- 产品类型 --> <!-- 产品类型 -->
<el-table-column prop="customer" label="Customer"></el-table-column>
<!-- 客户 -->
<el-table-column prop="entryThick" label="Entry Thickness"></el-table-column> <el-table-column prop="entryThick" label="Entry Thickness"></el-table-column>
<!-- 入口厚度 --> <!-- 入口厚度 -->
@@ -105,6 +99,14 @@
</div> </div>
</div> </div>
<Pagination
v-show="total > 0"
:total="total"
:page.sync="queryForm.pageNum"
:limit.sync="queryForm.pageSize"
@pagination="getPdoList"
/>
<div> <div>
<pdo-summary :table-data="tableData" /> <pdo-summary :table-data="tableData" />
</div> </div>
@@ -178,7 +180,8 @@ export default {
data() { data() {
return { return {
activeTab: 'basicInfo', activeTab: 'basicInfo',
queryForm: { coilid: '', startDate: '', endDate: '' }, queryForm: { coilid: '', startDate: '', endDate: '', pageNum: 1, pageSize: 30 },
total: 0,
printOpen: false, printOpen: false,
certificateVisible: false, // 质保书对话框显示状态 Quality certificate dialog visibility state certificateVisible: false, // 质保书对话框显示状态 Quality certificate dialog visibility state
tableData: [], tableData: [],
@@ -210,7 +213,9 @@ export default {
getPdoList() { getPdoList() {
this.tableLoading = true this.tableLoading = true
getPdoList(this.queryForm).then(res => { getPdoList(this.queryForm).then(res => {
this.tableData = res.data.map(item => ({ ...item, deleteLoading: false })) const list = Array.isArray(res?.rows) ? res.rows : []
this.tableData = list.map(item => ({ ...item, deleteLoading: false }))
this.total = typeof res?.total === 'number' ? res.total : 0
}).catch(err => { }).catch(err => {
console.error(err) console.error(err)
this.$message.error('Failed to get data') // 获取数据失败 this.$message.error('Failed to get data') // 获取数据失败
@@ -222,11 +227,14 @@ export default {
// 查询(保持不变) Query (unchanged) // 查询(保持不变) Query (unchanged)
handleQuery() { handleQuery() {
this.btnLoading = true; this.btnLoading = true;
this.queryForm.pageNum = 1;
this.getPdoList() this.getPdoList()
}, },
// 重置(保持不变) Reset (unchanged) // 重置(保持不变) Reset (unchanged)
handleReset() { handleReset() {
this.$refs.queryForm.resetFields(); this.$refs.queryForm.resetFields();
this.queryForm.pageNum = 1;
this.queryForm.pageSize = 30;
this.getPdoList() this.getPdoList()
}, },
// 行点击(保持不变) Row click (unchanged) // 行点击(保持不变) Row click (unchanged)

View File

@@ -307,7 +307,7 @@ export default {
tensionCel: [], // Available in rect.vue / 在 rect.vue 中可用 tensionCel: [], // Available in rect.vue / 在 rect.vue 中可用
celLengthMax: [], // Available in rect.vue / 在 rect.vue 中可用 celLengthMax: [], // Available in rect.vue / 在 rect.vue 中可用
celLengthMin: [], // Available in rect.vue / 在 rect.vue 中可用 celLengthMin: [], // Available in rect.vue / 在 rect.vue 中可用
bR4or5toBR6Tension: [], // Available in rect.vue / 在 rect.vue 中可用 tensionBr45Br6: [], // Available in rect.vue / 在 rect.vue 中可用
// Additional entry fields / 其他入口段字段 // Additional entry fields / 其他入口段字段
tensionBr1Br2: [], // Displayed / 已显示 tensionBr1Br2: [], // Displayed / 已显示
tensionBr2Br3: [] // Displayed / 已显示 tensionBr2Br3: [] // Displayed / 已显示
@@ -832,7 +832,7 @@ export default {
tensionPorBr1: [], tensionPorBr2: [], stripSpeed: [], tensionPorBr1: [], tensionPorBr2: [], stripSpeed: [],
weldStatus: [], weldStatus: [],
celLength: [], celCapacity: [], tensionCel: [], celLength: [], celCapacity: [], tensionCel: [],
celLengthMax: [], celLengthMin: [], bR4or5toBR6Tension: [], celLengthMax: [], celLengthMin: [], tensionBr45Br6: [],
tensionBr1Br2: [], tensionBr2Br3: [], tensionBr1Br2: [], tensionBr2Br3: [],
cleaningVoltage: [], cleaningCurrent: [], alkaliConcentration: [], alkaliTemperature: [] cleaningVoltage: [], cleaningCurrent: [], alkaliConcentration: [], alkaliTemperature: []
}, },
@@ -896,7 +896,7 @@ export default {
tensionCel: data.appMeasureEntryMessage.tensionCel, tensionCel: data.appMeasureEntryMessage.tensionCel,
celLengthMax: data.appMeasureEntryMessage.celLengthMax, celLengthMax: data.appMeasureEntryMessage.celLengthMax,
celLengthMin: data.appMeasureEntryMessage.celLengthMin, celLengthMin: data.appMeasureEntryMessage.celLengthMin,
bR4or5toBR6Tension: data.appMeasureEntryMessage.bR4or5toBR6Tension, tensionBr45Br6: data.appMeasureEntryMessage.tensionBr45Br6,
// Additional entry fields / 其他入口段字段 // Additional entry fields / 其他入口段字段
tensionBr1Br2: data.appMeasureEntryMessage.tensionBr1Br2, tensionBr1Br2: data.appMeasureEntryMessage.tensionBr1Br2,
tensionBr2Br3: data.appMeasureEntryMessage.tensionBr2Br3, tensionBr2Br3: data.appMeasureEntryMessage.tensionBr2Br3,

View File

@@ -384,15 +384,15 @@
<!-- Adjustment Tool: Select two positions with two dropdowns / 调整工具选择两个位置两个下拉选分别双向绑定 --> <!-- Adjustment Tool: Select two positions with two dropdowns / 调整工具选择两个位置两个下拉选分别双向绑定 -->
<el-form :model="adjustForm" ref="adjustForm" label-width="120px" class="adjust-form"> <el-form :model="adjustForm" ref="adjustForm" label-width="120px" class="adjust-form">
<el-form-item label="Current Position" prop="current"> <!-- 当前位置 --> <el-form-item label="Current Position" prop="current"> <!-- 当前位置 -->
<el-select <el-select
v-model="adjustForm.current" v-model="adjustForm.current"
placeholder="Please select current position" placeholder="Please select current position"
class="adjust-select" class="adjust-select"
filterable filterable
> <!-- 请选择当前位置 --> > <!-- 请选择当前位置 -->
<el-option <el-option
v-for="item in matMapList" v-for="item in matMapList"
:key="item.positionNameEn" :key="item.positionNameEn"
:label="item.positionNameCn" :label="item.positionNameCn"
:value="item.positionNameEn" :value="item.positionNameEn"
class="adjust-option" class="adjust-option"
@@ -400,15 +400,15 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="Target Position" prop="target"> <!-- 目标位置 --> <el-form-item label="Target Position" prop="target"> <!-- 目标位置 -->
<el-select <el-select
v-model="adjustForm.target" v-model="adjustForm.target"
placeholder="Please select target position" placeholder="Please select target position"
class="adjust-select" class="adjust-select"
filterable filterable
> <!-- 请选择目标位置 --> > <!-- 请选择目标位置 -->
<el-option <el-option
v-for="item in matMapList" v-for="item in matMapList"
:key="item.positionNameEn" :key="item.positionNameEn"
:label="item.positionNameCn" :label="item.positionNameCn"
:value="item.positionNameEn" :value="item.positionNameEn"
class="adjust-option" class="adjust-option"
@@ -416,8 +416,8 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-button <el-button
type="primary" type="primary"
:disabled="!adjustForm.current || !adjustForm.target" :disabled="!adjustForm.current || !adjustForm.target"
@click="handleConfirmAdjust" @click="handleConfirmAdjust"
class="adjust-confirm-btn" class="adjust-confirm-btn"
@@ -430,7 +430,7 @@
<!-- Calculation Setup Result Dialog / 计算结果对话框 --> <!-- Calculation Setup Result Dialog / 计算结果对话框 -->
<el-dialog <el-dialog
title="Calculation Result" title="Calculation Result"
:visible.sync="showCalcResultDialog" :visible.sync="showCalcResultDialog"
width="80%" width="80%"
v-if="calcSetupResult" v-if="calcSetupResult"
@@ -526,17 +526,17 @@ const DEVICE_META = {
POR1: { sectionType: 'ENTRY', sourceType: 'ENTRY', paramFields: ['tensionPorBr1', 'stripSpeed'] }, POR1: { sectionType: 'ENTRY', sourceType: 'ENTRY', paramFields: ['tensionPorBr1', 'stripSpeed'] },
POR2: { sectionType: 'ENTRY', sourceType: 'ENTRY', paramFields: ['stripSpeed'] }, POR2: { sectionType: 'ENTRY', sourceType: 'ENTRY', paramFields: ['stripSpeed'] },
WELDER: { sectionType: 'ENTRY', sourceType: 'ENTRY', paramFields: ['weldStatus'] }, WELDER: { sectionType: 'ENTRY', sourceType: 'ENTRY', paramFields: ['weldStatus'] },
ENL1: { sectionType: 'PROCESS', sourceType: 'ENTRY', paramFields: ['celLength', 'celCapacity', 'tensionCel', 'celLengthMax', 'celLengthMin', 'bR4or5toBR6Tension'] }, ENL1: { sectionType: 'PROCESS', sourceType: 'ENTRY', paramFields: ['celLength', 'celCapacity', 'tensionCel', 'celLengthMax', 'celLengthMin', 'tensionBr45Br6'] },
ENL2: { sectionType: 'PROCESS', sourceType: 'ENTRY', paramFields: ['celLength', 'celCapacity', 'tensionCel', 'celLengthMax', 'celLengthMin', 'bR4or5toBR6Tension'] }, ENL2: { sectionType: 'PROCESS', sourceType: 'ENTRY', paramFields: ['celLength', 'celCapacity', 'tensionCel', 'celLengthMax', 'celLengthMin', 'tensionBr45Br6'] },
ENL3: { sectionType: 'PROCESS', sourceType: 'ENTRY', paramFields: ['celLength', 'celCapacity', 'tensionCel', 'celLengthMax', 'celLengthMin', 'bR4or5toBR6Tension'] }, ENL3: { sectionType: 'PROCESS', sourceType: 'ENTRY', paramFields: ['celLength', 'celCapacity', 'tensionCel', 'celLengthMax', 'celLengthMin', 'tensionBr45Br6'] },
// UI 合并显示用:入口活套(逻辑合并 ENL1/2/3 // UI 合并显示用:入口活套(逻辑合并 ENL1/2/3
ENL: { sectionType: 'ENTRY', sourceType: 'ENTRY', paramFields: ['celLength', 'celCapacity', 'tensionCel', 'celLengthMax', 'celLengthMin', 'bR4or5toBR6Tension'] }, ENL: { sectionType: 'ENTRY', sourceType: 'ENTRY', paramFields: ['celLength', 'celCapacity', 'tensionCel', 'celLengthMax', 'celLengthMin', 'tensionBr45Br6'] },
CLEAN: { sectionType: 'PROCESS', sourceType: 'FURNACE', paramFields: ['cleaningVoltage', 'cleaningCurrent'] }, CLEAN: { sectionType: 'PROCESS', sourceType: 'FURNACE', paramFields: ['cleaningVoltage', 'cleaningCurrent'] },
FUR1: { sectionType: 'PROCESS', sourceType: 'FURNACE', paramFields: ['phfExitStripTemp'] }, FUR1: { sectionType: 'PROCESS', sourceType: 'FURNACE', paramFields: ['phfExitStripTemp'] },
FUR2: { sectionType: 'PROCESS', sourceType: 'FURNACE', paramFields: ['rtfExitStripTemp'] }, FUR2: { sectionType: 'PROCESS', sourceType: 'FURNACE', paramFields: ['rtfExitStripTemp'] },
FUR3: { sectionType: 'PROCESS', sourceType: 'FURNACE', paramFields: ['jcsExitStripTemp', 'coolingTowerStripTemp'] }, FUR3: { sectionType: 'PROCESS', sourceType: 'FURNACE', paramFields: ['jcsExitStripTemp', 'coolingTowerStripTemp'] },
FUR4: { sectionType: 'PROCESS', sourceType: 'FURNACE', paramFields: ['scsExitStripTemp'] }, FUR4: { sectionType: 'PROCESS', sourceType: 'FURNACE', paramFields: ['scsExitStripTemp'] },
POT: { sectionType: 'PROCESS', sourceType: 'COAT', paramFields: ['scsExitStripTemp'] }, POT: { sectionType: 'PROCESS', sourceType: 'COAT', paramFields: ['scsExitStripTemp'] },
TOWER: { sectionType: 'PROCESS', sourceType: 'COAT', paramFields: ['scsExitStripTemp'] }, TOWER: { sectionType: 'PROCESS', sourceType: 'COAT', paramFields: ['scsExitStripTemp'] },
TM: { sectionType: 'PROCESS', sourceType: 'COAT', paramFields: ['tensionBr5Tm', 'stripSpeedTmExit'] }, TM: { sectionType: 'PROCESS', sourceType: 'COAT', paramFields: ['tensionBr5Tm', 'stripSpeedTmExit'] },
@@ -571,7 +571,7 @@ const PARAM_LABELS = {
tensionCel: 'Entry Loop Tension', // 入口活套张力 tensionCel: 'Entry Loop Tension', // 入口活套张力
celLengthMax: 'Entry Loop Max Length', // 入口活套最大长度 celLengthMax: 'Entry Loop Max Length', // 入口活套最大长度
celLengthMin: 'Entry Loop Min Length', // 入口活套最小长度 celLengthMin: 'Entry Loop Min Length', // 入口活套最小长度
bR4or5toBR6Tension: 'Annealing Furnace Tension', // 退火炉张力 tensionBr45Br6: 'Annealing Furnace Tension', // 退火炉张力
tensionBr1Br2: 'Entry Loop Tension', // 入口活套张力 tensionBr1Br2: 'Entry Loop Tension', // 入口活套张力
tensionBr2Br3: 'Cleaning Section Tension', // 清洗段张力 tensionBr2Br3: 'Cleaning Section Tension', // 清洗段张力
tensionBr6toBr7Br8: 'Post-coating Cooling Tension', // 镀后冷却张力 tensionBr6toBr7Br8: 'Post-coating Cooling Tension', // 镀后冷却张力
@@ -584,7 +584,7 @@ const PARAM_LABELS = {
rtfExitStripTemp: 'RTF Furnace Exit Temp', // RTF炉出口温度 rtfExitStripTemp: 'RTF Furnace Exit Temp', // RTF炉出口温度
jcsExitStripTemp: 'JCS Exit Temp', // 冷却段出口温度 jcsExitStripTemp: 'JCS Exit Temp', // 冷却段出口温度
scsExitStripTemp: 'SCS Exit Temp', // 均衡段出口温度 scsExitStripTemp: 'SCS Exit Temp', // 均衡段出口温度
// 实际字段名Message 对象中的字段) // 实际字段名Message 对象中的字段)
phFurnaceTemperatureActual: 'PH Furnace Temp Actual', // PH炉温实际值 phFurnaceTemperatureActual: 'PH Furnace Temp Actual', // PH炉温实际值
nofPlateTemperatureActual: 'NOF Plate Temp Actual', // NOF板材温度实际值 nofPlateTemperatureActual: 'NOF Plate Temp Actual', // NOF板材温度实际值
@@ -641,17 +641,17 @@ const PARAM_LABELS = {
const FIELD_ALIASES = { const FIELD_ALIASES = {
// FUR1 相关字段 // FUR1 相关字段
phfExitStripTemp: ['phFurnaceTemperatureActual', 'nofPlateTemperatureActual'], // PH炉温实际值 或 NOF板材温度实际值 phfExitStripTemp: ['phFurnaceTemperatureActual', 'nofPlateTemperatureActual'], // PH炉温实际值 或 NOF板材温度实际值
// FUR2 相关字段 // FUR2 相关字段
rtfExitStripTemp: ['rtfPlateTemperatureActual', 'nof1FurnaceTemperatureActual'], // RTF板材温度实际值 或 NOF1炉温实际值 rtfExitStripTemp: ['rtfPlateTemperatureActual', 'nof1FurnaceTemperatureActual'], // RTF板材温度实际值 或 NOF1炉温实际值
// FUR3 相关字段 // FUR3 相关字段
jcsExitStripTemp: ['jcf1FurnaceTemperatureActual'], // JCF1炉温实际值冷却段 jcsExitStripTemp: ['jcf1FurnaceTemperatureActual'], // JCF1炉温实际值冷却段
coolingTowerStripTemp: ['coolingTowerTemperature'], // 冷却塔温度(在 AppMeasureCoatMessage 中) coolingTowerStripTemp: ['coolingTowerTemperature'], // 冷却塔温度(在 AppMeasureCoatMessage 中)
// FUR4 相关字段 // FUR4 相关字段
scsExitStripTemp: ['sfPlateTemperatureActual', 'tdsPlateTemperatureActual'], // SF板材温度实际值 或 TDS板材温度实际值均衡段 scsExitStripTemp: ['sfPlateTemperatureActual', 'tdsPlateTemperatureActual'], // SF板材温度实际值 或 TDS板材温度实际值均衡段
// CLEAN 相关字段 // CLEAN 相关字段
cleaningVoltage: ['cleaningVoltage'], cleaningVoltage: ['cleaningVoltage'],
cleaningCurrent: ['cleaningCurrent'], cleaningCurrent: ['cleaningCurrent'],
@@ -859,7 +859,7 @@ export default {
}, },
furnaceSectionMetrics() { furnaceSectionMetrics() {
return this.buildSectionMetrics('FURNACE', [ return this.buildSectionMetrics('FURNACE', [
'bR4or5toBR6Tension', 'tensionBr45Br6',
// 'cleaningVoltage', 'cleaningCurrent', // 'cleaningVoltage', 'cleaningCurrent',
'phfExitStripTemp', 'rtfExitStripTemp', 'jcsExitStripTemp', 'scsExitStripTemp' 'phfExitStripTemp', 'rtfExitStripTemp', 'jcsExitStripTemp', 'scsExitStripTemp'
@@ -1028,7 +1028,7 @@ export default {
potTemperature: '℃', potTemperature: '℃',
zincPotPower: 'kW', zincPotPower: 'kW',
coolingTowerStripTemp: '℃', coolingTowerStripTemp: '℃',
// 实际字段名单位Message 对象中的字段) // 实际字段名单位Message 对象中的字段)
phFurnaceTemperatureActual: '℃', phFurnaceTemperatureActual: '℃',
nofPlateTemperatureActual: '℃', nofPlateTemperatureActual: '℃',
@@ -1052,8 +1052,8 @@ export default {
buildSectionMetrics(sectionType, fields) { buildSectionMetrics(sectionType, fields) {
const sectionSource = this.getSectionSource(sectionType) const sectionSource = this.getSectionSource(sectionType)
return fields.map(f => { return fields.map(f => {
// bR4or5toBR6Tension 在 entry 测量对象里,但需要展示在退火炉段 // tensionBr45Br6 在 entry 测量对象里,但需要展示在退火炉段
const source = f === 'bR4or5toBR6Tension' ? this.realtimeData.entry : sectionSource const source = f === 'tensionBr45Br6' ? this.realtimeData.entry : sectionSource
const raw = source ? this.getFieldValueWithAlias(source, f) : null const raw = source ? this.getFieldValueWithAlias(source, f) : null
const unit = this.getFieldUnit(f) const unit = this.getFieldUnit(f)
return { return {