bfg-common 1.5.595 → 1.5.597

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.
Files changed (172) hide show
  1. package/CODE_STYLE.md +109 -109
  2. package/assets/img/icons/icons-sprite-dark-3.svg +227 -227
  3. package/assets/img/icons/icons-sprite-dark-5.svg +488 -488
  4. package/assets/img/icons/icons-sprite-light-3.svg +227 -227
  5. package/assets/img/icons/icons-sprite-light-5.svg +488 -488
  6. package/assets/localization/local_be.json +4 -0
  7. package/assets/localization/local_en.json +4 -0
  8. package/assets/localization/local_hy.json +4 -0
  9. package/assets/localization/local_kk.json +4 -0
  10. package/assets/localization/local_ru.json +4 -0
  11. package/assets/localization/local_zh.json +4 -0
  12. package/components/atoms/TheIcon3.vue +50 -50
  13. package/components/atoms/collapse/CollapseNav.vue +170 -170
  14. package/components/atoms/perPage/PerPage.vue +58 -58
  15. package/components/atoms/table/dataGrid/DataGrid.vue +1718 -1718
  16. package/components/atoms/table/dataGrid/DataGridPagination.vue +97 -97
  17. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  18. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  19. package/components/common/backup/storage/actions/add/lib/utils.ts +51 -51
  20. package/components/common/browse/Browse.vue +9 -0
  21. package/components/common/browse/BrowseNew.vue +2 -1
  22. package/components/common/browse/BrowseOld.vue +2 -1
  23. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  24. package/components/common/diagramMain/modals/lib/config/portModal.ts +251 -251
  25. package/components/common/diagramMain/modals/lib/config/vCenterModal.ts +48 -48
  26. package/components/common/diagramMain/port/Port.vue +580 -580
  27. package/components/common/layout/theHeader/helpMenu/About.vue +79 -79
  28. package/components/common/layout/theHeader/helpMenu/aboutOld/AboutOld.vue +79 -79
  29. package/components/common/pages/backups/DetailView.vue +52 -52
  30. package/components/common/pages/backups/lib/models/interfaces.ts +36 -36
  31. package/components/common/pages/backups/modals/Modals.vue +243 -243
  32. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/lib/config/options.ts +6 -6
  33. package/components/common/pages/backups/modals/createBackup/lib/config/readyToCompleteOptions.ts +69 -69
  34. package/components/common/pages/backups/modals/lib/config/restore.ts +115 -115
  35. package/components/common/pages/backups/modals/lib/models/interfaces.ts +186 -186
  36. package/components/common/pages/backups/modals/restore/name/lib/models/interfaces.ts +6 -6
  37. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  38. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  39. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  40. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  41. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  42. package/components/common/pages/scheduledTasks/lib/utils/utils.ts +84 -84
  43. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  44. package/components/common/select/radio/RadioGroup.vue +137 -137
  45. package/components/common/spiceConsole/Drawer.vue +420 -420
  46. package/components/common/spiceConsole/SpiceConsole.vue +184 -184
  47. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  48. package/components/common/tools/Actions.vue +207 -207
  49. package/components/common/treeView/TreeView.vue +52 -52
  50. package/components/common/vm/actions/add/Add.vue +819 -819
  51. package/components/common/vm/actions/clone/Clone.vue +694 -694
  52. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +205 -205
  53. package/components/common/vm/actions/common/customizeHardware/New.vue +325 -325
  54. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +679 -679
  55. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/Bus.vue +101 -101
  56. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +227 -227
  57. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +29 -29
  58. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +323 -323
  59. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/coresPerSocket/CoresPerSocket.vue +81 -81
  60. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/hotPlug/HotPlug.vue +40 -40
  61. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/maxCpu/MaxCpu.vue +91 -91
  62. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/model/Model.vue +92 -92
  63. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +133 -133
  64. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  65. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/tooltip/Tooltip.vue +27 -27
  66. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +214 -214
  67. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/Memory.vue +280 -280
  68. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/New.vue +158 -158
  69. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/Old.vue +155 -155
  70. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/hotPlug/HotPlug.vue +29 -29
  71. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +483 -483
  72. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/cache/Cache.vue +59 -59
  73. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/file/File.vue +24 -24
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/limitIops/LimitIops.vue +96 -96
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/Location.vue +142 -142
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/storageModal/StorageModal.vue +55 -55
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/maximumSize/MaximumSize.vue +26 -26
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/Mode.vue +61 -61
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/provisioning/Provisioning.vue +57 -57
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/Sharing.vue +59 -59
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +257 -257
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/adapterType/AdapterType.vue +56 -56
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/Location.vue +65 -65
  84. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +111 -111
  85. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +199 -199
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIo.vue +27 -27
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +29 -29
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +23 -23
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGrid.vue +40 -40
  90. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/typeSelection/TypeSelection.vue +34 -34
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbController.vue +47 -47
  92. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +15 -15
  93. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/inputDevices/InputDevices.vue +15 -15
  94. package/components/common/vm/actions/common/customizeHardware/virtualHardware/reservation/Reservation.vue +194 -194
  95. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCard.vue +129 -129
  96. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/model/Model.vue +35 -35
  97. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplays.vue +50 -50
  98. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemory.vue +104 -104
  99. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +70 -70
  100. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptions.vue +42 -42
  101. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +32 -32
  102. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +57 -57
  103. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/Menu.vue +25 -25
  104. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +155 -155
  105. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptions.vue +82 -82
  106. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/RemoteConsoleOptions.vue +74 -74
  107. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPaste.vue +25 -25
  108. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransfer.vue +25 -25
  109. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharing.vue +17 -17
  110. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  111. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +99 -99
  112. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  113. package/components/common/vm/actions/common/customizeHardware/vmoptions/tools/Tools.vue +42 -42
  114. package/components/common/vm/actions/common/select/compatibility/Compatibility.vue +105 -105
  115. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  116. package/components/common/vm/actions/common/select/createType/CreateType.vue +36 -36
  117. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  118. package/components/common/vm/actions/common/select/options/Options.vue +53 -53
  119. package/components/common/vm/actions/common/select/os/Os.vue +152 -152
  120. package/components/common/vm/actions/common/select/storage/Old.vue +125 -125
  121. package/components/common/vm/actions/common/select/storage/Storage.vue +170 -170
  122. package/components/common/vm/actions/common/select/storage/new/New.vue +311 -311
  123. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  124. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  125. package/components/common/vm/actions/common/select/template/Template.vue +75 -75
  126. package/components/common/vm/actions/common/select/template/old/Old.vue +50 -50
  127. package/components/common/vm/actions/common/select/template/treeView/TreeView.vue +85 -85
  128. package/components/common/vm/actions/editSettings/EditSettings.vue +169 -169
  129. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  130. package/components/common/vm/actions/register/New.vue +218 -0
  131. package/components/common/vm/actions/register/Old.vue +127 -0
  132. package/components/common/vm/actions/register/Register.vue +36 -75
  133. package/components/common/vm/actions/register/lib/config/index.ts +1 -0
  134. package/components/common/vm/actions/register/lib/config/steps.ts +86 -86
  135. package/components/common/wizards/common/compatibility/Compatibility.vue +35 -35
  136. package/components/common/wizards/common/compatibility/New.vue +99 -99
  137. package/components/common/wizards/common/compatibility/Old.vue +53 -53
  138. package/components/common/wizards/common/steps/computeResource/ComputeResource.vue +86 -86
  139. package/components/common/wizards/common/steps/computeResource/New.vue +93 -93
  140. package/components/common/wizards/common/steps/name/Name.vue +178 -178
  141. package/components/common/wizards/common/steps/name/New.vue +221 -221
  142. package/components/common/wizards/common/steps/name/Old.vue +121 -121
  143. package/components/common/wizards/common/steps/name/lib/models/interfaces.ts +4 -4
  144. package/components/common/wizards/common/steps/name/location/Location.vue +85 -85
  145. package/components/common/wizards/common/steps/name/location/New.vue +40 -40
  146. package/components/common/wizards/datastore/add/Add.vue +228 -228
  147. package/components/common/wizards/datastore/add/lib/utils.ts +85 -85
  148. package/components/common/wizards/datastore/add/steps/typeMode/lib/config/typeOptions.ts +43 -43
  149. package/components/common/wizards/vm/migrate/select/computeResource/ComputeResource.vue +205 -205
  150. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  151. package/composables/useAppVersion.ts +21 -21
  152. package/composables/useLocal.ts +6 -6
  153. package/composables/useLocalCommon.ts +39 -39
  154. package/lib/models/interfaces.ts +1 -0
  155. package/package.json +2 -2
  156. package/plugins/console.ts +21 -21
  157. package/plugins/date.ts +233 -233
  158. package/plugins/mouse.ts +21 -21
  159. package/plugins/panelStates.ts +70 -70
  160. package/plugins/text.ts +59 -59
  161. package/plugins/time.ts +58 -58
  162. package/public/spice-console/application/clientgui.js +854 -854
  163. package/public/spice-console/application/packetfactory.js +211 -211
  164. package/public/spice-console/application/virtualmouse.js +147 -147
  165. package/public/spice-console/lib/images/bitmap.js +203 -203
  166. package/public/spice-console/network/spicechannel.js +440 -440
  167. package/public/spice-console/process/cursorprocess.js +121 -121
  168. package/public/spice-console/process/inputprocess.js +227 -227
  169. package/public/spice-console/process/mainprocess.js +210 -210
  170. package/public/spice-console/run.js +210 -210
  171. package/store/main/mutations.ts +7 -7
  172. package/store/main/state.ts +7 -7
