bfg-common 1.5.727 → 1.5.729
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CODE_STYLE.md +109 -109
- package/assets/img/icons/icons-sprite-dark-3.svg +227 -227
- package/assets/img/icons/icons-sprite-dark-5.svg +488 -488
- package/assets/img/icons/icons-sprite-light-3.svg +227 -227
- package/assets/img/icons/icons-sprite-light-5.svg +488 -488
- package/assets/localization/local_be.json +2 -0
- package/assets/localization/local_en.json +2 -0
- package/assets/localization/local_hy.json +2 -0
- package/assets/localization/local_kk.json +2 -0
- package/assets/localization/local_ru.json +2 -0
- package/assets/localization/local_zh.json +2 -0
- package/components/atoms/TheIcon3.vue +50 -50
- package/components/atoms/collapse/CollapseNav.vue +170 -170
- package/components/atoms/perPage/PerPage.vue +58 -58
- package/components/atoms/table/dataGrid/DataGrid.vue +1718 -1718
- package/components/atoms/table/dataGrid/DataGridPagination.vue +97 -97
- package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
- package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
- package/components/common/backup/storage/actions/add/lib/utils.ts +51 -51
- package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
- package/components/common/diagramMain/modals/lib/config/vCenterModal.ts +48 -48
- package/components/common/diagramMain/port/Port.vue +580 -580
- package/components/common/layout/console/Console.vue +70 -70
- package/components/common/layout/theHeader/New.vue +301 -301
- package/components/common/layout/theHeader/Old.vue +252 -252
- package/components/common/layout/theHeader/TheHeader.vue +152 -152
- package/components/common/layout/theHeader/userMenu/UserMenu.vue +104 -104
- package/components/common/layout/theHeader/userMenu/modals/preferences/lib/models/types.ts +7 -7
- package/components/common/pages/backups/DetailView.vue +52 -52
- package/components/common/pages/backups/lib/models/interfaces.ts +36 -36
- package/components/common/pages/backups/modals/Modals.vue +243 -243
- package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/lib/config/options.ts +6 -6
- package/components/common/pages/backups/modals/createBackup/lib/config/readyToCompleteOptions.ts +69 -69
- package/components/common/pages/backups/modals/lib/config/restore.ts +115 -115
- package/components/common/pages/backups/modals/lib/models/interfaces.ts +186 -186
- package/components/common/pages/backups/modals/restore/Restore.vue +289 -303
- package/components/common/pages/backups/modals/restore/lib/config/readyToCompleteOptions.ts +85 -84
- package/components/common/pages/backups/modals/restore/lib/config/restoreCodes.ts +2 -1
- package/components/common/pages/backups/modals/restore/lib/config/steps.ts +121 -113
- package/components/common/pages/backups/modals/restore/name/lib/models/interfaces.ts +6 -6
- package/components/common/pages/backups/modals/restore/types/{TypesNew.vue → New.vue} +95 -95
- package/components/common/pages/backups/modals/restore/types/{TypesOld.vue → Old.vue} +62 -61
- package/components/common/pages/backups/modals/restore/types/Types.vue +31 -19
- package/components/common/pages/backups/modals/restore/types/lib/config/descriptions.ts +1 -0
- package/components/common/pages/backups/modals/restore/types/lib/config/typeOptions.ts +5 -0
- package/components/common/pages/home/lib/models/interfaces.ts +48 -48
- package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
- package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
- package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
- package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
- package/components/common/pages/scheduledTasks/lib/utils/utils.ts +84 -84
- package/components/common/pages/tasks/Tasks.vue +125 -125
- package/components/common/pages/tasks/table/Table.vue +373 -373
- package/components/common/pages/tasks/table/lib/config/config.ts +279 -279
- package/components/common/pages/tasks/table/lib/models/interfaces.ts +9 -9
- package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
- package/components/common/select/radio/RadioGroup.vue +137 -137
- package/components/common/spiceConsole/Drawer.vue +420 -420
- package/components/common/spiceConsole/SpiceConsole.vue +184 -184
- package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
- package/components/common/tools/Actions.vue +207 -207
- package/components/common/treeView/TreeView.vue +52 -52
- package/components/common/vm/actions/clone/lib/config/steps.ts +295 -295
- package/components/common/vm/actions/clone/new/New.vue +438 -438
- package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
- package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/Memory.vue +283 -283
- package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +156 -156
- package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
- package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
- package/components/common/vm/actions/common/select/options/New.vue +264 -264
- package/components/common/vm/actions/common/select/options/Options.vue +58 -58
- package/components/common/vm/actions/common/select/storage/Old.vue +125 -125
- package/components/common/vm/actions/common/select/storage/new/New.vue +311 -311
- package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
- package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
- package/components/common/vm/actions/common/select/template/old/Old.vue +50 -50
- package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
- package/components/common/wizards/common/compatibility/Compatibility.vue +35 -35
- package/components/common/wizards/common/steps/computeResource/New.vue +93 -93
- package/components/common/wizards/common/steps/name/Name.vue +178 -178
- package/components/common/wizards/common/steps/name/New.vue +221 -221
- package/components/common/wizards/common/steps/name/Old.vue +121 -121
- package/components/common/wizards/common/steps/name/lib/models/interfaces.ts +4 -4
- package/components/common/wizards/common/steps/name/location/New.vue +40 -40
- package/components/common/wizards/datastore/add/Add.vue +228 -228
- package/components/common/wizards/datastore/add/lib/utils.ts +85 -85
- package/components/common/wizards/datastore/add/steps/typeMode/lib/config/typeOptions.ts +43 -43
- package/composables/useAppVersion.ts +21 -21
- package/composables/useBrowse.ts +24 -24
- package/composables/useLocal.ts +6 -6
- package/composables/useLocalCommon.ts +39 -39
- package/lib/models/types.ts +59 -59
- package/package.json +2 -2
- package/plugins/console.ts +21 -21
- package/plugins/mouse.ts +21 -21
- package/plugins/panelStates.ts +70 -70
- package/plugins/text.ts +59 -59
- package/public/spice-console/application/clientgui.js +854 -854
- package/public/spice-console/application/packetfactory.js +211 -211
- package/public/spice-console/application/virtualmouse.js +147 -147
- package/public/spice-console/lib/images/bitmap.js +203 -203
- package/public/spice-console/network/spicechannel.js +440 -440
- package/public/spice-console/process/cursorprocess.js +128 -128
- package/public/spice-console/process/inputprocess.js +227 -227
- package/public/spice-console/process/mainprocess.js +212 -212
- package/public/spice-console/run.js +210 -210
- package/store/main/mutations.ts +7 -7
- package/store/main/state.ts +7 -7
- package/store/tasks/mappers/recentTasks.ts +123 -123
- package/store/tasks/mutations.ts +82 -82
- /package/components/common/pages/backups/modals/restore/{RestoreNew.vue → New.vue} +0 -0
- /package/components/common/pages/backups/modals/restore/{RestoreOld.vue → Old.vue} +0 -0
|
@@ -2258,6 +2258,7 @@
|
|
|
2258
2258
|
"backupRules": "Правілы рэзервовага капіравання",
|
|
2259
2259
|
"restoreExisting": "Аднавіць існуючы",
|
|
2260
2260
|
"restoreAsNew": "Аднавіць як новы",
|
|
2261
|
+
"restoreAsNewAndCopy": "Аднавіць як новы і скапіраваць іншыя дыскі",
|
|
2261
2262
|
"restoreDiskOnly": "Аднавіць толькі дыск",
|
|
2262
2263
|
"restoreDiskOnly2": "Аднавіць толькі дыск",
|
|
2263
2264
|
"selectDisks": "Абярыце Дыскі",
|
|
@@ -2266,6 +2267,7 @@
|
|
|
2266
2267
|
"backupBuckets": "Рэзервовыя кантэйнеры",
|
|
2267
2268
|
"restoreExistingDescription": "Аднаўленне існуючай віртуальнай машыны з загадзя створанай рэзервовай копіі. Забяспечвае магчымасць хутка вярнуць сістэму ў працоўны стан у выпадку збою ці пашкоджанні дадзеных. Працэс аднаўлення ўключае вяртанне ўсіх налад і канфігурацый віртуальнай машыны, а таксама станы сеткавых адаптараў і дыскавых прылад. УВАГА: Пры аднаўленні ажыццяўляецца перазапіс бягучай віртуальнай машыны, і ўсе незахаваныя дадзеныя будуць страчаныя.",
|
|
2268
2269
|
"restoreAsNewDescription": "Аднаўленне віртуальнай машыны з загадзя створанай рэзервовай копіі са стварэннем новай віртуальнай машыны. Гэты працэс дазваляе аднавіць сістэму ў новым асобніку, захоўваючы арыгінальную віртуальную машыну без змен. У ходзе аднаўлення ўсе наладкі, канфігурацыі, а таксама стан сеткавых адаптараў і дыскавых прылад будуць перанесены ў новую віртуальную машыну. Гэта дазваляе пазбегнуць перазапісу бягучай віртуальнай машыны і захаваць усе дадзеныя.",
|
|
2270
|
+
"restoreAsNewAndCopyDescription": "Аднаўленне віртуальнай машыны з загадзя створанай рэзервовай копіі шляхам стварэння новай віртуальнай машыны і капіявання іншых дыскаў. Гэты працэс дазваляе аднавіць сістэму ў новым асобніку з выкарыстаннем выбраных дыскаў з рэзервовай копіі. Дыскі, якія не былі выбраны для аднаўлення з рэзервовай копіі, будуць аўтаматычна скапіяваны ў новую ВМ з бягучай (актуальнай) віртуальнай машыны. Такім чынам, новая віртуальная машына будзе мець поўны набор дыскаў з двух крыніц. Усе наладкі, канфігурацыі, а таксама стан сеткавых адаптараў будуць перанесены з рэзервовай копіі, што дазваляе пазбегнуць перазапісу арыгінальнай віртуальнай машыны і захаваць усе даныя.",
|
|
2269
2271
|
"restoreDiskOnlyDescription": "Аднаўленне толькі дыска віртуальнай машыны з загадзя створанай рэзервовай копіі. Гэты працэс аднаўляе дадзеныя на абраных дыскавых прыладах, не закранаючы астатнія кампаненты віртуальнай машыны, такія як налады і канфігурацыі. Выкарыстоўваецца ў выпадках, калі неабходна вярнуць дадзеныя на дыск без змены бягучага стану віртуальнай машыны. УВАГА: Пры аднаўленні ажыццяўляецца перазапіс дадзеных на абраных дысках, і ўсе незахаваныя змены на гэтых дысках будуць страчаныя.",
|
|
2270
2272
|
"newScheduledTasks": "Новыя запланаваныя заданні",
|
|
2271
2273
|
"run": "Бегчы",
|
|
@@ -2261,6 +2261,7 @@
|
|
|
2261
2261
|
"backupRules": "Backup Rules",
|
|
2262
2262
|
"restoreExisting": "Restore Existing",
|
|
2263
2263
|
"restoreAsNew": "Restore as New",
|
|
2264
|
+
"restoreAsNewAndCopy": "Restore as new and copy other disks",
|
|
2264
2265
|
"restoreDiskOnly": "Restore Disk only",
|
|
2265
2266
|
"restoreDiskOnly2": "Restore Disk Only",
|
|
2266
2267
|
"selectDisks": "Select Disks",
|
|
@@ -2269,6 +2270,7 @@
|
|
|
2269
2270
|
"backupBuckets": "Backup Buckets",
|
|
2270
2271
|
"restoreExistingDescription": "Restoring an existing virtual machine from a previously created backup. Provides the ability to quickly return the system to working condition in the event of a failure or data corruption. The recovery process includes returning all settings and configurations of the virtual machine, as well as the state of network adapters and disk devices. WARNING: Restoring will overwrite the current virtual machine and any unsaved data will be lost.",
|
|
2271
2272
|
"restoreAsNewDescription": "Restoring a virtual machine from a previously created backup copy and creating a new virtual machine. This process allows you to restore the system to a new instance, leaving the original virtual machine unchanged. During recovery, all settings, configurations, and the state of network adapters and disk devices will be transferred to the new virtual machine. This avoids overwriting the current virtual machine and preserves all data.",
|
|
2273
|
+
"restoreAsNewAndCopyDescription": "Restoring a virtual machine from a pre-created backup by creating a new virtual machine and copying other disks. This process allows restoring the system into a new instance using selected disks from the backup. Disks not selected for restoration from the backup will be automatically copied to the new VM from the current (actual) virtual machine. Thus, the new virtual machine will have a complete set of disks from two sources. All settings, configurations, and the state of network adapters will be transferred from the backup, which avoids overwriting the original virtual machine and preserves all data.",
|
|
2272
2274
|
"restoreDiskOnlyDescription": "Recovering only the virtual machine disk from a previously created backup. This process restores data on selected disk devices without affecting other components of the virtual machine, such as settings and configurations. Used in cases where it is necessary to return data to disk without changing the current state of the virtual machine. WARNING: Restoring will overwrite data on the selected drives and any unsaved changes on those drives will be lost.",
|
|
2273
2275
|
"newScheduledTasks": "New Scheduled Tasks",
|
|
2274
2276
|
"run": "Run",
|
|
@@ -2261,6 +2261,7 @@
|
|
|
2261
2261
|
"backupRules": "Պահուստավորման կանոններ",
|
|
2262
2262
|
"restoreExisting": "Վերականգնել գոյություն ունեցողը",
|
|
2263
2263
|
"restoreAsNew": "Վերականգնել որպես նոր",
|
|
2264
|
+
"restoreAsNewAndCopy": "Վերականգնել որպես նոր և պատճենել այլ սկավառակներ",
|
|
2264
2265
|
"restoreDiskOnly": "Վերականգնել միայն սկավառակը",
|
|
2265
2266
|
"restoreDiskOnly2": "Վերականգնել միայն սկավառակը",
|
|
2266
2267
|
"selectDisks": "Ընտրեք Սկավառակներ",
|
|
@@ -2269,6 +2270,7 @@
|
|
|
2269
2270
|
"backupBuckets": "Պահուստային դույլեր",
|
|
2270
2271
|
"restoreExistingDescription": "Գոյություն ունեցող վիրտուալ մեքենայի վերականգնում նախկինում ստեղծված կրկնօրինակից: Ապահովում է համակարգը արագ աշխատանքային վիճակի վերադարձնելու հնարավորություն՝ խափանման կամ տվյալների կոռուպցիայի դեպքում: Վերականգնման գործընթացը ներառում է վիրտուալ մեքենայի բոլոր կարգավորումներն ու կոնֆիգուրացիաները, ինչպես նաև ցանցային ադապտերների և սկավառակի սարքերի վիճակը: ԶԳՈՒՇԱՑՈՒՄ. Վերականգնումը կվերագրի ընթացիկ վիրտուալ մեքենան, և բոլոր չպահված տվյալները կկորչեն:",
|
|
2271
2272
|
"restoreAsNewDescription": "Վիրտուալ մեքենայի վերականգնում նախկինում ստեղծված պահուստային պատճենից և նոր վիրտուալ մեքենայի ստեղծում: Այս գործընթացը թույլ է տալիս վերականգնել համակարգը նոր օրինակ՝ թողնելով բնօրինակ վիրտուալ մեքենան անփոփոխ: Վերականգնման ընթացքում բոլոր կարգավորումները, կոնֆիգուրացիաները և ցանցային ադապտերների և սկավառակի սարքերի վիճակը կտեղափոխվեն նոր վիրտուալ մեքենա: Սա խուսափում է ընթացիկ վիրտուալ մեքենայի վերագրումից և պահպանում է բոլոր տվյալները:",
|
|
2273
|
+
"restoreAsNewAndCopyDescription": "Վիրտուալ մեքենայի վերականգնում նախապես ստեղծված պահուստային պատճենից՝ նոր վիրտուալ մեքենա ստեղծելով և այլ սկավառակներ պատճենելով: Այս գործընթացը հնարավորություն է տալիս վերականգնել համակարգը նոր օրինակի մեջ՝ օգտագործելով պահուստային պատճենից ընտրված սկավառակները: Պահուստային պատճենից վերականգնման համար չընտրված սկավառակները ավտոմատ կերպով կպատճենվեն նոր ՎՄ-ին ընթացիկ (արդիական) վիրտուալ մեքենայից: Այսպիսով, նոր վիրտուալ մեքենան կունենա սկավառակների ամբողջական հավաքածու երկու աղբյուրներից: Բոլոր կարգավորումները, կոնֆիգուրացիաները և ցանցային ադապտերների վիճակը կփոխանցվեն պահուստային պատճենից, ինչը թույլ է տալիս խուսափել բնօրինակ վիրտուալ մեքենայի վերագրելուց և պահպանել բոլոր տվյալները:",
|
|
2272
2274
|
"restoreDiskOnlyDescription": "Նախկինում ստեղծված կրկնօրինակից միայն վիրտուալ մեքենայի սկավառակի վերականգնում: Այս գործընթացը վերականգնում է տվյալներ ընտրված սկավառակի սարքերի վրա՝ չազդելով վիրտուալ մեքենայի այլ բաղադրիչների վրա, ինչպիսիք են կարգավորումները և կոնֆիգուրացիաները: Օգտագործվում է այն դեպքերում, երբ անհրաժեշտ է տվյալները վերադարձնել սկավառակ՝ առանց վիրտուալ մեքենայի ներկայիս վիճակը փոխելու: ԶԳՈՒՇԱՑՈՒՄ. Վերականգնումը կվերագրի ընտրված սկավառակների տվյալները, և այդ կրիչներում չպահված փոփոխությունները կկորչեն:",
|
|
2273
2275
|
"newScheduledTasks": "Պլանավորված նոր առաջադրանքներ",
|
|
2274
2276
|
"run": "Վազիր",
|
|
@@ -2260,6 +2260,7 @@
|
|
|
2260
2260
|
"backupRules": "Сақтық көшірме жасау ережелері",
|
|
2261
2261
|
"restoreExisting": "Барын қалпына келтіру",
|
|
2262
2262
|
"restoreAsNew": "Жаңа ретінде қалпына келтіру",
|
|
2263
|
+
"restoreAsNewAndCopy": "Жаңа ретінде қалпына келтіріп, басқа дискілерді көшіріңіз",
|
|
2263
2264
|
"restoreDiskOnly": "Тек дискіні қалпына келтіру",
|
|
2264
2265
|
"restoreDiskOnly2": "Тек дискіні қалпына келтіру",
|
|
2265
2266
|
"selectDisks": "Дисктерді таңдаңыз",
|
|
@@ -2268,6 +2269,7 @@
|
|
|
2268
2269
|
"backupBuckets": "Сақтық көшірме шелектері",
|
|
2269
2270
|
"restoreExistingDescription": "Бұрын жасалған сақтық көшірмеден бұрыннан бар виртуалды машинаны қалпына келтіру. Ақаулық немесе деректердің бүлінуі жағдайында жүйені жұмыс жағдайына жылдам қайтару мүмкіндігін қамтамасыз етеді. Қалпына келтіру процесі виртуалды машинаның барлық параметрлері мен конфигурацияларын, сондай-ақ желілік адаптерлер мен диск құрылғыларының күйін қайтаруды қамтиды. ЕСКЕРТУ: Қалпына келтіру ағымдағы виртуалды машинаны қайта жазады және сақталмаған деректер жоғалады.",
|
|
2270
2271
|
"restoreAsNewDescription": "Бұрын жасалған сақтық көшірмеден виртуалды машинаны қалпына келтіру және жаңа виртуалды машина жасау. Бұл процесс бастапқы виртуалды машинаны өзгеріссіз қалдырып, жүйені жаңа данаға қалпына келтіруге мүмкіндік береді. Қалпына келтіру кезінде барлық параметрлер, конфигурациялар және желілік адаптерлер мен диск құрылғыларының күйі жаңа виртуалды машинаға тасымалданады. Бұл ағымдағы виртуалды машинаны қайта жазуды болдырмайды және барлық деректерді сақтайды.",
|
|
2272
|
+
"restoreAsNewAndCopyDescription": "Алдын ала жасалған сақтық көшірмеден жаңа виртуалды машинаны жасау және басқа дисктерді көшіру арқылы виртуалды машинаны қалпына келтіру. Бұл процесс жүйені сақтық көшірмеден таңдалған дисктерді пайдаланып жаңа данаға қалпына келтіруге мүмкіндік береді. Сақтық көшірмеден қалпына келтіру үшін таңдалмаған дисктер жаңа ВМ-ге ағымдағы (ағымдағы) виртуалды машинадан автоматты түрде көшіріледі. Осылайша, жаңа виртуалды машинада екі көзден дисктердің толық жиынтығы болады. Барлық параметрлер, конфигурациялар және желі адаптерлерінің күйі сақтық көшірмеден ауыстырылады, бұл түпнұсқа виртуалды машинаның қайта жазылуын болдырмайды және барлық деректерді сақтайды.",
|
|
2271
2273
|
"restoreDiskOnlyDescription": "Бұрын жасалған сақтық көшірмеден тек виртуалды машина дискісін қалпына келтіру. Бұл процесс параметрлер мен конфигурациялар сияқты виртуалды машинаның басқа құрамдастарына әсер етпестен таңдалған диск құрылғыларындағы деректерді қалпына келтіреді. Виртуалды машинаның ағымдағы күйін өзгертпей, деректерді дискіге қайтару қажет болған жағдайларда қолданылады. ЕСКЕРТУ: Қалпына келтіру таңдалған дискілердегі деректерді қайта жазады және сол дискілердегі кез келген сақталмаған өзгертулер жойылады.",
|
|
2272
2274
|
"newScheduledTasks": "Жаңа жоспарланған тапсырмалар",
|
|
2273
2275
|
"run": "Жүгіру",
|
|
@@ -2260,6 +2260,7 @@
|
|
|
2260
2260
|
"backupRules": "Правила резервного копирования",
|
|
2261
2261
|
"restoreExisting": "Восстановить существующий",
|
|
2262
2262
|
"restoreAsNew": "Восстановить как новый",
|
|
2263
|
+
"restoreAsNewAndCopy": "Восстановить как новый и скопировать другие диски",
|
|
2263
2264
|
"restoreDiskOnly": "Восстановить только диск",
|
|
2264
2265
|
"restoreDiskOnly2": "Восстановить только диск",
|
|
2265
2266
|
"selectDisks": "Выберите диски",
|
|
@@ -2268,6 +2269,7 @@
|
|
|
2268
2269
|
"backupBuckets": "Резервные ведра",
|
|
2269
2270
|
"restoreExistingDescription": "Восстановление существующей виртуальной машины из заранее созданной резервной копии. Обеспечивает возможность быстро вернуть систему в рабочее состояние в случае сбоя или повреждения данных. Процесс восстановления включает возврат всех настроек и конфигураций виртуальной машины, а также состояния сетевых адаптеров и дисковых устройств. ВНИМАНИЕ: При восстановлении осуществляется перезапись текущей виртуальной машины, и все несохраненные данные будут потеряны.",
|
|
2270
2271
|
"restoreAsNewDescription": "Восстановление виртуальной машины из заранее созданной резервной копии с созданием новой виртуальной машины. Этот процесс позволяет восстановить систему в новом экземпляре, сохраняя оригинальную виртуальную машину без изменений. В ходе восстановления все настройки, конфигурации, а также состояние сетевых адаптеров и дисковых устройств будут перенесены в новую виртуальную машину. Это позволяет избежать перезаписи текущей виртуальной машины и сохранить все данные.",
|
|
2272
|
+
"restoreAsNewAndCopyDescription": "Восстановление виртуальной машины из заранее созданной резервной копии с созданием новой виртуальной машины и копированием других дисков. Этот процесс позволяет восстановить систему в новом экземпляре, используя выбранные диски из резервной копии. Диски, не выбранные для восстановления из бэкапа, будут автоматически скопированы в новую ВМ из текущей (актуальной) виртуальной машины. Таким образом, в новой виртуальной машине будет собран полный комплект дисков из двух источников. Все настройки, конфигурации, а также состояние сетевых адаптеров будут перенесены из резервной копии, что позволяет избежать перезаписи оригинальной виртуальной машины и сохранить все данные.",
|
|
2271
2273
|
"restoreDiskOnlyDescription": "Восстановление только диска виртуальной машины из заранее созданной резервной копии. Этот процесс восстанавливает данные на выбранных дисковых устройствах, не затрагивая остальные компоненты виртуальной машины, такие как настройки и конфигурации. Используется в случаях, когда необходимо вернуть данные на диск без изменения текущего состояния виртуальной машины. ВНИМАНИЕ: При восстановлении осуществляется перезапись данных на выбранных дисках, и все несохраненные изменения на этих дисках будут потеряны.",
|
|
2272
2274
|
"newScheduledTasks": "Новые запланированные задачи",
|
|
2273
2275
|
"run": "Запуск",
|
|
@@ -2258,6 +2258,7 @@
|
|
|
2258
2258
|
"backupRules": "备份规则",
|
|
2259
2259
|
"restoreExisting": "恢复现有",
|
|
2260
2260
|
"restoreAsNew": "恢复为新状态",
|
|
2261
|
+
"restoreAsNewAndCopy": "恢复为新磁盘并复制其他磁盘",
|
|
2261
2262
|
"restoreDiskOnly": "仅恢复磁盘",
|
|
2262
2263
|
"restoreDiskOnly2": "仅恢复磁盘",
|
|
2263
2264
|
"selectDisks": "选择磁盘",
|
|
@@ -2266,6 +2267,7 @@
|
|
|
2266
2267
|
"backupBuckets": "备份存储桶",
|
|
2267
2268
|
"restoreExistingDescription": "从先前创建的备份恢复现有虚拟机。能够在发生故障或数据损坏时快速将系统恢复到工作状态。恢复过程包括返回虚拟机的所有设置和配置,以及网络适配器和磁盘设备的状态。警告:恢复将覆盖当前虚拟机,所有未保存的数据都将丢失。",
|
|
2268
2269
|
"restoreAsNewDescription": "从之前创建的备份副本恢复虚拟机并创建新的虚拟机。此过程允许您将系统恢复到新实例,而保持原始虚拟机不变。在恢复期间,所有设置、配置以及网络适配器和磁盘设备的状态都将传输到新虚拟机。这可以避免覆盖当前虚拟机并保留所有数据。",
|
|
2270
|
+
"restoreAsNewAndCopyDescription": "通过创建新的虚拟机并复制其他磁盘,从预先创建的备份中恢复虚拟机。此过程允许使用从备份中选择的磁盘将系统恢复到新实例中。未选择从备份中恢复的磁盘将自动从当前(实际)虚拟机复制到新的虚拟机中。因此,新虚拟机将拥有来自两个来源的完整磁盘集。所有设置、配置以及网络适配器的状态都将从备份中传输,从而避免覆盖原始虚拟机并保留所有数据。",
|
|
2269
2271
|
"restoreDiskOnlyDescription": "仅从先前创建的备份中恢复虚拟机磁盘。此过程会恢复选定磁盘设备上的数据,而不会影响虚拟机的其他组件,例如设置和配置。用于需要将数据返回到磁盘而不更改虚拟机当前状态的情况。警告:恢复将覆盖所选驱动器上的数据,并且这些驱动器上任何未保存的更改都将丢失。",
|
|
2270
2272
|
"newScheduledTasks": "新计划任务",
|
|
2271
2273
|
"run": "跑步",
|
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<template v-if="props.name === 'zabbix'">
|
|
3
|
-
<svg
|
|
4
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
5
|
-
width="80"
|
|
6
|
-
height="22"
|
|
7
|
-
viewBox="0 0 80 22"
|
|
8
|
-
fill="none"
|
|
9
|
-
>
|
|
10
|
-
<g clip-path="url(#clip0_2691_29714)">
|
|
11
|
-
<path d="M0 0.522461H80V21.477H0V0.522461Z" fill="#D40000" />
|
|
12
|
-
<path
|
|
13
|
-
d="M3.42089 3.71582H14.9889V5.2187L5.6782 16.625H15.2164V18.2836H3.19336V16.7807L12.504 5.37438H3.42089V3.71582ZM23.0402 5.65779L20.3378 12.9087H25.7526L23.0402 5.65779ZM21.9145 3.71582H24.1738L29.7862 18.2836H27.7145L26.3753 14.5473H19.735L18.3938 18.2836H16.2922L21.9145 3.71582ZM33.9176 11.326V16.663H37.113C38.1848 16.663 38.9791 16.4434 39.496 16.0043C40.013 15.5652 40.2704 14.8926 40.2704 13.9905C40.2704 13.0804 40.013 12.4078 39.496 11.9747C38.9791 11.5436 38.1848 11.326 37.113 11.326H33.9176ZM33.9176 5.33446V9.72535H36.8675C37.8415 9.72535 38.566 9.54373 39.043 9.18447C39.52 8.82322 39.7575 8.27237 39.7575 7.5319C39.7575 6.79743 39.518 6.24657 39.043 5.88332C38.566 5.52008 37.8415 5.33646 36.8675 5.33646H33.9176V5.33446ZM31.9257 3.71582H37.0152C38.534 3.71582 39.7056 4.02717 40.5259 4.65188C41.3482 5.27658 41.7573 6.16474 41.7573 7.31635C41.7573 8.2065 41.5478 8.91703 41.1266 9.44393C40.7055 9.97084 40.0868 10.3002 39.2725 10.4299C40.2525 10.6375 41.0129 11.0706 41.5558 11.7312C42.0986 12.3918 42.3701 13.2161 42.3701 14.2041C42.3701 15.5054 41.923 16.5093 41.0289 17.2198C40.1347 17.9283 38.8614 18.2836 37.2128 18.2836H31.9257V3.71582ZM47.5573 11.326V16.663H50.7547C51.8265 16.663 52.6208 16.4434 53.1357 16.0043C53.6527 15.5652 53.9101 14.8926 53.9101 13.9905C53.9101 13.0804 53.6527 12.4078 53.1357 11.9747C52.6188 11.5436 51.8245 11.326 50.7547 11.326H47.5573ZM47.5573 5.33446V9.72535H50.5072C51.4812 9.72535 52.2057 9.54373 52.6827 9.18447C53.1597 8.82322 53.3972 8.27237 53.3972 7.5319C53.3972 6.79743 53.1597 6.24657 52.6827 5.88332C52.2057 5.52008 51.4812 5.33646 50.5072 5.33646H47.5573V5.33446ZM45.5654 3.71582H50.6549C52.1737 3.71582 53.3453 4.02717 54.1656 4.65188C54.9879 5.27658 55.399 6.16474 55.399 7.31635C55.399 8.2065 55.1895 8.91703 54.7683 9.44393C54.3472 9.97084 53.7285 10.3002 52.9142 10.4299C53.8942 10.6375 54.6546 11.0706 55.1975 11.7312C55.7403 12.3918 56.0118 13.2161 56.0118 14.2041C56.0118 15.5054 55.5647 16.5093 54.6706 17.2198C53.7764 17.9283 52.503 18.2836 50.8545 18.2836H45.5654V3.71582ZM64.9732 3.71582H67.1646L70.6274 8.94697L74.1242 3.71582H76.2418L71.6833 10.5397L76.8086 18.2836H74.6172L70.5835 12.1882L66.51 18.2836H64.3924L69.5297 10.5955L64.9732 3.71582ZM59.2031 3.71582H61.195V18.2836H59.2031V3.71582Z"
|
|
14
|
-
fill="white"
|
|
15
|
-
/>
|
|
16
|
-
</g>
|
|
17
|
-
<defs>
|
|
18
|
-
<clipPath id="clip0_2691_29714">
|
|
19
|
-
<rect
|
|
20
|
-
width="80"
|
|
21
|
-
height="20.96"
|
|
22
|
-
fill="white"
|
|
23
|
-
transform="translate(0 0.519531)"
|
|
24
|
-
/>
|
|
25
|
-
</clipPath>
|
|
26
|
-
</defs>
|
|
27
|
-
</svg>
|
|
28
|
-
</template>
|
|
29
|
-
<template v-else><span></span></template>
|
|
30
|
-
</template>
|
|
31
|
-
|
|
32
|
-
<script setup lang="ts">
|
|
33
|
-
const props = withDefaults(
|
|
34
|
-
defineProps<{
|
|
35
|
-
name: string
|
|
36
|
-
type?: string
|
|
37
|
-
color?: string
|
|
38
|
-
width?: string
|
|
39
|
-
height?: string
|
|
40
|
-
}>(),
|
|
41
|
-
{
|
|
42
|
-
type: '',
|
|
43
|
-
color: 'currentColor',
|
|
44
|
-
width: '24',
|
|
45
|
-
height: '24',
|
|
46
|
-
}
|
|
47
|
-
)
|
|
48
|
-
</script>
|
|
49
|
-
|
|
50
|
-
<style scoped lang="scss"></style>
|
|
1
|
+
<template>
|
|
2
|
+
<template v-if="props.name === 'zabbix'">
|
|
3
|
+
<svg
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width="80"
|
|
6
|
+
height="22"
|
|
7
|
+
viewBox="0 0 80 22"
|
|
8
|
+
fill="none"
|
|
9
|
+
>
|
|
10
|
+
<g clip-path="url(#clip0_2691_29714)">
|
|
11
|
+
<path d="M0 0.522461H80V21.477H0V0.522461Z" fill="#D40000" />
|
|
12
|
+
<path
|
|
13
|
+
d="M3.42089 3.71582H14.9889V5.2187L5.6782 16.625H15.2164V18.2836H3.19336V16.7807L12.504 5.37438H3.42089V3.71582ZM23.0402 5.65779L20.3378 12.9087H25.7526L23.0402 5.65779ZM21.9145 3.71582H24.1738L29.7862 18.2836H27.7145L26.3753 14.5473H19.735L18.3938 18.2836H16.2922L21.9145 3.71582ZM33.9176 11.326V16.663H37.113C38.1848 16.663 38.9791 16.4434 39.496 16.0043C40.013 15.5652 40.2704 14.8926 40.2704 13.9905C40.2704 13.0804 40.013 12.4078 39.496 11.9747C38.9791 11.5436 38.1848 11.326 37.113 11.326H33.9176ZM33.9176 5.33446V9.72535H36.8675C37.8415 9.72535 38.566 9.54373 39.043 9.18447C39.52 8.82322 39.7575 8.27237 39.7575 7.5319C39.7575 6.79743 39.518 6.24657 39.043 5.88332C38.566 5.52008 37.8415 5.33646 36.8675 5.33646H33.9176V5.33446ZM31.9257 3.71582H37.0152C38.534 3.71582 39.7056 4.02717 40.5259 4.65188C41.3482 5.27658 41.7573 6.16474 41.7573 7.31635C41.7573 8.2065 41.5478 8.91703 41.1266 9.44393C40.7055 9.97084 40.0868 10.3002 39.2725 10.4299C40.2525 10.6375 41.0129 11.0706 41.5558 11.7312C42.0986 12.3918 42.3701 13.2161 42.3701 14.2041C42.3701 15.5054 41.923 16.5093 41.0289 17.2198C40.1347 17.9283 38.8614 18.2836 37.2128 18.2836H31.9257V3.71582ZM47.5573 11.326V16.663H50.7547C51.8265 16.663 52.6208 16.4434 53.1357 16.0043C53.6527 15.5652 53.9101 14.8926 53.9101 13.9905C53.9101 13.0804 53.6527 12.4078 53.1357 11.9747C52.6188 11.5436 51.8245 11.326 50.7547 11.326H47.5573ZM47.5573 5.33446V9.72535H50.5072C51.4812 9.72535 52.2057 9.54373 52.6827 9.18447C53.1597 8.82322 53.3972 8.27237 53.3972 7.5319C53.3972 6.79743 53.1597 6.24657 52.6827 5.88332C52.2057 5.52008 51.4812 5.33646 50.5072 5.33646H47.5573V5.33446ZM45.5654 3.71582H50.6549C52.1737 3.71582 53.3453 4.02717 54.1656 4.65188C54.9879 5.27658 55.399 6.16474 55.399 7.31635C55.399 8.2065 55.1895 8.91703 54.7683 9.44393C54.3472 9.97084 53.7285 10.3002 52.9142 10.4299C53.8942 10.6375 54.6546 11.0706 55.1975 11.7312C55.7403 12.3918 56.0118 13.2161 56.0118 14.2041C56.0118 15.5054 55.5647 16.5093 54.6706 17.2198C53.7764 17.9283 52.503 18.2836 50.8545 18.2836H45.5654V3.71582ZM64.9732 3.71582H67.1646L70.6274 8.94697L74.1242 3.71582H76.2418L71.6833 10.5397L76.8086 18.2836H74.6172L70.5835 12.1882L66.51 18.2836H64.3924L69.5297 10.5955L64.9732 3.71582ZM59.2031 3.71582H61.195V18.2836H59.2031V3.71582Z"
|
|
14
|
+
fill="white"
|
|
15
|
+
/>
|
|
16
|
+
</g>
|
|
17
|
+
<defs>
|
|
18
|
+
<clipPath id="clip0_2691_29714">
|
|
19
|
+
<rect
|
|
20
|
+
width="80"
|
|
21
|
+
height="20.96"
|
|
22
|
+
fill="white"
|
|
23
|
+
transform="translate(0 0.519531)"
|
|
24
|
+
/>
|
|
25
|
+
</clipPath>
|
|
26
|
+
</defs>
|
|
27
|
+
</svg>
|
|
28
|
+
</template>
|
|
29
|
+
<template v-else><span></span></template>
|
|
30
|
+
</template>
|
|
31
|
+
|
|
32
|
+
<script setup lang="ts">
|
|
33
|
+
const props = withDefaults(
|
|
34
|
+
defineProps<{
|
|
35
|
+
name: string
|
|
36
|
+
type?: string
|
|
37
|
+
color?: string
|
|
38
|
+
width?: string
|
|
39
|
+
height?: string
|
|
40
|
+
}>(),
|
|
41
|
+
{
|
|
42
|
+
type: '',
|
|
43
|
+
color: 'currentColor',
|
|
44
|
+
width: '24',
|
|
45
|
+
height: '24',
|
|
46
|
+
}
|
|
47
|
+
)
|
|
48
|
+
</script>
|
|
49
|
+
|
|
50
|
+
<style scoped lang="scss"></style>
|
|
@@ -1,170 +1,170 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="tabs-overflow bottom-right">
|
|
3
|
-
<button
|
|
4
|
-
:id="collapsedBtnId"
|
|
5
|
-
:class="[
|
|
6
|
-
'btn btn-link nav-link dropdown-toggle',
|
|
7
|
-
{ active: collapsedBtnActive },
|
|
8
|
-
]"
|
|
9
|
-
:data-id="`${props.testId}-toggle-button`"
|
|
10
|
-
@mouseenter="hover = true"
|
|
11
|
-
@mouseleave="hover = false"
|
|
12
|
-
@mousedown="showMenu"
|
|
13
|
-
>
|
|
14
|
-
<atoms-the-icon
|
|
15
|
-
:class="['collapse-icon', { active: open }]"
|
|
16
|
-
name="ellipsis-horizontal"
|
|
17
|
-
width="16px"
|
|
18
|
-
height="16px"
|
|
19
|
-
/>
|
|
20
|
-
</button>
|
|
21
|
-
|
|
22
|
-
<Teleport to="body">
|
|
23
|
-
<ul
|
|
24
|
-
v-show="open"
|
|
25
|
-
:class="['navbar-dropdown-menu', props.popupClass]"
|
|
26
|
-
:style="dropdownMenuStyles"
|
|
27
|
-
>
|
|
28
|
-
<li
|
|
29
|
-
v-for="(item, key) in props.items"
|
|
30
|
-
:key="key"
|
|
31
|
-
v-permission="item.permission"
|
|
32
|
-
:title="item.title"
|
|
33
|
-
class="navbar-dropdown-menu-item"
|
|
34
|
-
@mousedown.stop
|
|
35
|
-
>
|
|
36
|
-
<div
|
|
37
|
-
v-if="item.separate"
|
|
38
|
-
class="navbar-dropdown-menu-separator"
|
|
39
|
-
></div>
|
|
40
|
-
<atoms-collapse-nav-item
|
|
41
|
-
v-else
|
|
42
|
-
:is-link="props.isLink"
|
|
43
|
-
:item="item"
|
|
44
|
-
:value="value"
|
|
45
|
-
btn-class="btn"
|
|
46
|
-
@change="change"
|
|
47
|
-
@select-file="onSelectFile($event, key)"
|
|
48
|
-
/>
|
|
49
|
-
</li>
|
|
50
|
-
</ul>
|
|
51
|
-
</Teleport>
|
|
52
|
-
</div>
|
|
53
|
-
</template>
|
|
54
|
-
|
|
55
|
-
<script setup lang="ts">
|
|
56
|
-
import type { UI_I_CollapseNavItem } from '~/components/atoms/collapse/lib/models/interfaces'
|
|
57
|
-
|
|
58
|
-
const props = withDefaults(
|
|
59
|
-
defineProps<{
|
|
60
|
-
items: UI_I_CollapseNavItem[]
|
|
61
|
-
isLink?: boolean
|
|
62
|
-
value?: number | string
|
|
63
|
-
popupClass?: string
|
|
64
|
-
closeAfterClick?: boolean
|
|
65
|
-
testId?: string
|
|
66
|
-
}>(),
|
|
67
|
-
{
|
|
68
|
-
isLink: undefined,
|
|
69
|
-
value: undefined,
|
|
70
|
-
popupClass: undefined,
|
|
71
|
-
closeAfterClick: undefined,
|
|
72
|
-
testId: '',
|
|
73
|
-
}
|
|
74
|
-
)
|
|
75
|
-
const emits = defineEmits<{
|
|
76
|
-
(event: 'change', value: number): void
|
|
77
|
-
(event: 'select-file', value1: Event, value2: string, value3: number): void
|
|
78
|
-
}>()
|
|
79
|
-
|
|
80
|
-
const change = (value: number): void => {
|
|
81
|
-
emits('change', value)
|
|
82
|
-
props.closeAfterClick && (open.value = false)
|
|
83
|
-
}
|
|
84
|
-
const onSelectFile = (event: Event, type: string, key: number): void => {
|
|
85
|
-
emits('select-file', event, type, key)
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
const collapsedBtnId = ref<string>('')
|
|
89
|
-
|
|
90
|
-
const route = useRoute()
|
|
91
|
-
const collapsedBtnActive = computed<boolean>(() => {
|
|
92
|
-
if (props.isLink)
|
|
93
|
-
return props.items.some((item) => route.path.includes(item.path || ''))
|
|
94
|
-
|
|
95
|
-
return props.items.some((item) => item.value === props.value)
|
|
96
|
-
})
|
|
97
|
-
|
|
98
|
-
const open = ref<boolean>(false)
|
|
99
|
-
const hover = ref<boolean>(false)
|
|
100
|
-
const dropdownMenuStyles = ref<any>({})
|
|
101
|
-
const showMenu = (): void => {
|
|
102
|
-
if (open.value) {
|
|
103
|
-
hideMenu(true)
|
|
104
|
-
return
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
open.value = true
|
|
108
|
-
|
|
109
|
-
const btn = document.querySelector(`#${collapsedBtnId.value}`)
|
|
110
|
-
const { top, height, right } = btn!.getBoundingClientRect()
|
|
111
|
-
dropdownMenuStyles.value = {
|
|
112
|
-
top: `${top + height}px`,
|
|
113
|
-
left: `${right}px`,
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
const hideMenu = (force?: boolean): void => {
|
|
117
|
-
if (hover.value && !force) return
|
|
118
|
-
|
|
119
|
-
open.value = false
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
const windowClick = (): void => {
|
|
123
|
-
hideMenu()
|
|
124
|
-
}
|
|
125
|
-
const windowResize = (): void => {
|
|
126
|
-
hideMenu(true)
|
|
127
|
-
}
|
|
128
|
-
onMounted(() => {
|
|
129
|
-
collapsedBtnId.value = `collapsed-btn${useUniqueId()}`
|
|
130
|
-
window.addEventListener('mousedown', windowClick)
|
|
131
|
-
window.addEventListener('resize', windowResize)
|
|
132
|
-
})
|
|
133
|
-
onUnmounted(() => {
|
|
134
|
-
window.removeEventListener('mousedown', windowClick)
|
|
135
|
-
window.removeEventListener('resize', windowResize)
|
|
136
|
-
})
|
|
137
|
-
</script>
|
|
138
|
-
|
|
139
|
-
<style scoped lang="scss">
|
|
140
|
-
.tabs-overflow {
|
|
141
|
-
position: absolute;
|
|
142
|
-
top: 0;
|
|
143
|
-
right: 24px;
|
|
144
|
-
|
|
145
|
-
.dropdown-toggle {
|
|
146
|
-
.collapse-icon {
|
|
147
|
-
fill: var(--main-color-mode);
|
|
148
|
-
|
|
149
|
-
&.active {
|
|
150
|
-
fill: #0077b8;
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
.navbar-dropdown-menu {
|
|
157
|
-
position: fixed;
|
|
158
|
-
z-index: var(--z-dropdown);
|
|
159
|
-
transform: translateX(-100%);
|
|
160
|
-
border: 1px solid var(--global-border-color);
|
|
161
|
-
border-radius: 3px;
|
|
162
|
-
margin-top: 2px;
|
|
163
|
-
background-color: var(--global-bg-color);
|
|
164
|
-
padding: 12px 0;
|
|
165
|
-
}
|
|
166
|
-
.navbar-dropdown-menu-separator {
|
|
167
|
-
margin: 6px 0;
|
|
168
|
-
border-bottom: 0.8px solid #e8e8e8;
|
|
169
|
-
}
|
|
170
|
-
</style>
|
|
1
|
+
<template>
|
|
2
|
+
<div class="tabs-overflow bottom-right">
|
|
3
|
+
<button
|
|
4
|
+
:id="collapsedBtnId"
|
|
5
|
+
:class="[
|
|
6
|
+
'btn btn-link nav-link dropdown-toggle',
|
|
7
|
+
{ active: collapsedBtnActive },
|
|
8
|
+
]"
|
|
9
|
+
:data-id="`${props.testId}-toggle-button`"
|
|
10
|
+
@mouseenter="hover = true"
|
|
11
|
+
@mouseleave="hover = false"
|
|
12
|
+
@mousedown="showMenu"
|
|
13
|
+
>
|
|
14
|
+
<atoms-the-icon
|
|
15
|
+
:class="['collapse-icon', { active: open }]"
|
|
16
|
+
name="ellipsis-horizontal"
|
|
17
|
+
width="16px"
|
|
18
|
+
height="16px"
|
|
19
|
+
/>
|
|
20
|
+
</button>
|
|
21
|
+
|
|
22
|
+
<Teleport to="body">
|
|
23
|
+
<ul
|
|
24
|
+
v-show="open"
|
|
25
|
+
:class="['navbar-dropdown-menu', props.popupClass]"
|
|
26
|
+
:style="dropdownMenuStyles"
|
|
27
|
+
>
|
|
28
|
+
<li
|
|
29
|
+
v-for="(item, key) in props.items"
|
|
30
|
+
:key="key"
|
|
31
|
+
v-permission="item.permission"
|
|
32
|
+
:title="item.title"
|
|
33
|
+
class="navbar-dropdown-menu-item"
|
|
34
|
+
@mousedown.stop
|
|
35
|
+
>
|
|
36
|
+
<div
|
|
37
|
+
v-if="item.separate"
|
|
38
|
+
class="navbar-dropdown-menu-separator"
|
|
39
|
+
></div>
|
|
40
|
+
<atoms-collapse-nav-item
|
|
41
|
+
v-else
|
|
42
|
+
:is-link="props.isLink"
|
|
43
|
+
:item="item"
|
|
44
|
+
:value="value"
|
|
45
|
+
btn-class="btn"
|
|
46
|
+
@change="change"
|
|
47
|
+
@select-file="onSelectFile($event, key)"
|
|
48
|
+
/>
|
|
49
|
+
</li>
|
|
50
|
+
</ul>
|
|
51
|
+
</Teleport>
|
|
52
|
+
</div>
|
|
53
|
+
</template>
|
|
54
|
+
|
|
55
|
+
<script setup lang="ts">
|
|
56
|
+
import type { UI_I_CollapseNavItem } from '~/components/atoms/collapse/lib/models/interfaces'
|
|
57
|
+
|
|
58
|
+
const props = withDefaults(
|
|
59
|
+
defineProps<{
|
|
60
|
+
items: UI_I_CollapseNavItem[]
|
|
61
|
+
isLink?: boolean
|
|
62
|
+
value?: number | string
|
|
63
|
+
popupClass?: string
|
|
64
|
+
closeAfterClick?: boolean
|
|
65
|
+
testId?: string
|
|
66
|
+
}>(),
|
|
67
|
+
{
|
|
68
|
+
isLink: undefined,
|
|
69
|
+
value: undefined,
|
|
70
|
+
popupClass: undefined,
|
|
71
|
+
closeAfterClick: undefined,
|
|
72
|
+
testId: '',
|
|
73
|
+
}
|
|
74
|
+
)
|
|
75
|
+
const emits = defineEmits<{
|
|
76
|
+
(event: 'change', value: number): void
|
|
77
|
+
(event: 'select-file', value1: Event, value2: string, value3: number): void
|
|
78
|
+
}>()
|
|
79
|
+
|
|
80
|
+
const change = (value: number): void => {
|
|
81
|
+
emits('change', value)
|
|
82
|
+
props.closeAfterClick && (open.value = false)
|
|
83
|
+
}
|
|
84
|
+
const onSelectFile = (event: Event, type: string, key: number): void => {
|
|
85
|
+
emits('select-file', event, type, key)
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const collapsedBtnId = ref<string>('')
|
|
89
|
+
|
|
90
|
+
const route = useRoute()
|
|
91
|
+
const collapsedBtnActive = computed<boolean>(() => {
|
|
92
|
+
if (props.isLink)
|
|
93
|
+
return props.items.some((item) => route.path.includes(item.path || ''))
|
|
94
|
+
|
|
95
|
+
return props.items.some((item) => item.value === props.value)
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
const open = ref<boolean>(false)
|
|
99
|
+
const hover = ref<boolean>(false)
|
|
100
|
+
const dropdownMenuStyles = ref<any>({})
|
|
101
|
+
const showMenu = (): void => {
|
|
102
|
+
if (open.value) {
|
|
103
|
+
hideMenu(true)
|
|
104
|
+
return
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
open.value = true
|
|
108
|
+
|
|
109
|
+
const btn = document.querySelector(`#${collapsedBtnId.value}`)
|
|
110
|
+
const { top, height, right } = btn!.getBoundingClientRect()
|
|
111
|
+
dropdownMenuStyles.value = {
|
|
112
|
+
top: `${top + height}px`,
|
|
113
|
+
left: `${right}px`,
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
const hideMenu = (force?: boolean): void => {
|
|
117
|
+
if (hover.value && !force) return
|
|
118
|
+
|
|
119
|
+
open.value = false
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const windowClick = (): void => {
|
|
123
|
+
hideMenu()
|
|
124
|
+
}
|
|
125
|
+
const windowResize = (): void => {
|
|
126
|
+
hideMenu(true)
|
|
127
|
+
}
|
|
128
|
+
onMounted(() => {
|
|
129
|
+
collapsedBtnId.value = `collapsed-btn${useUniqueId()}`
|
|
130
|
+
window.addEventListener('mousedown', windowClick)
|
|
131
|
+
window.addEventListener('resize', windowResize)
|
|
132
|
+
})
|
|
133
|
+
onUnmounted(() => {
|
|
134
|
+
window.removeEventListener('mousedown', windowClick)
|
|
135
|
+
window.removeEventListener('resize', windowResize)
|
|
136
|
+
})
|
|
137
|
+
</script>
|
|
138
|
+
|
|
139
|
+
<style scoped lang="scss">
|
|
140
|
+
.tabs-overflow {
|
|
141
|
+
position: absolute;
|
|
142
|
+
top: 0;
|
|
143
|
+
right: 24px;
|
|
144
|
+
|
|
145
|
+
.dropdown-toggle {
|
|
146
|
+
.collapse-icon {
|
|
147
|
+
fill: var(--main-color-mode);
|
|
148
|
+
|
|
149
|
+
&.active {
|
|
150
|
+
fill: #0077b8;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.navbar-dropdown-menu {
|
|
157
|
+
position: fixed;
|
|
158
|
+
z-index: var(--z-dropdown);
|
|
159
|
+
transform: translateX(-100%);
|
|
160
|
+
border: 1px solid var(--global-border-color);
|
|
161
|
+
border-radius: 3px;
|
|
162
|
+
margin-top: 2px;
|
|
163
|
+
background-color: var(--global-bg-color);
|
|
164
|
+
padding: 12px 0;
|
|
165
|
+
}
|
|
166
|
+
.navbar-dropdown-menu-separator {
|
|
167
|
+
margin: 6px 0;
|
|
168
|
+
border-bottom: 0.8px solid #e8e8e8;
|
|
169
|
+
}
|
|
170
|
+
</style>
|