diff --git a/src/views/plan/RealTimeInventory.vue b/src/views/plan/RealTimeInventory.vue index 927ff62..3b3d252 100644 --- a/src/views/plan/RealTimeInventory.vue +++ b/src/views/plan/RealTimeInventory.vue @@ -62,6 +62,22 @@ (-) + + + @@ -146,6 +162,10 @@ const loading = ref(false) const records = ref([]) const differenceRecords = ref([]) +// UID生产状态数据 +const uidProductionStatus = ref([]) +const uidProductionStatusMap = ref(new Map()) + // WMS对话框相关状态 const wmsDialogVisible = ref(false) const currentWmsModel = ref('') @@ -321,6 +341,99 @@ const fetchDifferenceData = async () => { } }; +// 方法:获取UID生产状态数据 +const fetchUIDProductionStatus = async () => { + try { + console.log('正在请求UID生产状态API:', `${API_CONFIG.BASE_URL}/api/plan/mes/uid/production-status`); + const response = await fetch(`${API_CONFIG.BASE_URL}/api/plan/mes/uid/production-status`); + const result = await response.json(); + + console.log('UID生产状态API返回结果:', result); + + if (result.code === 200 && result.data && result.data.uid_records) { + uidProductionStatus.value = result.data.uid_records; + console.log('设置UID生产状态records:', uidProductionStatus.value); + + // 构建model::wire_disc::specification格式的映射 + const statusMap = new Map(); + uidProductionStatus.value.forEach(record => { + const formattedWireDisc = formatWireDisc(record.wire_disc); + const key = `${record.model}::${formattedWireDisc}::${record.specification}`; + statusMap.set(key, { + wight_completion: record.wight_completion, + degree_of_completion: record.degree_of_completion, + status: record.status + }); + }); + + uidProductionStatusMap.value = statusMap; + console.log('UID生产状态映射:', uidProductionStatusMap.value); + } else { + console.error('获取UID生产状态数据失败:', result.message); + uidProductionStatus.value = []; + uidProductionStatusMap.value = new Map(); + } + } catch (error) { + console.error('UID生产状态API调用失败:', error); + uidProductionStatus.value = []; + uidProductionStatusMap.value = new Map(); + } +}; + +// 方法:格式化wire_disc +const formatWireDisc = (wireDisc) => { + if (!wireDisc) return ''; + + // 提取PT和数字部分,去掉汉字 + const ptMatch = wireDisc.match(/PT(\d+)/); + if (ptMatch) { + return `PT-${ptMatch[1]}`; + } + + // 如果没有找到PT格式,返回原始值 + return wireDisc; +}; + +// 方法:根据wight_completion获取完成度状态 +const getCompletionStatus = (wight_completion) => { + if (wight_completion > 0) { + // 有进度时根据具体数值计算填充百分比 + let percentage = 25; // 默认25% + if (wight_completion >= 100) percentage = 100; + else if (wight_completion >= 75) percentage = 75; + else if (wight_completion >= 25) percentage = 25; + + return { percentage, color: '#67C23A' }; // 绿色 + } + return { percentage: 0, color: '#C0C4CC' }; // 灰色(无进度) +}; + +// 方法:获取生产状态指示器 +const getProductionStatusIndicator = (specification, columnProp) => { + // 构建包含规格的key + const keyWithSpec = `${columnProp}::${specification}`; + + if (!uidProductionStatusMap.value.has(keyWithSpec)) { + return null; + } + + const status = uidProductionStatusMap.value.get(keyWithSpec); + return getCompletionStatus(status.wight_completion); +}; + +// 方法:获取生产状态标题 +const getProductionStatusTitle = (specification, columnProp) => { + // 构建包含规格的key + const keyWithSpec = `${columnProp}::${specification}`; + + if (!uidProductionStatusMap.value.has(keyWithSpec)) { + return '无生产状态数据'; + } + + const status = uidProductionStatusMap.value.get(keyWithSpec); + return `重量完成度: ${status.wight_completion.toFixed(2)}%`; +}; + // 方法:刷新数据 const refreshData = () => { fetchData(); @@ -968,6 +1081,8 @@ onMounted(() => { if (showDifference.value) { fetchDifferenceData(); } + // 获取UID生产状态数据 + fetchUIDProductionStatus(); }); @@ -1120,4 +1235,16 @@ onMounted(() => { width: 100%; min-height: 350px; } + +/* UID生产状态指示器样式 */ +.production-status-indicator { + border: 1px solid #dcdfe6; + cursor: help; + transition: all 0.3s ease; +} + +.production-status-indicator:hover { + transform: scale(1.2); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); +} \ No newline at end of file