From 29904d4479e7bb06bf96278ca4e14979f841461a Mon Sep 17 00:00:00 2001 From: sladro Date: Mon, 23 Feb 2026 17:10:27 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0Revit=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E8=BD=BB=E9=87=8F=E5=8C=96=E5=A4=84=E7=90=86=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=8C=E5=8C=85=E6=8B=AC=E4=B8=93=E7=94=A8=E7=95=8C?= =?UTF-8?q?=E9=9D=A2=E3=80=81API=E6=9C=8D=E5=8A=A1=E5=92=8C=E5=88=86?= =?UTF-8?q?=E6=9E=90=E4=BB=AA=E8=A1=A8=E7=9B=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .agents/rules/rule.md | 6 + .../pages/RevitAnalysisDashboard.vue | 25 +- .../pages/RevitEnvelopeOptimization.vue | 681 ++++++++++++++++++ src/config/cad.js | 4 +- src/config/pages.js | 6 +- src/services/revitApi.js | 52 ++ src/views/DashboardView.vue | 4 +- 7 files changed, 764 insertions(+), 14 deletions(-) create mode 100644 .agents/rules/rule.md create mode 100644 src/components/pages/RevitEnvelopeOptimization.vue diff --git a/.agents/rules/rule.md b/.agents/rules/rule.md new file mode 100644 index 0000000..97cb0bc --- /dev/null +++ b/.agents/rules/rule.md @@ -0,0 +1,6 @@ +--- +trigger: always_on +--- + +这个项目通过不同的cad插件,来管理不同的cad软件。这个项目属于前端项目,来连接不同的cad插件; +项目如果接入新的接口,要注意1)接口的标准接入流程是什么,按照项目现有的接入流程来;2)接口是针对哪个cad插件来的,不要搞错 \ No newline at end of file diff --git a/src/components/pages/RevitAnalysisDashboard.vue b/src/components/pages/RevitAnalysisDashboard.vue index 167ec43..fba1292 100644 --- a/src/components/pages/RevitAnalysisDashboard.vue +++ b/src/components/pages/RevitAnalysisDashboard.vue @@ -57,23 +57,24 @@
- +
-
自定义分析
+
模型轻量化处理

- 根据项目特点自定义分析参数,手动选择需要优化的建筑构件类型和优化级别。 + 对Revit模型进行薄壳轻量化,保留主要外部轮廓,删除多余内部模型,显著减少文件体积。

