From 3d986df030fad01e635ce2808f5be6e1df303118 Mon Sep 17 00:00:00 2001 From: huangjinysf Date: Mon, 5 Jan 2026 10:10:55 +0800 Subject: [PATCH] =?UTF-8?q?feat(RealTimeInventory):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=9C=BA=E5=8F=B0=E7=AD=9B=E9=80=89=E5=8A=9F=E8=83=BD=E5=B9=B6?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=BF=87=E6=BB=A4=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增机台筛选下拉框及相关状态管理 - 修改过滤逻辑以支持机台和库存变化的组合筛选 - 从生产状态数据中提取机台选项并排序 --- src/views/plan/RealTimeInventory.vue | 91 +++++++++++++++++++++------- 1 file changed, 69 insertions(+), 22 deletions(-) diff --git a/src/views/plan/RealTimeInventory.vue b/src/views/plan/RealTimeInventory.vue index 103b47d..4ac94aa 100644 --- a/src/views/plan/RealTimeInventory.vue +++ b/src/views/plan/RealTimeInventory.vue @@ -3,16 +3,36 @@

实时库存表

- - - - - +
+ 机台筛选: + + + + +
+
+ 库存增减: + + + + + +
{ - if (!records.value.length) { +const getFilteredRecords = (inputRecords = null) => { + const sourceRecords = inputRecords || records.value; + + if (!sourceRecords.length) { return []; } @@ -282,7 +308,7 @@ const getFilteredRecords = () => { .filter(diff => diff.difference > 0) .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 || ''}`; return increaseKeys.has(key); }); @@ -296,17 +322,23 @@ const getFilteredRecords = () => { .filter(diff => diff.difference < 0) .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 || ''}`; return decreaseKeys.has(key); }); case 'all': default: // 全部:返回所有记录 - return records.value; + return sourceRecords; } }; +// 方法:处理机台筛选条件变化 +const handleEquipmentFilterChange = () => { + console.log('机台筛选条件变化:', equipmentFilter.value); + // 这里可以直接在表格数据的计算属性中应用筛选逻辑 +}; + // 方法:处理筛选条件变化 const handleFilterChange = () => { console.log('筛选条件变化:', inventoryFilter.value); @@ -385,25 +417,37 @@ const dynamicColumns = 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(); - console.log('过滤后的记录数量:', filteredRecords.length); + const finalFilteredRecords = getFilteredRecords(filteredRecords); + console.log('最终过滤后的记录数量:', finalFilteredRecords.length); - if (!filteredRecords.length) { + if (!finalFilteredRecords.length) { console.log('过滤后的records为空,返回空数组'); 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" 在前 console.log('获取到的规格列表:', specifications); // 获取所有唯一的 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() !== '') { return `${item.model}::${item.wire_disc}`; } else { @@ -430,7 +474,7 @@ const tableData = computed(() => { } // 查找对应的记录 - const record = filteredRecords.find(r => { + const record = finalFilteredRecords.find(r => { const specMatch = r.specification === specification; const modelMatch = r.model === model; const wireDiscMatch = hasWireDisc @@ -536,6 +580,9 @@ const fetchUIDProductionStatus = async () => { const uniqueEquipmentCodes = [...new Set(uidProductionStatus.value.map(record => record.equipment_code))]; console.log('唯一设备代码:', uniqueEquipmentCodes); + // 更新机台筛选选项 + equipmentFilterOptions.value = uniqueEquipmentCodes.sort(); + // 为每个equipment_code分配颜色 uniqueEquipmentCodes.forEach((equipmentCode, index) => { equipmentColors.set(equipmentCode, generateLowSaturationColor(index));