From ade67c02211d0f4f04e7a9e1132d81de9735cc87 Mon Sep 17 00:00:00 2001 From: AlexIves16 Date: Fri, 24 Apr 2026 01:30:17 +0500 Subject: [PATCH] feat: add canvas import from .canvas file --- app/pages/canvases.vue | 42 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/app/pages/canvases.vue b/app/pages/canvases.vue index 2646ed4..478929d 100644 --- a/app/pages/canvases.vue +++ b/app/pages/canvases.vue @@ -3,9 +3,15 @@

Мои Карты

- +
+ + + +
@@ -121,6 +127,7 @@ const authFetch = (url, opts = {}) => $fetch(url, { const canvases = ref([]) const userGroups = ref([]) const showCreateModal = ref(false) +const importInput = ref(null) const activeTab = ref('personal') const newCanvas = reactive({ @@ -203,6 +210,35 @@ const duplicateCanvas = async (id) => { } } +const triggerImport = () => { + importInput.value?.click() +} + +const handleImport = async (event) => { + const file = event.target.files?.[0] + if (!file) return + + try { + const text = await file.text() + const data = JSON.parse(text) + const name = file.name.replace(/\.canvas$|\.json$/, '') + const payload = { + name, + nodes: data.nodes || [], + edges: data.edges || [], + isPublic: false + } + const result = await authFetch('/api/canvas', { method: 'POST', body: payload }) + await loadData() + navigateTo(`/canvas/${result.canvas.id}`) + } catch (error) { + console.error('Failed to import canvas:', error) + alert('Ошибка импорта: проверьте формат файла') + } finally { + event.target.value = '' + } +} + const exportCanvas = async (id) => { try { const canvas = await authFetch(`/api/canvas/${id}`)