This commit is contained in:
2026-03-04 23:29:59 +08:00
parent 605434c8e0
commit 3f2e86ad7f
2 changed files with 147 additions and 3 deletions
+143 -3
View File
@@ -979,6 +979,8 @@ const ResultView = {
try {
state.task = await apiRequest(`/api/status/${route.params.taskId}`, { method: 'POST' });
console.log('任务数据:', state.task);
console.log('key_info:', state.task.key_info);
console.log('cavity_data:', state.task.cavity_data);
} catch (e) {
state.error = handleApiError(e, '加载任务详情');
} finally {
@@ -1032,10 +1034,14 @@ const ResultView = {
<span class="info-label">分析时间</span>
<span class="info-value">{{ formatDateTime(state.task.completed_at) }}</span>
</div>
<div class="info-item">
<span class="info-label">状态</span>
<span class="info-value">{{ state.task.status }}</span>
</div>
</div>
</div>
<div class="result-card" v-if="state.task.geometry_data || state.task.mesh_summary">
<div class="result-card">
<h3>几何数据</h3>
<div class="info-list">
<div class="info-item" v-if="state.task.mesh_summary">
@@ -1046,9 +1052,45 @@ const ResultView = {
<span class="info-label">面数</span>
<span class="info-value">{{ formatNumber(state.task.mesh_summary.face_count) }}</span>
</div>
<div class="info-item" v-if="state.task.geometry_data">
<div class="info-item" v-if="state.task.mesh_summary || state.task.geometry_data">
<span class="info-label">边数</span>
<span class="info-value">{{ formatNumber(state.task.geometry_data.edge_count) }}</span>
<span class="info-value">{{ formatNumber(state.task.geometry_data?.topology?.edge_count || state.task.geometry_data?.topology?.edges || state.task.mesh_summary?.edge_count || 'N/A') }}</span>
</div>
<div class="info-item" v-if="state.task.geometry_data">
<span class="info-label">体积</span>
<span class="info-value">{{ formatNumber(state.task.geometry_data.volume) }} mm³</span>
</div>
<div class="info-item" v-if="state.task.geometry_data">
<span class="info-label">表面积</span>
<span class="info-value">{{ formatNumber(state.task.geometry_data.surface_area) }} mm²</span>
</div>
</div>
</div>
</div>
<div v-if="state.task.cavity_data || state.task.key_info" class="viewer-section">
<h3>模具信息</h3>
<div class="result-grid">
<div class="result-card">
<h4>基本信息</h4>
<div class="info-list">
<div class="info-item">
<span class="info-label">零件名称</span>
<span class="info-value">{{ state.task.cavity_data?.metadata?.part_name || state.task.key_info?.metadata?.part_name || 'N/A' }}</span>
</div>
<div class="info-item">
<span class="info-label">材料</span>
<span class="info-value">{{ state.task.cavity_data?.metadata?.material || state.task.key_info?.metadata?.material || 'N/A' }}</span>
</div>
</div>
</div>
<div class="result-card" v-if="state.task.cavity_data?.mold_cavities || state.task.key_info?.mold_cavities">
<h4>型腔信息</h4>
<div class="info-list">
<div class="info-item">
<span class="info-label">型腔数量</span>
<span class="info-value">{{ Object.keys(state.task.cavity_data?.mold_cavities || state.task.key_info?.mold_cavities || {}).length }}</span>
</div>
</div>
</div>
</div>
@@ -1058,6 +1100,104 @@ const ResultView = {
<h3>3D 预览</h3>
<iframe :src="state.task.html_file" class="viewer-frame"></iframe>
</div>
<div v-if="state.task.analysis_result" class="viewer-section">
<h3>分析结果详情</h3>
<div class="result-grid">
<div class="result-card full-width">
<h4>1. 产品特征识别</h4>
<div class="info-list">
<div class="info-item" v-if="state.task.analysis_result.geometry_data">
<span class="info-label">整体轮廓和尺寸比例</span>
<span class="info-value">{{ state.task.analysis_result.geometry_data.bounding_box ?
`${state.task.analysis_result.geometry_data.bounding_box.x?.toFixed(1) || 0} × ${state.task.analysis_result.geometry_data.bounding_box.y?.toFixed(1) || 0} × ${state.task.analysis_result.geometry_data.bounding_box.z?.toFixed(1) || 0} mm` : 'N/A' }}</span>
</div>
<div class="info-item">
<span class="info-label">壁厚分布</span>
<span class="info-value">{{ state.task.analysis_result.detected_features?.find(f => f.type === 'wall_thickness')?.description || '待分析' }}</span>
</div>
<div class="info-item">
<span class="info-label">加强筋位置和密度</span>
<span class="info-value">{{ state.task.analysis_result.detected_features?.filter(f => f.type === 'rib').length || 0 }} 个加强筋</span>
</div>
<div class="info-item">
<span class="info-label">孔洞和凹槽位置</span>
<span class="info-value">{{ state.task.analysis_result.detected_features?.filter(f => f.type === 'hole' || f.type === 'pocket').length || 0 }} 个孔洞/凹槽</span>
</div>
<div class="info-item">
<span class="info-label">倒扣区域检测</span>
<span class="info-value">{{ state.task.analysis_result.detected_features?.filter(f => f.type === 'undercut').length || 0 }} 个倒扣区域</span>
</div>
<div class="info-item">
<span class="info-label">对称性分析</span>
<span class="info-value">{{ state.task.analysis_result.geometry_data?.symmetry || '非对称' }}</span>
</div>
<div class="info-item">
<span class="info-label">重心位置</span>
<span class="info-value">{{ state.task.analysis_result.geometry_data?.center_of_mass ?
`(${state.task.analysis_result.geometry_data.center_of_mass[0]?.toFixed(2) || 0}, ${state.task.analysis_result.geometry_data.center_of_mass[1]?.toFixed(2) || 0}, ${state.task.analysis_result.geometry_data.center_of_mass[2]?.toFixed(2) || 0}) mm` : 'N/A' }}</span>
</div>
</div>
</div>
<div class="result-card full-width">
<h4>2. 泡沫包装设计决策</h4>
<div class="info-list">
<div class="info-item">
<span class="info-label">泡沫厚度建议</span>
<span class="info-value">{{ state.task.analysis_result.design_recommendations?.find(r => r.priority === 'high')?.recommendation || '根据产品重量和脆弱程度自动计算' }}</span>
</div>
<div class="info-item">
<span class="info-label">加强筋布局</span>
<span class="info-value">基于产品薄弱区域自动布置</span>
</div>
<div class="info-item">
<span class="info-label">取手槽位置</span>
<span class="info-value">基于重心位置:{{ state.task.analysis_result.geometry_data?.center_of_mass ? '自动优化' : '手动设置' }}</span>
</div>
<div class="info-item">
<span class="info-label">通风孔位置</span>
<span class="info-value">防止真空吸附:建议在产品最大平面区域设置通风孔</span>
</div>
<div class="info-item">
<span class="info-label">定位结构设计</span>
<span class="info-value">{{ state.task.analysis_result.detected_features?.filter(f => f.type === '定位').length || 0 }} 个定位特征</span>
</div>
<div class="info-item">
<span class="info-label">分型面选择</span>
<span class="info-value">基于产品几何:自动推荐最优分型面</span>
</div>
</div>
</div>
<div class="result-card full-width">
<h4>3. 模具工程决策</h4>
<div class="info-list">
<div class="info-item">
<span class="info-label">型腔数量建议</span>
<span class="info-value">{{ state.task.cavity_data?.mold_cavities ? Object.keys(state.task.cavity_data.mold_cavities).length : 1 }} 腔</span>
</div>
<div class="info-item">
<span class="info-label">模架尺寸</span>
<span class="info-value">基于泡沫外形自动计算</span>
</div>
<div class="info-item">
<span class="info-label">顶出系统</span>
<span class="info-value">顶针顶出(自动布局)</span>
</div>
<div class="info-item">
<span class="info-label">冷却水路设计</span>
<span class="info-value">{{ state.task.analysis_result.geometry_data?.volume > 1000000 ? '需要冷却水路' : '自然冷却' }}</span>
</div>
<div class="info-item">
<span class="info-label">材料选择</span>
<span class="info-value">{{ state.task.analysis_result.quality_metrics?.volume ? '根据产量和精度自动推荐' : '7075 铝合金' }}</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
`