- 参数调节 - 构件选择 - 精细控制 - 专业定制 + 保留轮廓 + 删除内部 + 建筑专用 + 模型减重
-
开发中
+
新功能
@@ -235,6 +236,10 @@ const openProject = () => { emit('page-change', 'connection') } +const openEnvelopeOptimization = () => { + emit('page-change', 'revit-envelope-optimization') +} + const refreshConnection = () => { ElNotification({ title: '刷新连接', diff --git a/src/components/pages/RevitEnvelopeOptimization.vue b/src/components/pages/RevitEnvelopeOptimization.vue new file mode 100644 index 0000000..e44d51a --- /dev/null +++ b/src/components/pages/RevitEnvelopeOptimization.vue @@ -0,0 +1,681 @@ + + + + + diff --git a/src/config/cad.js b/src/config/cad.js index 44826ff..c91a2ad 100644 --- a/src/config/cad.js +++ b/src/config/cad.js @@ -111,7 +111,9 @@ const CAD_SOFTWARE_DEFINITIONS = { connect: '/api/health', overview: '/api/overview', shellAnalysis: '/api/shell/analyze', - exportIfc: '/api/export/ifc' + exportIfc: '/api/export/ifc', + shellExecute: '/api/shell/execute', + taskStatus: '/api/task' } }, PDMS: { diff --git a/src/config/pages.js b/src/config/pages.js index 8fcbce9..dac574e 100644 --- a/src/config/pages.js +++ b/src/config/pages.js @@ -12,12 +12,14 @@ export const PAGE_TYPES = { GEOMETRY_COMPLEXITY_RESULT: 'geometry-complexity-result', GEOMETRY_OPTIMIZATION_PARAMS: 'geometry-optimization-params', GEOMETRY_OPTIMIZATION_RESULT: 'geometry-optimization-result', - FILE_MANAGEMENT: 'file-management' + FILE_MANAGEMENT: 'file-management', + REVIT_ENVELOPE_OPTIMIZATION: 'revit-envelope-optimization' } // 需要CAD连接的页面 export const CAD_REQUIRED_PAGES = [ PAGE_TYPES.MODEL_VIEWER, PAGE_TYPES.ANALYSIS_TOOLS, - PAGE_TYPES.EXPORT_TOOLS + PAGE_TYPES.EXPORT_TOOLS, + PAGE_TYPES.REVIT_ENVELOPE_OPTIMIZATION ] \ No newline at end of file diff --git a/src/services/revitApi.js b/src/services/revitApi.js index 0ba7619..6795b9e 100644 --- a/src/services/revitApi.js +++ b/src/services/revitApi.js @@ -78,6 +78,58 @@ class RevitApiService { } }) } + + /** + * 发起删除任务(保留轮廓) + * @param {string} mode - Conservative | Standard | Aggressive | EnvelopeOnly + * @param {boolean} backupOriginal - 是否备份原文件(true/false) + * @returns {Promise<{success: boolean, data?: any, error?: string}>} + */ + async executeShellOptimization(mode = 'EnvelopeOnly', backupOriginal = true) { + const url = buildApiUrl(this.softwareName, 'shellExecute') + return await apiClient.post(url, { + mode, + backupOriginal + }, { + operationContext: { + software: 'Revit', + operation: '模型轻量化处理' + } + }) + } + + /** + * 轮询任务状态 + * @param {string} taskId - 任务ID + * @returns {Promise<{success: boolean, data?: any, error?: string}>} + */ + async getTaskStatus(taskId) { + const baseUrl = buildApiUrl(this.softwareName, 'taskStatus') + const url = `${baseUrl}/${taskId}` + return await apiClient.get(url, { + operationContext: { + software: 'Revit', + operation: '获取当前任务状态', + silent: true + } + }) + } + + /** + * 取消任务 + * @param {string} taskId - 任务ID + * @returns {Promise<{success: boolean, data?: any, error?: string}>} + */ + async cancelTask(taskId) { + const baseUrl = buildApiUrl(this.softwareName, 'taskStatus') + const url = `${baseUrl}/${taskId}` + return await apiClient.delete(url, null, { + operationContext: { + software: 'Revit', + operation: '取消轻量化任务' + } + }) + } } // 导出单例实例 diff --git a/src/views/DashboardView.vue b/src/views/DashboardView.vue index 2dfa8cf..0a025e9 100644 --- a/src/views/DashboardView.vue +++ b/src/views/DashboardView.vue @@ -65,6 +65,7 @@ import HierarchyDeletionParamsPage from '@/components/pages/HierarchyDeletionPar import GeometryComplexityResult from '@/components/pages/GeometryComplexityResult.vue' import GeometryOptimizationParams from '@/components/pages/GeometryOptimizationParams.vue' import GeometryOptimizationResult from '@/components/pages/GeometryOptimizationResult.vue' +import RevitEnvelopeOptimization from '@/components/pages/RevitEnvelopeOptimization.vue' import FileManagementPage from '@/components/pages/FileManagementPage.vue' import InfoManagementPanel from '@/components/layout/InfoManagementPanel.vue' import { PAGE_TYPES } from '@/config/pages' @@ -110,7 +111,8 @@ const pageComponentMap = { [PAGE_TYPES.GEOMETRY_COMPLEXITY_RESULT]: GeometryComplexityResult, [PAGE_TYPES.GEOMETRY_OPTIMIZATION_PARAMS]: GeometryOptimizationParams, [PAGE_TYPES.GEOMETRY_OPTIMIZATION_RESULT]: GeometryOptimizationResult, - [PAGE_TYPES.FILE_MANAGEMENT]: FileManagementPage + [PAGE_TYPES.FILE_MANAGEMENT]: FileManagementPage, + [PAGE_TYPES.REVIT_ENVELOPE_OPTIMIZATION]: RevitEnvelopeOptimization } // 当前组件computed