bfg-common 1.1.63 → 1.1.64

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 (92) hide show
  1. package/assets/localization/local_be.json +1 -1
  2. package/assets/localization/local_hy.json +1 -1
  3. package/assets/localization/local_kk.json +1 -1
  4. package/assets/localization/local_ru.json +1 -1
  5. package/components/atoms/alert/Notification.vue +167 -167
  6. package/components/atoms/autocomplete/Autocomplete.vue +236 -236
  7. package/components/atoms/datepicker/Datepicker.vue +612 -612
  8. package/components/atoms/list/SelectList.vue +62 -62
  9. package/components/atoms/nav/NavBar.vue +116 -116
  10. package/components/atoms/nav/VerticalNavBar.vue +89 -89
  11. package/components/atoms/notificationBar/NotificationBar.vue +175 -175
  12. package/components/atoms/perPage/PerPage.vue +52 -52
  13. package/components/atoms/popup/SimplePopup.vue +90 -90
  14. package/components/atoms/step/VerticalStep.vue +104 -104
  15. package/components/atoms/switch/Switch.vue +107 -107
  16. package/components/atoms/table/dataGrid/DataGridColumnSwitch.vue +206 -206
  17. package/components/atoms/table/dataGrid/DataGridPage.vue +189 -189
  18. package/components/atoms/tabs/Tabs.vue +189 -189
  19. package/components/atoms/tooltip/Signpost.vue +224 -224
  20. package/components/common/adapterManager/AddAdapterWarningModal.vue +82 -82
  21. package/components/common/adapterManager/NoActiveAdaptersModal.vue +62 -62
  22. package/components/common/adapterManager/NoConnectedActiveAdaptersModal.vue +62 -62
  23. package/components/common/browse/Browse.vue +182 -182
  24. package/components/common/browse/blocks/Title.vue +66 -66
  25. package/components/common/diagramMain/Diagram.vue +186 -186
  26. package/components/common/diagramMain/DiagramMain.vue +986 -986
  27. package/components/common/diagramMain/adapter/AdapterItem.vue +227 -227
  28. package/components/common/diagramMain/adapter/AdapterItems.vue +57 -57
  29. package/components/common/diagramMain/modals/editSettings/tabs/port/IpvFourSettings.vue +339 -339
  30. package/components/common/diagramMain/modals/editSettings/tabs/port/PortProperties.vue +202 -202
  31. package/components/common/diagramMain/modals/remove/RemoveModal.vue +226 -226
  32. package/components/common/diagramMain/network/Contents.vue +238 -238
  33. package/components/common/feedback/Buttons.vue +232 -232
  34. package/components/common/feedback/Message.vue +468 -468
  35. package/components/common/feedback/VisitPortal.vue +54 -54
  36. package/components/common/graph/Graph.vue +18 -20
  37. package/components/common/help/navbar/left/Left.vue +159 -159
  38. package/components/common/help/navbar/left/utils/constructAccordion.ts +27 -27
  39. package/components/common/mainNavigationPanel/MainNavigationPanel.vue +359 -359
  40. package/components/common/modals/Rename.vue +165 -165
  41. package/components/common/monitor/advanced/Advanced.vue +3 -33
  42. package/components/common/monitor/advanced/GraphView.vue +4 -4
  43. package/components/common/monitor/advanced/table/Table.vue +5 -5
  44. package/components/common/monitor/advanced/tools/Tools.vue +27 -91
  45. package/components/common/monitor/advanced/tools/chartOptionsModal/ChartOptionsModal.vue +17 -101
  46. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/Counters.vue +7 -25
  47. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/config/utils.ts +0 -55
  48. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/models/interfaces.ts +1 -1
  49. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/Timespan.vue +3 -32
  50. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/form/Form.vue +8 -25
  51. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/Object.vue +19 -41
  52. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/models/interfaces.ts +1 -1
  53. package/components/common/monitor/advanced/tools/config/advancedToolbar.ts +38 -50
  54. package/components/common/monitor/config/getValidDateByOption.ts +6 -105
  55. package/components/common/monitor/overview/filters/Filters.vue +6 -6
  56. package/components/common/monitor/overview/filters/customIntervalModal/CustomIntervalModal.vue +8 -8
  57. package/components/common/monitor/overview/filters/customIntervalModal/config/dateChecker.ts +1 -1
  58. package/components/common/perPage/PerPage.vue +51 -51
  59. package/components/common/recursionTree/RecursionTree.vue +201 -201
  60. package/components/common/vm/actions/add/customizeHardware/virtualHardware/VirtualHardware.vue +641 -642
  61. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +245 -274
  62. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/Cpu.vue +375 -375
  63. package/components/common/vm/actions/add/customizeHardware/virtualHardware/limit/Limit.vue +234 -234
  64. package/components/common/vm/actions/add/customizeHardware/virtualHardware/limit/config/options.ts +28 -28
  65. package/components/common/vm/actions/add/customizeHardware/virtualHardware/memory/Memory.vue +316 -316
  66. package/components/common/vm/actions/add/customizeHardware/virtualHardware/memory/config/memoryOptions.ts +35 -35
  67. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +447 -447
  68. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +1 -1
  69. package/components/common/vm/actions/add/customizeHardware/virtualHardware/reservation/Reservation.vue +235 -235
  70. package/components/common/vm/actions/add/customizeHardware/vmoptions/bootOptions/order/Order.vue +203 -195
  71. package/components/common/vm/actions/add/select/storage/config/config.ts +154 -154
  72. package/components/common/wizards/datastore/add/nfs/configuration/Configuration.vue +373 -373
  73. package/components/common/wizards/datastore/add/nfs/configuration/serversList/ServersList.vue +123 -123
  74. package/components/common/wizards/datastore/add/nfs/kerberosAuthentication/KerberosAuthentication.vue +54 -54
  75. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/hostTable/HostTable.vue +131 -131
  76. package/components/common/wizards/datastore/add/sharedStorm/partitionConfiguration/PartitionConfiguration.vue +230 -230
  77. package/models/store/interfaces.ts +37 -37
  78. package/models/store/storage/interfaces.ts +32 -32
  79. package/models/store/types.ts +32 -32
  80. package/modules/fixContentBuild/utils/methods.ts +114 -114
  81. package/package.json +1 -1
  82. package/public/spice-console/application/codec.js +257 -257
  83. package/public/spice-console/lib/rasterEngine.js +907 -907
  84. package/public/spice-console/network/spicechannel.js +369 -369
  85. package/public/spice-console-minify/lib/decoder/dixie.min.js +4 -4
  86. package/public/spice-console-minify/lib/jgestures.min.js +24 -24
  87. package/public/spice-console-minify/lib/jquery-2.0.3.min.js +24 -24
  88. package/public/spice-console-minify/lib/jquery-mousewheel.min.js +11 -11
  89. package/public/spice-console-minify/lib/jquery-visibility.min.js +1 -1
  90. package/public/spice-console-minify/lib/lodash.4.0.0.min.js +5 -5
  91. package/utils/contentBuild.ts +34 -34
  92. package/components/common/monitor/advanced/tools/utils/countCores.ts +0 -7
