bfg-common 1.5.708 → 1.5.710

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 (105) hide show
  1. package/assets/img/icons/icons-sprite-dark-1.svg +2 -3
  2. package/assets/img/icons/icons-sprite-light-1.svg +3 -4
  3. package/assets/localization/local_be.json +47 -3
  4. package/assets/localization/local_en.json +47 -3
  5. package/assets/localization/local_hy.json +47 -3
  6. package/assets/localization/local_kk.json +47 -3
  7. package/assets/localization/local_ru.json +49 -5
  8. package/assets/localization/local_zh.json +47 -3
  9. package/assets/scss/common/icons/icons-1.scss +1 -1
  10. package/assets/scss/common/icons/icons-2.scss +18 -0
  11. package/assets/scss/common/theme.scss +2 -0
  12. package/assets/scss/components/auth.scss +32 -5
  13. package/components/atoms/dropdown/tree/Tree.vue +2 -0
  14. package/components/atoms/switch/Switch.vue +7 -1
  15. package/components/atoms/wizard/Wizard.vue +1 -1
  16. package/components/common/certificate/Certificate.vue +27 -0
  17. package/components/common/certificate/CertificateInfo.vue +139 -0
  18. package/components/common/certificate/Tools.vue +59 -0
  19. package/components/common/certificate/lib/config/tabsPannel.ts +22 -0
  20. package/components/common/certificate/lib/models/interfaces.ts +9 -0
  21. package/components/common/certificate/lib/models/types.ts +1 -0
  22. package/components/common/certificate/modals/renew/New.vue +64 -0
  23. package/components/common/certificate/modals/renew/Old.vue +122 -0
  24. package/components/common/certificate/modals/renew/Renew.vue +67 -0
  25. package/components/common/help/navbar/left/lib/utils/constructAccordion.ts +2 -1
  26. package/components/common/help/navbar/right/Right.vue +86 -23
  27. package/components/common/layout/theHeader/modals/reconnect/ReconnectOld.vue +2 -0
  28. package/components/common/layout/theHeader/userMenu/modals/changePassword/ChangePassword.vue +12 -21
  29. package/components/common/layout/theHeader/userMenu/modals/changePassword/New.vue +36 -43
  30. package/components/common/layout/theHeader/userMenu/modals/changePassword/Old.vue +0 -2
  31. package/components/common/layout/theHeader/userMenu/modals/changePassword/lib/utils.ts +1 -1
  32. package/components/common/layout/theHeader/userMenu/modals/preferences/PreferencesNew.vue +13 -0
  33. package/components/common/layout/theHeader/userMenu/modals/preferences/changeLanguage/ChangeLanguage.vue +8 -15
  34. package/components/common/layout/theHeader/userMenu/modals/preferences/changeLanguage/{ChangeLanguageNew.vue → New.vue} +1 -2
  35. package/components/common/layout/theHeader/userMenu/modals/preferences/changeLanguage/{ChangeLanguageOld.vue → Old.vue} +0 -2
  36. package/components/common/layout/theHeader/userMenu/modals/preferences/defaultConsole/DefaultConsole.vue +8 -7
  37. package/components/common/layout/theHeader/userMenu/modals/preferences/defaultConsole/{DefaultConsoleNew.vue → New.vue} +3 -3
  38. package/components/common/layout/theHeader/userMenu/modals/preferences/defaultConsole/{DefaultConsoleOld.vue → Old.vue} +2 -2
  39. package/components/common/layout/theHeader/userMenu/modals/preferences/inventory/Inventory.vue +7 -8
  40. package/components/common/layout/theHeader/userMenu/modals/preferences/inventory/{InventoryNew.vue → New.vue} +3 -2
  41. package/components/common/layout/theHeader/userMenu/modals/preferences/inventory/{InventoryOld.vue → Old.vue} +2 -2
  42. package/components/common/layout/theHeader/userMenu/modals/preferences/security/New.vue +277 -12
  43. package/components/common/layout/theHeader/userMenu/modals/preferences/security/Old.vue +30 -56
  44. package/components/common/layout/theHeader/userMenu/modals/preferences/security/Security.vue +65 -6
  45. package/components/common/layout/theHeader/userMenu/modals/preferences/timeFormat/{TimeFormatNew.vue → New.vue} +3 -3
  46. package/components/common/layout/theHeader/userMenu/modals/preferences/timeFormat/{TimeFormatOld.vue → Old.vue} +2 -2
  47. package/components/common/layout/theHeader/userMenu/modals/preferences/timeFormat/TimeFormat.vue +8 -8
  48. package/components/common/layout/theHeader/userMenu/modals/preferences/view/{ViewNew.vue → New.vue} +12 -3
  49. package/components/common/layout/theHeader/userMenu/modals/preferences/view/{ViewOld.vue → Old.vue} +2 -2
  50. package/components/common/layout/theHeader/userMenu/modals/preferences/view/View.vue +8 -7
  51. package/components/common/monitor/advanced/graphView/GraphView.vue +8 -0
  52. package/components/common/monitor/advanced/tools/Tools.vue +5 -1
  53. package/components/common/pages/auth/TheFooter.vue +104 -0
  54. package/components/common/pages/files/lib/models/enums.ts +10 -0
  55. package/components/common/pages/hardwareHealth/historyTestimony/tools/Tools.vue +7 -2
  56. package/components/common/pages/hardwareHealth/tableView/TableView.vue +8 -0
  57. package/components/common/pages/hardwareHealth/tableView/lib/config/sensorTable.ts +13 -1
  58. package/components/common/pages/hardwareHealth/toolsPanel/lib/config/actionsPanel.ts +4 -4
  59. package/components/common/pages/tasks/table/expandDetails/ExpandDetails.vue +1 -1
  60. package/components/common/qr/Qr.vue +69 -0
  61. package/components/common/split/horizontal/New.vue +0 -2
  62. package/components/common/split/vertical/New.vue +2 -1
  63. package/components/common/vm/actions/add/New.vue +1 -1
  64. package/components/common/vm/actions/add/Old.vue +1 -1
  65. package/components/common/vm/actions/clone/old/Old.vue +1 -0
  66. package/components/common/vm/actions/common/customizeHardware/virtualHardware/New.vue +10 -34
  67. package/components/common/vm/actions/common/customizeHardware/virtualHardware/Old.vue +15 -37
  68. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +49 -50
  69. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/coresPerSocket/CoresPerSocket.vue +1 -1
  70. package/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces.ts +3 -1
  71. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +13 -7
  72. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/New.vue +7 -4
  73. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +52 -45
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/Old.vue +5 -8
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIo.vue +1 -3
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/New.vue +2 -2
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/Old.vue +2 -2
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +1 -1
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/New.vue +1 -2
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/Old.vue +1 -2
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/New.vue +1 -1
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGrid.vue +1 -1
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/Old.vue +1 -1
  84. package/components/common/vm/actions/common/select/options/Old.vue +1 -2
  85. package/components/common/wizards/common/compatibility/New.vue +1 -1
  86. package/components/common/wizards/common/compatibility/Old.vue +1 -1
  87. package/components/common/wizards/datastore/add/lib/config/createDatastore.ts +1 -0
  88. package/components/common/wizards/datastore/add/lib/models/interfaces.ts +1 -0
  89. package/components/common/wizards/datastore/add/steps/nameAndDevice/NameAndDeviceNew.vue +5 -0
  90. package/components/common/wizards/datastore/add/steps/nameAndDevice/NameAndDeviceOld.vue +5 -0
  91. package/components/common/wizards/datastore/add/steps/nameAndDevice/advancedOptions/AdvancedOptions.vue +43 -0
  92. package/components/common/wizards/datastore/add/steps/nameAndDevice/advancedOptions/New.vue +114 -0
  93. package/components/common/wizards/datastore/add/steps/nameAndDevice/advancedOptions/Old.vue +114 -0
  94. package/components/common/wizards/datastore/add/steps/nameAndDevice/table/old/Old.vue +2 -3
  95. package/components/common/wizards/datastore/add/steps/readyComplete/lib/config/propertiesDetails.ts +8 -1
  96. package/components/common/wizards/vm/migrate/lib/models/enums.ts +2 -2
  97. package/components/common/wizards/vm/migrate/steps/selectStorage/SelectStorage.vue +4 -4
  98. package/components/common/wizards/vm/migrate/steps/selectStorage/configure/disk/table/new/lib/config/diskTable.ts +6 -2
  99. package/components/common/wizards/vm/migrate/steps/selectStorage/configure/disk/table/old/lib/config/diskTable.ts +18 -12
  100. package/composables/useEnvLanguage.ts +7 -8
  101. package/lib/models/interfaces.ts +1 -0
  102. package/package.json +3 -4
  103. package/plugins/date.ts +14 -37
  104. package/store/main/getters.ts +2 -2
  105. package/components/common/qrcode/Qrcode.vue +0 -56
