bfg-common 1.4.655 → 1.4.656

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 (116) hide show
  1. package/assets/localization/local_be.json +13 -1
  2. package/assets/localization/local_en.json +13 -1
  3. package/assets/localization/local_hy.json +13 -1
  4. package/assets/localization/local_kk.json +13 -1
  5. package/assets/localization/local_ru.json +14 -2
  6. package/assets/localization/local_zh.json +13 -1
  7. package/components/atoms/TheIcon3.vue +50 -50
  8. package/components/atoms/modal/bySteps/BySteps.vue +253 -253
  9. package/components/atoms/stack/StackBlock.vue +185 -185
  10. package/components/atoms/table/dataGrid/DataGrid.vue +1633 -1633
  11. package/components/atoms/table/dataGrid/DataGridColumnSwitch.vue +222 -222
  12. package/components/common/browse/BrowseNew.vue +237 -237
  13. package/components/common/browse/BrowseOld.vue +217 -217
  14. package/components/common/browse/blocks/contents/Files.vue +37 -37
  15. package/components/common/browse/blocks/contents/FilesOld.vue +72 -72
  16. package/components/common/browse/blocks/contents/filesNew/FilesNew.vue +96 -96
  17. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  18. package/components/common/context/lib/models/interfaces.ts +30 -30
  19. package/components/common/context/recursion/Recursion.vue +86 -86
  20. package/components/common/context/recursion/RecursionNew.vue +199 -199
  21. package/components/common/context/recursion/RecursionOld.vue +213 -213
  22. package/components/common/layout/theHeader/helpMenu/About.vue +85 -85
  23. package/components/common/layout/theHeader/helpMenu/aboutNew/AboutNew.vue +105 -105
  24. package/components/common/mainNavigationPanel/MainNavigationPanel.vue +152 -152
  25. package/components/common/modals/confirmByInput/ConfirmByInput.vue +206 -206
  26. package/components/common/modals/unsavedChanges/UnsavedChanges.vue +56 -56
  27. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/lib/config/utils.ts +143 -2
  28. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/lib/models/interfaces.ts +1 -0
  29. package/components/common/monitor/advanced/tools/chartOptionsModal/lib/models/types.ts +1 -1
  30. package/components/common/monitor/advanced/tools/chartOptionsModal/metrics/lib/config/optionsMetrics.ts +5 -5
  31. package/components/common/monitor/overview/filters/Filters.vue +1 -3
  32. package/components/common/monitor/overview/filters/lib/config/filterOptions.ts +27 -9
  33. package/components/common/monitor/overview/filters/lib/models/interfaces.ts +1 -0
  34. package/components/common/monitor/overview/filters/lib/models/types.ts +2 -0
  35. package/components/common/monitor/resourceAllocation/lib/models/interfaces.ts +13 -0
  36. package/components/common/monitor/resourceAllocation/resourceAllocation.vue +196 -0
  37. package/components/common/spiceConsole/Drawer.vue +370 -370
  38. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  39. package/components/common/split/vertical/Vertical.vue +160 -160
  40. package/components/common/vm/actions/add/Add.vue +617 -617
  41. package/components/common/vm/actions/clone/lib/config/steps.ts +129 -129
  42. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +267 -267
  43. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +269 -269
  44. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +219 -219
  45. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusNew.vue +118 -118
  46. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveNew.vue +161 -161
  47. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +165 -165
  48. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  49. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +55 -55
  50. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +338 -338
  51. package/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/config/dropdownItems.ts +147 -147
  52. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  53. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/ModeOld.vue +55 -55
  54. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/SharingNew.vue +44 -44
  55. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +281 -281
  56. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetworkNew.vue +124 -124
  57. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/LocationOld.vue +134 -134
  58. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/New.vue +63 -63
  59. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +95 -95
  60. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  61. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressNew.vue +69 -69
  62. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressOld.vue +83 -83
  63. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDeviceNew.vue +85 -85
  64. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDeviceOld.vue +91 -91
  65. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +35 -35
  66. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoNew.vue +48 -48
  67. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  68. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  69. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  70. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridNew.vue +30 -30
  71. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/typeSelection/TypeSelectionNew.vue +46 -46
  72. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerNew.vue +56 -56
  73. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/OtherNew.vue +30 -30
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardNew.vue +107 -107
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardOld.vue +115 -115
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemoryNew.vue +54 -54
  78. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +145 -145
  79. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +102 -102
  80. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +75 -75
  81. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +26 -26
  82. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +57 -57
  83. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/FirmwareNew.vue +42 -42
  84. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/MenuNew.vue +25 -25
  85. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +171 -171
  86. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +50 -50
  87. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +141 -141
  88. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +140 -140
  89. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +30 -30
  90. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +30 -30
  91. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharingNew.vue +30 -30
  92. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  93. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapNew.vue +39 -39
  94. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  95. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +102 -102
  96. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordOld.vue +94 -94
  97. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  98. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +38 -38
  99. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  100. package/components/common/vm/actions/common/select/storage/Storage.vue +130 -130
  101. package/components/common/vm/actions/common/select/storage/StorageOld.vue +129 -129
  102. package/components/common/vm/actions/editSettings/EditSettings.vue +232 -232
  103. package/components/common/vm/actions/editSettings/EditSettingsOld.vue +183 -183
  104. package/components/common/vm/actions/editSettings/new/New.vue +177 -177
  105. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  106. package/components/common/wizards/datastore/add/Add.vue +1 -1
  107. package/components/common/wizards/datastore/add/nfs/accessibility/tablesView/TablesView.vue +1 -2
  108. package/composables/productNameLocal.ts +30 -30
  109. package/package.json +1 -1
  110. package/plugins/date.ts +233 -233
  111. package/plugins/recursion.ts +311 -311
  112. package/public/spice-console/lib/images/bitmap.js +203 -203
  113. package/public/spice-console/network/spicechannel.js +383 -383
  114. package/store/main/mutations.ts +7 -7
  115. package/store/main/state.ts +7 -7
  116. package/store/tasks/mappers/recentTasks.ts +64 -64
