bfg-common 1.5.74 → 1.5.76
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.
- package/components/common/wizards/datastore/add/Add.vue +14 -37
- package/components/common/wizards/datastore/add/New.vue +4 -7
- package/components/common/wizards/datastore/add/Old.vue +6 -20
- package/components/common/wizards/datastore/add/lib/config/createDatastore.ts +4 -2
- package/components/common/wizards/datastore/add/lib/config/steps.ts +33 -10
- package/components/common/wizards/datastore/add/lib/models/types.ts +2 -2
- package/components/common/wizards/datastore/add/sharedStorm/SharedStorm.vue +0 -14
- package/components/common/wizards/datastore/add/steps/_kerberosAuthentication/KerberosAuthentication.vue +1 -0
- package/components/common/wizards/datastore/add/steps/_local/Local.vue +2 -1
- package/components/common/wizards/datastore/add/steps/_partitionConfiguration/PartitionConfiguration.vue +245 -0
- package/components/common/wizards/datastore/add/steps/_partitionConfiguration/graphicTooltip/graphicTooltip.vue +64 -0
- package/components/common/wizards/datastore/add/steps/_partitionConfiguration/lib/config/selectOptions.ts +46 -0
- package/components/common/wizards/datastore/add/steps/_partitionConfiguration/sizeGraphic/sizeGraphic.vue +225 -0
- package/package.json +1 -1
|
@@ -32,17 +32,18 @@ import type {
|
|
|
32
32
|
UI_I_ValidationReturn,
|
|
33
33
|
} from '~/components/atoms/wizard/lib/models/interfaces'
|
|
34
34
|
import Wizard from '~/components/atoms/wizard/lib/utils/utils'
|
|
35
|
-
import {
|
|
36
|
-
stepsFunc,
|
|
37
|
-
stepsSchemeInitial,
|
|
38
|
-
} from '~/components/common/wizards/datastore/add/lib/config/steps'
|
|
39
35
|
import type { UI_I_Localization } from '~/lib/models/interfaces'
|
|
40
36
|
import type { UI_T_Project } from '~/lib/models/types'
|
|
41
37
|
import type { UI_T_DatastoreTypeCode } from '~/components/common/wizards/datastore/add/lib/models/types'
|
|
42
38
|
import type { UI_I_CreateDatastoreForm } from '~/components/common/wizards/datastore/add/lib/models/interfaces'
|
|
43
39
|
import type { UI_I_DetailsItem } from '~/components/common/details/lib/models/interfaces'
|
|
44
40
|
import type { UI_I_CreateDatastoreHosts } from '~/components/common/wizards/datastore/add/nfs/accessibility/tablesView/lib/models/interfaces'
|
|
45
|
-
import
|
|
41
|
+
import {
|
|
42
|
+
stepsFunc,
|
|
43
|
+
stepsSchemeInitial,
|
|
44
|
+
getStepScheme,
|
|
45
|
+
} from '~/components/common/wizards/datastore/add/lib/config/steps'
|
|
46
|
+
import { datastoreDefaultFormFunc } from '~/components/common/wizards/datastore/add/lib/config/createDatastore'
|
|
46
47
|
import { constructDataReadyViewFunc } from '~/components/common/wizards/datastore/add/readyComplete/lib/config/propertiesDetails'
|
|
47
48
|
import * as validation from '~/components/common/wizards/datastore/add/lib/validations'
|
|
48
49
|
|
|
@@ -73,21 +74,9 @@ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
|
|
|
73
74
|
|
|
74
75
|
const title = computed<string>(() => localization.value.common.addHost)
|
|
75
76
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
const datastoreType = ref<UI_T_DatastoreTypeCode>(2)
|
|
80
|
-
const form = ref<UI_I_CreateDatastoreForm>({
|
|
81
|
-
name: 'Datastore',
|
|
82
|
-
lunDisk: [],
|
|
83
|
-
hosts: props.hostId ? [props?.hostId] : [],
|
|
84
|
-
type_code: 2,
|
|
85
|
-
nfsVersion: 'nfs-4.1',
|
|
86
|
-
readonly: false,
|
|
87
|
-
server: '',
|
|
88
|
-
folder: '',
|
|
89
|
-
})
|
|
90
|
-
|
|
77
|
+
const form = ref<UI_I_CreateDatastoreForm>(
|
|
78
|
+
useDeepCopy(datastoreDefaultFormFunc(props.hostId))
|
|
79
|
+
)
|
|
91
80
|
const validationFunc = async (
|
|
92
81
|
value: UI_I_WizardStep[],
|
|
93
82
|
currentStep: UI_I_WizardStep,
|
|
@@ -196,26 +185,14 @@ const onChangeSteps = async (value: UI_I_WizardStep[]): Promise<void> =>
|
|
|
196
185
|
|
|
197
186
|
// Choosing Scheme
|
|
198
187
|
watch(
|
|
199
|
-
|
|
188
|
+
() => form.value.type_code,
|
|
200
189
|
(newValue: UI_T_DatastoreTypeCode) => {
|
|
201
|
-
const
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
'4': 1,
|
|
205
|
-
},
|
|
206
|
-
sphere: {
|
|
207
|
-
'2': 2,
|
|
208
|
-
'4': !props.hostId ? 3 : 1,
|
|
209
|
-
},
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
const projectSchemes = schemes[props.project]
|
|
213
|
-
|
|
214
|
-
if (projectSchemes && projectSchemes[newValue] !== undefined) {
|
|
215
|
-
wizard.changeScheme(projectSchemes[newValue] as number)
|
|
190
|
+
const step = getStepScheme(props.project, newValue, props.hostId)
|
|
191
|
+
if (step !== undefined) {
|
|
192
|
+
wizard.changeScheme(step)
|
|
216
193
|
}
|
|
217
194
|
},
|
|
218
|
-
{
|
|
195
|
+
{ immediate: true }
|
|
219
196
|
)
|
|
220
197
|
|
|
221
198
|
const dataReadyView = computed<UI_I_DetailsItem>(() =>
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
<template #content>
|
|
55
55
|
<common-wizards-datastore-add-steps-name-and-device
|
|
56
56
|
v-if="selectedStep.id === dynamicSteps.nameAndDevice"
|
|
57
|
-
v-model="
|
|
57
|
+
v-model="formModelLocal"
|
|
58
58
|
:project="props.project"
|
|
59
59
|
:alert-messages="alertMessages[selectedStep.id]"
|
|
60
60
|
:messages-fields="selectedStep.fields"
|
|
@@ -179,7 +179,6 @@ import type { UI_T_DatastoreTypeCode } from '~/components/common/wizards/datasto
|
|
|
179
179
|
import type { UI_I_CreateDatastoreForm } from '~/components/common/wizards/datastore/add/lib/models/interfaces'
|
|
180
180
|
import type { UI_I_DetailsItem } from '~/components/common/details/lib/models/interfaces'
|
|
181
181
|
import type { UI_I_CreateDatastoreHosts } from '~/components/common/wizards/datastore/add/nfs/accessibility/tablesView/lib/models/interfaces'
|
|
182
|
-
import { E_DatastoreTypeKode } from '~/components/common/wizards/datastore/add/lib/models/enums'
|
|
183
182
|
import { constructDataReadyViewFunc } from '~/components/common/wizards/datastore/add/readyComplete/lib/config/propertiesDetails'
|
|
184
183
|
import { dynamicSteps } from '~/components/common/wizards/datastore/add/lib/config/steps'
|
|
185
184
|
|
|
@@ -198,7 +197,7 @@ const emits = defineEmits<{
|
|
|
198
197
|
(event: 'change-steps', value: UI_I_WizardStep[]): void
|
|
199
198
|
(event: 'hide-alert', value: number): void
|
|
200
199
|
(event: 'hide'): void
|
|
201
|
-
(event: '
|
|
200
|
+
(event: 'submit', value: any): void
|
|
202
201
|
(event: 'main-filter', value: string): void
|
|
203
202
|
}>()
|
|
204
203
|
|
|
@@ -231,9 +230,7 @@ const { height: height3 } = useElementSize(subTitleBlock3)
|
|
|
231
230
|
const subTitleBlock4 = ref<HTMLElement | null>(null)
|
|
232
231
|
const { height: height4 } = useElementSize(subTitleBlock4)
|
|
233
232
|
|
|
234
|
-
|
|
235
|
-
// props.project === 'procurator' ? 'local' : 'shared-storm'
|
|
236
|
-
// )
|
|
233
|
+
|
|
237
234
|
const datastoreType = ref<UI_T_DatastoreTypeCode>(2)
|
|
238
235
|
const form = ref<UI_I_CreateDatastoreForm>({
|
|
239
236
|
name: 'Datastore',
|
|
@@ -264,7 +261,7 @@ const onHideModal = (): void => {
|
|
|
264
261
|
emits('hide')
|
|
265
262
|
}
|
|
266
263
|
const onFinish = (): void => {
|
|
267
|
-
emits('
|
|
264
|
+
emits('submit')
|
|
268
265
|
}
|
|
269
266
|
</script>
|
|
270
267
|
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
|
|
21
21
|
<common-wizards-datastore-add-steps-name-and-device
|
|
22
22
|
v-if="selectedStep.id === dynamicSteps.nameAndDevice"
|
|
23
|
-
v-model="
|
|
23
|
+
v-model="formModelLocal"
|
|
24
24
|
:project="props.project"
|
|
25
25
|
:alert-messages="alertMessages[selectedStep.id]"
|
|
26
26
|
:messages-fields="selectedStep.fields"
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
|
|
34
34
|
<common-wizards-datastore-add-shared-storm
|
|
35
35
|
v-show="datastoreType === 'shared-storm'"
|
|
36
|
-
v-model="
|
|
36
|
+
v-model="formModelLocal"
|
|
37
37
|
:project="props.project"
|
|
38
38
|
:step-id="selectedStep.id"
|
|
39
39
|
:datastore-type="datastoreType"
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
|
|
49
49
|
<common-wizards-datastore-add-nfs
|
|
50
50
|
v-show="datastoreType === 'nfs'"
|
|
51
|
-
v-model="
|
|
51
|
+
v-model="formModelLocal"
|
|
52
52
|
:project="props.project"
|
|
53
53
|
:step-id="selectedStep.id"
|
|
54
54
|
:alert-messages="alertMessages[selectedStep.id]"
|
|
@@ -92,34 +92,20 @@ const emits = defineEmits<{
|
|
|
92
92
|
(event: 'change-steps', value: UI_I_WizardStep[]): void
|
|
93
93
|
(event: 'hide-alert', value: number): void
|
|
94
94
|
(event: 'hide'): void
|
|
95
|
-
(event: '
|
|
95
|
+
(event: 'submit'): void
|
|
96
96
|
(event: 'main-filter', value: string): void
|
|
97
97
|
}>()
|
|
98
98
|
|
|
99
99
|
const localization = computed<UI_I_Localization>(() => useLocal())
|
|
100
100
|
|
|
101
|
-
// const datastoreType = ref<UI_T_DatastoreTypeCode>(
|
|
102
|
-
// props.project === 'procurator' ? 'local' : 'shared-storm'
|
|
103
|
-
// )
|
|
104
101
|
const datastoreType = ref<UI_T_DatastoreTypeCode>(2)
|
|
105
|
-
const form = ref<UI_I_CreateDatastoreForm>({
|
|
106
|
-
name: 'Datastore',
|
|
107
|
-
lunDisk: [],
|
|
108
|
-
hosts: props.hostId ? [props?.hostId] : [],
|
|
109
|
-
type_code: 2,
|
|
110
|
-
nfsVersion: 'nfs-4.1',
|
|
111
|
-
readonly: false,
|
|
112
|
-
server: '',
|
|
113
|
-
folder: '',
|
|
114
|
-
})
|
|
115
|
-
|
|
116
102
|
const onChangeSteps = async (value: UI_I_WizardStep[]): Promise<void> =>
|
|
117
103
|
emits('change-steps', value)
|
|
118
104
|
|
|
119
105
|
const dataReadyView = computed<UI_I_DetailsItem>(() =>
|
|
120
106
|
constructDataReadyViewFunc(
|
|
121
107
|
localization.value,
|
|
122
|
-
|
|
108
|
+
formModelLocal.value,
|
|
123
109
|
props.project,
|
|
124
110
|
props.nfsHosts
|
|
125
111
|
)
|
|
@@ -132,7 +118,7 @@ const onHideModal = (): void => {
|
|
|
132
118
|
emits('hide')
|
|
133
119
|
}
|
|
134
120
|
const onFinish = (): void => {
|
|
135
|
-
emits('
|
|
121
|
+
emits('submit')
|
|
136
122
|
}
|
|
137
123
|
</script>
|
|
138
124
|
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { UI_I_CreateDatastoreForm } from '~/components/common/wizards/datastore/add/lib/models/interfaces'
|
|
2
|
-
export const datastoreDefaultFormFunc = (
|
|
2
|
+
export const datastoreDefaultFormFunc = (
|
|
3
|
+
hostId?: string
|
|
4
|
+
): UI_I_CreateDatastoreForm => {
|
|
3
5
|
return {
|
|
4
6
|
name: 'Datastore',
|
|
5
7
|
lunDisk: [],
|
|
6
|
-
hosts: [],
|
|
8
|
+
hosts: hostId ? [hostId] : [],
|
|
7
9
|
type_code: 2,
|
|
8
10
|
nfsVersion: 'nfs-4.1',
|
|
9
11
|
readonly: false,
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type { UI_I_Localization } from '~/lib/models/interfaces'
|
|
2
|
+
import type { UI_T_Project } from '~/lib/models/types'
|
|
2
3
|
import type { UI_I_WizardStep } from '~/components/atoms/wizard/lib/models/interfaces'
|
|
3
4
|
import { UI_E_WIZARD_STATUS } from '~/components/atoms/wizard/lib/models/enums'
|
|
5
|
+
import type { UI_I_ChangeStepsSchemes } from '~/components/common/wizards/datastore/add/lib/models/interfaces'
|
|
6
|
+
import type { UI_T_DatastoreTypeCode } from '~/components/common/wizards/datastore/add/lib/models/types'
|
|
4
7
|
|
|
5
8
|
export const dynamicSteps = {
|
|
6
9
|
type: 0,
|
|
@@ -57,18 +60,19 @@ export const stepsFunc = (
|
|
|
57
60
|
testId: 'create-datastore-name-and-device-selection',
|
|
58
61
|
},
|
|
59
62
|
|
|
60
|
-
{
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
},
|
|
63
|
+
// { // TODO Этот шаг использовался раньше, сейчас не используется
|
|
64
|
+
// id: dynamicSteps.partitionConfiguration,
|
|
65
|
+
// title: localization.common.partitionConfiguration,
|
|
66
|
+
// subTitle: localization.common.partitionConfigurationDesc,
|
|
67
|
+
// status: UI_E_WIZARD_STATUS.INACTIVE,
|
|
68
|
+
// fields: {},
|
|
69
|
+
// isValid: true,
|
|
70
|
+
// testId: 'create-datastore-partition-configuration',
|
|
71
|
+
// },
|
|
69
72
|
|
|
70
73
|
// {
|
|
71
|
-
//
|
|
74
|
+
// // TODO Этот шаг использовался раньше, сейчас не используется
|
|
75
|
+
// id: dynamicSteps.nfsVersion,
|
|
72
76
|
// title: localization.common.nfsVersion,
|
|
73
77
|
// subTitle: localization.common.selectNfsVersion,
|
|
74
78
|
// status: UI_E_WIZARD_STATUS.INACTIVE,
|
|
@@ -146,3 +150,22 @@ export const stepsSchemeInitial: number[][] = [
|
|
|
146
150
|
[dynamicSteps.type, dynamicSteps.nameAndDevice, 11], // Sphere Scheme for "shared-storm" type
|
|
147
151
|
[dynamicSteps.type, 4, 5, 11], // Sphere Scheme for "nfs" type
|
|
148
152
|
]
|
|
153
|
+
|
|
154
|
+
export const getStepScheme = (
|
|
155
|
+
project: UI_T_Project,
|
|
156
|
+
typeCode: UI_T_DatastoreTypeCode,
|
|
157
|
+
hostId?: string
|
|
158
|
+
): number | undefined => {
|
|
159
|
+
const schemes: UI_I_ChangeStepsSchemes = {
|
|
160
|
+
procurator: {
|
|
161
|
+
'2': 0,
|
|
162
|
+
'4': 1,
|
|
163
|
+
},
|
|
164
|
+
sphere: {
|
|
165
|
+
'2': 2,
|
|
166
|
+
'4': !hostId ? 3 : 1,
|
|
167
|
+
},
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
return schemes[project]?.[typeCode]
|
|
171
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export type UI_T_DatastoreTypeCode = 2 | 4
|
|
2
2
|
export type UI_T_NfsType = 'nfs-3' | 'nfs-4.1'
|
|
3
|
-
export type UI_T_VmfsType = 'vmfs-6' | 'vmfs-5'
|
|
3
|
+
export type UI_T_VmfsType = 'vmfs-6' | 'vmfs-5' // сейчас этот тип не используется
|
|
4
4
|
export type UI_T_KerberosAuthentication =
|
|
5
5
|
| 'dont-use'
|
|
6
6
|
| 'use-only-krb5'
|
|
7
|
-
| 'use-integrity'
|
|
7
|
+
| 'use-integrity' // сейчас этот тип не используется
|
|
@@ -14,12 +14,6 @@
|
|
|
14
14
|
@hide-alert="(e) => emits('hide-alert', e)"
|
|
15
15
|
@main-filter="emits('main-filter', $event)"
|
|
16
16
|
/>
|
|
17
|
-
|
|
18
|
-
<common-wizards-datastore-add-shared-storm-partition-configuration
|
|
19
|
-
v-show="props.project === 'procurator' && props.stepId === 3"
|
|
20
|
-
:vmfs-version="vmfsVersion"
|
|
21
|
-
:selected-lun-disk-size="lunDiskTotalCapacity"
|
|
22
|
-
/>
|
|
23
17
|
</div>
|
|
24
18
|
</template>
|
|
25
19
|
|
|
@@ -57,14 +51,6 @@ const emits = defineEmits<{
|
|
|
57
51
|
const localization = computed<UI_I_Localization>(() => useLocal())
|
|
58
52
|
|
|
59
53
|
const vmfsVersion = ref<UI_T_VmfsType>('vmfs-6')
|
|
60
|
-
|
|
61
|
-
const lunDiskTotalCapacity = computed<number>(() => {
|
|
62
|
-
if (!model.value.lunDisk.length) return 0
|
|
63
|
-
|
|
64
|
-
return +model.value.lunDisk
|
|
65
|
-
.map((disk: UI_I_CreateStorageLunDiskItem) => disk.capacity_mb)
|
|
66
|
-
.reduce((acc, cur) => acc + cur)
|
|
67
|
-
})
|
|
68
54
|
</script>
|
|
69
55
|
|
|
70
56
|
<style lang="scss" scoped>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
|
+
<!-- TODO: если использовать этот компонент, нужно отрефакторить весь код — сейчас всё по-старому -->
|
|
2
3
|
<div class="local-step">
|
|
3
|
-
<common-wizards-datastore-add-local-create-name
|
|
4
|
+
<common-wizards-datastore-add-steps-local-create-name
|
|
4
5
|
v-if="isShowCreateLocalNameBlock"
|
|
5
6
|
v-model="model.name"
|
|
6
7
|
:alert-messages="props.alertMessages"
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<!-- TODO: если использовать этот компонент, нужно отрефакторить весь код — сейчас всё по-старому -->
|
|
3
|
+
<div class="partition">
|
|
4
|
+
<div class="clr-form-control clr-row">
|
|
5
|
+
<label class="clr-col-md-4 clr-control-label">
|
|
6
|
+
{{ localization.common.partitionConfiguration }}
|
|
7
|
+
</label>
|
|
8
|
+
|
|
9
|
+
<div class="clr-col-md-8 p-0">
|
|
10
|
+
<div class="clr-select-wrapper">
|
|
11
|
+
<select
|
|
12
|
+
id="host-select"
|
|
13
|
+
v-model="selectedHost"
|
|
14
|
+
data-id="select-partition-configuration"
|
|
15
|
+
class="dropdown-toggle"
|
|
16
|
+
@change="onSelectHost"
|
|
17
|
+
>
|
|
18
|
+
<option
|
|
19
|
+
v-for="(item, index) in partitionConfiguration"
|
|
20
|
+
:key="index"
|
|
21
|
+
:value="item.value"
|
|
22
|
+
:disabled="item.disabled"
|
|
23
|
+
>
|
|
24
|
+
{{ item.text }}
|
|
25
|
+
</option>
|
|
26
|
+
</select>
|
|
27
|
+
</div>
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
<div class="datastore-size-container clr-flex-row clr-flex">
|
|
32
|
+
<label class="clr-col-md-4 clr-control-label" for="datastore-size">
|
|
33
|
+
{{ localization.common.datastoreSize }}
|
|
34
|
+
</label>
|
|
35
|
+
|
|
36
|
+
<div class="datastore-size-slider-container clr-col-md-8 p-0">
|
|
37
|
+
<div class="clr-col-xl-6 clr-col-md-8 p-0">
|
|
38
|
+
<div
|
|
39
|
+
class="partition__range-input clr-control-container clr-col-md-10 clr-col-12"
|
|
40
|
+
>
|
|
41
|
+
<div class="clr-range-wrapper">
|
|
42
|
+
<input
|
|
43
|
+
id="datastore-size-input-0"
|
|
44
|
+
v-model="datastoreSize"
|
|
45
|
+
data-id="select-storm-storage-size-range-field"
|
|
46
|
+
type="range"
|
|
47
|
+
min="0"
|
|
48
|
+
:max="countDatastoreSizeToGb"
|
|
49
|
+
step="0.01"
|
|
50
|
+
class="ng-valid clr-range ng-dirty ng-touched"
|
|
51
|
+
/>
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
|
|
56
|
+
<input
|
|
57
|
+
id="datastore-size-input-1"
|
|
58
|
+
v-model="datastoreSize"
|
|
59
|
+
data-id="select-storm-storage-size-input-field"
|
|
60
|
+
type="number"
|
|
61
|
+
min="0"
|
|
62
|
+
:max="countDatastoreSizeToGb"
|
|
63
|
+
step="0.01"
|
|
64
|
+
class="show-arrow"
|
|
65
|
+
/>
|
|
66
|
+
<span>{{ localization.common.gb }}</span>
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
|
69
|
+
|
|
70
|
+
<template v-if="props.vmfsVersion === 'vmfs-6'">
|
|
71
|
+
<div class="clr-form-control clr-row">
|
|
72
|
+
<label class="clr-col-md-4 clr-control-label">
|
|
73
|
+
{{ localization.common.blockSize }}
|
|
74
|
+
</label>
|
|
75
|
+
|
|
76
|
+
<div>
|
|
77
|
+
<div class="clr-select-wrapper">
|
|
78
|
+
<select
|
|
79
|
+
id="storm-configuration-block-size"
|
|
80
|
+
v-model="selectedSize"
|
|
81
|
+
data-id="storm-configuration-block-size"
|
|
82
|
+
class="dropdown-toggle"
|
|
83
|
+
@change="onSelectHost"
|
|
84
|
+
>
|
|
85
|
+
<option
|
|
86
|
+
v-for="(item, index) in blockSize"
|
|
87
|
+
:key="index"
|
|
88
|
+
:value="item.value"
|
|
89
|
+
:disabled="item.disabled"
|
|
90
|
+
>
|
|
91
|
+
{{ item.text }}
|
|
92
|
+
</option>
|
|
93
|
+
</select>
|
|
94
|
+
</div>
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
97
|
+
|
|
98
|
+
<div class="clr-form-control clr-row">
|
|
99
|
+
<label class="clr-col-md-4 clr-control-label">
|
|
100
|
+
{{ localization.common.spaceReclamationGranularity }}
|
|
101
|
+
</label>
|
|
102
|
+
|
|
103
|
+
<div>
|
|
104
|
+
<div class="clr-select-wrapper">
|
|
105
|
+
<select
|
|
106
|
+
id="granularity-select"
|
|
107
|
+
v-model="selectedGranularity"
|
|
108
|
+
data-id="storm-configuration-space-granularity"
|
|
109
|
+
class="dropdown-toggle"
|
|
110
|
+
@change="onSelectHost"
|
|
111
|
+
>
|
|
112
|
+
<option
|
|
113
|
+
v-for="(item, index) in spaceGranularity"
|
|
114
|
+
:key="index"
|
|
115
|
+
:value="item.value"
|
|
116
|
+
:disabled="item.disabled"
|
|
117
|
+
>
|
|
118
|
+
{{ item.text }}
|
|
119
|
+
</option>
|
|
120
|
+
</select>
|
|
121
|
+
</div>
|
|
122
|
+
</div>
|
|
123
|
+
</div>
|
|
124
|
+
|
|
125
|
+
<div class="clr-form-control clr-row">
|
|
126
|
+
<label class="clr-col-md-4 clr-control-label">
|
|
127
|
+
{{ localization.common.spaceReclamationPriority }}
|
|
128
|
+
</label>
|
|
129
|
+
|
|
130
|
+
<div>
|
|
131
|
+
<div class="clr-select-wrapper">
|
|
132
|
+
<select
|
|
133
|
+
id="priority-select"
|
|
134
|
+
v-model="selectedPriority"
|
|
135
|
+
data-id="storm-configuration-space-priority"
|
|
136
|
+
class="dropdown-toggle"
|
|
137
|
+
@change="onSelectHost"
|
|
138
|
+
>
|
|
139
|
+
<option
|
|
140
|
+
v-for="(item, index) in spacePriority"
|
|
141
|
+
:key="index"
|
|
142
|
+
:value="item.value"
|
|
143
|
+
:disabled="item.disabled"
|
|
144
|
+
>
|
|
145
|
+
{{ item.text }}
|
|
146
|
+
</option>
|
|
147
|
+
</select>
|
|
148
|
+
</div>
|
|
149
|
+
</div>
|
|
150
|
+
</div>
|
|
151
|
+
</template>
|
|
152
|
+
|
|
153
|
+
<common-wizards-datastore-add-shared-storm-partition-configuration-size-graphic
|
|
154
|
+
:selected-size="+datastoreSize"
|
|
155
|
+
:capacity="countDatastoreSizeToGb"
|
|
156
|
+
/>
|
|
157
|
+
</div>
|
|
158
|
+
</template>
|
|
159
|
+
|
|
160
|
+
<script lang="ts" setup>
|
|
161
|
+
import { UI_I_Localization } from '~/lib/models/interfaces'
|
|
162
|
+
import { UI_T_VmfsType } from '~/components/common/wizards/datastore/add/lib/models/types'
|
|
163
|
+
import { UI_I_SelectHostOptions } from '~/components/common/wizards/datastore/add/sharedStorm/deviceSelection/lib/models/interfaces'
|
|
164
|
+
import {
|
|
165
|
+
partitionConfigurationFunc,
|
|
166
|
+
spacePriorityFunc,
|
|
167
|
+
spaceGranularityFunc,
|
|
168
|
+
blockSizeFunc,
|
|
169
|
+
} from '~/components/common/wizards/datastore/add/sharedStorm/partitionConfiguration/lib/config/selectOptions'
|
|
170
|
+
|
|
171
|
+
const props = withDefaults(
|
|
172
|
+
defineProps<{
|
|
173
|
+
vmfsVersion: UI_T_VmfsType
|
|
174
|
+
selectedLunDiskSize: number
|
|
175
|
+
}>(),
|
|
176
|
+
{
|
|
177
|
+
selectedLunDiskSize: 0,
|
|
178
|
+
}
|
|
179
|
+
)
|
|
180
|
+
const localization = computed<UI_I_Localization>(() => useLocal())
|
|
181
|
+
const { $binary } = useNuxtApp()
|
|
182
|
+
|
|
183
|
+
const selectedHost = ref<string>('all-partitions')
|
|
184
|
+
const partitionConfiguration = computed<UI_I_SelectHostOptions[]>(() =>
|
|
185
|
+
partitionConfigurationFunc(localization.value)
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
const selectedSize = ref<string>('1')
|
|
189
|
+
const blockSize = computed<UI_I_SelectHostOptions[]>(() =>
|
|
190
|
+
blockSizeFunc(localization.value)
|
|
191
|
+
)
|
|
192
|
+
|
|
193
|
+
const selectedGranularity = ref<string>('1')
|
|
194
|
+
const spaceGranularity = computed<UI_I_SelectHostOptions[]>(() =>
|
|
195
|
+
spaceGranularityFunc(localization.value)
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
const selectedPriority = ref<string>('low')
|
|
199
|
+
const spacePriority = computed<UI_I_SelectHostOptions[]>(() =>
|
|
200
|
+
spacePriorityFunc(localization.value)
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
const countDatastoreSizeToGb = computed<number>(() => {
|
|
204
|
+
return $binary.mbToGb(props.selectedLunDiskSize)
|
|
205
|
+
})
|
|
206
|
+
|
|
207
|
+
const datastoreSize = ref<number | null>(null)
|
|
208
|
+
watch(
|
|
209
|
+
() => props.selectedLunDiskSize,
|
|
210
|
+
(_val) => {
|
|
211
|
+
datastoreSize.value = countDatastoreSizeToGb.value
|
|
212
|
+
}
|
|
213
|
+
)
|
|
214
|
+
|
|
215
|
+
const onSelectHost = (): void => {}
|
|
216
|
+
|
|
217
|
+
// const lunDiskTotalCapacity = computed<number>(() => { TODO: нужно будет сделать на родительском компоненте
|
|
218
|
+
// if (!model.value.lunDisk.length) return 0
|
|
219
|
+
//
|
|
220
|
+
// return +model.value.lunDisk
|
|
221
|
+
// .map((disk: UI_I_CreateStorageLunDiskItem) => disk.capacity_mb)
|
|
222
|
+
// .reduce((acc, cur) => acc + cur)
|
|
223
|
+
// })
|
|
224
|
+
</script>
|
|
225
|
+
|
|
226
|
+
<style lang="scss" scoped>
|
|
227
|
+
.partition {
|
|
228
|
+
.datastore-size-container {
|
|
229
|
+
display: flex;
|
|
230
|
+
margin-left: -1em;
|
|
231
|
+
margin-top: 1.2rem;
|
|
232
|
+
margin-bottom: 1.2rem;
|
|
233
|
+
}
|
|
234
|
+
.clr-form-control {
|
|
235
|
+
display: flex;
|
|
236
|
+
flex-direction: row;
|
|
237
|
+
}
|
|
238
|
+
&__range-input {
|
|
239
|
+
margin-left: -10px;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
.datastore-size-slider-container {
|
|
243
|
+
display: flex;
|
|
244
|
+
}
|
|
245
|
+
</style>
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<g class="graphic-tooltip">
|
|
3
|
+
<path
|
|
4
|
+
fill="none"
|
|
5
|
+
class="highcharts-label-box highcharts-tooltip-box highcharts-shadow"
|
|
6
|
+
d="M 3.5 0.5 L 53.5 0.5 L 59.5 -5.5 L 65.5 0.5 L 118 0.5 C 121.5 0.5 121.5 0.5 121.5 3.5 L 121.5 27.5 C 121.5 30.5 121.5 30.5 118.5 30.5 L 3.5 30.5 C 0.5 30.5 0.5 30.5 0.5 27.5 L 0.5 3.5 C 0.5 0.5 0.5 0.5 3.5 0.5"
|
|
7
|
+
stroke="#000000"
|
|
8
|
+
stroke-opacity="0.049999999999999996"
|
|
9
|
+
stroke-width="5"
|
|
10
|
+
transform="translate(1, 1)"
|
|
11
|
+
></path>
|
|
12
|
+
<path
|
|
13
|
+
fill="none"
|
|
14
|
+
class="highcharts-label-box highcharts-tooltip-box highcharts-shadow"
|
|
15
|
+
d="M 3.5 0.5 L 53.5 0.5 L 59.5 -5.5 L 65.5 0.5 L 118 0.5 C 121.5 0.5 121.5 0.5 121.5 3.5 L 121.5 27.5 C 121.5 30.5 121.5 30.5 118.5 30.5 L 3.5 30.5 C 0.5 30.5 0.5 30.5 0.5 27.5 L 0.5 3.5 C 0.5 0.5 0.5 0.5 3.5 0.5"
|
|
16
|
+
stroke="#000000"
|
|
17
|
+
stroke-opacity="0.09999999999999999"
|
|
18
|
+
stroke-width="3"
|
|
19
|
+
transform="translate(1, 1)"
|
|
20
|
+
></path>
|
|
21
|
+
<path
|
|
22
|
+
fill="none"
|
|
23
|
+
class="highcharts-label-box highcharts-tooltip-box highcharts-shadow"
|
|
24
|
+
d="M 3.5 0.5 L 53.5 0.5 L 59.5 -5.5 L 65.5 0.5 L 118 0.5 C 121.5 0.5 121.5 0.5 121.5 3.5 L 121.5 27.5 C 121.5 30.5 121.5 30.5 118.5 30.5 L 3.5 30.5 C 0.5 30.5 0.5 30.5 0.5 27.5 L 0.5 3.5 C 0.5 0.5 0.5 0.5 3.5 0.5"
|
|
25
|
+
stroke="#000000"
|
|
26
|
+
stroke-opacity="0.15"
|
|
27
|
+
stroke-width="1"
|
|
28
|
+
transform="translate(1, 1)"
|
|
29
|
+
></path>
|
|
30
|
+
<path
|
|
31
|
+
fill="rgba(247,247,247,0.85)"
|
|
32
|
+
class="highcharts-label-box highcharts-tooltip-box"
|
|
33
|
+
d="M 3.5 0.5 L 53.5 0.5 L 59.5 -5.5 L 65.5 0.5 L 118 0.5 C 121.5 0.5 121.5 0.5 121.5 3.5 L 121.5 27.5 C 121.5 30.5 121.5 30.5 118.5 30.5 L 3.5 30.5 C 0.5 30.5 0.5 30.5 0.5 27.5 L 0.5 3.5 C 0.5 0.5 0.5 0.5 3.5 0.5"
|
|
34
|
+
stroke="rgb(218, 218, 218)"
|
|
35
|
+
stroke-width="1"
|
|
36
|
+
></path>
|
|
37
|
+
<text
|
|
38
|
+
x="9"
|
|
39
|
+
data-z-index="1"
|
|
40
|
+
y="20"
|
|
41
|
+
style="color: #333333; font-size: 12px; fill: #333333;"
|
|
42
|
+
>
|
|
43
|
+
{{ props.size }}
|
|
44
|
+
</text>
|
|
45
|
+
</g>
|
|
46
|
+
</template>
|
|
47
|
+
|
|
48
|
+
<script lang="ts" setup>
|
|
49
|
+
const props = defineProps<{
|
|
50
|
+
size: string
|
|
51
|
+
}>()
|
|
52
|
+
</script>
|
|
53
|
+
|
|
54
|
+
<style lang="scss" scoped>
|
|
55
|
+
.graphic-tooltip {
|
|
56
|
+
cursor: default;
|
|
57
|
+
white-space: nowrap;
|
|
58
|
+
pointer-events: none;
|
|
59
|
+
opacity: 0;
|
|
60
|
+
visibility: hidden;
|
|
61
|
+
transform: translate(331, -9999);
|
|
62
|
+
z-index: var(--z-popover);
|
|
63
|
+
}
|
|
64
|
+
</style>
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { UI_I_Localization } from '~/lib/models/interfaces'
|
|
2
|
+
import type { UI_I_SelectHostOptions } from '~/components/common/wizards/datastore/add/sharedStorm/deviceSelection/lib/models/interfaces'
|
|
3
|
+
|
|
4
|
+
export const partitionConfigurationFunc = (
|
|
5
|
+
localization: UI_I_Localization
|
|
6
|
+
): UI_I_SelectHostOptions[] => {
|
|
7
|
+
return [
|
|
8
|
+
{ text: localization.common.selectConfiguration, value: '', disabled: true },
|
|
9
|
+
{ text: localization.common.useAllAvailablePartitions, value: 'all-partitions' },
|
|
10
|
+
]
|
|
11
|
+
}
|
|
12
|
+
export const blockSizeFunc = (
|
|
13
|
+
localization: UI_I_Localization
|
|
14
|
+
): UI_I_SelectHostOptions[] => {
|
|
15
|
+
return [
|
|
16
|
+
{
|
|
17
|
+
text: `1 ${localization.common.mb}`,
|
|
18
|
+
value: '1',
|
|
19
|
+
},
|
|
20
|
+
]
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export const spaceGranularityFunc = (
|
|
24
|
+
localization: UI_I_Localization
|
|
25
|
+
): UI_I_SelectHostOptions[] => {
|
|
26
|
+
return [
|
|
27
|
+
{
|
|
28
|
+
text: `1 ${localization.common.mb}`,
|
|
29
|
+
value: '1',
|
|
30
|
+
},
|
|
31
|
+
]
|
|
32
|
+
}
|
|
33
|
+
export const spacePriorityFunc = (
|
|
34
|
+
localization: UI_I_Localization
|
|
35
|
+
): UI_I_SelectHostOptions[] => {
|
|
36
|
+
return [
|
|
37
|
+
{
|
|
38
|
+
text: localization.common.low,
|
|
39
|
+
value: 'low',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
text: localization.common.none,
|
|
43
|
+
value: 'none',
|
|
44
|
+
},
|
|
45
|
+
]
|
|
46
|
+
}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="graphic-size">
|
|
3
|
+
<svg
|
|
4
|
+
class="graphic-size__svg"
|
|
5
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
6
|
+
width="100%"
|
|
7
|
+
height="100"
|
|
8
|
+
viewBox="0 0 782 100"
|
|
9
|
+
>
|
|
10
|
+
<defs aria-hidden="true">
|
|
11
|
+
<clipPath id="highcharts-zdne8nn-42-">
|
|
12
|
+
<rect x="0" y="0" width="802" height="80" fill="none"></rect>
|
|
13
|
+
</clipPath>
|
|
14
|
+
</defs>
|
|
15
|
+
<rect
|
|
16
|
+
fill="#ffffff"
|
|
17
|
+
class="highcharts-background"
|
|
18
|
+
x="0"
|
|
19
|
+
y="0"
|
|
20
|
+
width="782"
|
|
21
|
+
height="100"
|
|
22
|
+
rx="0"
|
|
23
|
+
ry="0"
|
|
24
|
+
aria-hidden="true"
|
|
25
|
+
></rect>
|
|
26
|
+
<rect
|
|
27
|
+
fill="none"
|
|
28
|
+
class="highcharts-plot-background"
|
|
29
|
+
x="-10"
|
|
30
|
+
y="10"
|
|
31
|
+
width="802"
|
|
32
|
+
height="80"
|
|
33
|
+
aria-hidden="true"
|
|
34
|
+
></rect>
|
|
35
|
+
<rect
|
|
36
|
+
fill="none"
|
|
37
|
+
class="highcharts-plot-border"
|
|
38
|
+
data-z-index="1"
|
|
39
|
+
x="-10"
|
|
40
|
+
y="10"
|
|
41
|
+
width="802"
|
|
42
|
+
height="80"
|
|
43
|
+
aria-hidden="true"
|
|
44
|
+
></rect>
|
|
45
|
+
<g class="highcharts-series-group" data-z-index="3" aria-hidden="false">
|
|
46
|
+
<g
|
|
47
|
+
class="highcharts-series highcharts-series-0 highcharts-area-series"
|
|
48
|
+
data-z-index="0.1"
|
|
49
|
+
opacity="1"
|
|
50
|
+
transform="translate(-10,10) scale(1 1)"
|
|
51
|
+
clip-path="url(#highcharts-zdne8nn-42-)"
|
|
52
|
+
aria-hidden="false"
|
|
53
|
+
>
|
|
54
|
+
<path
|
|
55
|
+
fill="rgb(218,218,218)"
|
|
56
|
+
d="M 7.8627450980392 80 L 7.8627450980392 0 L 401 0 L 794.13725490196 0 L 794.13725490196 80 L 794.13725490196 80 L 794.13725490196 80 L 401 80 L 7.8627450980392 80 L 7.8627450980392 80 Z"
|
|
57
|
+
class="highcharts-area"
|
|
58
|
+
data-z-index="0"
|
|
59
|
+
aria-hidden="true"
|
|
60
|
+
></path>
|
|
61
|
+
<path
|
|
62
|
+
fill="none"
|
|
63
|
+
d="M 7.8627450980392 80 L 7.8627450980392 0 L 401 0 L 794.13725490196 0 L 794.13725490196 80"
|
|
64
|
+
class="highcharts-graph"
|
|
65
|
+
data-z-index="1"
|
|
66
|
+
stroke-linejoin="round"
|
|
67
|
+
stroke-linecap="round"
|
|
68
|
+
aria-hidden="false"
|
|
69
|
+
role="region"
|
|
70
|
+
tabindex="-1"
|
|
71
|
+
aria-label="Empty, series 1 of 1 with 5 data points."
|
|
72
|
+
style="outline: 0"
|
|
73
|
+
></path>
|
|
74
|
+
<path
|
|
75
|
+
fill="none"
|
|
76
|
+
d="M 7.8627450980392 80 L 7.8627450980392 0 L 401 0 L 794.13725490196 0 L 794.13725490196 80"
|
|
77
|
+
visibility="visible"
|
|
78
|
+
data-z-index="2"
|
|
79
|
+
class="highcharts-tracker-line"
|
|
80
|
+
stroke-linecap="round"
|
|
81
|
+
stroke-linejoin="round"
|
|
82
|
+
stroke="rgba(192,192,192,0.0001)"
|
|
83
|
+
stroke-width="20"
|
|
84
|
+
aria-hidden="true"
|
|
85
|
+
></path>
|
|
86
|
+
</g>
|
|
87
|
+
<g
|
|
88
|
+
class="highcharts-markers highcharts-series-0 highcharts-area-series highcharts-tracker"
|
|
89
|
+
data-z-index="0.1"
|
|
90
|
+
opacity="1"
|
|
91
|
+
transform="translate(-10,10) scale(1 1)"
|
|
92
|
+
clip-path="none"
|
|
93
|
+
aria-hidden="true"
|
|
94
|
+
></g>
|
|
95
|
+
</g>
|
|
96
|
+
<rect
|
|
97
|
+
x="0"
|
|
98
|
+
y="10"
|
|
99
|
+
width="782"
|
|
100
|
+
height="80"
|
|
101
|
+
fill="rgba(255,255,255,0)"
|
|
102
|
+
stroke="rgb(15,172,201)"
|
|
103
|
+
stroke-width="6"
|
|
104
|
+
data-z-index="3"
|
|
105
|
+
class="storage-partition-layout-selection-mask"
|
|
106
|
+
></rect>
|
|
107
|
+
<rect
|
|
108
|
+
x="0"
|
|
109
|
+
y="10"
|
|
110
|
+
:width="setProgress"
|
|
111
|
+
height="80"
|
|
112
|
+
fill="rgba(15,172,201, 0.6)"
|
|
113
|
+
data-z-index="3"
|
|
114
|
+
class="storage-partition-layout-selection-mask"
|
|
115
|
+
></rect>
|
|
116
|
+
<text
|
|
117
|
+
x="391"
|
|
118
|
+
text-anchor="middle"
|
|
119
|
+
class="highcharts-title"
|
|
120
|
+
data-z-index="4"
|
|
121
|
+
style="color: #333333; font-size: 18px; fill: #333333"
|
|
122
|
+
y="14"
|
|
123
|
+
aria-hidden="true"
|
|
124
|
+
></text>
|
|
125
|
+
<text
|
|
126
|
+
x="391"
|
|
127
|
+
text-anchor="middle"
|
|
128
|
+
class="highcharts-subtitle"
|
|
129
|
+
data-z-index="4"
|
|
130
|
+
style="color: #666666; fill: #666666"
|
|
131
|
+
y="14"
|
|
132
|
+
aria-hidden="true"
|
|
133
|
+
></text>
|
|
134
|
+
<text
|
|
135
|
+
x="0"
|
|
136
|
+
text-anchor="start"
|
|
137
|
+
class="highcharts-caption"
|
|
138
|
+
data-z-index="4"
|
|
139
|
+
style="color: #666666; fill: #666666"
|
|
140
|
+
y="112"
|
|
141
|
+
aria-hidden="true"
|
|
142
|
+
></text>
|
|
143
|
+
<g
|
|
144
|
+
class="highcharts-data-labels highcharts-series-0 highcharts-area-series highcharts-tracker"
|
|
145
|
+
data-z-index="6"
|
|
146
|
+
opacity="1"
|
|
147
|
+
transform="translate(-10,10) scale(1 1)"
|
|
148
|
+
aria-hidden="true"
|
|
149
|
+
>
|
|
150
|
+
<g
|
|
151
|
+
class="highcharts-label highcharts-data-label highcharts-data-label-color-undefined"
|
|
152
|
+
data-z-index="1"
|
|
153
|
+
style="cursor: default; pointer-events: none; white-space: nowrap"
|
|
154
|
+
transform="translate(354,26)"
|
|
155
|
+
>
|
|
156
|
+
<text
|
|
157
|
+
x="5"
|
|
158
|
+
data-z-index="1"
|
|
159
|
+
y="17"
|
|
160
|
+
style="
|
|
161
|
+
color: #333;
|
|
162
|
+
font-family: 'ProximaNova', 'Avenir Next', 'Helvetica Neue', Arial,
|
|
163
|
+
sans-serif, 'Avenir Next', 'Helvetica Neue', Arial, sans-serif;
|
|
164
|
+
font-size: 12px;
|
|
165
|
+
font-weight: bold;
|
|
166
|
+
fill: #333;
|
|
167
|
+
"
|
|
168
|
+
>
|
|
169
|
+
<tspan
|
|
170
|
+
class="highcharts-text-outline"
|
|
171
|
+
fill="#FFFFFF"
|
|
172
|
+
stroke="#FFFFFF"
|
|
173
|
+
stroke-width="2px"
|
|
174
|
+
stroke-linejoin="round"
|
|
175
|
+
style=""
|
|
176
|
+
>
|
|
177
|
+
{{ emptySizeText }}
|
|
178
|
+
</tspan>
|
|
179
|
+
<tspan x="5" y="17">{{ emptySizeText }}</tspan>
|
|
180
|
+
</text>
|
|
181
|
+
</g>
|
|
182
|
+
</g>
|
|
183
|
+
|
|
184
|
+
<common-wizards-datastore-add-shared-storm-partition-configuration-graphic-tooltip
|
|
185
|
+
:size="emptySizeText"
|
|
186
|
+
/>
|
|
187
|
+
</svg>
|
|
188
|
+
</div>
|
|
189
|
+
</template>
|
|
190
|
+
|
|
191
|
+
<script lang="ts" setup>
|
|
192
|
+
import { UI_I_Localization } from '~/lib/models/interfaces'
|
|
193
|
+
|
|
194
|
+
const props = defineProps<{
|
|
195
|
+
selectedSize: number | null
|
|
196
|
+
capacity: number
|
|
197
|
+
}>()
|
|
198
|
+
const localization = computed<UI_I_Localization>(() => useLocal())
|
|
199
|
+
|
|
200
|
+
const width = ref<number>(782)
|
|
201
|
+
|
|
202
|
+
const setProgress = computed<number>(() => {
|
|
203
|
+
if (!props.selectedSize) return 0
|
|
204
|
+
return (width.value * props.selectedSize) / props.capacity
|
|
205
|
+
})
|
|
206
|
+
|
|
207
|
+
const emptySizeText = computed<string>(() => {
|
|
208
|
+
const { empty, gb } = localization.value.common
|
|
209
|
+
|
|
210
|
+
return `${empty}: ${props.capacity} ${gb}`
|
|
211
|
+
})
|
|
212
|
+
</script>
|
|
213
|
+
|
|
214
|
+
<style lang="scss" scoped>
|
|
215
|
+
.graphic-size {
|
|
216
|
+
margin-top: 24px;
|
|
217
|
+
&:hover {
|
|
218
|
+
.graphic-tooltip {
|
|
219
|
+
visibility: visible;
|
|
220
|
+
opacity: 1;
|
|
221
|
+
transform: translate(331px, 25px);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
</style>
|