@@ -201,6 +201,7 @@
201
201
  "changeComputeResourceOnly": "仅编辑计算资源",
202
202
  "changeIdentityProvider": "更改身份提供商",
203
203
  "changePassword": "更改密码",
204
+ "setYourPassword": "设置您的密码",
204
205
  "changePasswordError": "密码错误!",
205
206
  "changeProviderTooltipContent": "Sphere Zoneは、ユーザーとグループを管理するための外部idプロバイダをサポートしています。 組み込みのSphere Zone idプロバイダを使用してから外部idプロバイダに移行できます。 詳細については、vSphereのドキュメントを参照してください。",
206
207
  "changeRole": "改变角色",
@@ -2559,7 +2560,15 @@
2559
2560
  "networkDirectory": "网络目录",
2560
2561
  "hostAndClusterDirectory": "主机和群集目录",
2561
2562
  "vmAndTemplateDirectory": "VM和模板目录",
2562
- "backupStorageDirectory": "备份存储目录"
2563
+ "backupStorageDirectory": "备份存储目录",
2564
+ "sphereServerSettings": "Sphere 服务器设置",
2565
+ "database": "数据库",
2566
+ "eventCleanup": "事件清理",
2567
+ "eventRetentionDays": "事件保留期限(天)",
2568
+ "editSphereGeneralSettings": "编辑 Sphere 常规设置",
2569
+ "eventRetentionDaysDecreaseAlertText": "减少保留天数不会触发立即清理。事件将在下一次计划的清理期间被删除(每 24 小时)。",
2570
+ "enterDatabaseSettingsDesc": "输入数据库设置。使用任务和事件的保留设置来限制数据库增长。",
2571
+ "lettersLengthError": "请输入不超过 {0} 个字母"
2563
2572
  },
