bfg-common 1.5.660 → 1.5.661

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 (107) 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 +1 -7
  7. package/assets/localization/local_en.json +1 -7
  8. package/assets/localization/local_hy.json +1 -7
  9. package/assets/localization/local_kk.json +1 -7
  10. package/assets/localization/local_ru.json +1 -7
  11. package/assets/localization/local_zh.json +1 -7
  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/blocks/contents/filesNew/Skeleton.vue +18 -18
  21. package/components/common/diagramMain/modals/lib/config/vCenterModal.ts +48 -48
  22. package/components/common/diagramMain/port/Port.vue +580 -580
  23. package/components/common/layout/theHeader/TheHeaderNew.vue +315 -315
  24. package/components/common/layout/theHeader/TheHeaderOld.vue +262 -262
  25. package/components/common/layout/theHeader/helpMenu/About.vue +79 -79
  26. package/components/common/layout/theHeader/helpMenu/aboutOld/AboutOld.vue +79 -79
  27. package/components/common/layout/theHeader/userMenu/modals/changePassword/ChangePassword.vue +99 -99
  28. package/components/common/layout/theHeader/userMenu/modals/changePassword/New.vue +193 -193
  29. package/components/common/layout/theHeader/userMenu/modals/preferences/PreferencesOld.vue +144 -144
  30. package/components/common/layout/theHeader/userMenu/modals/preferences/lib/models/types.ts +7 -7
  31. package/components/common/layout/theHeader/userMenu/modals/preferences/security/Old.vue +210 -210
  32. package/components/common/layout/theHeader/userMenu/modals/preferences/security/Security.vue +31 -31
  33. package/components/common/pages/backups/DetailView.vue +52 -52
  34. package/components/common/pages/backups/lib/models/interfaces.ts +36 -36
  35. package/components/common/pages/backups/modals/Modals.vue +243 -243
  36. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/lib/config/options.ts +6 -6
  37. package/components/common/pages/backups/modals/createBackup/lib/config/readyToCompleteOptions.ts +69 -69
  38. package/components/common/pages/backups/modals/lib/config/restore.ts +115 -115
  39. package/components/common/pages/backups/modals/lib/models/interfaces.ts +186 -186
  40. package/components/common/pages/backups/modals/restore/name/lib/models/interfaces.ts +6 -6
  41. package/components/common/pages/hardwareHealth/toolsPanel/lib/config/actionsPanel.ts +4 -4
  42. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  43. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  44. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  45. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  46. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  47. package/components/common/pages/scheduledTasks/lib/utils/utils.ts +84 -84
  48. package/components/common/qr/Qr.vue +57 -0
  49. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  50. package/components/common/select/radio/RadioGroup.vue +137 -137
  51. package/components/common/spiceConsole/Drawer.vue +420 -420
  52. package/components/common/spiceConsole/SpiceConsole.vue +184 -184
  53. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  54. package/components/common/tools/Actions.vue +207 -207
  55. package/components/common/treeView/TreeView.vue +52 -52
  56. package/components/common/vm/actions/clone/lib/config/steps.ts +295 -295
  57. package/components/common/vm/actions/clone/new/New.vue +438 -438
  58. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  59. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/Memory.vue +283 -283
  60. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +156 -156
  61. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  62. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  63. package/components/common/vm/actions/common/select/options/New.vue +264 -264
  64. package/components/common/vm/actions/common/select/options/Old.vue +110 -110
  65. package/components/common/vm/actions/common/select/options/Options.vue +58 -58
  66. package/components/common/vm/actions/common/select/storage/Old.vue +125 -125
  67. package/components/common/vm/actions/common/select/storage/new/New.vue +311 -311
  68. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  69. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  70. package/components/common/vm/actions/common/select/template/old/Old.vue +50 -50
  71. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  72. package/components/common/wizards/common/compatibility/Compatibility.vue +35 -35
  73. package/components/common/wizards/common/compatibility/New.vue +99 -99
  74. package/components/common/wizards/common/compatibility/Old.vue +53 -53
  75. package/components/common/wizards/common/steps/computeResource/New.vue +93 -93
  76. package/components/common/wizards/common/steps/name/Name.vue +178 -178
  77. package/components/common/wizards/common/steps/name/New.vue +221 -221
  78. package/components/common/wizards/common/steps/name/Old.vue +121 -121
  79. package/components/common/wizards/common/steps/name/lib/models/interfaces.ts +4 -4
  80. package/components/common/wizards/common/steps/name/location/New.vue +40 -40
  81. package/components/common/wizards/datastore/add/Add.vue +228 -228
  82. package/components/common/wizards/datastore/add/lib/utils.ts +85 -85
  83. package/components/common/wizards/datastore/add/steps/typeMode/lib/config/typeOptions.ts +43 -43
  84. package/composables/useAppVersion.ts +21 -21
  85. package/composables/useLocal.ts +6 -6
  86. package/composables/useLocalCommon.ts +39 -39
  87. package/nuxt.config.ts +1 -0
  88. package/package.json +3 -3
  89. package/plugins/console.ts +21 -21
  90. package/plugins/mouse.ts +21 -21
  91. package/plugins/panelStates.ts +70 -70
  92. package/plugins/text.ts +59 -59
  93. package/public/spice-console/application/clientgui.js +854 -854
  94. package/public/spice-console/application/packetfactory.js +211 -211
  95. package/public/spice-console/application/virtualmouse.js +147 -147
  96. package/public/spice-console/lib/images/bitmap.js +203 -203
  97. package/public/spice-console/network/spicechannel.js +440 -440
  98. package/public/spice-console/process/cursorprocess.js +128 -128
  99. package/public/spice-console/process/inputprocess.js +227 -227
  100. package/public/spice-console/process/mainprocess.js +212 -212
  101. package/public/spice-console/run.js +210 -210
  102. package/store/main/mutations.ts +7 -7
  103. package/store/main/state.ts +7 -7
  104. package/store/tasks/actions.ts +165 -165
  105. package/store/tasks/mappers/recentTasks.ts +123 -123
  106. package/store/tasks/mutations.ts +82 -82
  107. package/components/common/qrcode/Qrcode.vue +0 -56