@@ -1,155 +1,155 @@
1
- <template>
2
- <component
3
- :is="currentComponent"
4
- v-if="isNewView"
5
- :boot-list="bootList"
6
- :is-disabled="props.isDisabled"
7
- @change-order="onChangeOrder"
8
- @update:boot-list="onBootListUpdate"
9
- />
10
- </template>
11
-
12
- <script setup lang="ts">
13
- import type { UI_I_BootItem } from '~/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/lib/models/interfaces'
14
- import type { UI_I_DropEvent } from '~/components/atoms/list/dragDropList/lib/config/events'
15
- import type { UI_I_CreateVmData } from '~/components/common/vm/actions/common/lib/models/interfaces'
16
-
17
- const model = defineModel<UI_I_CreateVmData>({ required: true })
18
-
19
- const props = defineProps<{
20
- isDisabled: boolean
21
- }>()
22
-
23
- const { $store }: any = useNuxtApp()
24
- const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
25
- const currentComponent = computed(() =>
26
- isNewView.value
27
- ? defineAsyncComponent(() => import('./New.vue'))
28
- : defineAsyncComponent(() => import('./Old.vue'))
29
- )
30
-
31
- const bootList = ref<UI_I_BootItem[]>([])
32
-
33
- // Используем computed для автоматического обновления bootList при изменении модели
34
- const hardDisksAndNetworks = computed(() => [
35
- model.value.disk_devices?.filter((disk) => disk.device_type !== 'cdrom') ||
36
- [],
37
- model.value.disk_devices?.filter((disk) => disk.device_type === 'cdrom') ||
38
- [],
39
- model.value.network_devices || [],
40
- ])
41
-
42
- // Watcher для обновления bootList при изменении модели
43
- watch(
44
- hardDisksAndNetworks,
45
- ([hardDisks, cdDvdDrives, networks]) => {
46
- const hardDiskItems: UI_I_BootItem[] = hardDisks.map((item, index) => {
47
- const order = item.boot_order || 0
48
- return {
49
- order,
50
- isChecked: !!order,
51
- text: `disk${index}`,
52
- iconClassName: 'icon-disk',
53
- type: 'disk' as const,
54
- name: `${item.source}_${index}`,
55
- testId: `select-disk-value-${index + 1}`,
56
- }
57
- })
58
-
59
- const cdDvdDriveItems: UI_I_BootItem[] = cdDvdDrives.map((item, index) => {
60
- const order = item.boot_order || 0
61
- return {
62
- order,
63
- isChecked: !!order,
64
- text: `cdrom${index}`,
65
- iconClassName: 'icon-disk',
66
- type: 'cdDvd' as const,
67
- name: `${item.source}_${hardDisks.length + index}`,
68
- testId: `select-cd-dvd-value-${index + 1}`,
69
- }
70
- })
71
-
72
- const networkItems: UI_I_BootItem[] = networks.map((item, index) => {
73
- const order = item.boot_order || 0
74
- return {
75
- order,
76
- isChecked: !!order,
77
- text: item.mac || 'undefined',
78
- iconClassName: 'vsphere-icon-network',
79
- type: 'nic' as const,
80
- name: `${item.network}_${index}`,
81
- testId: `select-nic-value-${index + 1}`,
82
- }
83
- })
84
-
85
- bootList.value = [...hardDiskItems, ...cdDvdDriveItems, ...networkItems]
86
- .filter((item) => item.order >= 0)
87
- .sort((a, b) => a.order - b.order)
88
- },
89
- { deep: true, immediate: true }
90
- )
91
-
92
- // Обработчик изменения порядка через drag & drop
93
- const onChangeOrder = (event: UI_I_DropEvent): void => {
94
- const updatedList = [...bootList.value]
95
- const movedItem = updatedList.find((item) => item.name === event.target.name)
96
-
97
- if (!movedItem) return
98
-
99
- // Удаляем элемент из текущей позиции
100
- const fromIndex = updatedList.indexOf(movedItem)
101
- updatedList.splice(fromIndex, 1)
102
-
103
- // Вставляем элемент в новую позицию
104
- updatedList.splice(event.toPosition, 0, movedItem)
105
-
106
- // Обновляем порядок всех элементов
107
- updatedList.forEach((item, index) => {
108
- item.order = index + 1
109
- })
110
-
111
- bootList.value = updatedList
112
- updateModelFromBootList(updatedList)
113
- }
114
-
115
- // Обработчик обновления bootList (при изменении чекбоксов)
116
- const onBootListUpdate = (updatedBootList: UI_I_BootItem[]): void => {
117
- bootList.value = updatedBootList
118
- updateModelFromBootList(updatedBootList)
119
- }
120
-
121
- // Функция для обновления модели на основе bootList
122
- const updateModelFromBootList = (bootItems: UI_I_BootItem[]): void => {
123
- // Сначала сбрасываем все boot_order
124
- model.value.disk_devices?.forEach((disk) => {
125
- disk.boot_order = 0
126
- })
127
- model.value.network_devices?.forEach((network) => {
128
- network.boot_order = 0
129
- })
130
-
131
- // Затем устанавливаем boot_order только для выбранных элементов
132
- let currentOrder = 1
133
- bootItems.forEach((bootItem) => {
134
- if (!bootItem.isChecked) return
135
-
136
- if (bootItem.type === 'nic') {
137
- const [networkName, indexStr] = bootItem.name.split('_')
138
- const index = parseInt(indexStr, 10)
139
- const network = model.value.network_devices?.[index]
140
- if (network && network.network === networkName) {
141
- network.boot_order = currentOrder++
142
- }
143
- } else {
144
- const [source, indexStr] = bootItem.name.split('_')
145
- const index = parseInt(indexStr, 10)
146
- const disk = model.value.disk_devices?.[index]
147
- if (disk && disk.source === source) {
148
- disk.boot_order = currentOrder++
149
- }
150
- }
151
- })
152
- }
153
- </script>
154
-
155
- <style scoped lang="scss"></style>
1
+ <template>
2
+ <component
3
+ :is="currentComponent"
4
+ v-if="isNewView"
5
+ :boot-list="bootList"
6
+ :is-disabled="props.isDisabled"
7
+ @change-order="onChangeOrder"
8
+ @update:boot-list="onBootListUpdate"
9
+ />
10
+ </template>
11
+
12
+ <script setup lang="ts">
13
+ import type { UI_I_BootItem } from '~/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/lib/models/interfaces'
14
+ import type { UI_I_DropEvent } from '~/components/atoms/list/dragDropList/lib/config/events'
15
+ import type { UI_I_CreateVmData } from '~/components/common/vm/actions/common/lib/models/interfaces'
16
+
17
+ const model = defineModel<UI_I_CreateVmData>({ required: true })
18
+
19
+ const props = defineProps<{
20
+ isDisabled: boolean
21
+ }>()
22
+
23
+ const { $store }: any = useNuxtApp()
24
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
25
+ const currentComponent = computed(() =>
26
+ isNewView.value
27
+ ? defineAsyncComponent(() => import('./New.vue'))
28
+ : defineAsyncComponent(() => import('./Old.vue'))
29
+ )
30
+
31
+ const bootList = ref<UI_I_BootItem[]>([])
32
+
33
+ // Используем computed для автоматического обновления bootList при изменении модели
34
+ const hardDisksAndNetworks = computed(() => [
35
+ model.value.disk_devices?.filter((disk) => disk.device_type !== 'cdrom') ||
36
+ [],
37
+ model.value.disk_devices?.filter((disk) => disk.device_type === 'cdrom') ||
38
+ [],
39
+ model.value.network_devices || [],
40
+ ])
41
+
42
+ // Watcher для обновления bootList при изменении модели
43
+ watch(
44
+ hardDisksAndNetworks,
45
+ ([hardDisks, cdDvdDrives, networks]) => {
46
+ const hardDiskItems: UI_I_BootItem[] = hardDisks.map((item, index) => {
47
+ const order = item.boot_order || 0
48
+ return {
49
+ order,
50
+ isChecked: !!order,
51
+ text: `disk${index}`,
52
+ iconClassName: 'icon-disk',
53
+ type: 'disk' as const,
54
+ name: `${item.source}_${index}`,
55
+ testId: `select-disk-value-${index + 1}`,
56
+ }
57
+ })
58
+
59
+ const cdDvdDriveItems: UI_I_BootItem[] = cdDvdDrives.map((item, index) => {
60
+ const order = item.boot_order || 0
61
+ return {
62
+ order,
63
+ isChecked: !!order,
64
+ text: `cdrom${index}`,
65
+ iconClassName: 'icon-disk',
66
+ type: 'cdDvd' as const,
67
+ name: `${item.source}_${hardDisks.length + index}`,
68
+ testId: `select-cd-dvd-value-${index + 1}`,
69
+ }
70
+ })
71
+
72
+ const networkItems: UI_I_BootItem[] = networks.map((item, index) => {
73
+ const order = item.boot_order || 0
74
+ return {
75
+ order,
76
+ isChecked: !!order,
77
+ text: item.mac || 'undefined',
78
+ iconClassName: 'vsphere-icon-network',
79
+ type: 'nic' as const,
80
+ name: `${item.network}_${index}`,
81
+ testId: `select-nic-value-${index + 1}`,
82
+ }
83
+ })
84
+
85
+ bootList.value = [...hardDiskItems, ...cdDvdDriveItems, ...networkItems]
86
+ .filter((item) => item.order >= 0)
87
+ .sort((a, b) => a.order - b.order)
88
+ },
89
+ { deep: true, immediate: true }
90
+ )
91
+
92
+ // Обработчик изменения порядка через drag & drop
93
+ const onChangeOrder = (event: UI_I_DropEvent): void => {
94
+ const updatedList = [...bootList.value]
95
+ const movedItem = updatedList.find((item) => item.name === event.target.name)
96
+
97
+ if (!movedItem) return
98
+
99
+ // Удаляем элемент из текущей позиции
100
+ const fromIndex = updatedList.indexOf(movedItem)
101
+ updatedList.splice(fromIndex, 1)
102
+
103
+ // Вставляем элемент в новую позицию
104
+ updatedList.splice(event.toPosition, 0, movedItem)
105
+
106
+ // Обновляем порядок всех элементов
107
+ updatedList.forEach((item, index) => {
108
+ item.order = index + 1
109
+ })
110
+
111
+ bootList.value = updatedList
112
+ updateModelFromBootList(updatedList)
113
+ }
114
+
115
+ // Обработчик обновления bootList (при изменении чекбоксов)
116
+ const onBootListUpdate = (updatedBootList: UI_I_BootItem[]): void => {
117
+ bootList.value = updatedBootList
118
+ updateModelFromBootList(updatedBootList)
119
+ }
120
+
121
+ // Функция для обновления модели на основе bootList
122
+ const updateModelFromBootList = (bootItems: UI_I_BootItem[]): void => {
123
+ // Сначала сбрасываем все boot_order
124
+ model.value.disk_devices?.forEach((disk) => {
125
+ disk.boot_order = 0
126
+ })
127
+ model.value.network_devices?.forEach((network) => {
128
+ network.boot_order = 0
129
+ })
130
+
131
+ // Затем устанавливаем boot_order только для выбранных элементов
132
+ let currentOrder = 1
133
+ bootItems.forEach((bootItem) => {
134
+ if (!bootItem.isChecked) return
135
+
136
+ if (bootItem.type === 'nic') {
137
+ const [networkName, indexStr] = bootItem.name.split('_')
138
+ const index = parseInt(indexStr, 10)
139
+ const network = model.value.network_devices?.[index]
140
+ if (network && network.network === networkName) {
141
+ network.boot_order = currentOrder++
142
+ }
143
+ } else {
144
+ const [source, indexStr] = bootItem.name.split('_')
145
+ const index = parseInt(indexStr, 10)
146
+ const disk = model.value.disk_devices?.[index]
147
+ if (disk && disk.source === source) {
148
+ disk.boot_order = currentOrder++
149
+ }
150
+ }
151
+ })
152
+ }
153
+ </script>
154
+
155
+ <style scoped lang="scss"></style>
@@ -1,82 +1,82 @@
1
- <template>
2
- <component
3
- :is="currentComponent"
4
- v-model="model"
5
- v-model:block-is-open="blockIsOpen"
6
- :name-label="nameLabel"
7
- :is-disabled="isDisabled"
8
- :machine-type-options="machineTypeOptions"
9
- :os-options="osOptions"
10
- :versions-options="versionsOptions"
11
- @change-os="onChangeOS"
12
- />
13
- </template>
14
-
15
- <script setup lang="ts">
16
- import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
17
- import type { UI_I_Localization } from '~/lib/models/interfaces'
18
- import type { UI_I_CreateVmData } from '~/components/common/vm/actions/common/lib/models/interfaces'
19
- import { capabilities } from '~/components/common/vm/actions/common/lib/config/capabilities'
20
-
21
- const model = defineModel<UI_I_CreateVmData>({ required: true })
22
-
23
- const props = withDefaults(
24
- defineProps<{
25
- isEdit: boolean
26
- isClone: boolean
27
- state?: string | number
28
- isVmt?: boolean
29
- }>(),
30
- {
31
- state: undefined,
32
- isVmt: undefined,
33
- }
34
- )
35
-
36
- const { $store }: any = useNuxtApp()
37
- const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
38
- const currentComponent = computed(() =>
39
- isNewView.value
40
- ? defineAsyncComponent(() => import('./New.vue'))
41
- : defineAsyncComponent(() => import('./Old.vue'))
42
- )
43
-
44
- const isDisabled = computed<boolean>(
45
- () => (!props.isEdit && !props.isClone) || (props.isEdit && props.state !== 1)
46
- )
47
- const machineTypeOptions = ref<UI_I_OptionItem[]>(
48
- capabilities.value.machineTypes
49
- )
50
-
51
- const osOptions = ref<UI_I_OptionItem[]>(capabilities.value.guestOsFamilies)
52
- const onChangeOS = (): void => {
53
- model.value.guest_os_version = versionsOptions.value[0].value
54
- }
55
-
56
- const versionsOptions = computed<UI_I_OptionItem[]>(() => {
57
- if (!model.value.guest_os_family) return []
58
-
59
- return (
60
- capabilities.value.guestOsVersions[model.value.guest_os_family.value] || []
61
- )
62
- })
63
- watch(
64
- versionsOptions,
65
- () => {
66
- model.value.guest_os_version = versionsOptions.value[0].value
67
- }
68
- // { immediate: true }
69
- )
70
-
71
- const blockIsOpen = ref<boolean>(false)
72
-
73
- const localization = computed<UI_I_Localization>(() => useLocal())
74
-
75
- const nameLabel = computed<string>(() => {
76
- return props.isVmt
77
- ? localization.value.common.vmtName
78
- : localization.value.common.vmName
79
- })
80
- </script>
81
-
82
- <style scoped lang="scss"></style>
1
+ <template>
2
+ <component
3
+ :is="currentComponent"
4
+ v-model="model"
5
+ v-model:block-is-open="blockIsOpen"
6
+ :name-label="nameLabel"
7
+ :is-disabled="isDisabled"
8
+ :machine-type-options="machineTypeOptions"
9
+ :os-options="osOptions"
10
+ :versions-options="versionsOptions"
11
+ @change-os="onChangeOS"
12
+ />
13
+ </template>
14
+
15
+ <script setup lang="ts">
16
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
17
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
18
+ import type { UI_I_CreateVmData } from '~/components/common/vm/actions/common/lib/models/interfaces'
19
+ import { capabilities } from '~/components/common/vm/actions/common/lib/config/capabilities'
20
+
21
+ const model = defineModel<UI_I_CreateVmData>({ required: true })
22
+
23
+ const props = withDefaults(
24
+ defineProps<{
25
+ isEdit: boolean
26
+ isClone: boolean
27
+ state?: string | number
28
+ isVmt?: boolean
29
+ }>(),
30
+ {
31
+ state: undefined,
32
+ isVmt: undefined,
33
+ }
34
+ )
35
+
36
+ const { $store }: any = useNuxtApp()
37
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
38
+ const currentComponent = computed(() =>
39
+ isNewView.value
40
+ ? defineAsyncComponent(() => import('./New.vue'))
41
+ : defineAsyncComponent(() => import('./Old.vue'))
42
+ )
43
+
44
+ const isDisabled = computed<boolean>(
45
+ () => (!props.isEdit && !props.isClone) || (props.isEdit && props.state !== 1)
46
+ )
47
+ const machineTypeOptions = ref<UI_I_OptionItem[]>(
48
+ capabilities.value.machineTypes
49
+ )
50
+
51
+ const osOptions = ref<UI_I_OptionItem[]>(capabilities.value.guestOsFamilies)
52
+ const onChangeOS = (): void => {
53
+ model.value.guest_os_version = versionsOptions.value[0].value
54
+ }
55
+
56
+ const versionsOptions = computed<UI_I_OptionItem[]>(() => {
57
+ if (!model.value.guest_os_family) return []
58
+
59
+ return (
60
+ capabilities.value.guestOsVersions[model.value.guest_os_family.value] || []
61
+ )
62
+ })
63
+ watch(
64
+ versionsOptions,
65
+ () => {
66
+ model.value.guest_os_version = versionsOptions.value[0].value
67
+ }
68
+ // { immediate: true }
69
+ )
70
+
71
+ const blockIsOpen = ref<boolean>(false)
72
+
73
+ const localization = computed<UI_I_Localization>(() => useLocal())
74
+
75
+ const nameLabel = computed<string>(() => {
76
+ return props.isVmt
77
+ ? localization.value.common.vmtName
78
+ : localization.value.common.vmName
79
+ })
80
+ </script>
81
+
82
+ <style scoped lang="scss"></style>
@@ -1,74 +1,74 @@
1
- <template>
2
- <component
3
- :is="currentComponent"
4
- v-model="model"
5
- v-model:password-is-valid="passwordIsValid"
6
- :remote-console-options-invalid="remoteConsoleOptionsInvalid"
7
- :is-disabled="isDisabled"
8
- />
9
- </template>
10
-
11
- <script setup lang="ts">
12
- import type { UI_I_CreateVmData } from '~/components/common/vm/actions/common/lib/models/interfaces'
13
-
14
- const model = defineModel<UI_I_CreateVmData['options']['remote_console']>({
15
- required: true,
16
- })
17
-
18
- const props = withDefaults(
19
- defineProps<{
20
- isEdit: boolean
21
- // TODO возможно вернем, НЕ УДАЛЯТЬ
22
- // errorValidationFields: UI_I_ErrorValidationField<string>[]
23
- state?: string | number
24
- }>(),
25
- {
26
- state: undefined,
27
- }
28
- )
29
- const emits = defineEmits<{
30
- (event: 'invalid', value: boolean): void
31
- // TODO возможно вернем, НЕ УДАЛЯТЬ
32
- // (event: 'remove-error-by-title', value: string): void
33
- }>()
34
-
35
- const { $store }: any = useNuxtApp()
36
- const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
37
- const currentComponent = computed(() =>
38
- isNewView.value
39
- ? defineAsyncComponent(() => import('./New.vue'))
40
- : defineAsyncComponent(() => import('./Old.vue'))
41
- )
42
-
43
- const isDisabled = computed<boolean>(() => props.isEdit && props.state !== 1)
44
-
45
- // TODO возможно вернем, НЕ УДАЛЯТЬ
46
- // const changeRemoteConsoleType = (): void => {
47
- // // powerControl.value = false
48
- // // sharePolicy.value = 'allow-exclusive'
49
- // imgCompression.value = 'auto_glz'
50
- // jpegCompression.value = 'auto'
51
- // zlibCompression.value = 'auto'
52
- // playbackCompression.value = true
53
- // streamingMode.value = 'all'
54
- // model.spice.clipboard = true
55
- // mouseMode.value = 'client'
56
- // model.spice.file_transfer = true
57
- // model.spice.folder_sharing = true
58
- // }
59
-
60
- const passwordIsValid = ref<boolean>(true)
61
-
62
- const remoteConsoleOptionsInvalid = computed<boolean>(
63
- () => !passwordIsValid.value
64
- )
65
- watch(
66
- remoteConsoleOptionsInvalid,
67
- (newValue) => {
68
- emits('invalid', newValue)
69
- },
70
- { immediate: true }
71
- )
72
- </script>
73
-
74
- <style scoped lang="scss"></style>
1
+ <template>
2
+ <component
3
+ :is="currentComponent"
4
+ v-model="model"
5
+ v-model:password-is-valid="passwordIsValid"
6
+ :remote-console-options-invalid="remoteConsoleOptionsInvalid"
7
+ :is-disabled="isDisabled"
8
+ />
9
+ </template>
10
+
11
+ <script setup lang="ts">
12
+ import type { UI_I_CreateVmData } from '~/components/common/vm/actions/common/lib/models/interfaces'
13
+
14
+ const model = defineModel<UI_I_CreateVmData['options']['remote_console']>({
15
+ required: true,
16
+ })
17
+
18
+ const props = withDefaults(
19
+ defineProps<{
20
+ isEdit: boolean
21
+ // TODO возможно вернем, НЕ УДАЛЯТЬ
22
+ // errorValidationFields: UI_I_ErrorValidationField<string>[]
23
+ state?: string | number
24
+ }>(),
25
+ {
26
+ state: undefined,
27
+ }
28
+ )
29
+ const emits = defineEmits<{
30
+ (event: 'invalid', value: boolean): void
31
+ // TODO возможно вернем, НЕ УДАЛЯТЬ
32
+ // (event: 'remove-error-by-title', value: string): void
33
+ }>()
34
+
35
+ const { $store }: any = useNuxtApp()
36
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
37
+ const currentComponent = computed(() =>
38
+ isNewView.value
39
+ ? defineAsyncComponent(() => import('./New.vue'))
40
+ : defineAsyncComponent(() => import('./Old.vue'))
41
+ )
42
+
43
+ const isDisabled = computed<boolean>(() => props.isEdit && props.state !== 1)
44
+
45
+ // TODO возможно вернем, НЕ УДАЛЯТЬ
46
+ // const changeRemoteConsoleType = (): void => {
47
+ // // powerControl.value = false
48
+ // // sharePolicy.value = 'allow-exclusive'
49
+ // imgCompression.value = 'auto_glz'
50
+ // jpegCompression.value = 'auto'
51
+ // zlibCompression.value = 'auto'
52
+ // playbackCompression.value = true
53
+ // streamingMode.value = 'all'
54
+ // model.spice.clipboard = true
55
+ // mouseMode.value = 'client'
56
+ // model.spice.file_transfer = true
57
+ // model.spice.folder_sharing = true
58
+ // }
59
+
60
+ const passwordIsValid = ref<boolean>(true)
61
+
62
+ const remoteConsoleOptionsInvalid = computed<boolean>(
63
+ () => !passwordIsValid.value
64
+ )
65
+ watch(
66
+ remoteConsoleOptionsInvalid,
67
+ (newValue) => {
68
+ emits('invalid', newValue)
69
+ },
70
+ { immediate: true }
71
+ )
72
+ </script>
73
+
74
+ <style scoped lang="scss"></style>