2564
2573
  "auth": {
2565
2574
  "welcomeTo": "欢迎来到",
@@ -3133,6 +3142,8 @@
3133
3142
  "networkPackets": "网络数据包",
3134
3143
  "diskRate": "磁盘速率",
3135
3144
  "diskRequests": "磁盘请求",
3145
+ "nfsRate": "NFS 速率",
3146
+ "nfsRequests": "NFS 请求",
3136
3147
  "priority": "优先次序",
3137
3148
  "recommendation": "建议书",
3138
3149
  "recommendationId": "建议ID",
@@ -3456,6 +3467,7 @@
3456
3467
  },
3457
3468
  "vsphereHa": {
3458
3469
  "sphereHA": "球",
3470
+ "sphereGhydra": "Sphere Ghydra",
3459
3471
  "setUpSphereNa": "设置球体HA",
3460
3472
  "setUpvSphereNaDesc": "为了确保最大程度的保护,请将节点放在单独的主机和数据存储上。",
3461
3473
  "spherePackageFile": "Sphere软件包文件",
@@ -3544,7 +3556,10 @@
3544
3556
  "noUsersSelectedYet": "尚未选择任何用户。",
3545
3557
  "thisGroupHasNoDescriptionYet": "该组尚无描述。",
3546
3558
  "members": "成员",
3547
- "noNewUsersSelected": "未选择新用户。"
3559
+ "noNewUsersSelected": "未选择新用户。",
3560
+ "isActive": "活跃",
3561
+ "createdAt": "创建日期",
3562
+ "expiresAt": "到期日期"
3548
3563
  },
3549
3564
  "vmt": {
3550
3565
  "newTemplate": "New Template",
@@ -3738,13 +3753,20 @@
3738
3753
  },
3739
3754
  "files": {
3740
3755
  "deleteFileDescription": "您确定要删除“{0}”吗?",
3741
- "deleteFilesDescription": "您确定要删除 {0} 个文件吗?"
3756
+ "deleteFilesDescription": "您确定要删除 {0} 个文件吗?",
3757
+ "fileManagement": "文件管理"
3742
3758
  },