@@ -1,219 +1,219 @@
1
- <template>
2
- <div>
3
- <common-browse
4
- v-model:selected-file="selectedFile"
5
- v-model:selected-file-type="selectedFileType"
6
- :show="props.show"
7
- :nodes="props.nodes"
8
- :files="files"
9
- :info="selectedNodeInfo"
10
- :file-types="props.fileTypes"
11
- :browse-loading="browseLoading"
12
- @get-nodes="onGetCurrentDirNodes"
13
- @select-node="onSelectNode"
14
- @submit="onSubmit"
15
- @hide="emits('hide')"
16
- />
17
- </div>
18
- </template>
19
-
20
- <script lang="ts" setup>
21
- import type { UI_I_FileTreeNode } from '~/components/lib/models/interfaces'
22
- import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
23
- import type { UI_I_FolderOrFileTreePayload } from '~/lib/models/store/storage/interfaces'
24
- import type { UI_I_CurrentDirNodesArguments } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/lib/models/interfaces'
25
- import type { UI_I_Localization } from '~/lib/models/interfaces'
26
- import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
27
- import type { UI_I_FileInfo } from '~/components/common/browse/lib/models/interfaces'
28
-
29
- const props = defineProps<{
30
- show: boolean
31
- nodes: UI_I_FileTreeNode[]
32
- files: UI_I_FileTreeNode[]
33
- fileTypes?: UI_I_OptionItem[]
34
- }>()
35
- const emits = defineEmits<{
36
- (event: 'hide'): void
37
- (event: 'submit', value: UI_I_FileTreeNode | null): void
38
- (event: 'get-storage', value: UI_I_TablePayload): void
39
- (event: 'get-folders-or-files', value: UI_I_FolderOrFileTreePayload): void
40
- (event: 'get-active-device-child', value: UI_I_FileTreeNode): void
41
- (event: 'show-datastore-child', value: UI_I_FileTreeNode): void
42
- }>()
43
-
44
- const { $recursion } = useNuxtApp()
45
-
46
- const localization = computed<UI_I_Localization>(() => useLocal())
47
-
48
- const selectedFileType = ref<string | null>(null)
49
- watch(
50
- selectedFileType,
51
- (newValue) => {
52
- if (newValue === null || selectedFile.value === null) return
53
-
54
- const isExist = files.value.includes(selectedFile.value)
55
- if (!isExist) selectedFile.value = null
56
- },
57
- { immediate: true, deep: true }
58
- )
59
- watch(
60
- () => props.fileTypes,
61
- (newValue) => {
62
- if (newValue?.length) selectedFileType.value = newValue[0].value
63
- },
64
- { immediate: true, deep: true }
65
- )
66
-
67
- const getStorage = (): void => {
68
- const payload: UI_I_TablePayload = {
69
- pagination: {
70
- page: 1,
71
- pageSize: 100,
72
- },
73
- sortBy: null,
74
- type: 'datastore',
75
- schema: 'full',
76
- }
77
-
78
- emits('get-storage', payload)
79
- }
80
- getStorage()
81
-
82
- const getFileNodes = (payload: UI_I_FolderOrFileTreePayload): void => {
83
- emits('get-folders-or-files', payload)
84
- }
85
-
86
- const files = computed<UI_I_FileTreeNode[]>(() => {
87
- if (!selectedNode.value) return []
88
-
89
- const files: UI_I_FileTreeNode[] = props.files
90
- if (selectedFileType.value === 'all' || selectedFileType.value === null)
91
- return files
92
-
93
- let type = 3
94
- if (selectedFileType.value === 'iso') type = 2
95
-
96
- return files.filter((file) => file.provisioned_type === type)
97
- })
98
-
99
- const getRootNodeById = (id: string): UI_I_FileTreeNode | null => {
100
- let result = null
101
- props.nodes.forEach((node) => {
102
- const findNode =
103
- node.id === id ? node : $recursion.find(node.nodes, id, 'id', 'nodes')
104
-
105
- findNode && (result = node)
106
- })
107
-
108
- return result
109
- }
110
- const onGetCurrentDirNodes = async ({
111
- node,
112
- cb,
113
- select = false,
114
- type = 'folder',
115
- }: UI_I_CurrentDirNodesArguments): Promise<void> => {
116
- if (!node) return
117
-
118
- const isRootNode = props.nodes?.some((item) => item.id === node.id)
119
-
120
- if (!select && (isRootNode || node.nodesShow)) {
121
- emits('show-datastore-child', node)
122
- cb && cb()
123
- return
124
- }
125
-
126
- const rootNode = getRootNodeById(node.id)
127
- if (!rootNode) return
128
-
129
- const payload: UI_I_FolderOrFileTreePayload = {
130
- type,
131
- id: rootNode.id,
132
- path: node.path,
133
- merge: true,
134
- show: !select,
135
- }
136
-
137
- await getFileNodes(payload)
138
- cb && cb()
139
- }
140
-
141
- const selectedNode = ref<UI_I_FileTreeNode | null>(null)
142
- const selectedFile = ref<UI_I_FileTreeNode | null>(null)
143
- const selectedNodeInfo = computed<UI_I_FileInfo[] | null>(() => {
144
- const node = selectedFile.value || selectedNode.value
145
- if (!node) return null
146
-
147
- const result = [
148
- {
149
- type: 'text',
150
- title: localization.value.common.name,
151
- value: node.name || '',
152
- },
153
- {
154
- type: 'size',
155
- title: localization.value.common.available,
156
- value: node.size || 0,
157
- },
158
- ]
159
-
160
- if (node.type !== 4) {
161
- const modified = node.modified_time || 0
162
- result.push({
163
- type: 'date',
164
- title: localization.value.common.modified,
165
- value: +modified * 1000,
166
- })
167
- }
168
-
169
- return result
170
- })
171
-
172
- // TODO найти решение получше
173
- const browseLoading = ref<boolean>(false)
174
- const onSelectNode = (node: UI_I_FileTreeNode): void => {
175
- selectedNode.value = node
176
- selectedFile.value = null
177
-
178
- onGetCurrentDirNodes({ node, select: true, type: 'file' })
179
-
180
- emits('get-active-device-child', node)
181
-
182
- setTimeout(() => {
183
- browseLoading.value = true
184
- }, 0)
185
- }
186
- watch(
187
- files,
188
- () => {
189
- browseLoading.value = false
190
- },
191
- { immediate: true, deep: true }
192
- )
193
-
194
- const onSubmit = (): void => {
195
- emits('submit', selectedFile.value)
196
- emits('hide')
197
- }
198
-
199
- let helper = false
200
- watch(
201
- () => props.nodes,
202
- (newValue: UI_I_FileTreeNode[]) => {
203
- if (helper || !newValue.length) return
204
- newValue.forEach((node) => {
205
- getFileNodes({
206
- id: node.id,
207
- path: `${node.id}:/`,
208
- type: 'folder',
209
- show: false,
210
- merge: false,
211
- })
212
- })
213
- helper = true
214
- },
215
- { immediate: true }
216
- )
217
- </script>
218
-
219
- <style lang="scss" scoped></style>
1
+ <template>
2
+ <div>
3
+ <common-browse
4
+ v-model:selected-file="selectedFile"
5
+ v-model:selected-file-type="selectedFileType"
6
+ :show="props.show"
7
+ :nodes="props.nodes"
8
+ :files="files"
9
+ :info="selectedNodeInfo"
10
+ :file-types="props.fileTypes"
11
+ :browse-loading="browseLoading"
12
+ @get-nodes="onGetCurrentDirNodes"
13
+ @select-node="onSelectNode"
14
+ @submit="onSubmit"
15
+ @hide="emits('hide')"
16
+ />
17
+ </div>
18
+ </template>
19
+
20
+ <script lang="ts" setup>
21
+ import type { UI_I_FileTreeNode } from '~/components/lib/models/interfaces'
22
+ import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
23
+ import type { UI_I_FolderOrFileTreePayload } from '~/lib/models/store/storage/interfaces'
24
+ import type { UI_I_CurrentDirNodesArguments } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/lib/models/interfaces'
25
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
26
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
27
+ import type { UI_I_FileInfo } from '~/components/common/browse/lib/models/interfaces'
28
+
29
+ const props = defineProps<{
30
+ show: boolean
31
+ nodes: UI_I_FileTreeNode[]
32
+ files: UI_I_FileTreeNode[]
33
+ fileTypes?: UI_I_OptionItem[]
34
+ }>()
35
+ const emits = defineEmits<{
36
+ (event: 'hide'): void
37
+ (event: 'submit', value: UI_I_FileTreeNode | null): void
38
+ (event: 'get-storage', value: UI_I_TablePayload): void
39
+ (event: 'get-folders-or-files', value: UI_I_FolderOrFileTreePayload): void
40
+ (event: 'get-active-device-child', value: UI_I_FileTreeNode): void
41
+ (event: 'show-datastore-child', value: UI_I_FileTreeNode): void
42
+ }>()
43
+
44
+ const { $recursion } = useNuxtApp()
45
+
46
+ const localization = computed<UI_I_Localization>(() => useLocal())
47
+
48
+ const selectedFileType = ref<string | null>(null)
49
+ watch(
50
+ selectedFileType,
51
+ (newValue) => {
52
+ if (newValue === null || selectedFile.value === null) return
53
+
54
+ const isExist = files.value.includes(selectedFile.value)
55
+ if (!isExist) selectedFile.value = null
56
+ },
57
+ { immediate: true, deep: true }
58
+ )
59
+ watch(
60
+ () => props.fileTypes,
61
+ (newValue) => {
62
+ if (newValue?.length) selectedFileType.value = newValue[0].value
63
+ },
64
+ { immediate: true, deep: true }
65
+ )
66
+
67
+ const getStorage = (): void => {
68
+ const payload: UI_I_TablePayload = {
69
+ pagination: {
70
+ page: 1,
71
+ pageSize: 100,
72
+ },
73
+ sortBy: null,
74
+ type: 'datastore',
75
+ schema: 'full',
76
+ }
77
+
78
+ emits('get-storage', payload)
79
+ }
80
+ getStorage()
81
+
82
+ const getFileNodes = (payload: UI_I_FolderOrFileTreePayload): void => {
83
+ emits('get-folders-or-files', payload)
84
+ }
85
+
86
+ const files = computed<UI_I_FileTreeNode[]>(() => {
87
+ if (!selectedNode.value) return []
88
+
89
+ const files: UI_I_FileTreeNode[] = props.files
90
+ if (selectedFileType.value === 'all' || selectedFileType.value === null)
91
+ return files
92
+
93
+ let type = 3
94
+ if (selectedFileType.value === 'iso') type = 2
95
+
96
+ return files.filter((file) => file.provisioned_type === type)
97
+ })
98
+
99
+ const getRootNodeById = (id: string): UI_I_FileTreeNode | null => {
100
+ let result = null
101
+ props.nodes.forEach((node) => {
102
+ const findNode =
103
+ node.id === id ? node : $recursion.find(node.nodes, id, 'id', 'nodes')
104
+
105
+ findNode && (result = node)
106
+ })
107
+
108
+ return result
109
+ }
110
+ const onGetCurrentDirNodes = async ({
111
+ node,
112
+ cb,
113
+ select = false,
114
+ type = 'folder',
115
+ }: UI_I_CurrentDirNodesArguments): Promise<void> => {
116
+ if (!node) return
117
+
118
+ const isRootNode = props.nodes?.some((item) => item.id === node.id)
119
+
120
+ if (!select && (isRootNode || node.nodesShow)) {
121
+ emits('show-datastore-child', node)
122
+ cb && cb()
123
+ return
124
+ }
125
+
126
+ const rootNode = getRootNodeById(node.id)
127
+ if (!rootNode) return
128
+
129
+ const payload: UI_I_FolderOrFileTreePayload = {
130
+ type,
131
+ id: rootNode.id,
132
+ path: node.path,
133
+ merge: true,
134
+ show: !select,
135
+ }
136
+
137
+ await getFileNodes(payload)
138
+ cb && cb()
139
+ }
140
+
141
+ const selectedNode = ref<UI_I_FileTreeNode | null>(null)
142
+ const selectedFile = ref<UI_I_FileTreeNode | null>(null)
143
+ const selectedNodeInfo = computed<UI_I_FileInfo[] | null>(() => {
144
+ const node = selectedFile.value || selectedNode.value
145
+ if (!node) return null
146
+
147
+ const result = [
148
+ {
149
+ type: 'text',
150
+ title: localization.value.common.name,
151
+ value: node.name || '',
152
+ },
153
+ {
154
+ type: 'size',
155
+ title: localization.value.common.available,
156
+ value: node.size || 0,
157
+ },
158
+ ]
159
+
160
+ if (node.type !== 4) {
161
+ const modified = node.modified_time || 0
162
+ result.push({
163
+ type: 'date',
164
+ title: localization.value.common.modified,
165
+ value: +modified * 1000,
166
+ })
167
+ }
168
+
169
+ return result
170
+ })
171
+
172
+ // TODO найти решение получше
173
+ const browseLoading = ref<boolean>(false)
174
+ const onSelectNode = (node: UI_I_FileTreeNode): void => {
175
+ selectedNode.value = node
176
+ selectedFile.value = null
177
+
178
+ onGetCurrentDirNodes({ node, select: true, type: 'file' })
179
+
180
+ emits('get-active-device-child', node)
181
+
182
+ setTimeout(() => {
183
+ browseLoading.value = true
184
+ }, 0)
185
+ }
186
+ watch(
187
+ files,
188
+ () => {
189
+ browseLoading.value = false
190
+ },
191
+ { immediate: true, deep: true }
192
+ )
193
+
194
+ const onSubmit = (): void => {
195
+ emits('submit', selectedFile.value)
196
+ emits('hide')
197
+ }
198
+
199
+ let helper = false
200
+ watch(
201
+ () => props.nodes,
202
+ (newValue: UI_I_FileTreeNode[]) => {
203
+ if (helper || !newValue.length) return
204
+ newValue.forEach((node) => {
205
+ getFileNodes({
206
+ id: node.id,
207
+ path: `${node.id}:/`,
208
+ type: 'folder',
209
+ show: false,
210
+ merge: false,
211
+ })
212
+ })
213
+ helper = true
214
+ },
215
+ { immediate: true }
216
+ )
217
+ </script>
218
+
219
+ <style lang="scss" scoped></style>
@@ -1,118 +1,118 @@
1
- <template>
2
- <ui-stack-block :has-children="false">
3
- <template #stackBlockKey>
4
- {{ localization.common.bus }}
5
- </template>
6
- <template #stackBlockContent>
7
- <div class="flex-align-center justify-between">
8
- <ui-select
9
- :id="`vm-wizard-${props.componentType}-bus-field-${props.index}`"
10
- v-model="bus"
11
- width="auto"
12
- :items="props.busOptions"
13
- :disabled="props.disabled"
14
- :test-id="`${props.testId}-select`"
15
- :class="`vm-wizard-${props.componentType}-bus-field-${props.index}`"
16
- :error-text="props.errorText"
17
- @click.stop
18
- />
19
-
20
- <div v-if="props.helpText" :id="props.helpId" class="flex-align-center relative">
21
- <ui-icon
22
- fill="#0072a3"
23
- width="16"
24
- height="16"
25
- name="info"
26
- :data-id="`${props.testId}-show-help-icon`"
27
- class="pointer"
28
- @click.stop="isShowHelp = !isShowHelp"
29
- />
30
- <Teleport to="body">
31
- <ui-dropdown
32
- :show="isShowHelp"
33
- :elem-id="props.helpId"
34
- test-id=""
35
- :items="[]"
36
- width="auto"
37
- show-from-left
38
- @hide="isShowHelp = false"
39
- >
40
- <template #content>
41
- <div class="help-content">
42
- <div class="headline">
43
- <ui-icon name="info-2" width="16" height="16" />
44
- <h3 class="help-title">
45
- {{ localization.mainNavigation.help }}
46
- </h3>
47
- <ui-icon
48
- name="close"
49
- width="16"
50
- height="16"
51
- class="pointer"
52
- @click="isShowHelp = false"
53
- />
54
- </div>
55
-
56
- <p class="help-text">
57
- {{ props.helpText }}
58
- </p>
59
- </div>
60
- </template>
61
- </ui-dropdown>
62
- </Teleport>
63
- </div>
64
- </div>
65
- </template>
66
- </ui-stack-block>
67
- </template>
68
-
69
- <script setup lang="ts">
70
- import type { UI_I_Localization } from '~/lib/models/interfaces'
71
- import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
72
-
73
- const bus = defineModel<string>('bus')
74
- const isShowHelp = defineModel<boolean>('isShowHelp')
75
-
76
- const props = defineProps<{
77
- index: number
78
- componentType: string
79
- testId: string
80
- errorText: string
81
- busOptions: UI_I_OptionItem[]
82
- helpId: string
83
- disabled?: boolean
84
- helpText?: string
85
- }>()
86
- // const emits = defineEmits<{
87
- // (event: 'remove-error'): void
88
- // }>()
89
-
90
- const localization = computed<UI_I_Localization>(() => useLocal())
91
- </script>
92
-
93
- <style scoped>
94
- .help-content {
95
- padding: 16px;
96
-
97
- .headline {
98
- display: flex;
99
- align-items: center;
100
- gap: 8px;
101
- margin-bottom: 12px;
102
-
103
- .help-title {
104
- flex: 1;
105
- font-size: 14px;
106
- font-weight: 500;
107
- line-height: 16.94px;
108
- color: #4d5d69;
109
- }
110
- }
111
-
112
- .help-text {
113
- font-size: 13px;
114
- line-height: 15.73px;
115
- color: #4d5d69;
116
- }
117
- }
118
- </style>
1
+ <template>
2
+ <ui-stack-block :has-children="false">
3
+ <template #stackBlockKey>
4
+ {{ localization.common.bus }}
5
+ </template>
6
+ <template #stackBlockContent>
7
+ <div class="flex-align-center justify-between">
8
+ <ui-select
9
+ :id="`vm-wizard-${props.componentType}-bus-field-${props.index}`"
10
+ v-model="bus"
11
+ width="auto"
12
+ :items="props.busOptions"
13
+ :disabled="props.disabled"
14
+ :test-id="`${props.testId}-select`"
15
+ :class="`vm-wizard-${props.componentType}-bus-field-${props.index}`"
16
+ :error-text="props.errorText"
17
+ @click.stop
18
+ />
19
+
20
+ <div v-if="props.helpText" :id="props.helpId" class="flex-align-center relative">
21
+ <ui-icon
22
+ fill="#0072a3"
23
+ width="16"
24
+ height="16"
25
+ name="info"
26
+ :data-id="`${props.testId}-show-help-icon`"
27
+ class="pointer"
28
+ @click.stop="isShowHelp = !isShowHelp"
29
+ />
30
+ <Teleport to="body">
31
+ <ui-dropdown
32
+ :show="isShowHelp"
33
+ :elem-id="props.helpId"
34
+ test-id=""
35
+ :items="[]"
36
+ width="auto"
37
+ show-from-left
38
+ @hide="isShowHelp = false"
39
+ >
40
+ <template #content>
41
+ <div class="help-content">
42
+ <div class="headline">
43
+ <ui-icon name="info-2" width="16" height="16" />
44
+ <h3 class="help-title">
45
+ {{ localization.mainNavigation.help }}
46
+ </h3>
47
+ <ui-icon
48
+ name="close"
49
+ width="16"
50
+ height="16"
51
+ class="pointer"
52
+ @click="isShowHelp = false"
53
+ />
54
+ </div>
55
+
56
+ <p class="help-text">
57
+ {{ props.helpText }}
58
+ </p>
59
+ </div>
60
+ </template>
61
+ </ui-dropdown>
62
+ </Teleport>
63
+ </div>
64
+ </div>
65
+ </template>
66
+ </ui-stack-block>
67
+ </template>
68
+
69
+ <script setup lang="ts">
70
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
71
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
72
+
73
+ const bus = defineModel<string>('bus')
74
+ const isShowHelp = defineModel<boolean>('isShowHelp')
75
+
76
+ const props = defineProps<{
77
+ index: number
78
+ componentType: string
79
+ testId: string
80
+ errorText: string
81
+ busOptions: UI_I_OptionItem[]
82
+ helpId: string
83
+ disabled?: boolean
84
+ helpText?: string
85
+ }>()
86
+ // const emits = defineEmits<{
87
+ // (event: 'remove-error'): void
88
+ // }>()
89
+
90
+ const localization = computed<UI_I_Localization>(() => useLocal())
91
+ </script>
92
+
93
+ <style scoped>
94
+ .help-content {
95
+ padding: 16px;
96
+
97
+ .headline {
98
+ display: flex;
99
+ align-items: center;
100
+ gap: 8px;
101
+ margin-bottom: 12px;
102
+
103
+ .help-title {
104
+ flex: 1;
105
+ font-size: 14px;
106
+ font-weight: 500;
107
+ line-height: 16.94px;
108
+ color: #4d5d69;
109
+ }
110
+ }
111
+
112
+ .help-text {
113
+ font-size: 13px;
114
+ line-height: 15.73px;
115
+ color: #4d5d69;
116
+ }
117
+ }
118
+ </style>