@@ -1,274 +1,245 @@
1
- <template>
2
- <div class="hardware-cd-dvd-drive">
3
- <atoms-stack-block
4
- :has-children="true"
5
- :is-roll-back="props.type === 'removed'"
6
- :removable="isRemovable"
7
- @remove="onRemoveCdDvdDrive"
8
- @roll-back="onRollBackCdDvdDrive"
9
- >
10
- <template #stackBlockKey>
11
- <div
12
- class="vm-wizard-toggle-block-cd-dvd-drive vm-wizard-toggle-block-hard-disk"
13
- >
14
- <span>{{ label }}</span>
15
- </div>
16
- </template>
17
- <template #stackBlockContent>
18
- <div class="flex-align-center flex-space-between">
19
- <template v-if="props.type === 'removed'">
20
- <span>{{ localization.deviceWillRemoved }}</span>
21
- <div @click.stop class="flex-align-center">
22
- <input
23
- :id="`cd-dvd-delete-files-from-datastore-${props.index}`"
24
- v-model="deleteFilesFromDatastore"
25
- :disabled="props.disabled"
26
- type="checkbox"
27
- class="pointer"
28
- @click.stop
29
- />
30
- <label
31
- :for="`cd-dvd-delete-files-from-datastore-${props.index}`"
32
- :class="[
33
- 'label-text-normal pointer',
34
- props.disabled && 'div-disabled',
35
- ]"
36
- >{{ localization.deleteFilesFromDatastore }}</label
37
- >
38
- </div>
39
- </template>
40
- <template v-else>
41
- <div class="select">
42
- <select
43
- id="vm-wizard-cd-dvd-drive-field"
44
- v-model="selectedCdDvdDrive"
45
- class="vm-wizard-cd-dvd-drive-field"
46
- @click.stop
47
- @change="changeCdDvdDrive"
48
- >
49
- <option
50
- v-for="(item, key) in cdDvdDriveOptions"
51
- :key="key"
52
- :value="item.value"
53
- >
54
- {{ item.text }}
55
- </option>
56
- </select>
57
- </div>
58
- </template>
59
- </div>
60
- </template>
61
- <template #stackChildren>
62
- <common-vm-actions-add-customize-hardware-virtual-hardware-cd-dvd-drive-media
63
- v-if="selectedCdDvdDrive === 'datastoreIsoFile'"
64
- v-model:cd-dvd-media="cdDvdMedia"
65
- @browse="isShowFileModal = true"
66
- />
67
-
68
- <common-vm-actions-add-customize-hardware-virtual-hardware-bus
69
- v-model:bus="bus"
70
- :index="indexByHardDisks"
71
- :validation-type="busValidationType"
72
- :error-validation-fields="props.errorValidationFields"
73
- :disabled="isRunning"
74
- component-type="disk_devices"
75
- @remove-error-by-title="emits('remove-error-by-title', $event)"
76
- />
77
- </template>
78
- </atoms-stack-block>
79
-
80
- <Teleport to="body">
81
- <common-vm-actions-add-customize-hardware-virtual-hardware-browse-view
82
- v-if="isShowFileModal"
83
- :show="isShowFileModal"
84
- :file-types="fileTypes"
85
- :nodes="props.nodes"
86
- :files="props.files"
87
- @submit="onSelectFile"
88
- @get-storage="emits('get-storage', $event)"
89
- @get-folders-or-files="emits('get-folders-or-files', $event)"
90
- @get-active-device-child="emits('get-active-device-child', $event)"
91
- @show-datastore-child="emits('show-datastore-child', $event)"
92
- @hide="isShowFileModal = false"
93
- />
94
- </Teleport>
95
- </div>
96
- </template>
97
-
98
- <script lang="ts" setup>
99
- import { UI_I_FileTreeNode } from '~/components/models/interfaces'
100
- import { UI_I_TablePayload } from '~/models/store/interfaces'
101
- import { UI_T_CdDvdDrive } from '~/components/common/vm/actions/add/customizeHardware/virtualHardware/cdDvdDrive/models/types'
102
- import { UI_I_SendDataNewCdDvdDrive } from '~/components/common/vm/actions/add/customizeHardware/virtualHardware/models/interfaces'
103
- import { UI_I_Localization, UI_I_HTMLSelectElement } from '~/models/interfaces'
104
- import { UI_I_ErrorValidationField } from '~/models/store/interfaces'
105
- import { UI_I_OptionItem } from '~/components/atoms/models/interfaces'
106
- import { UI_I_FolderOrFileTreePayload } from '~/models/store/storage/interfaces'
107
- import { UI_T_CdDvdType } from '~/components/common/vm/actions/add/customizeHardware/virtualHardware/models/types'
108
- import { cdDvdDriveOptionsFunc } from '~/components/common/vm/actions/add/customizeHardware/virtualHardware/cdDvdDrive/config/options'
109
- import { fileTypesFunc } from '~/components/common/vm/actions/add/customizeHardware/virtualHardware/cdDvdDrive/config/fileTypes'
110
-
111
- const props = defineProps<{
112
- hardDisksCount: number
113
- index: number
114
- cdDvdDrive: UI_I_SendDataNewCdDvdDrive
115
- nodes: UI_I_FileTreeNode[]
116
- files: UI_I_FileTreeNode[]
117
- errorValidationFields: UI_I_ErrorValidationField<string>[]
118
- type: UI_T_CdDvdType
119
- isEdit: boolean
120
- state?: string
121
- }>()
122
-
123
- const emits = defineEmits<{
124
- (event: 'send-data', value: UI_I_SendDataNewCdDvdDrive): void
125
- (event: 'remove'): void
126
- (event: 'roll-back'): void
127
- (event: 'remove-error-by-title', value: string): void
128
- (event: 'get-storage', value: UI_I_TablePayload): void
129
- (event: 'get-folders-or-files', value: UI_I_FolderOrFileTreePayload): void
130
- (event: 'get-active-device-child', value: UI_I_FileTreeNode): void
131
- (event: 'show-datastore-child', value: UI_I_FileTreeNode): void
132
- }>()
133
-
134
- const localization = computed<UI_I_Localization>(() => useLocal())
135
-
136
- const isRunning = computed<boolean>(() => {
137
- return props.state === '1'
138
- })
139
-
140
- const isRemovable = computed<boolean>(() => {
141
- return (
142
- !props.isEdit ||
143
- !isRunning.value ||
144
- (isRunning.value && bus.value === 'virtio')
145
- )
146
- })
147
-
148
- const indexByHardDisks = computed<number>(
149
- () => props.index + props.hardDisksCount
150
- )
151
-
152
- const label = computed<string>(() => {
153
- if (props.type === 'edit' || props.type === 'removed')
154
- return `${localization.value.cdDvdDrive} ${props.index + 1}`
155
-
156
- return `${localization.value.newCdDvdDrive} *`
157
- })
158
-
159
- const busValidationType = computed<string>(
160
- () => `disk_devices[${indexByHardDisks}].bus`
161
- )
162
-
163
- const selectedCdDvdDrive = ref<UI_T_CdDvdDrive>('clientDevice')
164
- const cdDvdDriveOptions = ref<UI_I_OptionItem[]>(
165
- cdDvdDriveOptionsFunc(localization.value)
166
- )
167
- const changeCdDvdDrive = (event: UI_I_HTMLSelectElement): void => {
168
- const isDatastoreIsoFile = event.target.value === 'datastoreIsoFile'
169
- if (!isDatastoreIsoFile) return
170
-
171
- isShowFileModal.value = true
172
- }
173
- const isShowFileModal = ref<boolean>(false)
174
- const onSelectFile = (file: UI_I_FileTreeNode): void => {
175
- cdDvdMedia.value = file.path
176
- }
177
- const fileTypes = computed<UI_I_OptionItem[]>(() =>
178
- fileTypesFunc(localization.value)
179
- )
180
-
181
- const onRemoveCdDvdDrive = (): void => {
182
- emits('remove')
183
- }
184
- const onRollBackCdDvdDrive = (): void => {
185
- emits('roll-back')
186
- }
187
-
188
- const cdDvdMedia = ref<string>('')
189
- const bus = ref<string>('ide')
190
-
191
- const deleteFilesFromDatastore = ref<boolean>(false)
192
-
193
- watch(
194
- [cdDvdMedia, bus, deleteFilesFromDatastore, , () => props.type],
195
- () => {
196
- emits('send-data', {
197
- create: props.cdDvdDrive.create,
198
- attach: props.cdDvdDrive.attach,
199
- source: cdDvdMedia.value,
200
- size: 0,
201
- bus: bus.value,
202
- device_type: 'cdrom',
203
- provision_type: 'thick',
204
- disk_mode: 'dependent',
205
- sharing: false,
206
- read_only: true,
207
- shares: 0,
208
- cache: 'none',
209
- io: 'native',
210
- limit_iops: 0,
211
- discard: 'unmap',
212
- boot_order: -1,
213
- detach: props.type === 'removed',
214
- remove: props.type === 'removed' && deleteFilesFromDatastore.value, // Проверяем если удалили диск и указали Delete files from datastore
215
- })
216
- // if (!props.isEdit) {
217
- // emits('send-data', {
218
- // create: false,
219
- // source: cdDvdMedia.value,
220
- // bus: bus.value,
221
- // device_type: 'cdrom',
222
- // boot_order: -1,
223
- // })
224
- // return
225
- // }
226
- // emits('send-data', {
227
- // create: false,
228
- // source: cdDvdMedia.value,
229
- // bus: bus.value,
230
- // device_type: 'cdrom',
231
- // boot_order: -1,
232
- // size: 0,
233
- // target: 'hda',
234
- // storage_id: '',
235
- // provision_type: 'thick',
236
- // disk_mode: 'dependent',
237
- // sharing: false,
238
- // read_only: true,
239
- // shares: 0,
240
- // cache: 'none',
241
- // io: 'native',
242
- // limit_iops: 0,
243
- // discard: 'unmap',
244
- // })
245
- },
246
- { immediate: true }
247
- )
248
-
249
- // Добавляем данные для редактирования
250
- watch(
251
- () => props.cdDvdDrive,
252
- (newValue) => {
253
- if (newValue.source !== '') {
254
- selectedCdDvdDrive.value = 'datastoreIsoFile'
255
- cdDvdMedia.value = newValue.source
256
- }
257
- if (newValue.bus !== '') {
258
- bus.value = newValue.bus
259
- }
260
- },
261
- { immediate: true }
262
- )
263
- watch(
264
- isRunning,
265
- (newValue) => {
266
- if (newValue && props.type === 'new') {
267
- bus.value = 'virtio'
268
- }
269
- },
270
- { immediate: true }
271
- )
272
- </script>
273
-
274
- <style lang="scss" scoped></style>
1
+ <template>
2
+ <div class="hardware-cd-dvd-drive">
3
+ <atoms-stack-block
4
+ :has-children="true"
5
+ :is-roll-back="props.type === 'removed'"
6
+ :removable="isRemovable"
7
+ @remove="onRemoveCdDvdDrive"
8
+ @roll-back="onRollBackCdDvdDrive"
9
+ >
10
+ <template #stackBlockKey>
11
+ <div
12
+ class="vm-wizard-toggle-block-cd-dvd-drive vm-wizard-toggle-block-hard-disk"
13
+ >
14
+ <span>{{ label }}</span>
15
+ </div>
16
+ </template>
17
+ <template #stackBlockContent>
18
+ <div class="flex-align-center flex-space-between">
19
+ <template v-if="props.type === 'removed'">
20
+ <span>{{ localization.deviceWillRemoved }}</span>
21
+ <div @click.stop class="flex-align-center">
22
+ <input
23
+ :id="`cd-dvd-delete-files-from-datastore-${props.index}`"
24
+ v-model="deleteFilesFromDatastore"
25
+ :disabled="props.disabled"
26
+ type="checkbox"
27
+ class="pointer"
28
+ @click.stop
29
+ />
30
+ <label
31
+ :for="`cd-dvd-delete-files-from-datastore-${props.index}`"
32
+ :class="[
33
+ 'label-text-normal pointer',
34
+ props.disabled && 'div-disabled',
35
+ ]"
36
+ >{{ localization.deleteFilesFromDatastore }}</label
37
+ >
38
+ </div>
39
+ </template>
40
+ <template v-else>
41
+ <div class="select">
42
+ <select
43
+ id="vm-wizard-cd-dvd-drive-field"
44
+ v-model="selectedCdDvdDrive"
45
+ class="vm-wizard-cd-dvd-drive-field"
46
+ @click.stop
47
+ @change="changeCdDvdDrive"
48
+ >
49
+ <option
50
+ v-for="(item, key) in cdDvdDriveOptions"
51
+ :key="key"
52
+ :value="item.value"
53
+ >
54
+ {{ item.text }}
55
+ </option>
56
+ </select>
57
+ </div>
58
+ </template>
59
+ </div>
60
+ </template>
61
+ <template #stackChildren>
62
+ <common-vm-actions-add-customize-hardware-virtual-hardware-cd-dvd-drive-media
63
+ v-if="selectedCdDvdDrive === 'datastoreIsoFile'"
64
+ v-model:cd-dvd-media="cdDvdMedia"
65
+ @browse="isShowFileModal = true"
66
+ />
67
+
68
+ <common-vm-actions-add-customize-hardware-virtual-hardware-bus
69
+ v-model:bus="bus"
70
+ :index="indexByHardDisks"
71
+ :validation-type="busValidationType"
72
+ :error-validation-fields="props.errorValidationFields"
73
+ :disabled="isRunning"
74
+ component-type="disk_devices"
75
+ @remove-error-by-title="emits('remove-error-by-title', $event)"
76
+ />
77
+ </template>
78
+ </atoms-stack-block>
79
+
80
+ <Teleport to="body">
81
+ <common-vm-actions-add-customize-hardware-virtual-hardware-browse-view
82
+ v-if="isShowFileModal"
83
+ :show="isShowFileModal"
84
+ :file-types="fileTypes"
85
+ :nodes="props.nodes"
86
+ :files="props.files"
87
+ @submit="onSelectFile"
88
+ @get-storage="emits('get-storage', $event)"
89
+ @get-folders-or-files="emits('get-folders-or-files', $event)"
90
+ @get-active-device-child="emits('get-active-device-child', $event)"
91
+ @show-datastore-child="emits('show-datastore-child', $event)"
92
+ @hide="isShowFileModal = false"
93
+ />
94
+ </Teleport>
95
+ </div>
96
+ </template>
97
+
98
+ <script lang="ts" setup>
99
+ import { UI_I_FileTreeNode } from '~/components/models/interfaces'
100
+ import { UI_I_TablePayload } from '~/models/store/interfaces'
101
+ import { UI_T_CdDvdDrive } from '~/components/common/vm/actions/add/customizeHardware/virtualHardware/cdDvdDrive/models/types'
102
+ import { UI_I_SendDataNewCdDvdDrive } from '~/components/common/vm/actions/add/customizeHardware/virtualHardware/models/interfaces'
103
+ import { UI_I_Localization, UI_I_HTMLSelectElement } from '~/models/interfaces'
104
+ import { UI_I_ErrorValidationField } from '~/models/store/interfaces'
105
+ import { UI_I_OptionItem } from '~/components/atoms/models/interfaces'
106
+ import { UI_I_FolderOrFileTreePayload } from '~/models/store/storage/interfaces'
107
+ import { UI_T_CdDvdType } from '~/components/common/vm/actions/add/customizeHardware/virtualHardware/models/types'
108
+ import { cdDvdDriveOptionsFunc } from '~/components/common/vm/actions/add/customizeHardware/virtualHardware/cdDvdDrive/config/options'
109
+ import { fileTypesFunc } from '~/components/common/vm/actions/add/customizeHardware/virtualHardware/cdDvdDrive/config/fileTypes'
110
+
111
+ const props = defineProps<{
112
+ hardDisksCount: number
113
+ index: number
114
+ cdDvdDrive: UI_I_SendDataNewCdDvdDrive
115
+ nodes: UI_I_FileTreeNode[]
116
+ files: UI_I_FileTreeNode[]
117
+ errorValidationFields: UI_I_ErrorValidationField<string>[]
118
+ type: UI_T_CdDvdType
119
+ isEdit: boolean
120
+ state?: string
121
+ }>()
122
+
123
+ const emits = defineEmits<{
124
+ (event: 'send-data', value: UI_I_SendDataNewCdDvdDrive): void
125
+ (event: 'remove'): void
126
+ (event: 'roll-back'): void
127
+ (event: 'remove-error-by-title', value: string): void
128
+ (event: 'get-storage', value: UI_I_TablePayload): void
129
+ (event: 'get-folders-or-files', value: UI_I_FolderOrFileTreePayload): void
130
+ (event: 'get-active-device-child', value: UI_I_FileTreeNode): void
131
+ (event: 'show-datastore-child', value: UI_I_FileTreeNode): void
132
+ }>()
133
+
134
+ const localization = computed<UI_I_Localization>(() => useLocal())
135
+
136
+ const isRunning = computed<boolean>(() => {
137
+ return props.state === '1'
138
+ })
139
+
140
+ const isRemovable = computed<boolean>(() => {
141
+ return (
142
+ !props.isEdit ||
143
+ !isRunning.value ||
144
+ (isRunning.value && bus.value === 'virtio')
145
+ )
146
+ })
147
+
148
+ const indexByHardDisks = computed<number>(
149
+ () => props.index + props.hardDisksCount
150
+ )
151
+
152
+ const label = computed<string>(() => {
153
+ if (props.type === 'edit' || props.type === 'removed')
154
+ return `${localization.value.cdDvdDrive} ${props.index + 1}`
155
+
156
+ return `${localization.value.newCdDvdDrive} *`
157
+ })
158
+
159
+ const busValidationType = computed<string>(
160
+ () => `disk_devices[${indexByHardDisks}].bus`
161
+ )
162
+
163
+ const selectedCdDvdDrive = ref<UI_T_CdDvdDrive>('clientDevice')
164
+ const cdDvdDriveOptions = ref<UI_I_OptionItem[]>(
165
+ cdDvdDriveOptionsFunc(localization.value)
166
+ )
167
+ const changeCdDvdDrive = (event: UI_I_HTMLSelectElement): void => {
168
+ const isDatastoreIsoFile = event.target.value === 'datastoreIsoFile'
169
+ if (!isDatastoreIsoFile) return
170
+
171
+ isShowFileModal.value = true
172
+ }
173
+ const isShowFileModal = ref<boolean>(false)
174
+ const onSelectFile = (file: UI_I_FileTreeNode): void => {
175
+ cdDvdMedia.value = file.path
176
+ }
177
+ const fileTypes = computed<UI_I_OptionItem[]>(() =>
178
+ fileTypesFunc(localization.value)
179
+ )
180
+
181
+ const onRemoveCdDvdDrive = (): void => {
182
+ emits('remove')
183
+ }
184
+ const onRollBackCdDvdDrive = (): void => {
185
+ emits('roll-back')
186
+ }
187
+
188
+ const cdDvdMedia = ref<string>('')
189
+ const bus = ref<string>('ide')
190
+
191
+ const deleteFilesFromDatastore = ref<boolean>(false)
192
+
193
+ watch(
194
+ [cdDvdMedia, bus, deleteFilesFromDatastore, () => props.type],
195
+ () => {
196
+ emits('send-data', {
197
+ create: props.cdDvdDrive.create,
198
+ attach: props.cdDvdDrive.attach,
199
+ source: cdDvdMedia.value,
200
+ size: 0,
201
+ bus: bus.value,
202
+ device_type: 'cdrom',
203
+ provision_type: 'thick',
204
+ disk_mode: 'dependent',
205
+ sharing: false,
206
+ read_only: true,
207
+ shares: 0,
208
+ cache: 'none',
209
+ io: 'native',
210
+ limit_iops: 0,
211
+ discard: 'unmap',
212
+ boot_order: props.cdDvdDrive.boot_order,
213
+ detach: props.type === 'removed',
214
+ remove: props.type === 'removed' && deleteFilesFromDatastore.value, // Проверяем если удалили диск и указали Delete files from datastore
215
+ })
216
+ },
217
+ { immediate: true }
218
+ )
219
+
220
+ // Добавляем данные для редактирования
221
+ watch(
222
+ () => props.cdDvdDrive,
223
+ (newValue) => {
224
+ if (newValue.source !== '') {
225
+ selectedCdDvdDrive.value = 'datastoreIsoFile'
226
+ cdDvdMedia.value = newValue.source
227
+ }
228
+ if (newValue.bus !== '') {
229
+ bus.value = newValue.bus
230
+ }
231
+ },
232
+ { immediate: true }
233
+ )
234
+ watch(
235
+ isRunning,
236
+ (newValue) => {
237
+ if (newValue && props.type === 'new') {
238
+ bus.value = 'virtio'
239
+ }
240
+ },
241
+ { immediate: true }
242
+ )
243
+ </script>
244
+
245
+ <style lang="scss" scoped></style>