diff --git a/src/components/HeaderMenu.vue b/src/components/HeaderMenu.vue index 8e36223..f1cd9fe 100644 --- a/src/components/HeaderMenu.vue +++ b/src/components/HeaderMenu.vue @@ -28,6 +28,7 @@ import { Key24Regular } from '@vicons/fluent' import { DoorOpen } from '@vicons/fa' import { h } from 'vue' import { DoorFrontFilled } from '@vicons/material' +import { Icon } from '@vicons/utils' const authStore = useAuthStore(); authStore.initFromStorage() diff --git a/src/components/ScenariosEditorPage.vue b/src/components/ScenariosEditorPage.vue index caa6a6b..8006d1e 100644 --- a/src/components/ScenariosEditorPage.vue +++ b/src/components/ScenariosEditorPage.vue @@ -2,13 +2,13 @@ import { getAuthClient } from '@/api/auth_client'; import type { Scenario } from '@/api/generated/crabs/evening_detective_server'; import HeaderMenu from '@/components/HeaderMenu.vue' -import { NButton, useMessage, NFlex } from 'naive-ui'; +import { NButton, useMessage, NFlex, type UploadFileInfo } from 'naive-ui'; import { ref } from 'vue'; import { useRoute } from 'vue-router'; import { Icon } from '@vicons/utils' import { Settings } from '@vicons/carbon' import router from '@/router'; -import { NCard, NModal, NInput, NSpace, NText } from 'naive-ui' +import { NCard, NModal, NInput, NSpace, NText, NUpload, NUploadDragger, NP } from 'naive-ui' const client = getAuthClient(); const route = useRoute() @@ -19,6 +19,8 @@ const deletedScenarioName = ref('') const message = useMessage() +const fileList = ref([]) + const scenario = ref({ id: undefined, name: undefined, @@ -48,26 +50,61 @@ async function deleteScenario(id: number) { router.push('/scenarios') } +async function updateScenario() { + const file = fileList.value[0].file + if (!file) return + + // Читаем как ArrayBuffer + const arrayBuffer = await file.arrayBuffer() + const bytes = new Uint8Array(arrayBuffer) + + const resUploadFile = await client.UploadFile({ + filename: 'scenarios_' + scenario.value.id + '_' + file.name, + data: uint8ToBase64(bytes) + }) + if (resUploadFile.error != '') { + message.error(resUploadFile.error!) + return + } + + const res = await client.UpdateScenario({ + id: scenario.value.id, + name: scenario.value.name, + description: scenario.value.description, + image: resUploadFile.filename, + }) + if (res.error != '') { + message.error(res.error!) + return + } + await getScenario(Number(scenarioId)) + showSettingsScenarioModal.value = false +} + +function uint8ToBase64(uint8Array: Uint8Array) { + // Преобразуем Uint8Array в двоичную строку + const binaryString = String.fromCharCode(...uint8Array); + // Кодируем в Base64 + return btoa(binaryString); +} +

- Введите название сценария {{ scenario.name }} чтобы удалить + Название +

+ + +

+ Описание +

+ + +

+ Картинка +

+ + + + + Щелкните или перетащите файл в эту область для загрузки + + + + + + Сохранить изменения + + +
+ +

+ Введите название сценария {{ scenario.name }} чтобы + удалить его

diff --git a/src/components/ScenariosPage.vue b/src/components/ScenariosPage.vue index fb90c97..fbb1884 100644 --- a/src/components/ScenariosPage.vue +++ b/src/components/ScenariosPage.vue @@ -54,7 +54,8 @@ getScenarios()
-
+

{{ scenario.name }}

@@ -124,7 +125,6 @@ getScenarios() } .scenario-image { - background-image: url('https://avatars.mds.yandex.net/i?id=6afaa986a0a8ca7c47697195bc71a531_l-4510207-images-thumbs&n=13'); background-size: cover; background-position: center; }