|
|
|
|
@ -3,16 +3,36 @@
|
|
|
|
|
<div class="table-header">
|
|
|
|
|
<h3>实时库存表</h3>
|
|
|
|
|
<div class="table-actions">
|
|
|
|
|
<el-select
|
|
|
|
|
v-model="inventoryFilter"
|
|
|
|
|
placeholder="选择筛选条件"
|
|
|
|
|
style="width: 120px; margin-right: 15px;"
|
|
|
|
|
@change="handleFilterChange"
|
|
|
|
|
>
|
|
|
|
|
<el-option label="全部" value="all" />
|
|
|
|
|
<el-option label="库存增加" value="increase" />
|
|
|
|
|
<el-option label="库存减少" value="decrease" />
|
|
|
|
|
</el-select>
|
|
|
|
|
<div style="display: flex; align-items: center; margin-right: 15px;">
|
|
|
|
|
<span style="margin-right: 5px;">机台筛选:</span>
|
|
|
|
|
<el-select
|
|
|
|
|
v-model="equipmentFilter"
|
|
|
|
|
placeholder="选择机台"
|
|
|
|
|
style="width: 150px;"
|
|
|
|
|
@change="handleEquipmentFilterChange"
|
|
|
|
|
>
|
|
|
|
|
<el-option label="全部机台" value="all" />
|
|
|
|
|
<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
|
|
|
|
|
v-model="showDifference"
|
|
|
|
|
active-text="显示库存变化"
|
|
|
|
|
@ -264,10 +284,16 @@ const DBL_CLICK_DELAY = 250; // 双击延时(毫秒)
|
|
|
|
|
|
|
|
|
|
// 库存筛选相关
|
|
|
|
|
const inventoryFilter = ref('all'); // 筛选类型:all-全部,increase-库存增加,decrease-库存减少
|
|
|
|
|
const equipmentFilter = ref('all'); // 机台筛选:all-全部,具体的equipment_code
|
|
|
|
|
|
|
|
|
|
// 机台筛选选项
|
|
|
|
|
const equipmentFilterOptions = ref([]);
|
|
|
|
|
|
|
|
|
|
// 方法:根据筛选条件获取过滤后的记录
|
|
|
|
|
const getFilteredRecords = () => {
|
|
|
|
|
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));
|
|
|
|
|
|