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}`)