feat(RealTimeInventory): 添加单元格激活状态和概率颜色增强

- 引入activeCells状态管理激活单元格
- 增强getProbabilityColor方法支持基于基础颜色的概率着色
- 添加hexToRgb和rgbToHsl辅助函数
- 修改handleCellClick实现单元格激活/取消激活功能
master
huangjinysf 2 months ago
parent c1a1c894e3
commit e6cfd5075e

@ -179,6 +179,7 @@ const equipmentCodeColors = ref(new Map()) // equipment_code到颜色的映射
// //
const transitionProbabilitiesMap = ref(new Map()) // const transitionProbabilitiesMap = ref(new Map()) //
const transitionColorsMap = ref(new Map()) // const transitionColorsMap = ref(new Map()) //
const activeCells = ref(new Set()) //
// WMS // WMS
const wmsDialogVisible = ref(false) const wmsDialogVisible = ref(false)
@ -530,13 +531,74 @@ const generateLowSaturationColor = (index) => {
}; };
// //
const getProbabilityColor = (intensity) => { const getProbabilityColor = (intensity, baseColor) => {
// intensity 0-1 // intensity 0-1
const hue = 220; // // baseColor
const saturation = Math.round(30 + intensity * 70); // 30% 100%
const lightness = Math.round(85 - intensity * 30); // 85% 55% // 退
if (!baseColor) {
const hue = 220; //
const saturation = Math.round(30 + intensity * 70); // 30% 100%
const lightness = Math.round(85 - intensity * 30); // 85% 55%
return `hsl(${hue}, ${saturation}%, ${lightness}%)`;
}
// HSL
const rgb = hexToRgb(baseColor);
if (!rgb) {
// 使
const hue = 220;
const saturation = Math.round(30 + intensity * 70);
const lightness = Math.round(85 - intensity * 30);
return `hsl(${hue}, ${saturation}%, ${lightness}%)`;
}
const hsl = rgbToHsl(rgb.r, rgb.g, rgb.b);
return `hsl(${hue}, ${saturation}%, ${lightness}%)`; //
const saturation = Math.min(hsl.s + intensity * 0.4, 1); // 40%
const lightness = Math.max(hsl.l - intensity * 0.2, 0.1); // 10%
return `hsl(${hsl.h}, ${Math.round(saturation * 100)}%, ${Math.round(lightness * 100)}%)`;
};
// RGB
const hexToRgb = (hex) => {
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
return result ? {
r: parseInt(result[1], 16),
g: parseInt(result[2], 16),
b: parseInt(result[3], 16)
} : null;
};
// RGBHSL
const rgbToHsl = (r, g, b) => {
r /= 255;
g /= 255;
b /= 255;
const max = Math.max(r, g, b);
const min = Math.min(r, g, b);
let h, s, l = (max + min) / 2;
if (max === min) {
h = s = 0; // achromatic
} else {
const d = max - min;
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
switch (max) {
case r: h = (g - b) / d + (g < b ? 6 : 0); break;
case g: h = (b - r) / d + 2; break;
case b: h = (r - g) / d + 4; break;
}
h /= 6;
}
return {
h: Math.round(h * 360),
s: s,
l: l
};
}; };
// wight_completion // wight_completion
@ -594,24 +656,27 @@ const getEquipmentCodeColor = (specification, columnProp) => {
// key // key
const keyWithSpec = `${columnProp}::${specification}`; const keyWithSpec = `${columnProp}::${specification}`;
// //
if (transitionProbabilitiesMap.value.has(keyWithSpec)) { if (activeCells.value.has(keyWithSpec)) {
const transitionData = transitionProbabilitiesMap.value.get(keyWithSpec); //
if (transitionData && transitionData.prediction && transitionData.prediction.most_likely_next_spec) { if (transitionProbabilitiesMap.value.has(keyWithSpec)) {
const mostLikelySpec = transitionData.prediction.most_likely_next_spec; const transitionData = transitionProbabilitiesMap.value.get(keyWithSpec);
const probability = transitionData.prediction.probability; if (transitionData && transitionData.prediction && transitionData.prediction.most_likely_next_spec) {
const mostLikelySpec = transitionData.prediction.most_likely_next_spec;
// const probability = transitionData.prediction.probability;
const colorKey = `${keyWithSpec}::${mostLikelySpec}`;
if (transitionColorsMap.value.has(colorKey)) { //
const baseColor = transitionColorsMap.value.get(colorKey); const colorKey = `${keyWithSpec}::${mostLikelySpec}`;
console.log(`为单元格 ${keyWithSpec} 应用转移概率颜色: ${baseColor}, 概率: ${(probability * 100).toFixed(1)}%`); if (transitionColorsMap.value.has(colorKey)) {
return baseColor; const baseColor = transitionColorsMap.value.get(colorKey);
console.log(`为激活单元格 ${keyWithSpec} 应用转移概率颜色: ${baseColor}, 概率: ${(probability * 100).toFixed(1)}%`);
return baseColor;
}
} }
} }
} }
// 退 // 退
if (!uidProductionStatusMap.value.has(keyWithSpec)) { if (!uidProductionStatusMap.value.has(keyWithSpec)) {
return null; return null;
} }
@ -721,15 +786,27 @@ const handleCellClick = async (row, column, cell, event) => {
wire_disc = null; wire_disc = null;
} }
//
const keyWithSpec = `${columnKey}::${row.specification}`;
console.log('单击事件参数:', { console.log('单击事件参数:', {
columnKey, columnKey,
model, model,
wire_disc, wire_disc,
specification: row.specification specification: row.specification,
keyWithSpec
}); });
//
if (activeCells.value.has(keyWithSpec)) {
//
activeCells.value.delete(keyWithSpec);
console.log(`单元格 ${keyWithSpec} 已取消激活,恢复原始颜色`);
ElMessage.info('已取消概率颜色显示');
return;
}
// //
const keyWithSpec = `${columnKey}::${row.specification}`;
let equipmentCode = 'QB002'; // let equipmentCode = 'QB002'; //
let axleNumber = '左边'; // let axleNumber = '左边'; //
@ -749,7 +826,9 @@ const handleCellClick = async (row, column, cell, event) => {
// //
if (transitionProbabilitiesMap.value.has(keyWithSpec)) { if (transitionProbabilitiesMap.value.has(keyWithSpec)) {
console.log('该单元格的转移概率数据已存在跳过API调用'); console.log('该单元格的转移概率数据已存在,直接激活显示');
activeCells.value.add(keyWithSpec);
ElMessage.success('转移概率数据已显示');
return; return;
} }
@ -774,14 +853,26 @@ const handleCellClick = async (row, column, cell, event) => {
Object.entries(probabilities).forEach(([targetSpec, data]) => { Object.entries(probabilities).forEach(([targetSpec, data]) => {
const colorKey = `${transitionsKey}::${targetSpec}`; const colorKey = `${transitionsKey}::${targetSpec}`;
const intensity = data.probability / maxProbability; // 0-1 const intensity = data.probability / maxProbability; // 0-1
const color = getProbabilityColor(intensity);
//
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);
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);
ElMessage.success('转移概率数据已加载'); //
activeCells.value.add(keyWithSpec);
ElMessage.success('转移概率数据已加载并显示');
} }
}; };

Loading…
Cancel
Save