This commit is contained in:
2026-04-19 23:41:35 +08:00
parent 7660cda647
commit ef257e7120
31 changed files with 6317 additions and 1332 deletions
+1 -1
View File
@@ -62,7 +62,7 @@
})();
</script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/air-datepicker@3.5.3/air-datepicker.css">
<link rel="stylesheet" href="/static/style.css?v=20260317-01">
<link rel="stylesheet" href="/static/style.css?v=20260419-01">
</head>
<body>
<div id="app">
+28 -1
View File
@@ -2466,8 +2466,35 @@ select.form-input {
.result-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--space-3);
margin-bottom: var(--space-4);
flex-wrap: wrap;
}
.export-buttons {
display: flex;
gap: var(--space-2);
margin-left: auto;
flex-wrap: wrap;
}
.export-buttons .btn-sm {
font-size: 0.75rem;
padding: 0.25rem 0.6rem;
white-space: nowrap;
}
.btn-secondary {
background: var(--bg-secondary, #6b7280);
color: white;
border: none;
border-radius: var(--radius-md, 6px);
cursor: pointer;
transition: background 0.2s;
}
.btn-secondary:hover {
background: var(--bg-tertiary, #4b5563);
}
.result-title {
+47 -1
View File
@@ -1260,8 +1260,40 @@ const ResultView = {
const isFoamMaterial = (material) => {
return material === 'aluminum_foam';
};
const exportCAD = async (format) => {
try {
const taskId = route.params.taskId;
const result = await apiRequest('/api/export-mold', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
task_id: taskId,
formats: [format],
components: ['cavity', 'core', 'parting_surface']
})
});
if (result.status === 'success' && result.data.files) {
for (const file of result.data.files) {
const downloadUrl = `/api/export-download/${file.filepath.replace(/\\/g, '/').split('/').slice(-2).join('/')}`;
const link = document.createElement('a');
link.href = downloadUrl;
link.download = file.filename;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
addNotification(`已导出 ${result.data.files.length} 个 ${format.toUpperCase()} 文件`, 'success');
} else if (result.data.errors && result.data.errors.length > 0) {
addNotification(`导出失败: ${result.data.errors[0]}`, 'error');
}
} catch (e) {
addNotification(`导出失败: ${e.message}`, 'error');
}
};
return { state, formatFileSize, formatDateTime, formatNumber, getPriorityText, isFoamMaterial };
return { state, formatFileSize, formatDateTime, formatNumber, getPriorityText, isFoamMaterial, exportCAD };
},
template: `
<div class="page-container">
@@ -1284,6 +1316,20 @@ const ResultView = {
<span :class="['badge', state.task.status === 'completed' ? 'badge-success' : 'badge-error']">
{{ state.task.status }}
</span>
<div v-if="state.task.status === 'completed'" class="export-buttons">
<button class="btn-sm btn-primary" @click="exportCAD('step')" title="导出STEP格式(UG/FreeCAD/SolidWorks通用)">
导出 STEP
</button>
<button class="btn-sm btn-secondary" @click="exportCAD('stl')" title="导出STL网格格式(3D打印预览)">
导出 STL
</button>
<button class="btn-sm btn-secondary" @click="exportCAD('iges')" title="导出IGES格式(兼容旧系统)">
导出 IGES
</button>
<button class="btn-sm btn-secondary" @click="exportCAD('brep')" title="导出BRep格式(FreeCAD原生)">
导出 BRep
</button>
</div>
</div>
<div class="result-grid">