bfg-common 1.5.657 → 1.5.659

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 (99) 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/components/atoms/TheIcon3.vue +50 -50
  7. package/components/atoms/collapse/CollapseNav.vue +170 -170
  8. package/components/atoms/perPage/PerPage.vue +58 -58
  9. package/components/atoms/table/dataGrid/DataGrid.vue +1718 -1718
  10. package/components/atoms/table/dataGrid/DataGridPagination.vue +97 -97
  11. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  12. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  13. package/components/common/backup/storage/actions/add/lib/utils.ts +51 -51
  14. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  15. package/components/common/diagramMain/modals/lib/config/vCenterModal.ts +48 -48
  16. package/components/common/diagramMain/port/Port.vue +580 -580
  17. package/components/common/layout/theHeader/TheHeaderNew.vue +315 -315
  18. package/components/common/layout/theHeader/TheHeaderOld.vue +262 -262
  19. package/components/common/layout/theHeader/helpMenu/About.vue +79 -79
  20. package/components/common/layout/theHeader/helpMenu/aboutOld/AboutOld.vue +79 -79
  21. package/components/common/layout/theHeader/userMenu/modals/changePassword/ChangePassword.vue +99 -99
  22. package/components/common/layout/theHeader/userMenu/modals/changePassword/New.vue +193 -193
  23. package/components/common/layout/theHeader/userMenu/modals/preferences/PreferencesOld.vue +144 -144
  24. package/components/common/layout/theHeader/userMenu/modals/preferences/lib/models/types.ts +7 -7
  25. package/components/common/layout/theHeader/userMenu/modals/preferences/security/Old.vue +210 -210
  26. package/components/common/layout/theHeader/userMenu/modals/preferences/security/Security.vue +31 -31
  27. package/components/common/pages/backups/DetailView.vue +52 -52
  28. package/components/common/pages/backups/lib/models/interfaces.ts +36 -36
  29. package/components/common/pages/backups/modals/Modals.vue +243 -243
  30. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/lib/config/options.ts +6 -6
  31. package/components/common/pages/backups/modals/createBackup/lib/config/readyToCompleteOptions.ts +69 -69
  32. package/components/common/pages/backups/modals/lib/config/restore.ts +115 -115
  33. package/components/common/pages/backups/modals/lib/models/interfaces.ts +186 -186
  34. package/components/common/pages/backups/modals/restore/name/lib/models/interfaces.ts +6 -6
  35. package/components/common/pages/hardwareHealth/toolsPanel/lib/config/actionsPanel.ts +34 -34
  36. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  37. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  38. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  39. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  40. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  41. package/components/common/pages/scheduledTasks/lib/utils/utils.ts +84 -84
  42. package/components/common/qrcode/Qrcode.vue +56 -56
  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/clone/lib/config/steps.ts +295 -295
  51. package/components/common/vm/actions/clone/new/New.vue +438 -438
  52. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  53. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/Memory.vue +283 -283
  54. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +156 -156
  55. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  56. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  57. package/components/common/vm/actions/common/select/options/New.vue +264 -264
  58. package/components/common/vm/actions/common/select/options/Old.vue +110 -110
  59. package/components/common/vm/actions/common/select/options/Options.vue +58 -58
  60. package/components/common/vm/actions/common/select/storage/Old.vue +125 -125
  61. package/components/common/vm/actions/common/select/storage/new/New.vue +311 -311
  62. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  63. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  64. package/components/common/vm/actions/common/select/template/old/Old.vue +50 -50
  65. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  66. package/components/common/wizards/common/compatibility/Compatibility.vue +35 -35
  67. package/components/common/wizards/common/compatibility/New.vue +99 -99
  68. package/components/common/wizards/common/compatibility/Old.vue +53 -53
  69. package/components/common/wizards/common/steps/computeResource/New.vue +93 -93
  70. package/components/common/wizards/common/steps/name/Name.vue +178 -178
  71. package/components/common/wizards/common/steps/name/New.vue +221 -221
  72. package/components/common/wizards/common/steps/name/Old.vue +121 -121
  73. package/components/common/wizards/common/steps/name/lib/models/interfaces.ts +4 -4
  74. package/components/common/wizards/common/steps/name/location/New.vue +40 -40
  75. package/components/common/wizards/datastore/add/Add.vue +228 -228
  76. package/components/common/wizards/datastore/add/lib/utils.ts +85 -85
  77. package/components/common/wizards/datastore/add/steps/typeMode/lib/config/typeOptions.ts +43 -43
  78. package/composables/useAppVersion.ts +21 -21
  79. package/composables/useLocal.ts +6 -6
  80. package/composables/useLocalCommon.ts +39 -39
  81. package/package.json +1 -1
  82. package/plugins/console.ts +21 -21
  83. package/plugins/mouse.ts +21 -21
  84. package/plugins/panelStates.ts +70 -70
  85. package/plugins/text.ts +59 -59
  86. package/public/spice-console/application/clientgui.js +854 -854
  87. package/public/spice-console/application/packetfactory.js +211 -211
  88. package/public/spice-console/application/virtualmouse.js +147 -147
  89. package/public/spice-console/lib/images/bitmap.js +203 -203
  90. package/public/spice-console/network/spicechannel.js +440 -440
  91. package/public/spice-console/process/cursorprocess.js +128 -128
  92. package/public/spice-console/process/inputprocess.js +227 -227
  93. package/public/spice-console/process/mainprocess.js +212 -212
  94. package/public/spice-console/run.js +210 -210
  95. package/store/main/mutations.ts +7 -7
  96. package/store/main/state.ts +7 -7
  97. package/store/tasks/actions.ts +165 -165
  98. package/store/tasks/mappers/recentTasks.ts +123 -123
  99. package/store/tasks/mutations.ts +82 -82
@@ -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
+ }