3743
3759
  "myPreferences": {
3744
3760
  "twoFactorAuthentication": "双因素认证",
3761
+ "twoFactorAuthentication2": "双重身份验证(2FA)",
3745
3762
  "securityLabel": "为您的账户添加额外的安全层",
3746
3763
  "enterOtpForDisabled": "输入6位代码并确认以禁用它:",
3747
3764
  "enterOtpForEnabled": "输入6位代码并确认:",
3765
+ "enterOtpCode": "输入 6 位数代码",
3766
+ "otpCode": "6 位数代码",
3767
+ "otpCodeErrorLength": "代码必须是 6 位数字",
3768
+ "enterOtpVerifyCode": "请输入 6 位数的验证码",
3769
+ "backToLogin": "返回登录",
3748
3770
  "qrcodeDescription": "使用您的身份验证器应用程序扫描此QR码,或手动输入其中一个代码。然后,通过输入下面的一次性代码来确认操作。"
3749
3771
  },
3750
3772
  "ssoConfiguration": {
@@ -3766,5 +3788,27 @@
3766
3788
  "maxDurationSec": "最长持续时间(秒)",
3767
3789
  "idleTimeoutSec": "空闲超时(秒)",
3768
3790
  "maxConcurrentSessions": "最大并发会话数"
3791
+ },
3792
+ "cacheConfiguration": {
3793
+ "cacheConfiguration": "缓存配置",
3794
+ "ceph_detailed": "Ceph 详细信息",
3795
+ "cpu": "CPU",
3796
+ "memory": "内存",
3797
+ "network": "网络",
3798
+ "disk": "磁盘",
3799
+ "lvm": "LVM",
3800
+ "nfs": "NFS",
3801
+ "hci": "HCI",
3802
+ "vm_cpu": "VM CPU",
3803
+ "vm_memory": "VM 内存",
3804
+ "vm_network": "VM 网络",
3805
+ "vm_disk": "VM 磁盘",
3806
+ "sensors": "传感器",
3807
+ "cpu_temp": "CPU 温度",
3808
+ "power": "电源",
3809
+ "services": "服务",
3810
+ "activateAll": "全部激活",
3811
+ "active": "积极的",
3812
+ "inactive": "不活跃"
3769
3813
  }
3770
3814
  }
@@ -78,7 +78,7 @@
78
78
  background-position: 0 68.3544303797%;
79
79
  }
80
80
  .icon-Host_Policy-32x {
81
- background-position: 0 7.5%;
81
+ background-position: 0 7.6%;
82
82
  }
