This commit is contained in:
2026-03-06 00:52:06 +08:00
parent 2a4c2cfa08
commit 7f08566981
2 changed files with 205 additions and 6 deletions
+138
View File
@@ -799,6 +799,144 @@ a:hover {
color: var(--text-primary);
}
/* ================================
设计建议列表
================================ */
.recommendations-section {
margin-top: var(--space-6);
padding-top: var(--space-6);
border-top: 1px solid var(--border-light);
}
.recommendations-section h5 {
font-size: var(--text-base);
font-weight: var(--font-semibold);
color: var(--text-primary);
margin-bottom: var(--space-4);
}
.recommendations-list {
display: flex;
flex-direction: column;
gap: var(--space-3);
}
.recommendation-item {
display: flex;
align-items: flex-start;
gap: var(--space-3);
padding: var(--space-3);
background: var(--bg-secondary);
border-radius: var(--radius-lg);
border-left: 4px solid var(--gray-300);
transition: all var(--duration-fast) var(--ease-default);
}
.recommendation-item:hover {
background: var(--gray-50);
transform: translateX(2px);
}
.recommendation-item.critical {
border-left-color: var(--red-500);
background: linear-gradient(90deg, var(--red-50), transparent);
}
.recommendation-item.high {
border-left-color: var(--orange-500);
background: linear-gradient(90deg, var(--orange-50), transparent);
}
.recommendation-item.medium {
border-left-color: var(--blue-500);
background: linear-gradient(90deg, var(--blue-50), transparent);
}
.recommendation-item.low {
border-left-color: var(--green-500);
background: linear-gradient(90deg, var(--green-50), transparent);
}
.priority-badge {
display: inline-flex;
align-items: center;
padding: var(--space-1) var(--space-2);
font-size: var(--text-xs);
font-weight: var(--font-semibold);
border-radius: var(--radius-full);
white-space: nowrap;
flex-shrink: 0;
}
.priority-badge.critical {
background: var(--red-500);
color: white;
}
.priority-badge.high {
background: var(--orange-500);
color: white;
}
.priority-badge.medium {
background: var(--blue-500);
color: white;
}
.priority-badge.low {
background: var(--green-500);
color: white;
}
.recommendation-text {
flex: 1;
font-size: var(--text-sm);
color: var(--text-primary);
line-height: 1.5;
}
.recommendation-reason {
font-size: var(--text-xs);
color: var(--text-tertiary);
font-style: italic;
}
/* ================================
分析摘要
================================ */
.analysis-summary {
background: linear-gradient(135deg, var(--blue-50), var(--purple-50));
border: 1px solid var(--border-light);
border-radius: var(--radius-xl);
padding: var(--space-6);
margin-bottom: var(--space-6);
box-shadow: var(--shadow-sm);
}
.summary-header {
display: flex;
align-items: center;
gap: var(--space-3);
margin-bottom: var(--space-3);
}
.summary-header h4 {
font-size: var(--text-lg);
font-weight: var(--font-semibold);
color: var(--text-primary);
margin: 0;
}
.summary-icon {
font-size: var(--text-xl);
}
.summary-content {
font-size: var(--text-base);
color: var(--text-secondary);
line-height: 1.6;
}
/* ================================
数据表格
================================ */
+67 -6
View File
@@ -172,6 +172,16 @@ const App = {
initAuth();
});
const getPriorityText = (priority) => {
const priorityMap = {
'critical': '紧急',
'high': '高',
'medium': '中',
'low': '低'
};
return priorityMap[priority] || priority;
};
return {
route,
router,
@@ -179,6 +189,7 @@ const App = {
menuItems,
isActive,
handleLogout,
getPriorityText,
dismissNotification: (id) => {
const index = appState.notifications.findIndex(n => n.id === id);
if (index > -1) {
@@ -1104,6 +1115,17 @@ const ResultView = {
<div v-if="state.task.analysis_result" class="viewer-section">
<h3>分析结果详情</h3>
<!-- 分析摘要 -->
<div class="analysis-summary" v-if="state.task.analysis_result.analysis_summary">
<div class="summary-header">
<h4>分析摘要</h4>
<span class="summary-icon">📋</span>
</div>
<div class="summary-content">
{{ state.task.analysis_result.analysis_summary }}
</div>
</div>
<div class="result-grid">
<div class="result-card full-width">
<h4>1. 产品特征识别</h4>
@@ -1117,19 +1139,19 @@ const ResultView = {
</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>
<span class="info-value">{{ state.task.analysis_result.detected_features?.find(f => f.feature_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>
<span class="info-value">{{ state.task.analysis_result.detected_features?.filter(f => f.feature_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>
<span class="info-value">{{ state.task.analysis_result.detected_features?.filter(f => f.feature_type === 'hole' || f.feature_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>
<span class="info-value">{{ state.task.analysis_result.detected_features?.filter(f => f.feature_type === 'undercut').length || 0 }} 个倒扣区域</span>
</div>
<div class="info-item">
<span class="info-label">对称性分析</span>
@@ -1166,12 +1188,27 @@ const ResultView = {
</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>
<span class="info-value">{{ state.task.analysis_result.detected_features?.filter(f => f.feature_type === '定位').length || 0 }} 个定位特征</span>
</div>
<div class="info-item">
<span class="info-label">分型面选择</span>
<span class="info-value">基于产品几何:自动推荐最优分型面</span>
</div>
<!-- 设计建议列表 -->
<div class="recommendations-section" v-if="state.task.analysis_result.design_recommendations?.length">
<h5>详细设计建议</h5>
<div class="recommendations-list">
<div v-for="rec in state.task.analysis_result.design_recommendations.sort((a, b) => {
const priorityOrder = { 'critical': 0, 'high': 1, 'medium': 2, 'low': 3 };
return priorityOrder[a.priority] - priorityOrder[b.priority];
})" :key="rec.type" class="recommendation-item" :class="rec.priority">
<span class="priority-badge" :class="rec.priority">{{ getPriorityText(rec.priority) }}</span>
<span class="recommendation-text">{{ rec.description }}</span>
<span class="recommendation-reason" v-if="rec.reason">({{ rec.reason }})</span>
</div>
</div>
</div>
</div>
</div>
@@ -1184,7 +1221,11 @@ const ResultView = {
</div>
<div class="info-item">
<span class="info-label">模架尺寸</span>
<span class="info-value">基于泡沫外形自动计算</span>
<span class="info-value">{{ state.task.key_info?.mold_parameters?.mold_size || '基于泡沫外形自动计算' }}</span>
</div>
<div class="info-item" v-if="state.task.key_info?.geometric_characteristics">
<span class="info-label">预估锁模力</span>
<span class="info-value">{{ state.task.key_info.geometric_characteristics.estimated_clamping_force || '自动计算' }} 吨</span>
</div>
<div class="info-item">
<span class="info-label">顶出系统</span>
@@ -1198,6 +1239,26 @@ const ResultView = {
<span class="info-label">材料选择</span>
<span class="info-value">{{ state.task.analysis_result.quality_metrics?.volume ? '根据产量和精度自动推荐' : '7075 铝合金' }}</span>
</div>
<div class="info-item" v-if="state.task.analysis_result.quality_metrics">
<span class="info-label">体积利用率</span>
<span class="info-value">{{ (state.task.analysis_result.quality_metrics.volume_utilization * 100)?.toFixed(1) || 'N/A' }}%</span>
</div>
<div class="info-item" v-if="state.task.analysis_result.quality_metrics">
<span class="info-label">拓扑复杂度</span>
<span class="info-value">{{ state.task.analysis_result.quality_metrics.topology_complexity?.toFixed(2) || 'N/A' }}</span>
</div>
<div class="info-item" v-if="state.task.analysis_result.quality_metrics">
<span class="info-label">壁厚均匀性</span>
<span class="info-value">{{ (state.task.analysis_result.quality_metrics.wall_uniformity * 100)?.toFixed(1) || 'N/A' }}%</span>
</div>
<div class="info-item" v-if="state.task.key_info?.quality_considerations">
<span class="info-label">翘曲风险</span>
<span class="info-value">{{ state.task.key_info.quality_considerations.warpage_risk || '低风险' }}</span>
</div>
<div class="info-item" v-if="state.task.key_info?.quality_considerations">
<span class="info-label">潜在焊缝线</span>
<span class="info-value">{{ state.task.key_info.quality_considerations.potential_weld_lines || 0 }} 条</span>
</div>
</div>
</div>
</div>