fix(RealTimeInventory): 添加单元格点击事件防抖处理

防止快速双击时同时触发单击和双击事件,通过设置延时器和清除机制来区分单击和双击操作
master
huangjinysf 2 months ago
parent 8d1c853226
commit 24268d7d2b

@ -195,6 +195,10 @@ const transitionProbabilitiesMap = ref(new Map()) // 存储转移概率数据
const transitionColorsMap = ref(new Map()) // const transitionColorsMap = ref(new Map()) //
const activeCells = ref(new Set()) // const activeCells = ref(new Set()) //
//
let clickTimeoutId = null; //
const DBL_CLICK_DELAY = 250; //
// WMS // WMS
const wmsDialogVisible = ref(false) const wmsDialogVisible = ref(false)
const currentWmsModel = ref('') const currentWmsModel = ref('')
@ -892,129 +896,145 @@ const getDifferenceClass = (difference) => {
}; };
// - // -
// -
const handleCellClick = async (row, column, cell, event) => { const handleCellClick = async (row, column, cell, event) => {
const cellValue = row[column.property]; //
if (clickTimeoutId) {
// clearTimeout(clickTimeoutId);
if (!cellValue || cellValue === '-' || cellValue === null || cellValue === undefined) { clickTimeoutId = null;
return;
}
//
if (column.property === 'specification' || column.property === 'total') {
return;
}
// modelwire_disc
const columnKey = column.property;
const hasWireDisc = columnKey.includes('::');
let model, wire_disc;
if (hasWireDisc) {
[model, wire_disc] = columnKey.split('::');
} else {
model = columnKey;
wire_disc = null;
} }
// //
const keyWithSpec = `${columnKey}::${row.specification}`; clickTimeoutId = setTimeout(async () => {
const cellValue = row[column.property];
console.log('单击事件参数:', { //
columnKey, if (!cellValue || cellValue === '-' || cellValue === null || cellValue === undefined) {
model, return;
wire_disc, }
specification: row.specification,
keyWithSpec
});
// //
if (activeCells.value.has(keyWithSpec)) { if (column.property === 'specification' || column.property === 'total') {
// return;
activeCells.value.delete(keyWithSpec); }
console.log(`单元格 ${keyWithSpec} 已取消激活,恢复原始颜色`);
ElMessage.info('已取消概率颜色显示');
return;
}
// // modelwire_disc
if (activeCells.value.size > 0) { const columnKey = column.property;
console.log('取消所有之前激活的单元格:', Array.from(activeCells.value)); const hasWireDisc = columnKey.includes('::');
activeCells.value.clear(); let model, wire_disc;
}
// if (hasWireDisc) {
let equipmentCode = 'QB002'; // [model, wire_disc] = columnKey.split('::');
let axleNumber = '左边'; // } else {
model = columnKey;
wire_disc = null;
}
if (uidProductionStatusMap.value.has(keyWithSpec)) { //
const status = uidProductionStatusMap.value.get(keyWithSpec); const keyWithSpec = `${columnKey}::${row.specification}`;
equipmentCode = status.equipment_code || 'QB002';
axleNumber = status.axle_number || '左边';
}
console.log('获取转移概率参数:', { console.log('单击事件参数:', {
equipmentCode, columnKey,
axleNumber, model,
model, wire_disc,
specification: row.specification, specification: row.specification,
wireDisc: formatWireDisc(wire_disc || '') keyWithSpec
}); });
// //
if (transitionProbabilitiesMap.value.has(keyWithSpec)) { if (activeCells.value.has(keyWithSpec)) {
console.log('该单元格的转移概率数据已存在,直接激活显示'); //
activeCells.value.add(keyWithSpec); activeCells.value.delete(keyWithSpec);
ElMessage.success('转移概率数据已显示'); console.log(`单元格 ${keyWithSpec} 已取消激活,恢复原始颜色`);
return; ElMessage.info('已取消概率颜色显示');
} return;
}
// //
const transitionData = await fetchTransitionProbabilities( if (activeCells.value.size > 0) {
equipmentCode, console.log('取消所有之前激活的单元格:', Array.from(activeCells.value));
axleNumber, activeCells.value.clear();
model, }
row.specification,
formatWireDisc(wire_disc || '')
);
if (transitionData && transitionData.current_specification_transitions) { //
// let equipmentCode = 'QB002'; //
const transitionsKey = `${columnKey}::${row.specification}`; let axleNumber = '左边'; //
transitionProbabilitiesMap.value.set(transitionsKey, transitionData);
// if (uidProductionStatusMap.value.has(keyWithSpec)) {
const probabilities = transitionData.current_specification_transitions; const status = uidProductionStatusMap.value.get(keyWithSpec);
const maxProbability = Math.max(...Object.values(probabilities).map(p => p.probability)); equipmentCode = status.equipment_code || 'QB002';
axleNumber = status.axle_number || '左边';
}
Object.entries(probabilities).forEach(([targetSpec, data]) => { console.log('获取转移概率参数:', {
const colorKey = `${transitionsKey}::${targetSpec}`; equipmentCode,
const intensity = data.probability / maxProbability; // 0-1 axleNumber,
model,
specification: row.specification,
wireDisc: formatWireDisc(wire_disc || '')
});
// //
const keyWithSpec = `${columnKey}::${row.specification}`; if (transitionProbabilitiesMap.value.has(keyWithSpec)) {
let baseColor = null; console.log('该单元格的转移概率数据已存在,直接激活显示');
activeCells.value.add(keyWithSpec);
ElMessage.success('转移概率数据已显示');
return;
}
if (uidProductionStatusMap.value.has(keyWithSpec)) { //
const status = uidProductionStatusMap.value.get(keyWithSpec); const transitionData = await fetchTransitionProbabilities(
baseColor = status.equipment_color; equipmentCode,
} axleNumber,
model,
row.specification,
formatWireDisc(wire_disc || '')
);
if (transitionData && transitionData.current_specification_transitions) {
//
const transitionsKey = `${columnKey}::${row.specification}`;
transitionProbabilitiesMap.value.set(transitionsKey, transitionData);
//
const probabilities = transitionData.current_specification_transitions;
const maxProbability = Math.max(...Object.values(probabilities).map(p => p.probability));
Object.entries(probabilities).forEach(([targetSpec, data]) => {
const colorKey = `${transitionsKey}::${targetSpec}`;
const intensity = data.probability / maxProbability; // 0-1
//
const keyWithSpec = `${columnKey}::${row.specification}`;
let baseColor = null;
if (uidProductionStatusMap.value.has(keyWithSpec)) {
const status = uidProductionStatusMap.value.get(keyWithSpec);
baseColor = status.equipment_color;
}
const color = getProbabilityColor(intensity, baseColor); const color = getProbabilityColor(intensity, baseColor);
transitionColorsMap.value.set(colorKey, color); transitionColorsMap.value.set(colorKey, color);
}); });
console.log('转移概率数据已存储:', transitionProbabilitiesMap.value); console.log('转移概率数据已存储:', transitionProbabilitiesMap.value);
console.log('概率颜色映射:', transitionColorsMap.value); console.log('概率颜色映射:', transitionColorsMap.value);
// //
activeCells.value.add(keyWithSpec); activeCells.value.add(keyWithSpec);
ElMessage.success('转移概率数据已加载并显示'); ElMessage.success('转移概率数据已加载并显示');
} }
}, DBL_CLICK_DELAY);
}; };
// - WMS // - WMS
const handleCellDblClick = (row, column, cell, event) => { const handleCellDblClick = (row, column, cell, event) => {
//
if (clickTimeoutId) {
clearTimeout(clickTimeoutId);
clickTimeoutId = null;
console.log('双击事件已清除单击延时器');
}
const cellValue = row[column.property]; const cellValue = row[column.property];
// //

Loading…
Cancel
Save