feat(报表): 添加钢卷表格行高亮功能以标记共用卷

在分条线报表中,产出钢卷和投入钢卷可能存在共用卷的情况。添加高亮功能以便直观区分这些共用卷:
1. 在day.vue中计算共用卷ID列表
2. 在coilTable组件中实现行高亮逻辑和样式
This commit is contained in:
砂糖
2026-04-13 14:37:23 +08:00
parent 116d79e7c2
commit 5ee730bffa
2 changed files with 78 additions and 3 deletions

View File

@@ -24,7 +24,7 @@
@current-change="handleCurrentChange" />
</div>
<el-table :data="tableData" style="width: 100%" height="calc(100vh - 320px)" border>
<el-table :data="tableData" style="width: 100%" height="calc(100vh - 320px)" border row-key="coilId" :row-class-name="getRowClassName">
<el-table-column v-for="column in columns" :key="column.prop" :prop="column.prop" :label="column.title"
:width="column.width" :align="column.align">
<template slot-scope="scope">
@@ -93,6 +93,18 @@ export default {
type: Array,
default: () => [],
},
// 高亮配置
highlightConfig: {
type: Object,
default: () => ({
// 需要高亮的行的条件函数或行ID数组
rows: [],
// 高亮样式类名
className: 'highlight-row',
// 自定义高亮样式
style: {}
})
}
},
dicts: ['coil_quality_status', 'coil_abnormal_code', 'coil_abnormal_degree'],
data() {
@@ -235,6 +247,43 @@ export default {
}).finally(() => {
this.abmornal.loading = false
})
},
// 获取行类名
getRowClassName({ row, rowIndex }) {
const { rows } = this.highlightConfig
if (!rows || (Array.isArray(rows) && rows.length === 0)) {
return ''
}
// 检查是否需要高亮
let shouldHighlight = false
if (typeof rows === 'function') {
// 如果是函数,调用函数判断
shouldHighlight = rows(row, rowIndex)
} else if (Array.isArray(rows)) {
// 如果是数组检查row.coilId是否在数组中
shouldHighlight = rows.includes(row.coilId)
console.log('判断是否应该高亮', shouldHighlight, rows, row.coilId)
}
return shouldHighlight ? 'warning-row' : ''
},
// 获取行样式
getRowStyle({ row, rowIndex }) {
const { rows, style } = this.highlightConfig
if (!rows || (Array.isArray(rows) && rows.length === 0)) {
return {}
}
// 检查是否需要高亮
let shouldHighlight = false
if (typeof rows === 'function') {
shouldHighlight = rows(row, rowIndex)
} else if (Array.isArray(rows)) {
shouldHighlight = rows.includes(row.coilId)
}
return shouldHighlight ? style : {}
}
}
}
@@ -276,4 +325,9 @@ export default {
width: 100%;
}
}
/* 行高亮样式 */
::v-deep .el-table__row.warning-row {
background: oldlace !important;
}
</style>

View File

@@ -101,10 +101,10 @@
</el-descriptions>
<el-tabs v-model="activeTab">
<el-tab-pane label="产出钢卷" name="output">
<coil-table :columns="outputColumns" :data="list"></coil-table>
<coil-table :columns="outputColumns" :data="list" :highlight-config="{ rows: commonCoilIds }"></coil-table>
</el-tab-pane>
<el-tab-pane label="投入钢卷" name="loss">
<coil-table :columns="lossColumns" :data="lossList"></coil-table>
<coil-table :columns="lossColumns" :data="lossList" :highlight-config="{ rows: commonCoilIds }"></coil-table>
</el-tab-pane>
</el-tabs>
@@ -243,6 +243,27 @@ export default {
mSummary() {
return calcMSummary(this.list, this.lossList)
},
// 找出list和lossList中id相同的卷
commonCoilIds() {
if (this.productionLine !== '分条线') {
return []
}
// 获取list中的coilId集合
const outputCoilIds = new Set(this.list.map(item => item.coilId))
// 获取lossList中的coilId集合
const lossCoilIds = new Set(this.lossList.map(item => item.coilId))
// 找出两个集合中相同的coilId
const commonIds = []
outputCoilIds.forEach(id => {
if (lossCoilIds.has(id)) {
commonIds.push(id)
}
})
return commonIds
},
},
methods: {
// 加载列设置