@@ -1,210 +1,210 @@
1
- <template>
2
- <form id="security-form" class="compact" @submit.prevent>
3
- <div class="description">
4
- {{ localization.myPreferences.twoFactorAuthentication }}
5
- </div>
6
-
7
- <div class="flex-align-center">
8
- <label for="security">{{
9
- localization.myPreferences.securityLabel
10
- }}</label>
11
- <input id="security" v-model="security" type="checkbox" class="switch" />
12
- </div>
13
-
14
- <div
15
- v-if="
16
- props.recovery && security && !initialSecurity && !otpEnabledSuccess
17
- "
18
- class="recovery-codes-wrap"
19
- >
20
- <p>
21
- {{ localization.myPreferences.enterOtpForEnabled }}
22
- </p>
23
-
24
- <div class="recovery-codes">
25
- <common-qrcode :qr-code-url="props.recovery.qr_code_url" />
26
-
27
- <span>{{ localization.common.or }}</span>
28
-
29
- <ul class="recovery-codes-list">
30
- <li
31
- v-for="item in props.recovery.recovery_codes"
32
- :key="item"
33
- class="recovery-codes-list-item"
34
- >
35
- {{ item }}
36
- </li>
37
- </ul>
38
- </div>
39
- <section class="form-block">
40
- <div class="form-group">
41
- <label for="otp">{{ localization.myPreferences.enterOtpForEnabled }}</label>
42
- <input id="otp" v-model="otp" type="text" />
43
- <button class="btn btn-sm btn-primary" @click="onConfirm">
44
- {{ localization.common.confirm }}
45
- </button>
46
- <atoms-loader v-if="isOtpLoading" test-id="2fa-enabled-loader" />
47
- </div>
48
- </section>
49
- </div>
50
-
51
- <div v-if="!security && initialSecurity && !otpDisabledSuccess">
52
- <section class="form-block">
53
- <div class="form-group">
54
- <label for="otp"
55
- >{{ localization.myPreferences.enterOtpForDisabled }}</label
56
- >
57
- <input id="otp" v-model="otp" type="text" />
58
- <button class="btn btn-sm btn-primary" @click="onDisabled">
59
- {{ localization.common.confirm }}
60
- </button>
61
- <atoms-loader v-if="isOtpLoading" test-id="2fa-disabled-loader"/>
62
- </div>
63
- </section>
64
- </div>
65
- </form>
66
- </template>
67
-
68
- <script setup lang="ts">
69
- import type { UI_I_Localization } from '~/lib/models/interfaces'
70
- import type { UI_I_Recovery } from '~/components/common/layout/theHeader/userMenu/modals/preferences/security/lib/models/interfaces'
71
-
72
- const security = defineModel<boolean>('security')
73
-
74
- const props = defineProps<{
75
- recovery?: UI_I_Recovery
76
- }>()
77
- const emits = defineEmits<{
78
- (event: 'confirm', value: boolean): void
79
- }>()
80
-
81
- const localization = computed<UI_I_Localization>(() => useLocal())
82
-
83
- const initialSecurity = ref<boolean>(security.value || false)
84
-
85
- // TODO refactoring and move to Sphere
86
- const otp = ref<string>('')
87
- const isOtpLoading = ref<boolean>(false)
88
-
89
- const otpEnabledSuccess = ref<boolean>(false)
90
- const onConfirm = async (): Promise<void> => {
91
- isOtpLoading.value = true
92
- const { data } = await useMyFetch<any, any>('ui/auth/2fa/confirm', {
93
- method: 'POST',
94
- body: {
95
- otp: otp.value,
96
- },
97
- })
98
- if (data.value) {
99
- otpEnabledSuccess.value = true
100
- otpDisabledSuccess.value = false
101
- emits('confirm', true)
102
- }
103
- isOtpLoading.value = false
104
- }
105
-
106
- const otpDisabledSuccess = ref<boolean>(false)
107
- const onDisabled = async (): Promise<void> => {
108
- isOtpLoading.value = true
109
- const { data } = await useMyFetch<any, I_ErrorResponse>(
110
- 'ui/auth/2fa/disable',
111
- {
112
- method: 'POST',
113
- body: {
114
- otp: otp.value,
115
- },
116
- }
117
- )
118
- if (data.value) {
119
- otpDisabledSuccess.value = true
120
- otpEnabledSuccess.value = false
121
- emits('confirm', false)
122
- }
123
- isOtpLoading.value = false
124
- }
125
- </script>
126
-
127
- <style lang="scss" scoped>
128
- .description {
129
- margin-bottom: 10px;
130
- }
131
-
132
- .recovery-codes-wrap {
133
- margin: 10px 0;
134
-
135
- .recovery-codes {
136
- display: flex;
137
- align-items: center;
138
- justify-content: space-evenly;
139
-
140
- .recovery-codes-list-item {
141
- font-size: 12px;
142
- }
143
- }
144
- }
145
-
146
- label {
147
- margin-right: 6px;
148
- }
149
-
150
- // TODO повторяется в ../view, необходимо вынести глобально
151
- input[type='checkbox'] {
152
- --active: var(--checkbox-value-active-color);
153
- --active-inner: var(--checkbox-mark-color);
154
- --border: var(--checkbox-mark-color);
155
- --background: var(--checkbox-mark-background-color);
156
- -webkit-appearance: none;
157
- -moz-appearance: none;
158
- height: 20px;
159
- outline: none;
160
- display: inline-block;
161
- vertical-align: top;
162
- position: relative;
163
- margin: 0;
164
- cursor: pointer;
165
- border: 1px solid var(--bc, var(--border));
166
- background: var(--b, var(--background));
167
- transition: background 0.3s, border-color 0.3s, box-shadow 0.2s;
168
- &:after {
169
- content: '';
170
- display: block;
171
- left: 0;
172
- top: 0;
173
- position: absolute;
174
- transition: transform var(--d-t, 0.3s) var(--d-t-e, ease),
175
- opacity var(--d-o, 0.2s);
176
- }
177
- &:checked {
178
- --b: var(--active);
179
- --bc: var(--active);
180
- --d-o: 0.3s;
181
- --d-t: 0.6s;
182
- --d-t-e: cubic-bezier(0.2, 0.85, 0.32, 1.2);
183
- }
184
- }
185
- input[type='checkbox'] {
186
- &.switch {
187
- width: 35px;
188
- border-radius: 11px;
189
- &:after {
190
- left: 2px;
191
- top: 2px;
192
- bottom: 2px;
193
- border-radius: 50%;
194
- width: 14px;
195
- height: 14px;
196
- border: 1px solid var(--bc, var(--border));
197
- background: var(--ab, var(--border));
198
- transform: translateX(var(--x, 0));
199
- }
200
- &:checked {
201
- --ab: var(--active-inner);
202
- --x: 14px;
203
- }
204
- &:disabled {
205
- cursor: not-allowed;
206
- opacity: 0.5;
207
- }
208
- }
209
- }
210
- </style>
1
+ <template>
2
+ <form id="security-form" class="compact" @submit.prevent>
3
+ <div class="description">
4
+ {{ localization.myPreferences.twoFactorAuthentication }}
5
+ </div>
6
+
7
+ <div class="flex-align-center">
8
+ <label for="security">{{
9
+ localization.myPreferences.securityLabel
10
+ }}</label>
11
+ <input id="security" v-model="security" type="checkbox" class="switch" />
12
+ </div>
13
+
14
+ <div
15
+ v-if="
16
+ props.recovery && security && !initialSecurity && !otpEnabledSuccess
17
+ "
18
+ class="recovery-codes-wrap"
19
+ >
20
+ <p>
21
+ {{ localization.myPreferences.enterOtpForEnabled }}
22
+ </p>
23
+
24
+ <div class="recovery-codes">
25
+ <common-qrcode :qr-code-url="props.recovery.qr_code_url" />
26
+
27
+ <span>{{ localization.common.or }}</span>
28
+
29
+ <ul class="recovery-codes-list">
30
+ <li
31
+ v-for="item in props.recovery.recovery_codes"
32
+ :key="item"
33
+ class="recovery-codes-list-item"
34
+ >
35
+ {{ item }}
36
+ </li>
37
+ </ul>
38
+ </div>
39
+ <section class="form-block">
40
+ <div class="form-group">
41
+ <label for="otp">{{ localization.myPreferences.enterOtpForEnabled }}</label>
42
+ <input id="otp" v-model="otp" type="text" />
43
+ <button class="btn btn-sm btn-primary" @click="onConfirm">
44
+ {{ localization.common.confirm }}
45
+ </button>
46
+ <atoms-loader v-if="isOtpLoading" test-id="2fa-enabled-loader" />
47
+ </div>
48
+ </section>
49
+ </div>
50
+
51
+ <div v-if="!security && initialSecurity && !otpDisabledSuccess">
52
+ <section class="form-block">
53
+ <div class="form-group">
54
+ <label for="otp"
55
+ >{{ localization.myPreferences.enterOtpForDisabled }}</label
56
+ >
57
+ <input id="otp" v-model="otp" type="text" />
58
+ <button class="btn btn-sm btn-primary" @click="onDisabled">
59
+ {{ localization.common.confirm }}
60
+ </button>
61
+ <atoms-loader v-if="isOtpLoading" test-id="2fa-disabled-loader"/>
62
+ </div>
63
+ </section>
64
+ </div>
65
+ </form>
66
+ </template>
67
+
68
+ <script setup lang="ts">
69
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
70
+ import type { UI_I_Recovery } from '~/components/common/layout/theHeader/userMenu/modals/preferences/security/lib/models/interfaces'
71
+
72
+ const security = defineModel<boolean>('security')
73
+
74
+ const props = defineProps<{
75
+ recovery?: UI_I_Recovery
76
+ }>()
77
+ const emits = defineEmits<{
78
+ (event: 'confirm', value: boolean): void
79
+ }>()
80
+
81
+ const localization = computed<UI_I_Localization>(() => useLocal())
82
+
83
+ const initialSecurity = ref<boolean>(security.value || false)
84
+
85
+ // TODO refactoring and move to Sphere
86
+ const otp = ref<string>('')
87
+ const isOtpLoading = ref<boolean>(false)
88
+
89
+ const otpEnabledSuccess = ref<boolean>(false)
90
+ const onConfirm = async (): Promise<void> => {
91
+ isOtpLoading.value = true
92
+ const { data } = await useMyFetch<any, any>('ui/auth/2fa/confirm', {
93
+ method: 'POST',
94
+ body: {
95
+ otp: otp.value,
96
+ },
97
+ })
98
+ if (data.value) {
99
+ otpEnabledSuccess.value = true
100
+ otpDisabledSuccess.value = false
101
+ emits('confirm', true)
102
+ }
103
+ isOtpLoading.value = false
104
+ }
105
+
106
+ const otpDisabledSuccess = ref<boolean>(false)
107
+ const onDisabled = async (): Promise<void> => {
108
+ isOtpLoading.value = true
109
+ const { data } = await useMyFetch<any, I_ErrorResponse>(
110
+ 'ui/auth/2fa/disable',
111
+ {
112
+ method: 'POST',
113
+ body: {
114
+ otp: otp.value,
115
+ },
116
+ }
117
+ )
118
+ if (data.value) {
119
+ otpDisabledSuccess.value = true
120
+ otpEnabledSuccess.value = false
121
+ emits('confirm', false)
122
+ }
123
+ isOtpLoading.value = false
124
+ }
125
+ </script>
126
+
127
+ <style lang="scss" scoped>
128
+ .description {
129
+ margin-bottom: 10px;
130
+ }
131
+
132
+ .recovery-codes-wrap {
133
+ margin: 10px 0;
134
+
135
+ .recovery-codes {
136
+ display: flex;
137
+ align-items: center;
138
+ justify-content: space-evenly;
139
+
140
+ .recovery-codes-list-item {
141
+ font-size: 12px;
142
+ }
143
+ }
144
+ }
145
+
146
+ label {
147
+ margin-right: 6px;
148
+ }
149
+
150
+ // TODO повторяется в ../view, необходимо вынести глобально
151
+ input[type='checkbox'] {
152
+ --active: var(--checkbox-value-active-color);
153
+ --active-inner: var(--checkbox-mark-color);
154
+ --border: var(--checkbox-mark-color);
155
+ --background: var(--checkbox-mark-background-color);
156
+ -webkit-appearance: none;
157
+ -moz-appearance: none;
158
+ height: 20px;
159
+ outline: none;
160
+ display: inline-block;
161
+ vertical-align: top;
162
+ position: relative;
163
+ margin: 0;
164
+ cursor: pointer;
165
+ border: 1px solid var(--bc, var(--border));
166
+ background: var(--b, var(--background));
167
+ transition: background 0.3s, border-color 0.3s, box-shadow 0.2s;
168
+ &:after {
169
+ content: '';
170
+ display: block;
171
+ left: 0;
172
+ top: 0;
173
+ position: absolute;
174
+ transition: transform var(--d-t, 0.3s) var(--d-t-e, ease),
175
+ opacity var(--d-o, 0.2s);
176
+ }
177
+ &:checked {
178
+ --b: var(--active);
179
+ --bc: var(--active);
180
+ --d-o: 0.3s;
181
+ --d-t: 0.6s;
182
+ --d-t-e: cubic-bezier(0.2, 0.85, 0.32, 1.2);
183
+ }
184
+ }
185
+ input[type='checkbox'] {
186
+ &.switch {
187
+ width: 35px;
188
+ border-radius: 11px;
189
+ &:after {
190
+ left: 2px;
191
+ top: 2px;
192
+ bottom: 2px;
193
+ border-radius: 50%;
194
+ width: 14px;
195
+ height: 14px;
196
+ border: 1px solid var(--bc, var(--border));
197
+ background: var(--ab, var(--border));
198
+ transform: translateX(var(--x, 0));
199
+ }
200
+ &:checked {
201
+ --ab: var(--active-inner);
202
+ --x: 14px;
203
+ }
204
+ &:disabled {
205
+ cursor: not-allowed;
206
+ opacity: 0.5;
207
+ }
208
+ }
209
+ }
210
+ </style>
@@ -1,31 +1,31 @@
1
- <template>
2
- <component
3
- v-model:security="security"
4
- :is="currentComponent"
5
- :recovery="props.recovery"
6
- @confirm="emits('confirm', $event)"
7
- />
8
- </template>
9
-
10
- <script setup lang="ts">
11
- import type {
12
- UI_I_Recovery
13
- } from "~/components/common/layout/theHeader/userMenu/modals/preferences/security/lib/models/interfaces";
14
-
15
- const props = defineProps<{
16
- recovery: UI_I_Recovery | null
17
- }>()
18
- const emits = defineEmits<{
19
- (event: 'confirm', value: boolean): void
20
- }>()
21
-
22
- const security = defineModel<boolean>('security')
23
-
24
- const { $store }: any = useNuxtApp()
25
- const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
26
- const currentComponent = computed(() =>
27
- isNewView.value
28
- ? defineAsyncComponent(() => import('./New.vue'))
29
- : defineAsyncComponent(() => import('./Old.vue'))
30
- )
31
- </script>
1
+ <template>
2
+ <component
3
+ v-model:security="security"
4
+ :is="currentComponent"
5
+ :recovery="props.recovery"
6
+ @confirm="emits('confirm', $event)"
7
+ />
8
+ </template>
9
+
10
+ <script setup lang="ts">
11
+ import type {
12
+ UI_I_Recovery
13
+ } from "~/components/common/layout/theHeader/userMenu/modals/preferences/security/lib/models/interfaces";
14
+
15
+ const props = defineProps<{
16
+ recovery: UI_I_Recovery | null
17
+ }>()
18
+ const emits = defineEmits<{
19
+ (event: 'confirm', value: boolean): void
20
+ }>()
21
+
22
+ const security = defineModel<boolean>('security')
23
+
24
+ const { $store }: any = useNuxtApp()
25
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
26
+ const currentComponent = computed(() =>
27
+ isNewView.value
28
+ ? defineAsyncComponent(() => import('./New.vue'))
29
+ : defineAsyncComponent(() => import('./Old.vue'))
30
+ )
31
+ </script>
@@ -1,52 +1,52 @@
1
- <template>
2
- <div class="detail-view overflow-auto py-0 px-6">
3
- <table v-if="detailData" class="table table-noborder">
4
- <tbody>
5
- <tr>
6
- <td class="left">{{ localization.common.name }}</td>
7
- <td class="left backup-name-label">{{ detailData.name }}</td>
8
- </tr>
9
- <tr>
10
- <td class="left">{{ localization.common.description }}</td>
11
- <td class="left backup-name-label">{{ detailData.description }}</td>
12
- </tr>
13
- <tr>
14
- <td class="left">{{ localization.common.timestamp }}</td>
15
- <td class="left backup-name-label">{{ detailData.timestamp }}</td>
16
- </tr>
17
- </tbody>
18
- </table>
19
- </div>
20
- </template>
21
-
22
- <script setup lang="ts">
23
- import type { UI_I_Localization } from '~/lib/models/interfaces'
24
- import type { UI_I_BackupsTreeNode } from '~/components/common/pages/backups/lib/models/interfaces'
25
-
26
- const props = defineProps<{
27
- detail: UI_I_BackupsTreeNode | null
28
- }>()
29
-
30
- const localization = computed<UI_I_Localization>(() => useLocal())
31
-
32
- const detailData = ref<UI_I_BackupsTreeNode | null>(null)
33
- watch(
34
- () => props.detail,
35
- (newValue) => {
36
- detailData.value = newValue
37
- },
38
- { immediate: true, deep: true }
39
- )
40
- </script>
41
-
42
- <style scoped lang="scss">
43
- .detail-view {
44
- width: 50%;
45
-
46
- .table {
47
- .left:not(.backup-name-label) {
48
- width: 320px;
49
- }
50
- }
51
- }
52
- </style>
1
+ <template>
2
+ <div class="detail-view overflow-auto py-0 px-6">
3
+ <table v-if="detailData" class="table table-noborder">
4
+ <tbody>
5
+ <tr>
6
+ <td class="left">{{ localization.common.name }}</td>
7
+ <td class="left backup-name-label">{{ detailData.name }}</td>
8
+ </tr>
9
+ <tr>
10
+ <td class="left">{{ localization.common.description }}</td>
11
+ <td class="left backup-name-label">{{ detailData.description }}</td>
12
+ </tr>
13
+ <tr>
14
+ <td class="left">{{ localization.common.timestamp }}</td>
15
+ <td class="left backup-name-label">{{ detailData.timestamp }}</td>
16
+ </tr>
17
+ </tbody>
18
+ </table>
19
+ </div>
20
+ </template>
21
+
22
+ <script setup lang="ts">
23
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
24
+ import type { UI_I_BackupsTreeNode } from '~/components/common/pages/backups/lib/models/interfaces'
25
+
26
+ const props = defineProps<{
27
+ detail: UI_I_BackupsTreeNode | null
28
+ }>()
29
+
30
+ const localization = computed<UI_I_Localization>(() => useLocal())
31
+
32
+ const detailData = ref<UI_I_BackupsTreeNode | null>(null)
33
+ watch(
34
+ () => props.detail,
35
+ (newValue) => {
36
+ detailData.value = newValue
37
+ },
38
+ { immediate: true, deep: true }
39
+ )
40
+ </script>
41
+
42
+ <style scoped lang="scss">
43
+ .detail-view {
44
+ width: 50%;
45
+
46
+ .table {
47
+ .left:not(.backup-name-label) {
48
+ width: 320px;
49
+ }
50
+ }
51
+ }
52
+ </style>
@@ -1,36 +1,36 @@
1
- import type { API_UI_I_DataTable } from '~/lib/models/table/interfaces'
2
- import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
3
- import type { UI_T_BackupActionType } from '~/components/common/pages/backups/lib/models/types'
4
-
5
- export interface API_UI_I_Backup {
6
- creation_time: number
7
- creation_type: number
8
- description: string
9
- kind: number // TODO
10
- msg: string
11
- name: string
12
- state: number // TODO
13
- uuid: string
14
- vm_name: string
15
- vmid: string
16
- storage_id: string
17
- storage_name: string
18
- }
19
-
20
- export interface UI_I_Backup extends API_UI_I_Backup {}
21
-
22
- export interface UI_I_BackupsTreeNode
23
- extends UI_I_TreeNode<UI_I_BackupsTreeNode> {
24
- parent_id: string
25
- timestamp: string
26
- description: string
27
- }
28
-
29
- export interface UI_I_BackupAction {
30
- action: UI_T_BackupActionType | ''
31
- id?: string
32
- name?: string
33
- backupId?: string
34
- bucketId?: string
35
- storageId?: string
36
- }
1
+ import type { API_UI_I_DataTable } from '~/lib/models/table/interfaces'
2
+ import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
3
+ import type { UI_T_BackupActionType } from '~/components/common/pages/backups/lib/models/types'
4
+
5
+ export interface API_UI_I_Backup {
6
+ creation_time: number
7
+ creation_type: number
8
+ description: string
9
+ kind: number // TODO
10
+ msg: string
11
+ name: string
12
+ state: number // TODO
13
+ uuid: string
14
+ vm_name: string
15
+ vmid: string
16
+ storage_id: string
17
+ storage_name: string
18
+ }
19
+
20
+ export interface UI_I_Backup extends API_UI_I_Backup {}
21
+
22
+ export interface UI_I_BackupsTreeNode
23
+ extends UI_I_TreeNode<UI_I_BackupsTreeNode> {
24
+ parent_id: string
25
+ timestamp: string
26
+ description: string
27
+ }
28
+
29
+ export interface UI_I_BackupAction {
30
+ action: UI_T_BackupActionType | ''
31
+ id?: string
32
+ name?: string
33
+ backupId?: string
34
+ bucketId?: string
35
+ storageId?: string
36
+ }