init
This commit is contained in:
+1
-1
@@ -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
@@ -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
@@ -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">
|
||||
|
||||
Reference in New Issue
Block a user