diff --git a/frontend/src/pages/CanvasStudio.tsx b/frontend/src/pages/CanvasStudio.tsx
index 25616c2..fb347ac 100644
--- a/frontend/src/pages/CanvasStudio.tsx
+++ b/frontend/src/pages/CanvasStudio.tsx
@@ -471,6 +471,16 @@ export default function CanvasStudio({
);
}, [normalizedDocument, stickerById]);
+ const exportAi = useCallback(async (addRegistrationMarks: boolean) => {
+ const svg = await serializeDocument(normalizedDocument, stickerById, { addRegistrationMarks });
+ const response = await ensureOk(await fetch(apiUrl('/api/exports/ai'), {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({ svg, filename: 'canvas-design.ai' }),
+ }), '导出 AI 失败');
+ downloadBlob(await response.blob(), 'canvas-design.ai');
+ }, [normalizedDocument, stickerById]);
+
const exportLayerZip = async (layerIds: string[], folderIds: string[], addRegistrationMarks: boolean) => {
const blob = await createLayerExportZip(normalizedDocument, stickerById, layerIds, folderIds, { addRegistrationMarks });
downloadBlob(blob, 'canvas-layers.zip');
@@ -892,6 +902,7 @@ export default function CanvasStudio({
stickerById={stickerById}
onUpdateDocument={updateDocument}
onExportSvg={exportSvg}
+ onExportAi={exportAi}
onExportLayerZip={exportLayerZip}
onReset={resetDesign}
/>
@@ -1414,6 +1425,7 @@ function CanvasExportPanel({
stickerById,
onUpdateDocument,
onExportSvg,
+ onExportAi,
onExportLayerZip,
onReset,
}: {
@@ -1421,6 +1433,7 @@ function CanvasExportPanel({
stickerById: Map
;
onUpdateDocument: (partial: Partial) => void;
onExportSvg: (addRegistrationMarks: boolean) => void;
+ onExportAi: (addRegistrationMarks: boolean) => Promise;
onExportLayerZip: (layerIds: string[], folderIds: string[], addRegistrationMarks: boolean) => void;
onReset: () => void;
}) {
@@ -1431,6 +1444,7 @@ function CanvasExportPanel({
const [templateDescription, setTemplateDescription] = useState('');
const [referenceFiles, setReferenceFiles] = useState([]);
const [addRegistrationMarks, setAddRegistrationMarks] = useState(false);
+ const [exportingAi, setExportingAi] = useState(false);
const [exportingPackage, setExportingPackage] = useState(false);
const layers = documentModel.layers || [];
const folders = documentModel.layerFolders || [];
@@ -1556,6 +1570,24 @@ function CanvasExportPanel({
在导出的总图和每个分层文件左上角、右下角添加对齐点