83
83
  .icon-certificate-32x {
84
84
  background-position: 0 35.4430379747%;
@@ -112,6 +112,15 @@
112
112
  .icon-ds-iso-image {
113
113
  background-position: 0 77.2%;
114
114
  }
115
+ .network-lib-ui-icon-ingressEgressTraffic {
116
+ background-position: 0 81%;
117
+ }
118
+ .network-lib-ui-icon-ingressTraffic {
119
+ background-position: 0 82.25%;
120
+ }
121
+ .network-lib-ui-icon-egressTraffic {
122
+ background-position: 0 27.8%;
123
+ }
115
124
 
116
125
  /* _____BACKGROUND IMAGE_____ */
117
126
  .icon-vSphere-dsVmNvram,
@@ -154,6 +163,9 @@
154
163
  .icon-help,
155
164
  .icon-add-folder,
156
165
  .icon-ds-iso-image,
166
+ .network-lib-ui-icon-ingressEgressTraffic,
167
+ .network-lib-ui-icon-ingressTraffic,
168
+ .network-lib-ui-icon-egressTraffic,
157
169
  .vsphere-icon-snapshot-here {
158
170
  background-image: url('assets/img/icons/icons-sprite-light-2.svg');
159
171
 
@@ -199,6 +211,9 @@
199
211
  .active .icon-help,
200
212
  .active .icon-add-folder,
201
213
  .active .icon-ds-iso-image,
214
+ .active .network-lib-ui-icon-ingressEgressTraffic,
215
+ .active .network-lib-ui-icon-ingressTraffic,
216
+ .active .network-lib-ui-icon-egressTraffic,
202
217
  .active .vsphere-icon-snapshot-here {
203
218
  background-image: url('assets/img/icons/icons-sprite-dark-2.svg');
204
219
 
@@ -254,6 +269,9 @@
254
269
  .icon-help,
255
270
  .icon-add-folder,
256
271
  .icon-ds-iso-image,
272
+ .network-lib-ui-icon-ingressEgressTraffic,
273
+ .network-lib-ui-icon-ingressTraffic,
274
+ .network-lib-ui-icon-egressTraffic,
257
275
  .vx-icon-memory {
258
276
  display: inline-block;
259
277
  width: 18px;
@@ -304,6 +304,7 @@
304
304
 
305
305
  //--gutter-bg-color: #eee; // for old
306
306
  --gutter-bg-color: #e9ebed; // for new
307
+ --new-gutter-bg-color: #e9ebed;
307
308
  //--gutter-hover-bg-color: #0079b8; // for old
308
309
  --gutter-hover-bg-color: #008fb6; // for new
309
310
  //--gutter-active-bg-color: #a6d8e7; // for old
@@ -710,6 +711,7 @@
710
711
 
711
712
  //--gutter-bg-color: #25333d; // for old
712
713
  --gutter-bg-color: #e9ebed1f; // for new
714
+ --new-gutter-bg-color: #394a58;
713
715
  --gutter-hover-bg-color: #495a67;
714
716
  --gutter-active-bg-color: #495a67;
715
717
  --gutter-before-bg: rgba(157, 166, 173, 0.32);
@@ -169,19 +169,46 @@
169
169
  color: #000000;
170
170
  font-size: 32px;
171
171
  font-weight: 400;
172
- line-height: 38px;
172
+ line-height: 44px;
173
173
  margin-bottom: 48px;
174
174
  span {
175
175
  font-size: 32px;
176
176
  color: #008fd6;
177
177
  }
178
178
  }
179
+ &__otp-text-block {
180
+ .title-block {
181
+ font-size: 16px;
182
+ font-weight: 400;
183
+ color: #4d5d69;
184
+ line-height: 22px;
185
+ }
186
+ .subtitle-block {
187
+ font-size: 14px;
188
+ font-weight: 400;
189
+ color: #9da6ad;
190
+ line-height: 20px;
191
+ }
192
+ }
193
+ :deep(input.otp-input) {
194
+ height: 44px;
195
+ }
179
196
  &__alert {
180
197
  margin-bottom: 48px;
181
198
  }
182
199
  &__input {
200
+ &:before {
201
+ content: '';
202
+ position: absolute;
203
+ top: 0;
204
+ left: 0;
205
+ right: 0;
206
+ bottom: 0;
207
+ background-color: var(--input-bg);
208
+ border-radius: 8px;
209
+ }
183
210
  :deep(.ui-main-input) {
184
- background-color: #fafafa;
211
+ background-color: var(--input-bg);
185
212
  }
186
213
  :deep(input.ui-main-input:-internal-autofill-selected),
187
214
  :deep(input.ui-main-input:-internal-autofill-selected:hover),
@@ -189,7 +216,7 @@
189
216
  :deep(input.ui-main-input:-internal-autofill-selected:focus) {
190
217
  appearance: menulist-button;
191
218
  background-image: none !important;
192
- background-color: #fafafa !important;
219
+ background-color: var(--input-bg) !important;
193
220
  color: fieldtext !important;
194
221
  -webkit-background-clip: text;
195
222
  }
@@ -210,11 +237,11 @@
210
237
  }
211
238
  }
212
239
  &__checkbox {
213
- margin-top: 18px;
240
+ margin-top: 16px;
214
241
  }
215
242
  &__button {
216
243
  @include flex($just: center, $align: center);
217
- margin-top: 72px;
244
+ margin-top: 32px;
218
245
  height: 44px;
219
246
  border-radius: 8px;
220
247
  :deep(svg) {
@@ -119,6 +119,7 @@ onUnmounted(() => {
119
119
  .dropdown-menu {
120
120
  position: fixed;
121
121
  transform: translateX(-100%);
122
+ background-color: var(--dropdown-bg-color);
122
123
 
123
124
  h4 {
124
125
  font-size: 12px;
@@ -130,6 +131,7 @@ onUnmounted(() => {
130
131
  button {
131
132
  &:hover {
132
133
  border-bottom: 1px solid #666;
134
+ color: #565656;
133
135
  }
134
136
  }
135
137
  }
@@ -1,7 +1,12 @@
1
1
  <template>
2
2
  <div class="flex-align-center">
3
3
  <div class="switch-body">
4
- <input :id="props.testId" v-model="value" type="checkbox" />
4
+ <input
5
+ :id="props.testId"
6
+ v-model="value"
7
+ type="checkbox"
8
+ @change="emits('change', value)"
9
+ />
5
10
  <label :for="props.testId" class="switch-label"></label>
6
11
  </div>
7
12
  <label :for="props.testId"><slot></slot></label>
@@ -19,6 +24,7 @@ const props = withDefaults(
19
24
 
20
25
  const emits = defineEmits<{
21
26
  (event: 'update:model-value', value: boolean): void
27
+ (event: 'change', value: boolean): void
22
28
  }>()
23
29
 
24
30
  const value = computed<boolean>({
@@ -21,7 +21,7 @@
21
21
  <slot name="contentHeading">
22
22
  <div class="modal-title-wrapper">
23
23
  <h2 class="modal-title">
24
- <span class="modal-title-text">
24
+ <span class="modal-title-text" :data-id="`${props.testId}-modal-title`">
25
25
  {{ props.wizard.selectedStepCom.value.title }}
26
26
  </span>
27
27
  </h2>
@@ -0,0 +1,27 @@
1
+ <template>
2
+ <atoms-loader v-show="props.loading" test-id="certificate-spinner" />
3
+ <div class="certificate flex flex-col h-full">
4
+ <common-certificate-tools @renew-certificate="emits('renew-certificate')" />
5
+
6
+ <common-certificate-info :certificate-data="props.certificateData" />
7
+ </div>
8
+ </template>
9
+
10
+ <script lang="ts" setup>
11
+ import type { UI_I_Certificate } from '~/components/common/certificate/lib/models/interfaces'
12
+
13
+ const props = defineProps<{
14
+ loading: boolean
15
+ certificateData: UI_I_Certificate | {}
16
+ }>()
17
+
18
+ const emits = defineEmits<{
19
+ (event: 'renew-certificate'): void
20
+ }>()
21
+ </script>
22
+
23
+ <style lang="scss" scoped>
24
+ .certificate {
25
+ padding-left: 10px;
26
+ }
27
+ </style>
@@ -0,0 +1,139 @@
1
+ <template>
2
+ <div class="stack-view">
3
+ <atoms-stack-block
4
+ :has-children="false"
5
+ test-id="certificate-subject-stack-block"
6
+ >
7
+ <template #stackBlockKey>
8
+ <div class="flex-align-center">
9
+ <span data-id="certificate-subject">{{
10
+ localization.common.subject
11
+ }}</span>
12
+ </div>
13
+ </template>
14
+ <template #stackBlockContent
15
+ ><span data-id="certificate-subject-value">{{
16
+ props.certificateData.subject
17
+ }}</span></template
18
+ >
19
+ </atoms-stack-block>
20
+ <atoms-stack-block
21
+ :has-children="false"
22
+ test-id="certificate-issuer-stack-block"
23
+ >
24
+ <template #stackBlockKey>
25
+ <div class="flex-align-center">
26
+ <span data-id="certificate-issuer">{{
27
+ localization.common.issuer
28
+ }}</span>
29
+ </div>
30
+ </template>
31
+ <template #stackBlockContent
32
+ ><span data-id="certificate-issuer-value">{{
33
+ props.certificateData.issuer
34
+ }}</span></template
35
+ >
36
+ </atoms-stack-block>
37
+ <atoms-stack-block
38
+ :has-children="false"
39
+ test-id="certificate-valid-from-stack-block"
40
+ >
41
+ <template #stackBlockKey>
42
+ <div class="flex-align-center">
43
+ <span data-id="certificate-valid-from">{{
44
+ localization.common.validFrom
45
+ }}</span>
46
+ </div>
47
+ </template>
48
+ <template #stackBlockContent
49
+ ><span data-id="certificate-valid-from-value">{{
50
+ validFrom
51
+ }}</span></template
52
+ >
53
+ </atoms-stack-block>
54
+ <atoms-stack-block
55
+ :has-children="false"
56
+ test-id="certificate-valid-to-stack-block"
57
+ >
58
+ <template #stackBlockKey>
59
+ <div class="flex-align-center">
60
+ <span data-id="certificate-valid-to">{{
61
+ localization.common.validTo
62
+ }}</span>
63
+ </div>
64
+ </template>
65
+ <template #stackBlockContent
66
+ ><span data-id="certificate-valid-to-value">{{
67
+ validTo
68
+ }}</span></template
69
+ >
70
+ </atoms-stack-block>
71
+ <atoms-stack-block
72
+ :has-children="false"
73
+ test-id="certificate-status-stack-block"
74
+ >
75
+ <template #stackBlockKey>
76
+ <div class="flex-align-center">
77
+ <span data-id="certificate-status">{{
78
+ localization.common.status
79
+ }}</span>
80
+ </div>
81
+ </template>
82
+ <template #stackBlockContent
83
+ ><span data-id="certificate-status-value">{{
84
+ props.certificateData.status
85
+ }}</span></template
86
+ >
87
+ </atoms-stack-block>
88
+ </div>
89
+ </template>
90
+
91
+ <script lang="ts" setup>
92
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
93
+ import type { UI_I_Certificate } from '~/components/common/certificate/lib/models/interfaces'
94
+
95
+ const props = defineProps<{
96
+ certificateData: UI_I_Certificate | {}
97
+ }>()
98
+
99
+ const { $store, $formattedDatetime }: any = useNuxtApp()
100
+
101
+ const localization = computed<UI_I_Localization>(() => useLocal())
102
+
103
+ const updateTimeFormatAndInterfaceLang = computed<number>(
104
+ () => $store.getters['main/getUpdateTimeFormatAndInterfaceLang']
105
+ )
106
+
107
+ const validFrom = computed<string>(() =>
108
+ updateTimeFormatAndInterfaceLang.value
109
+ ? $formattedDatetime(props.certificateData.valid_from, {
110
+ hasSeconds: true,
111
+ })
112
+ : ''
113
+ )
114
+ const validTo = computed<string>(() =>
115
+ updateTimeFormatAndInterfaceLang.value
116
+ ? $formattedDatetime(props.certificateData.valid_to, {
117
+ hasSeconds: true,
118
+ })
119
+ : ''
120
+ )
121
+
122
+ onUnmounted(() => {
123
+ $store.dispatch('main/A_PAUSE_GLOBAL_REFRESH', 'hostCertificate')
124
+ })
125
+ </script>
126
+
127
+ <style lang="scss" scoped>
128
+ :deep(.stack-block:hover) {
129
+ border-bottom: 1px solid #ddd;
130
+
131
+ &:last-child {
132
+ border-bottom: unset;
133
+ }
134
+
135
+ .stack-block-label {
136
+ background-color: unset;
137
+ }
138
+ }
139
+ </style>
@@ -0,0 +1,59 @@
1
+ <template>
2
+ <div class="certificate-headline">
3
+ <common-headline :headline="localization.common.certificate">
4
+ <template #action>
5
+ <atoms-tabs
6
+ :items="tabs"
7
+ test-id="certificate-tabs"
8
+ size="small"
9
+ @change="onShowModal"
10
+ />
11
+ </template>
12
+ </common-headline>
13
+ </div>
14
+
15
+ <common-certificate-modals-renew
16
+ v-if="isShowModal"
17
+ :mode="mode"
18
+ @hide="onHideModal"
19
+ @renew-certificate="emits('renew-certificate')"
20
+ />
21
+ </template>
22
+
23
+ <script lang="ts" setup>
24
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
25
+ import type { UI_I_CollapseNavItem } from '~/components/atoms/collapse/lib/models/interfaces'
26
+ import type { UI_T_ModeModal } from '~/components/common/certificate/lib/models/types'
27
+ import { certificateTabsFunc } from '~/components/common/certificate/lib/config/tabsPannel'
28
+
29
+ const emits = defineEmits<{
30
+ (event: 'renew-certificate'): void
31
+ }>()
32
+
33
+ const localization = computed<UI_I_Localization>(() => useLocal())
34
+
35
+ const tabs = computed<UI_I_CollapseNavItem[]>(() =>
36
+ certificateTabsFunc(localization.value)
37
+ )
38
+
39
+ const isShowModal = ref<boolean>(false)
40
+ const mode = ref<UI_T_ModeModal>('renew')
41
+ const onShowModal = (value: UI_T_ModeModal): void => {
42
+ mode.value = value
43
+ isShowModal.value = true
44
+ }
45
+ const onHideModal = (): void => {
46
+ isShowModal.value = false
47
+ }
48
+ </script>
49
+
50
+ <style lang="scss" scoped>
51
+ .certificate-headline {
52
+ :deep(.heading-block__actions) {
53
+ .nav {
54
+ margin-top: 0;
55
+ align-items: flex-start;
56
+ }
57
+ }
58
+ }
59
+ </style>
@@ -0,0 +1,22 @@
1
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
2
+ import type { UI_I_CollapseNavItem } from '~/components/atoms/collapse/lib/models/interfaces'
3
+
4
+ export const certificateTabsFunc = (
5
+ localization: UI_I_Localization
6
+ ): UI_I_CollapseNavItem[] => {
7
+ return [
8
+ {
9
+ text: localization.common.renew,
10
+ value: 'renew',
11
+ disabled: false,
12
+ testId: 'certificate-renew',
13
+ },
14
+ {
15
+ text: localization.common.certificateRefreshTitle,
16
+ value: 'refreshCaCertificates',
17
+ disabled: true,
18
+ testId: 'certificate-refresh',
19
+ development: true,
20
+ },
21
+ ]
22
+ }
@@ -0,0 +1,9 @@
1
+ export interface UI_API_I_Certificate {
2
+ subject: string
3
+ issuer: string
4
+ valid_from: string
5
+ valid_to: string
6
+ status: string
7
+ }
8
+
9
+ export interface UI_I_Certificate extends UI_API_I_Certificate {}
@@ -0,0 +1 @@
1
+ export type UI_T_ModeModal = 'renew' | 'refreshCaCertificates'
@@ -0,0 +1,64 @@
1
+ <template>
2
+ <div class="renew-refresh-certificate">
3
+ <common-modals-confirmation
4
+ :headline="title"
5
+ :description="description"
6
+ :test-id="props.testId"
7
+ :modal-texts="modalTexts"
8
+ :loading="props.loading"
9
+ @hide-modal="emits('hide')"
10
+ @confirm="emits('submit')"
11
+ />
12
+ </div>
13
+ </template>
14
+
15
+ <script lang="ts" setup>
16
+ import type { UI_I_ModalTexts } from '~/node_modules/bfg-uikit/components/ui/modal/models/interfaces'
17
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
18
+ import type { UI_T_ModeModal } from '~/components/common/certificate/lib/models/types'
19
+
20
+ const props = defineProps<{
21
+ mode: UI_T_ModeModal
22
+ hostName: string
23
+ testId: string
24
+ loading: boolean
25
+ }>()
26
+
27
+ const emits = defineEmits<{
28
+ (event: 'hide'): void
29
+ (event: 'submit'): void
30
+ }>()
31
+
32
+ const localization = computed<UI_I_Localization>(() => useLocal())
33
+
34
+ const modalTexts = computed<UI_I_ModalTexts>(() => ({
35
+ button1: localization.value.common.cancel,
36
+ button2:
37
+ localization.value.common[props.mode === 'renew' ? 'renew' : 'refresh'],
38
+ }))
39
+
40
+ const title = computed<string>(
41
+ () =>
42
+ localization.value.inventoryConfigure[
43
+ props.mode === 'renew'
44
+ ? 'renewCertificateConfirm'
45
+ : 'refreshCACertificatesConfirm'
46
+ ]
47
+ )
48
+
49
+ const description = computed<string>(() =>
50
+ localization.value.inventoryConfigure[
51
+ props.mode === 'renew'
52
+ ? 'renewCertificateConfirmDesc'
53
+ : 'refreshCACertificatesConfirmDesc'
54
+ ].replace('{0}', props.hostName)
55
+ )
56
+ </script>
57
+
58
+ <style lang="scss" scoped>
59
+ .renew-refresh-certificate {
60
+ :deep(.confirm-modal__content span:nth-child(2)) {
61
+ line-height: unset;
62
+ }
63
+ }
64
+ </style>