diff --git a/src/components/pages/ReportLogViewer.vue b/src/components/pages/ReportLogViewer.vue
index f1615d6..c39ac5a 100644
--- a/src/components/pages/ReportLogViewer.vue
+++ b/src/components/pages/ReportLogViewer.vue
@@ -58,58 +58,140 @@
-
-
-
-
- 分析模型数
- {{ currentReport.resultMetrics.modelCount }}
-
-
- 识别特征总数
- {{ currentReport.resultMetrics.featureCount }}
-
-
- 处理部件数
- {{ currentReport.resultMetrics.processedCount }}
-
-
+
+
+
+
+
+
+ 分析模型数
+ {{ currentReport.resultMetrics.modelCount }}
+
+
+ 识别特征总数
+ {{ currentReport.resultMetrics.featureCount }}
+
+
+ 处理部件数
+ {{ currentReport.resultMetrics.processedCount }}
+
+
-
-
-
特征结果详情
-
-
-
-
- {{ scope.row.featureType }}
-
-
-
-
-
- {{ scope.row.recommendedAction }}
-
-
-
-
-
-
- {{ idx + 1 }}. {{ step }}
-
-
-
-
-
+
+
+
特征结果详情
+
+
+
+
+ {{ scope.row.featureType }}
+
+
+
+
+
+ {{ scope.row.recommendedAction }}
+
+
+
+
+
+
+ {{ idx + 1 }}. {{ step }}
+
+
+
+
+
-
-
-
异常日志
-
- {{ currentReport.errorInfo }}
-
-
-
+
+
+
异常日志
+
+ {{ currentReport.errorInfo }}
+
+
+
+
+
+
+
+
+
+ 自动读取 (当前任务记录)
+ 手动选择比对文件
+
+
+
+
+
+
+ 当前报告未包含比对数据
+
+
+
+ {{ currentReport.comparisonData.sourceFormat }}
+
+ {{ currentReport.comparisonData.targetFormat }}
+
+
+
+
+
文件体积减小
+
{{ currentReport.comparisonData.sizeReduction }}
+
+
+
多边形面片缩减
+
{{ currentReport.comparisonData.polygonReduction }}
+
+
+
+
+
+
基准原始模型
+
+ -
+ {{ key }}
+ {{ val }}
+
+
+
+
VS
+
+
轻量化结果模型
+
+ -
+ {{ key }}
+ {{ val }}
+
+
+
+
+
+
+
+
+
+
+
+
+
请选择基准源文件 (.asm, .rvt...)
+
选择基准文件
+
+
VS
+
+
+
请选择轻量化目标 (.prt, .ifc...)
+
选择目标文件
+
+
+
+ 开始比对分析
+
+
+
+
+
@@ -126,6 +208,8 @@ import { ref, computed } from 'vue'
import { ElMessage } from 'element-plus'
const searchQuery = ref('')
+const activeTab = ref('overview')
+const comparisonMode = ref('auto')
// 模拟报告数据
const mockReports = [
@@ -142,6 +226,26 @@ const mockReports = [
{ featureName: 'FILLET_002', featureType: '倒角', recommendedAction: '建议保留', recommendedSteps: ['标记为特征', '跳过删除向导'] },
{ featureName: 'POCKET_003', featureType: '凹槽', recommendedAction: '用户确认', recommendedSteps: ['提示用户审查该凸台'] }
],
+ comparisonData: {
+ sourceFormat: 'ASM (Creo)',
+ targetFormat: 'Shrinkwrap PRT',
+ sizeReduction: '76.5%',
+ polygonReduction: '45.2%',
+ sourceProps: {
+ '文件大小': '125.4 MB',
+ '多边形体积': '1,245,600 面片',
+ '特征/部件总数': '4,520 个',
+ '装配体层级': '12 层级',
+ '外包络体积': '15.42 m³'
+ },
+ targetProps: {
+ '文件大小': '29.5 MB',
+ '多边形体积': '682,100 面片',
+ '特征/部件总数': '342 个 (不可见件全清除)',
+ '装配体层级': '单层 (已重组成一个实体)',
+ '外包络体积': '15.41 m³ (误差 <0.1%)'
+ }
+ },
errorInfo: null
},
{
@@ -354,8 +458,6 @@ const exportSelectedReport = () => {
.detail-body {
padding: var(--spacing-lg);
- overflow-y: auto;
- flex: 1;
display: flex;
flex-direction: column;
gap: var(--spacing-xl);
@@ -444,4 +546,207 @@ const exportSelectedReport = () => {
--el-table-text-color: var(--color-text-primary);
--el-table-header-text-color: var(--color-text-primary);
}
+
+/* 对比视图样式 */
+.report-tabs {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ overflow: hidden;
+}
+
+:deep(.el-tabs__content) {
+ flex: 1;
+ overflow-y: auto;
+ padding: 0;
+}
+
+:deep(.el-tabs__header) {
+ margin-bottom: 0;
+ padding: 0 var(--spacing-lg);
+ background: var(--color-bg-primary);
+ border-bottom: 1px solid var(--color-border-primary);
+}
+
+.comparison-view {
+ padding: var(--spacing-lg);
+ display: flex;
+ flex-direction: column;
+ gap: var(--spacing-xl);
+}
+
+.comparison-mode-switch {
+ display: flex;
+ justify-content: center;
+ margin-bottom: var(--spacing-md);
+}
+
+.result-badges {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: var(--spacing-md);
+ margin-bottom: var(--spacing-lg);
+ font-size: var(--font-size-lg);
+}
+
+.badge-arrow {
+ color: var(--color-text-secondary);
+}
+
+.compress-rates {
+ display: flex;
+ gap: var(--spacing-lg);
+ margin-bottom: var(--spacing-xl);
+}
+
+.rate-card {
+ flex: 1;
+ background: var(--color-white-rgb-05);
+ border-radius: var(--size-border-radius);
+ padding: var(--spacing-lg);
+ text-align: center;
+ border: 1px solid var(--color-border-primary);
+}
+
+.rate-title {
+ color: var(--color-text-secondary);
+ font-size: var(--font-size-sm);
+ margin-bottom: var(--spacing-sm);
+}
+
+.rate-value {
+ font-size: 32px;
+ font-weight: bold;
+}
+
+.comparison-columns {
+ display: flex;
+ gap: var(--spacing-lg);
+ align-items: stretch;
+}
+
+.comp-col {
+ flex: 1;
+ background: var(--color-bg-primary);
+ border: 1px dashed var(--color-border-primary);
+ border-radius: var(--size-border-radius);
+ padding: var(--spacing-lg);
+}
+
+.comp-col h4 {
+ margin: 0 0 var(--spacing-lg) 0;
+ display: flex;
+ align-items: center;
+ gap: var(--spacing-sm);
+ color: var(--color-text-primary);
+ border-bottom: 1px solid var(--color-border-primary);
+ padding-bottom: var(--spacing-sm);
+}
+
+.vs-divider {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-weight: bold;
+ font-size: 24px;
+ color: var(--color-text-tertiary);
+ padding: 0 var(--spacing-md);
+}
+
+.prop-list {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+}
+
+.prop-list li {
+ display: flex;
+ justify-content: space-between;
+ padding: var(--spacing-sm) 0;
+ border-bottom: 1px solid var(--color-white-rgb-05);
+}
+
+.prop-list li:last-child {
+ border-bottom: none;
+}
+
+.prop-label {
+ color: var(--color-text-secondary);
+}
+
+.prop-value {
+ font-weight: 500;
+ text-align: right;
+}
+
+.empty-data {
+ text-align: center;
+ padding: 40px;
+ color: var(--color-text-tertiary);
+ font-size: var(--font-size-lg);
+ display: flex;
+ flex-direction: column;
+ gap: 16px;
+ align-items: center;
+}
+
+.empty-data i {
+ font-size: 48px;
+}
+
+.upload-panels {
+ display: flex;
+ gap: var(--spacing-xl);
+ align-items: center;
+ margin-bottom: var(--spacing-xl);
+}
+
+.upload-box {
+ flex: 1;
+ height: 200px;
+ border: 2px dashed var(--color-border-primary);
+ border-radius: var(--size-border-radius-lg);
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ gap: var(--spacing-md);
+ color: var(--color-text-secondary);
+ transition: all 0.3s;
+ cursor: pointer;
+ background: var(--color-bg-primary);
+}
+
+.upload-box:hover {
+ border-color: var(--color-primary);
+ background: rgba(var(--color-primary-rgb), 0.05);
+}
+
+.upload-box.target:hover {
+ border-color: var(--color-success);
+ background: rgba(var(--color-success-rgb), 0.05);
+}
+
+.upload-box i {
+ font-size: 48px;
+ color: var(--color-text-tertiary);
+}
+
+.upload-box:hover i {
+ color: var(--color-primary);
+}
+.upload-box.target:hover i {
+ color: var(--color-success);
+}
+
+.vs-icon {
+ font-size: 32px;
+ font-weight: bold;
+ color: var(--color-text-tertiary);
+}
+
+.manual-actions {
+ text-align: center;
+}
diff --git a/src/components/pages/UniversalConverter.vue b/src/components/pages/UniversalConverter.vue
index e853962..67ae103 100644
--- a/src/components/pages/UniversalConverter.vue
+++ b/src/components/pages/UniversalConverter.vue
@@ -7,19 +7,41 @@
+
+
+
+ STP 转 GLTF
+
+
+
+ IFC 转 STP
+
+
+
-
1. 选择STP文件
-
选择要转换的STEP格式文件
+
1. 选择STP文件
+
1. 选择IFC文件
+
选择要转换的STEP格式文件
+
选择要转换的IFC格式文件
@@ -29,7 +51,8 @@
2. 转换处理
-
自动处理几何数据和材质
+
自动处理几何数据和材质
+
解析BIM数据并重建BREP几何
@@ -38,18 +61,22 @@
-
3. 下载GLTF
-
获取Web优化的3D模型文件
+
3. 下载GLTF
+
3. 下载STP
+
获取Web优化的3D模型文件
+
获取通用的STEP实体模型文件
-
+
-
拖拽STP文件到此处
+
拖拽STP文件到此处
+
拖拽IFC文件到此处
或点击选择文件
-
+
+