feat(RealTimeInventory): 添加机台筛选功能并优化过滤逻辑

- 新增机台筛选下拉框及相关状态管理
- 修改过滤逻辑以支持机台和库存变化的组合筛选
- 从生产状态数据中提取机台选项并排序
master
huangjinysf 2 months ago
parent c9c926e1cd
commit 3d986df030

@ -3,16 +3,36 @@
<div class="table-header"> <div class="table-header">
<h3>实时库存表</h3> <h3>实时库存表</h3>
<div class="table-actions"> <div class="table-actions">
<el-select <div style="display: flex; align-items: center; margin-right: 15px;">
v-model="inventoryFilter" <span style="margin-right: 5px;">机台筛选:</span>
placeholder="选择筛选条件" <el-select
style="width: 120px; margin-right: 15px;" v-model="equipmentFilter"
@change="handleFilterChange" placeholder="选择机台"
> style="width: 150px;"
<el-option label="全部" value="all" /> @change="handleEquipmentFilterChange"
<el-option label="库存增加" value="increase" /> >
<el-option label="库存减少" value="decrease" /> <el-option label="全部机台" value="all" />
</el-select> <el-option
v-for="equipment in equipmentFilterOptions"
:key="equipment"
:label="equipment"
:value="equipment"
/>
</el-select>
</div>
<div style="display: flex; align-items: center; margin-right: 15px;">
<span style="margin-right: 5px;">库存增减:</span>
<el-select
v-model="inventoryFilter"
placeholder="选择筛选条件"
style="width: 120px;"
@change="handleFilterChange"
>
<el-option label="全部" value="all" />
<el-option label="库存增加" value="increase" />
<el-option label="库存减少" value="decrease" />
</el-select>
</div>
<el-switch <el-switch
v-model="showDifference" v-model="showDifference"
active-text="显示库存变化" active-text="显示库存变化"
@ -264,10 +284,16 @@ const DBL_CLICK_DELAY = 250; // 双击延时(毫秒)
// //
const inventoryFilter = ref('all'); // all-increase-decrease- const inventoryFilter = ref('all'); // all-increase-decrease-
const equipmentFilter = ref('all'); // all-equipment_code
//
const equipmentFilterOptions = ref([]);
// //
const getFilteredRecords = () => { const getFilteredRecords = (inputRecords = null) => {
if (!records.value.length) { const sourceRecords = inputRecords || records.value;
if (!sourceRecords.length) {
return []; return [];
} }
@ -282,7 +308,7 @@ const getFilteredRecords = () => {
.filter(diff => diff.difference > 0) .filter(diff => diff.difference > 0)
.map(diff => `${diff.specification}-${diff.model}-${diff.wire_disc || ''}`) .map(diff => `${diff.specification}-${diff.model}-${diff.wire_disc || ''}`)
); );
return records.value.filter(record => { return sourceRecords.filter(record => {
const key = `${record.specification}-${record.model}-${record.wire_disc || ''}`; const key = `${record.specification}-${record.model}-${record.wire_disc || ''}`;
return increaseKeys.has(key); return increaseKeys.has(key);
}); });
@ -296,17 +322,23 @@ const getFilteredRecords = () => {
.filter(diff => diff.difference < 0) .filter(diff => diff.difference < 0)
.map(diff => `${diff.specification}-${diff.model}-${diff.wire_disc || ''}`) .map(diff => `${diff.specification}-${diff.model}-${diff.wire_disc || ''}`)
); );
return records.value.filter(record => { return sourceRecords.filter(record => {
const key = `${record.specification}-${record.model}-${record.wire_disc || ''}`; const key = `${record.specification}-${record.model}-${record.wire_disc || ''}`;
return decreaseKeys.has(key); return decreaseKeys.has(key);
}); });
case 'all': case 'all':
default: default:
// //
return records.value; return sourceRecords;
} }
}; };
//
const handleEquipmentFilterChange = () => {
console.log('机台筛选条件变化:', equipmentFilter.value);
//
};
// //
const handleFilterChange = () => { const handleFilterChange = () => {
console.log('筛选条件变化:', inventoryFilter.value); console.log('筛选条件变化:', inventoryFilter.value);
@ -385,25 +417,37 @@ const dynamicColumns = computed(() => {
// //
const tableData = computed(() => { const tableData = computed(() => {
console.log('计算表格数据, records.value:', records.value, 'inventoryFilter.value:', inventoryFilter.value); console.log('计算表格数据, records.value:', records.value, 'inventoryFilter.value:', inventoryFilter.value, 'equipmentFilter.value:', equipmentFilter.value);
//
let filteredRecords = records.value;
if (equipmentFilter.value !== 'all') {
filteredRecords = filteredRecords.filter(record => {
//
const key = `${record.model}::${record.wire_disc || ''}::${record.specification}`;
return uidProductionStatusMap.value.has(key) &&
uidProductionStatusMap.value.get(key).equipment_code === equipmentFilter.value;
});
console.log('机台筛选后的记录数量:', filteredRecords.length);
}
// 使 // 使
const filteredRecords = getFilteredRecords(); const finalFilteredRecords = getFilteredRecords(filteredRecords);
console.log('过滤后的记录数量:', filteredRecords.length); console.log('最终过滤后的记录数量:', finalFilteredRecords.length);
if (!filteredRecords.length) { if (!finalFilteredRecords.length) {
console.log('过滤后的records为空返回空数组'); console.log('过滤后的records为空返回空数组');
return []; return [];
} }
// //
const specifications = [...new Set(filteredRecords.map(item => item.specification))] const specifications = [...new Set(finalFilteredRecords.map(item => item.specification))]
.sort((a, b) => parseFloat(a) - parseFloat(b)); // "0.800" .sort((a, b) => parseFloat(a) - parseFloat(b)); // "0.800"
console.log('获取到的规格列表:', specifications); console.log('获取到的规格列表:', specifications);
// model::wire_disc // model::wire_disc
const combinations = [...new Set(filteredRecords.map(item => { const combinations = [...new Set(finalFilteredRecords.map(item => {
if (item.wire_disc && item.wire_disc.trim() !== '') { if (item.wire_disc && item.wire_disc.trim() !== '') {
return `${item.model}::${item.wire_disc}`; return `${item.model}::${item.wire_disc}`;
} else { } else {
@ -430,7 +474,7 @@ const tableData = computed(() => {
} }
// //
const record = filteredRecords.find(r => { const record = finalFilteredRecords.find(r => {
const specMatch = r.specification === specification; const specMatch = r.specification === specification;
const modelMatch = r.model === model; const modelMatch = r.model === model;
const wireDiscMatch = hasWireDisc const wireDiscMatch = hasWireDisc
@ -536,6 +580,9 @@ const fetchUIDProductionStatus = async () => {
const uniqueEquipmentCodes = [...new Set(uidProductionStatus.value.map(record => record.equipment_code))]; const uniqueEquipmentCodes = [...new Set(uidProductionStatus.value.map(record => record.equipment_code))];
console.log('唯一设备代码:', uniqueEquipmentCodes); console.log('唯一设备代码:', uniqueEquipmentCodes);
//
equipmentFilterOptions.value = uniqueEquipmentCodes.sort();
// equipment_code // equipment_code
uniqueEquipmentCodes.forEach((equipmentCode, index) => { uniqueEquipmentCodes.forEach((equipmentCode, index) => {
equipmentColors.set(equipmentCode, generateLowSaturationColor(index)); equipmentColors.set(equipmentCode, generateLowSaturationColor(index));

Loading…
Cancel
Save