From 8d3b8e689fb2c84c1872dcec415815f55cab50d3 Mon Sep 17 00:00:00 2001 From: Ilia Miheev Date: Sun, 29 Mar 2026 22:36:19 +0300 Subject: [PATCH 1/2] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B0=D0=BB=20=D0=BF=D0=B0=D0=BD=D0=B5=D0=BB=D1=8C=20=D1=81=20?= =?UTF-8?q?=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA=D0=B0=D0=BC=D0=B8=20#11?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/icons/trash.webp | Bin 2468 -> 0 bytes src/App.vue | 95 +++++++++++++++++++++++------- src/components/MyDropMenu.vue | 27 ++++++++- src/components/UI/svg/Back.vue | 6 ++ src/components/UI/svg/Preview.vue | 7 +++ src/components/UI/svg/Save.vue | 7 +++ src/components/UI/svg/Trash.vue | 22 +++++++ 7 files changed, 143 insertions(+), 21 deletions(-) delete mode 100644 public/icons/trash.webp create mode 100644 src/components/UI/svg/Back.vue create mode 100644 src/components/UI/svg/Preview.vue create mode 100644 src/components/UI/svg/Save.vue create mode 100644 src/components/UI/svg/Trash.vue diff --git a/public/icons/trash.webp b/public/icons/trash.webp deleted file mode 100644 index b4d66e4db7ff784713cedecb7cb83c8a7fa066b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2468 zcmYk8XE+-O7{_CT60J?`o>{38D-xT;h~lhTts~Sdj+(Xix|EQV(h@UL>#UL#Rg@AM ztExtAN*ztB?zom*uXoQq_vQb4{~z8Dzvp>By!I$Fvxgi2fU~KIt&=Ux3j1wVW%MWU zh_eNYp>7`!E;I6skXFf3X6LMfX;Ic16TaFB-C=tZSlQ9@i=P>NW&AvxAOepu(_&|P z!I2yeHN5NQy;%O%yD3;WeEf0nqNw1D&S95DU#)WRs4f$qEUK_(n8Bcz(AXMSuuzk{ z_WfX))3VE#BG~-N8b*;eStuRarik(5v;j1iHD0*li zW0#aD>Vgn~ubzlwGCh+7T?Wfi@+0QCmQzZUjT97rpm3HM%<(&{=5rg6? z%rAMNJ*#0bdS8V?{rT`6*zgJ2Nye>Y!Y^ zJ)*D}7w+0baJcyJ?ns+r)p%N?=WHl#(8&FHu&4wEA3GI8f%A8T#rcA{W;eA4$(n-B zE!TZ7V`f*Cy-Pu-g}jk3GtvTI2q2uB!2Vl1Lt>|K%dw-C)pM_b{!vyw{Mw|G%B)Y- zVeL6d&KQfp$}w^ASf!s2VQ%zu3lN!#>Ia2WX^L1TgX5>aFUn_oS(r zUJt+7#FI9wD}7xb=bVOHJOalYD_&^eA1$jEQ~f>a$m2t&xBIMUdz;0SZjVNv*rzrh z)L);jg9rQaY=nc-|hifihR2mDIFLZYEp^k7{nNAig=8K(1d{Lbj!xC(g9HjP?ANjYkQ!PPDYBSI82qk+} zcaF=dT^O!dmA)0Hkh>_Ace|~fFD0L0c*Zzpe3fcI5~cmi>o{uflKuEfax3nX%j2Qz zc_=NV_>ub7#D5v`P4&32Sf-Z`{FyGNYVMYClFS}9XoEIbHC}456VlYPEd6~nHPak5 z14V1RXBFK-s3Q*T4upNe!1;YFn^~}KO^V$j z8|n?0%t3zoOUU}!i07LphUynP5AwlVlTz2Hm4-;p58MRVDQR-BxJR6F z^&h$ljc6F_li;gt)%^_L^htGSZK5-b< zWo4|BOI@OwJCua&-ghAyNc9!D7UpgFBvQ=-N(v+J#qg5+CLht6uqWf&@$rsCLEL$# z>m`32sx@-e_{y+QdvWmXM3Mt&QDDyR-&}ZG=m8FwLd^}B5!B~N7Ie9ZXcT0q^y8Dk{S-`;O_f>=a~{H%cf`QA)K;$C5bUF!v-@T3w;0 zjpbMm6kb`~XE#agT6Myv-)I(+R~RbpWg*u&Ux;ea*$@!RJx(bB@&t&I42pq?WP4nHt)jujxo4pg4)gT`M$wnGulDrz}DEG`0$ zf66b}-DTgo1-mh*cQmY-9;7#45`Y0D&zLReKkqh7OGke3oK zk+Z=~I)S}tBOsu^DzM?|NC4VjgClBdgGW-iZr81S%1eFWM>H5`r@$F}ndX(}2vge3 zD00O2Y1qk0?ki^I!MRmQYW~-NE~6#DE_Y-{vzN#y9J@PIaqr%9Bu76%eR9Fld05{t zM9zNdJ!fl1a8wW!WVUw|vP{6Y!kg|(Euig+$Pl%6%6vIc*PfyJ82O=%q+gy_CJ@z^ z6NN|lrMo=|t;mko$TVei#63S1y=I6@5QKMM+c>q~pv5(ZFx&l-+MK|=Fz@=-{)3+! QG;YQ7BkTX(9L5sUU-J>EYybcN diff --git a/src/App.vue b/src/App.vue index 76feee5..8bbc452 100644 --- a/src/App.vue +++ b/src/App.vue @@ -6,12 +6,14 @@ import MyDialog from "@/components/MyDialog.vue"; import MyDropMenu from "@/components/MyDropMenu.vue"; import copyToclipboard from "@/shared/copyToclipboard"; import ContextMenu from "@imengyu/vue3-context-menu"; -import CustomButton from '@/components/UI/CustomButton.vue' import CodeView from "@/components/CodeView.vue"; - -import emergencyAndNavigate from './shablons/emergency_and_navigate.js' -import color from './shablons/color.js' -import qr from './shablons/qr.js' +import emergencyAndNavigate from '@/shablons/emergency_and_navigate.js' +import color from '@/shablons/color.js' +import qr from '@/shablons/qr.js' +import Preview from "@/components/UI/svg/Preview.vue"; +import Save from "@/components/UI/svg/Save.vue"; +import Trash from "@/components/UI/svg/Trash.vue"; +import Back from "@/components/UI/svg/Back.vue"; const numbers = ref([]); // Инициализируем массив с пустыми строками @@ -20,6 +22,7 @@ const listOfTrips = ref([]); const isModalVisible = ref(false); const isCodeViewVisible = ref(false); const finallyText = ref(""); +const dropMenu = ref(null) onMounted(() => { for (let i = 0; i < 100; i++) { @@ -57,7 +60,24 @@ function setNumber(item) { } } -async function saveResult() { +function openPreview() { + generateCode() + if (!listOfTrips.value.length) { + izitoast.error({ + title: 'Ошибка', + message: 'Для предпросмотра нужно создать маршрут' + }) + return + } + isCodeViewVisible.value = true; +} + +function saveResult() { + isModalVisible.value = true; + generateCode() +} + +function generateCode() { finallyText.value = ""; const mainCode = ref(""); const colorDetectClass = ref(""); @@ -67,7 +87,6 @@ async function saveResult() { const isUsedPlatform = listOfTrips.value.some(item => item.isPlatform); const isUsedQR = listOfTrips.value.some(item => item.isQR); - isModalVisible.value = true; if (!listOfTrips.value.length) { return } @@ -128,6 +147,7 @@ function cleanResult() { item.variable = []; item.BgImg = 'images/ArUco-marker.jpg' }) + listOfTrips.value = [] izitoast.info({ title: 'Поле очищено', message: 'Поле очищено. Можно строить маршрут заново', @@ -142,6 +162,9 @@ const handleKeydown = (event) => { } else if (event.ctrlKey && event.code === "KeyS") { event.preventDefault(); saveResult(); + } else if (event.ctrlKey && event.code === "KeyN") { + event.preventDefault(); + dropMenu.value.open(); } else if (event.code === "Delete") { event.preventDefault(); cleanResult(); @@ -277,7 +300,7 @@ function onContextMenu(e, item) { { label: "Удалить", onClick: () => deletePlatform(item), - icon: createIcon('icons/trash.webp'), + icon: createIcon('icons/trash.svg'), }, ] }, @@ -293,14 +316,14 @@ function onContextMenu(e, item) { { label: "Удалить", onClick: () => deleteQR(item), - icon: createIcon('icons/trash.webp') + icon: createIcon('icons/trash.svg') }, ], }, { label: "Удалить", - icon: createIcon('icons/trash.webp'), + icon: createIcon('icons/trash.svg'), onClick: () => deletePointMap(item), }, ] @@ -318,11 +341,12 @@ function onContextMenu(e, item) {
- Сохранить - Очистить - Отменить + + + +
- +