添加完成度和机台筛选功能,支持按进度区间和设备代码过滤显示轴信息,优化表格排序和筛选器布局

master
huangjinysf 2 months ago
parent 695db1d59f
commit 157fbedb90

@ -7,9 +7,36 @@
</div>
</div>
<!-- 筛选器容器 -->
<div class="filters-row">
<div class="filter-container">
<span class="filter-label">完成度筛选:</span>
<el-select v-model="selectedCompletionLevel" @change="onCompletionLevelChange" placeholder="请选择完成度" style="width: 150px">
<el-option label="全部显示" value="all" />
<el-option label="0% - 25%" value="low" />
<el-option label="25% - 75%" value="medium" />
<el-option label="75% - 100%" value="high" />
<el-option label="100%" value="full" />
</el-select>
</div>
<div class="filter-container">
<span class="filter-label">机台筛选:</span>
<el-select v-model="selectedEquipment" @change="onEquipmentChange" placeholder="请选择机台" style="width: 200px">
<el-option label="全部机台" value="all" />
<el-option
v-for="equipment in equipmentList"
:key="equipment"
:label="equipment"
:value="equipment"
/>
</el-select>
</div>
</div>
<!-- 调试信息 -->
<div v-if="!loading" style="margin-bottom: 10px; font-size: 12px; color: #666;">
调试信息: 获取到 {{ equipmentData.length }} 条设备数据表格共 {{ tableData.length }}
调试信息: 获取到 {{ equipmentData.length }} 条设备数据筛选后 {{ filteredEquipmentData.length }} 表格共 {{ tableData.length }}
</div>
<div v-loading="loading" class="table-wrapper">
@ -122,29 +149,149 @@ const props = defineProps({
const loading = ref(false)
const equipmentData = ref([])
//
const selectedEquipment = ref('all')
//
const selectedCompletionLevel = ref('all') //
// 使
equipmentData.value = props.equipmentData
//
const equipmentList = computed(() => {
//
return [...new Set(equipmentData.value.map(equipment => equipment.equipment_code))].sort();
});
//
const filteredEquipmentData = computed(() => {
//
if (selectedEquipment.value === 'all') {
return equipmentData.value;
} else {
return equipmentData.value.filter(equipment => equipment.equipment_code === selectedEquipment.value);
}
});
//
const equipmentAxlesMap = {
'QB001': ['左边', '右边'],
'QB002': ['左边', '右边'],
'QB003': ['左边', '右边'],
'QB004': ['左1', '左2', '左3', '左4', '左5', '右1', '右2', '右3', '右4', '右5'],
'QB0042': ['左1', '左2', '左3', '左4', '左5', '右1', '右2', '右3', '右4', '右5'],
'QB005': ['左1', '左2', '左3', '左4', '左5', '左6', '右1', '右2', '右3', '右4', '右5', '右6'],
'QB007': ['左边', '右边'],
'QB008': ['左边', '右边'],
'QB009': ['左边', '右边'],
'QB010': ['左边', '右边'],
'QB011': ['左边', '右边'],
'QB012': ['左边', '右边'],
'QB013': ['左边', '右边'],
'QB014': ['左边', '右边'],
'QB015': ['左边', '右边'],
'QB016': ['左边', '右边'],
'QB017': ['左边', '右边'],
'QB018': ['左1', '左2', '右1', '右2'],
'QB019': ['左1', '左2', '右1', '右2'],
'QB020': ['左1', '左2', '右1', '右2'],
'QB024': ['左1', '左2', '左3', '左4', '右1', '右2', '右3', '右4'],
'QB025': ['左边', '右边'],
'QB026': ['左边', '右边'],
'QB027': ['左边', '右边'],
'QB028': ['左1', '左2', '右1', '右2'],
'QB029': ['左边', '右边'],
'QB030': ['左边', '右边'],
'QB031': ['左边', '右边'],
'QB032': ['左边', '右边'],
'QB033': ['左边', '右边'],
'QB034': ['左边', '右边']
};
//
const shouldShowAxle = (degree) => {
if (!degree) return false;
const percentage = degree * 100;
switch (selectedCompletionLevel.value) {
case 'all':
return true;
case 'low':
return percentage >= 0 && percentage < 25;
case 'medium':
return percentage >= 25 && percentage < 75;
case 'high':
return percentage >= 75 && percentage < 100;
case 'full':
return percentage >= 100;
default:
return true;
}
};
//
const tableData = computed(() => {
if (!equipmentData.value.length) return [];
if (!filteredEquipmentData.value.length) return [];
//
const rows = [];
equipmentData.value.forEach(equipment => {
filteredEquipmentData.value.forEach(equipment => {
if (equipment.status_records && equipment.status_records.length > 0) {
equipment.status_records.forEach(record => {
rows.push({
...record,
equipment_code: equipment.equipment_code
});
//
if (shouldShowAxle(record.degree_of_completion)) {
rows.push({
...record,
equipment_code: equipment.equipment_code
});
}
});
}
});
return rows;
//
return rows.sort((a, b) => {
//
const equipmentCompare = a.equipment_code.localeCompare(b.equipment_code);
if (equipmentCompare !== 0) {
return equipmentCompare;
}
//
return sortByAxleNumber(a.axle_number, b.axle_number, a.equipment_code);
});
});
//
const sortByAxleNumber = (axleA, axleB, equipmentCode) => {
//
const validAxles = equipmentAxlesMap[equipmentCode] || [];
//
const getIndexInValidAxles = (axleNumber) => {
// "1,2"
const firstAxle = axleNumber ? axleNumber.split(',')[0] : '';
return validAxles.indexOf(firstAxle);
};
const aIndex = getIndexInValidAxles(axleA);
const bIndex = getIndexInValidAxles(axleB);
//
if (aIndex !== -1 && bIndex !== -1) {
return aIndex - bIndex;
}
//
if (aIndex !== -1) return -1;
if (bIndex !== -1) return 1;
//
return (axleA || '').localeCompare(axleB || '');
};
//
const fetchData = async () => {
loading.value = true;
@ -170,6 +317,16 @@ const refreshData = () => {
fetchData();
};
//
const onEquipmentChange = () => {
console.log('选择的机台:', selectedEquipment.value);
};
//
const onCompletionLevelChange = () => {
console.log('选择的完成度:', selectedCompletionLevel.value);
};
//
const formatDateTime = (dateTimeStr) => {
if (!dateTimeStr) return '';
@ -237,6 +394,27 @@ onMounted(() => {
margin-bottom: 20px;
}
/* 筛选器行样式 */
.filters-row {
display: flex;
gap: 20px;
margin-bottom: 15px;
align-items: center;
flex-wrap: wrap;
}
/* 筛选器样式 */
.filter-container {
display: flex;
align-items: center;
}
.filter-label {
margin-right: 10px;
font-weight: bold;
white-space: nowrap;
}
.table-header h3 {
margin: 0;
font-size: 18px;

Loading…
Cancel
Save